aboutsummaryrefslogtreecommitdiffhomepage
path: root/x86_64/isel.c
Commit message (Collapse)AuthorAgeFilesLines
* add bswap16/32/64 lemon2026-03-021-0/+8
| | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions
* ir: make address ref hash table resizable lemon2026-02-281-2/+2
| | | | Would hit the limit on very large functions (thanks csmith).
* backend: fix edgecases where imm32 immediate overflows lemon2026-02-281-3/+9
|
* fix various warnings lemon2026-02-241-1/+0
|
* x86_64/isel: fix regression with cmp instrs edge case lemon2026-02-241-1/+1
|
* driver: recognize shared libraries; & backend: misc fixes for PIC isel edgecases lemon2026-02-221-4/+6
|
* IR: just use an array for extended constants lemon2026-02-191-4/+4
| | | | | The extra work of using a hashtable to intern them is probably unnecessary.
* ir: regalloc & x86-64 isel bugfixes lemon2026-02-181-4/+18
|
* x86_64/isel: fix edgecase of fixarg from seljmp derefing nullpointer lemon2026-01-091-1/+1
|
* backend: separate instrs for integer/float store lemon2025-12-311-2/+2
|
* x86_64: optimize away some redundant zero extensions lemon2025-12-291-1/+9
|
* x86_64/isel: aimm should take vlong lemon2025-12-291-1/+1
|
* backend: start implementing aarch64 lemon2025-12-281-14/+2
|
* avoid GOT relocations in unnecessary instances lemon2025-12-251-1/+1
| | | | | Also change xcon to have a flagset for symbols (whether it's a function, locally defined; later: thread local, etc).
* x86_64: fix isel for 7036e19 lemon2025-12-241-1/+1
|
* lower alloca as a separate pass before isel lemon2025-12-231-27/+10
|
* isel: fix returning fixarg()'d temp lemon2025-12-201-4/+4
|
* backend: unify pass memory allocation strategies lemon2025-12-201-2/+1
| | | | | | It was all over the place for temporary data structures used by individual passes. Now there is an arena specifically for that, which is nicer.
* x86-64: peephole optimization for 3-address shift -> lea lemon2025-12-201-0/+1
|
* isel: fix wrong instr cls being used in some cases lemon2025-12-191-2/+2
| | | | Specifically comparisons where operation cls != result cls
* x86_64: for vararg calls, write to EAX in isel lemon2025-12-181-4/+5
| | | | Also, in regalloc ensure fixed intervals are sorted
* fix position independent loads of function symbols. lemon2025-12-131-1/+1
| | | | | | | | For `extern int x[1];`, can use PCREL32 for &x. But for `extern int x(int)`, must use GOTREL, when not being called directly (that's PLT). Therefore the type of an external symbol (actually just whether it denotes a function) matters when deciding what kind of relocation to emit, so keep that information.
* s/amd64/x86_64/ lemon2025-12-121-0/+660