summary refs log tree commit diff
path: root/lisc
AgeCommit message (Collapse)Author
2015-09-15move spill and emit to the new slot systemQuentin Carbonneaux
In emit, I worked a little to make sure that framesz works when we change the size of the svec array (if we need more alignments).
2015-09-15store the edit tagQuentin Carbonneaux
2015-09-15add comment about variadic functions in abiQuentin Carbonneaux
2015-09-15clarify the abiQuentin Carbonneaux
2015-09-15start summing up the abiQuentin Carbonneaux
2015-09-15tweak block-border heuristic for reg. allocationQuentin Carbonneaux
We only allocate a register that has a hint if the hint register is not used already. In the max example it gives a better result and it does not seem to affect the collatz test.
2015-09-15remove obsolete commentQuentin Carbonneaux
2015-09-15add sign/zero extension operationsQuentin Carbonneaux
2015-09-15refine the clobber codeQuentin Carbonneaux
It could very well be that the temporary we assign already got assigned to the right register! Good things happen.
2015-09-15fix two heuristics in regaQuentin Carbonneaux
There was a typo that made always the same successor to be selected for register allocation hinting. Also, I now attempt to prioritize hints over succeccor's choices as it appears to give slightly better results... Now that I think about it, the code re-using the most frequent successor block's assignment might be dead because all registers have hints if they got assigned once. To investigate.
2015-09-15swap a test in collatzQuentin Carbonneaux
This is pretty stupid... Since we rely on rpo only for code output (and not a proper scheduler), I have to be careful with the ordering of tests to get cleaner code.
2015-09-15compactify collatz testQuentin Carbonneaux
2015-09-15remove obsolete comment about MEMQuentin Carbonneaux
It turned out to be not so useful to have a MEM type for references. Instead I used an OAddr instruction that translates simply to a lea.
2015-09-15add the mul instructionQuentin Carbonneaux
2015-09-15remove round-robin in ralloc (need preferences)Quentin Carbonneaux
2015-09-15make sure tests emitted are encodableQuentin Carbonneaux
2015-09-15replace RMem refs with an OAddr opertationQuentin Carbonneaux
2015-09-15compile branches on and using testQuentin Carbonneaux
2015-09-15add a large testQuentin Carbonneaux
2015-09-15forgot about phi nodes in the spillerQuentin Carbonneaux
When we are dealing with a block that is not a loop, we must make sure to consider phi arguments of successors as live variables. Ideally we could move the code to find all live-ins (including phi arguments) to the live module.
2015-09-15make sure eflags-writing do not disappearQuentin Carbonneaux
This is a hack implementation, ideally I would like something cleaner. The problem is that regalloc thinks an instruction is dead code because it's not aware that it writes to eflags.
2015-09-15clobber check code was wrong in dopm()Quentin Carbonneaux
2015-09-15fix bug in parallel moves codeQuentin Carbonneaux
2015-09-15handle OAnd in iselQuentin Carbonneaux
2015-09-15change strategy for phi nodesQuentin Carbonneaux
2015-09-15avoid depending on uninitialized rQuentin Carbonneaux
2015-09-15tentative support for fast allocsQuentin Carbonneaux
It seems that the MEM reference type is meaningless in too many positions. Because of this, it is unclear if we should keep it or just introduce a OAddr instruction that only accepts slots. Regardless of the above, the spilling module needs to use the new slot_() function, also, the emit function needs to fetch the size of the stack frame from the slot[] array. The naming is still very transitional, here is a list of all bogus names I can think of: - SLOT() - Tmp.spill - slot_
2015-09-15hack a slot-packing function and its testsQuentin Carbonneaux
2015-09-15use the same bitset for regs and tmps in rega()Quentin Carbonneaux
This is possible because we know that they are represented by different integers.
2015-09-15major lifting: get rid of RRegQuentin Carbonneaux
I've been septic since I introduced it, this commit proves that it costs more than it helps. I've also fixed a bad bug in rega() where I alloc'ed the wrong size for internal arrays. Enums now have names so I can use them to cast in gdb to get the name corresponding to a constant.
2015-09-15add basic support for stack allocationQuentin Carbonneaux
2015-09-15minor size optimization for 0XSetQuentin Carbonneaux
2015-09-15fix typos in selcmp and commentQuentin Carbonneaux
2015-09-15comment about immutablesQuentin Carbonneaux
2015-09-15fail on constant comparisonsQuentin Carbonneaux
In the future they will be eliminated by constant propagation.
2015-09-15add a small size optimization to emitQuentin Carbonneaux
2015-09-15support for large constantsQuentin Carbonneaux
It was not as simple as I thought. All constants used in 32b context get truncated to 32 bits. All constants in 64b contexts can either remain as immutables are have to be evicted in a register, this choice is taken in noimm(). The case of the comparison needs to be documented since the context is not clearly 32 or 64 bits. I am still unsure if this is fully correct.
2015-09-15store gcd result in aQuentin Carbonneaux
2015-09-15use proper store suffix in max testQuentin Carbonneaux
2015-09-15split store into store{w,l}Quentin Carbonneaux
2015-09-15prefix register macrosQuentin Carbonneaux
2015-09-15fix my sloppy understanding of x86 assembly!Quentin Carbonneaux
2015-09-15use round-robin in rallocQuentin Carbonneaux
This gives a more uniform use of the registers.
2015-09-15add funny little max ssa testQuentin Carbonneaux
2015-09-15cosmeticsQuentin Carbonneaux
2015-09-15movsb is not movsbl without suffix...Quentin Carbonneaux
2015-09-15attempt factoring store emission codeQuentin Carbonneaux
2015-09-15parse variants of storeQuentin Carbonneaux
2015-09-15ugly support for store/loadQuentin Carbonneaux
2015-09-15parse operations with no resultQuentin Carbonneaux