Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | use a temporary for constant comparisons | Quentin Carbonneaux | |
2015-09-15 | fix limit bug in spill | Quentin Carbonneaux | |
I think this was not a big issue because the register allocator does not consume a register when it encounters obviously dead code. | |||
2015-09-15 | remove useless TODO for now | Quentin Carbonneaux | |
2015-09-15 | quick fix for comparisons with constants | Quentin Carbonneaux | |
2015-09-15 | start work on comparisons | Quentin Carbonneaux | |
There are two things I overlooked so far. 1. Binary instructions like cmp that do not have a result in registers need the size suffix sometimes, for example when comparing a spill location with a constant. 2. The register allocator needs to be adapted to support the comparison instruction: it is not possible to compare two spill locations without using a register. | |||
2015-09-15 | use cmp $0, it works with spill slots | Quentin Carbonneaux | |
2015-09-15 | use correct sizes during reg allocation | Quentin Carbonneaux | |
2015-09-15 | print registers with numbers | Quentin Carbonneaux | |
2015-09-15 | adapt emit to new Ref setting | Quentin Carbonneaux | |
2015-09-15 | use regs of the correct type in isel | Quentin Carbonneaux | |
2015-09-15 | use a new Ref type for registers | Quentin Carbonneaux | |
This might not be a good idea, the problem was that many spurious registers would be added to the Bits data-structures during compilation (and would always remain 0). However, doing the above modification de-uniformizes the handling of temps and regs, this makes the code longer and not really nicer. Also, additional Bits structures are required to track the registers independently. Overall this might be a bad idea to revert. | |||
2015-09-15 | patch isel to use symbol types | Quentin Carbonneaux | |
2015-09-15 | silence clang warning | Quentin Carbonneaux | |
2015-09-15 | avoid name conflicts in enums | Quentin Carbonneaux | |
2015-09-15 | start change of representation for registers | Quentin Carbonneaux | |
2015-09-15 | start work on word/long handling | Quentin Carbonneaux | |
2015-09-15 | replace IA with X for x64 instructions | Quentin Carbonneaux | |
2015-09-15 | avoid keyword clash by using cons for constants | Quentin Carbonneaux | |
2015-09-15 | cosmetic modifications to parse.c | Quentin Carbonneaux | |
2015-09-15 | clean the commutativity + fix bug in emit | Quentin Carbonneaux | |
The commutativity information only makes sense for arithmetic expressions. To account for that, I introduced a new tri-valued boolean type B3. Memory operations, for example, will receive an undefined commutativity trit. The code emitter was buggy when rega emitted instructions like 'rax = add 1, rax', this is now fixed using the commutativity information (we rewrite it in 'rax = add rax, 1'). | |||
2015-09-15 | cosmetics | Quentin Carbonneaux | |
2015-09-15 | compress parsref code a little | Quentin Carbonneaux | |
2015-09-15 | start improving constants support | Quentin Carbonneaux | |
2015-09-15 | add TODO | Quentin Carbonneaux | |
2015-09-15 | add support for in-block reg. contraints | Quentin Carbonneaux | |
2015-09-15 | perform isel before code emission | Quentin Carbonneaux | |
2015-09-15 | emit some x86-sepcific instructions | Quentin Carbonneaux | |
2015-09-15 | compile emit module | Quentin Carbonneaux | |
2015-09-15 | add a code emitter for at&t syntax | Quentin Carbonneaux | |
2015-09-15 | silence clang warning | Quentin Carbonneaux | |
2015-09-15 | add crippled dce to the allocator | Quentin Carbonneaux | |
2015-09-15 | complete a crude register allocator | Quentin Carbonneaux | |
2015-09-15 | start work on parallel moves | Quentin Carbonneaux | |
2015-09-15 | initiate work on reg allocation | Quentin Carbonneaux | |
2015-09-15 | simplify spiller | Quentin Carbonneaux | |
It seems that this logic of shuffling stuff around between blocks should be handled by the register allocator instead: it *will* have to shuffle between registers, so we might as well mix some spill locations in. | |||
2015-09-15 | finish spiller, now needs testing! | Quentin Carbonneaux | |
2015-09-15 | new euclidean division test | Quentin Carbonneaux | |
2015-09-15 | add more printing support | Quentin Carbonneaux | |
2015-09-15 | standardize error message | Quentin Carbonneaux | |
2015-09-15 | factor some spilling logic | Quentin Carbonneaux | |
2015-09-15 | comment and fix if(BSET(..)) bug | Quentin Carbonneaux | |
2015-09-15 | new spill test | Quentin Carbonneaux | |
2015-09-15 | test isel | Quentin Carbonneaux | |
2015-09-15 | isel logic was moved to spill | Quentin Carbonneaux | |
2015-09-15 | add slot addressing and some more spilling | Quentin Carbonneaux | |
2015-09-15 | add simple spill test | Quentin Carbonneaux | |
2015-09-15 | prepare for block processing | Quentin Carbonneaux | |
2015-09-15 | this makefile fu was useless | Quentin Carbonneaux | |
2015-09-15 | always preserve last build | Quentin Carbonneaux | |
2015-09-15 | refine assertion in cost computation | Quentin Carbonneaux | |