Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | the abi is unclear, practice suggests that change | Quentin Carbonneaux | |
2015-09-15 | treat two instruction args uniformly in rega | Quentin Carbonneaux | |
2015-09-15 | OXTestw should not have 64bits arguments | Quentin Carbonneaux | |
2015-09-15 | new NAlign constant and fix frame size computation | Quentin Carbonneaux | |
2015-09-15 | slight update to slot tests | Quentin Carbonneaux | |
2015-09-15 | fix bug in alignment constraints of spill slots | Quentin Carbonneaux | |
2015-09-15 | move spill and emit to the new slot system | Quentin 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-15 | store the edit tag | Quentin Carbonneaux | |
2015-09-15 | add comment about variadic functions in abi | Quentin Carbonneaux | |
2015-09-15 | clarify the abi | Quentin Carbonneaux | |
2015-09-15 | start summing up the abi | Quentin Carbonneaux | |
2015-09-15 | tweak block-border heuristic for reg. allocation | Quentin 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-15 | remove obsolete comment | Quentin Carbonneaux | |
2015-09-15 | add sign/zero extension operations | Quentin Carbonneaux | |
2015-09-15 | refine the clobber code | Quentin Carbonneaux | |
It could very well be that the temporary we assign already got assigned to the right register! Good things happen. | |||
2015-09-15 | fix two heuristics in rega | Quentin 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-15 | swap a test in collatz | Quentin 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-15 | compactify collatz test | Quentin Carbonneaux | |
2015-09-15 | remove obsolete comment about MEM | Quentin 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-15 | add the mul instruction | Quentin Carbonneaux | |
2015-09-15 | remove round-robin in ralloc (need preferences) | Quentin Carbonneaux | |
2015-09-15 | make sure tests emitted are encodable | Quentin Carbonneaux | |
2015-09-15 | replace RMem refs with an OAddr opertation | Quentin Carbonneaux | |
2015-09-15 | compile branches on and using test | Quentin Carbonneaux | |
2015-09-15 | add a large test | Quentin Carbonneaux | |
2015-09-15 | forgot about phi nodes in the spiller | Quentin 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-15 | make sure eflags-writing do not disappear | Quentin 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-15 | clobber check code was wrong in dopm() | Quentin Carbonneaux | |
2015-09-15 | fix bug in parallel moves code | Quentin Carbonneaux | |
2015-09-15 | handle OAnd in isel | Quentin Carbonneaux | |
2015-09-15 | change strategy for phi nodes | Quentin Carbonneaux | |
2015-09-15 | avoid depending on uninitialized r | Quentin Carbonneaux | |
2015-09-15 | tentative support for fast allocs | Quentin 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-15 | hack a slot-packing function and its tests | Quentin Carbonneaux | |
2015-09-15 | use 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-15 | major lifting: get rid of RReg | Quentin 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-15 | add basic support for stack allocation | Quentin Carbonneaux | |
2015-09-15 | minor size optimization for 0XSet | Quentin Carbonneaux | |
2015-09-15 | fix typos in selcmp and comment | Quentin Carbonneaux | |
2015-09-15 | comment about immutables | Quentin Carbonneaux | |
2015-09-15 | fail on constant comparisons | Quentin Carbonneaux | |
In the future they will be eliminated by constant propagation. | |||
2015-09-15 | add a small size optimization to emit | Quentin Carbonneaux | |
2015-09-15 | support for large constants | Quentin 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-15 | store gcd result in a | Quentin Carbonneaux | |
2015-09-15 | use proper store suffix in max test | Quentin Carbonneaux | |
2015-09-15 | split store into store{w,l} | Quentin Carbonneaux | |
2015-09-15 | prefix register macros | Quentin Carbonneaux | |
2015-09-15 | fix my sloppy understanding of x86 assembly! | Quentin Carbonneaux | |
2015-09-15 | use round-robin in ralloc | Quentin Carbonneaux | |
This gives a more uniform use of the registers. | |||
2015-09-15 | add funny little max ssa test | Quentin Carbonneaux | |