ack/mach/proto/mcg
George Koehler 9077b3a5ab Teach mcg to pass our tests.
Tests pass if one edits the top build.lua to uncomment "qemuppc" from
both vars.plats and vars.plats_with_tests, and one leaves mcg in
plat/qemuppc/descr.

Add or correct some EM instructions in treebuilder.c:
 - "lof", "stf": handle negative offsets in load() and store().
 - "cuu": add using IR_FROMUI.
 - "lim", "sim": keep an entire word in ".ignmask", to be compatible
   with mach/powerpc/libem/trp.s and ncg.  We also keep a word in
   ".ignmask" in ncg for both i386 and m68020.
 - "trp": pass trap number in register.  See comment in
   helper_function_with_arg().
 - "sig": push the old value of .trppc on the stack.
 - "and ?", "ior ?", "xor ?", "com ?", "cms ?", "set ?", "inn ?":
   connect to helper functions in libem.
 - "blm", "bls": drop call to memmove() and use new helper ".bls4",
   because tests/plat/structcopy_e.c can't call memmove().
 - "xor s", "cms s": if s is large, fall back on helper function.
 - "rol", "ror": add by decomposing each rotate into 4 IR ops.
 - "rck s", "bls s": make fatal unless s is word size.
 - "loi": push multiple loads in the correct order.
 - "dup s", "exg s": if s is large, fall back on helper.
 - "dus": add using new helper ".dus4".
 - "lxl", "lxa": follow the static chain, not the dynamic chain.
 - "lor 1": materialise the stack before pushing the stack pointer.
 - "lor 2", "str 2": make fatal.
 - "los", "sts": drop calls to memcpy() and use helpers ".los4" and
   and ".sts4", so lang/m2/libm2/LtoUset.e starts working.
 - "gto": correctly read descriptor.

Change mach/powerpc/mcg/table:
 - ANY.L: add for "asp -8".
 - LOAD.L: work around register corruption.
 - COMPAREUL.I: add for "cms 8".
2018-01-31 21:05:40 -05:00
..
basicblock.c Mangle label names (turns out that the ACK assembler can't really cope with 2016-10-27 23:17:16 +02:00
basicblock.h A bb's regsin are no longer the same as those of its first instruction; 2016-11-16 20:52:15 +01:00
build.lua Bolt mcg into the PowerPC backend. It doesn't build yet, but it is generating 2016-10-17 00:06:06 +02:00
data.c Add support for consecutive labels; needed by the B compiler. 2016-11-27 21:18:00 +01:00
graph.c Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
graph.h Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
hop.c Rework the way stack frames are laid out to be simpler and, hopefully, more 2016-11-11 21:17:45 +01:00
hop.h Add support for preserved registers. 2016-10-29 20:22:44 +02:00
ir.c Re-re-add the type inference layer, now I know more about how things work. 2016-10-22 23:04:13 +02:00
ir.h Re-re-add the type inference layer, now I know more about how things work. 2016-10-22 23:04:13 +02:00
main.c '!' tracing is now always emitted; tracing goes to stderr. 2016-10-18 22:32:09 +02:00
mcg.h Lots more opcodes. Rearrange the stack layout so that fp->ab is a fixed value 2016-10-29 11:57:56 +02:00
mcgg_generated_footer.h Made sure that all files end in vim magic. 2016-10-05 21:07:29 +02:00
mcgg_generated_header.h Function termination gets routed through an exit block; we now have prologues 2016-10-15 18:38:46 +02:00
parse_em.c Get top working with the PowerPC; use it to eliminate useless branches and 2016-10-29 23:37:11 +02:00
pass_convertstackops.c Don't generate phis if unnecessary (because this breaks the 2016-10-29 10:55:48 +02:00
pass_eliminatetrivialblocks.c Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
pass_groupirs.c Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
pass_instructionselection.c Add support for preserved registers. 2016-10-29 20:22:44 +02:00
pass_livevreganalysis.c Lots more opcodes. Rearrange the stack layout so that fp->ab is a fixed value 2016-10-29 11:57:56 +02:00
pass_phigroups.c Remove the bytes1, bytes2, bytes4, bytes8 attributes; remove the concept of a 2016-10-25 23:04:20 +02:00
pass_prologueepilogue.c Lots more opcodes; better eviction behaviour; better register moves. Lots more 2016-10-19 23:29:05 +02:00
pass_registerallocator.c A bb's regsin are no longer the same as those of its first instruction; 2016-11-16 20:52:15 +01:00
pass_removedeadblocks.c Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
pass_removedeadphis.c Add code to remove unused phis, converting to pruned SSA form, to avoid 2016-10-12 21:50:12 +02:00
pass_returnvalues.c Lots more opcodes. Rearrange the stack layout so that fp->ab is a fixed value 2016-10-29 11:57:56 +02:00
pass_splitcriticaledges.c Stop passing proc around, and use a global instead --- much cleaner. 2016-10-15 23:19:44 +02:00
pass_ssa.c Fix bug where some phis weren't being inserted when a given variable definition 2016-10-27 21:40:25 +02:00
pass_typeinference.c Lots more opcodes. Rearrange the stack layout so that fp->ab is a fixed value 2016-10-29 11:57:56 +02:00
predicates.c Predicates can now take numeric arguments. The PowerPC predicates have been 2016-10-09 12:32:36 +02:00
procedure.c Fix a few c11isms. 2016-10-30 16:51:06 +01:00
procedure.h Rework the way stack frames are laid out to be simpler and, hopefully, more 2016-11-11 21:17:45 +01:00
reg.c Remove the bytes1, bytes2, bytes4, bytes8 attributes; remove the concept of a 2016-10-25 23:04:20 +02:00
reg.h Remove the bytes1, bytes2, bytes4, bytes8 attributes; remove the concept of a 2016-10-25 23:04:20 +02:00
symbol.c Properly export symbols. 2016-10-29 23:52:17 +02:00
treebuilder.c Teach mcg to pass our tests. 2018-01-31 21:05:40 -05:00