| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | various relocation related optimization | 2025-12-14 | 6 | -56/+78 | |
| | | | | | | | | | | | With 59ca5a8db, querying if a symbol is defined is cheap. If we're compiling code that calls foo() and we defined foo() in this compilation unit, we already know its offset within the .text section, so use it instead of emitting a relocation for the linker to handle. Also, put small literal data in the .text section instead of .rodata. This seems to improve performance (cache locality?), and as a bonus, it will be good for aarch64's instr encoding with smallish PC-relative offsets. | ||||
| * | elf: use a hashmap for looking up symbols | 2025-12-14 | 2 | -32/+52 | |
| | | | | | | Gets rid of linear-time findsym(), though needs some extra indirection to emit sorted symbols. | ||||
| * | kill fred | 2025-12-13 | 2 | -2/+1 | |
| | | |||||
| * | add c-testsuite | 2025-12-13 | 912 | -0/+9205 | |
| | | |||||
| * | c: handle more static eval edgecases for int -> ptr | 2025-12-13 | 3 | -5/+29 | |
| | | | | | | sqlite3 was falling back to `((void*)&((char*)0)[X])` for INT_TO_PTR, which this handles now. | ||||
| * | c: case/default labels only create new blocks when necessary | 2025-12-13 | 1 | -7/+11 | |
| | | |||||
| * | regalloc: fixbug with phi move of stack <- stack | 2025-12-13 | 2 | -6/+5 | |
| | | |||||
| * | Add -O optimization flag | 2025-12-13 | 4 | -2/+15 | |
| | | |||||
| * | fix position independent loads of function symbols. | 2025-12-13 | 9 | -26/+48 | |
| | | | | | | | | | 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. | ||||
| * | test/14 | 2025-12-13 | 1 | -0/+12 | |
| | | |||||
| * | x86-64/emit errata | 2025-12-12 | 1 | -7/+4 | |
| | | |||||
| * | x86_64: fix erroneous encoding of index reg in no-pie situations | 2025-12-12 | 1 | -11/+1 | |
| | | |||||
| * | s/amd64/x86_64/ | 2025-12-12 | 10 | -20/+20 | |
| | | |||||
| * | emit: turn ADD -imm into SUB imm | 2025-12-12 | 1 | -1/+5 | |
| | | |||||
| * | isel: fix bug where sub turned into add, but inplace didn't reflect | 2025-12-12 | 1 | -2/+2 | |
| | | |||||
| * | c: switch stmt diagnostics | 2025-12-12 | 1 | -8/+49 | |
| | | | | | For duplicate cases, case value overflow | ||||
| * | amd64/emit: change instr desc table a little | 2025-12-12 | 1 | -157/+158 | |
| | | |||||
| * | lex: use pmap for macro lookup | 2025-12-12 | 4 | -134/+100 | |
| | | | | | To reduce hashmap code repetition. Also add pmap_del for this purpose | ||||
| * | rename arraylength macro -> countof | 2025-12-11 | 15 | -106/+106 | |
| | | |||||
| * | default to C11 | 2025-12-11 | 1 | -1/+1 | |
| | | |||||
| * | c: accept C99 `[static N]` style array decls, changes to fn quals | 2025-12-11 | 5 | -61/+56 | |
| | | | | | | | Function parameters qualifiers don't matter outside of function definition. `int (const int)` should be compatible with `int(int)` etc. So no need to store them in the typedata. | ||||
| * | _Alignof and stuff | 2025-12-11 | 5 | -13/+53 | |
| | | |||||
| * | c: use a look-up table for isdecltok() | 2025-12-11 | 1 | -14/+18 | |
| | | |||||
| * | -trigraphs option | 2025-12-11 | 2 | -3/+5 | |
| | | |||||
| * | c: optimize environment decl lookup | 2025-12-11 | 1 | -6/+26 | |
| | | | | | | Use a hashmap for the toplevel, optimizing for the common use case where the file-scope has many more declarations than local scopes do | ||||
| * | c: disallow mismatched nested extern decl, & more diagnostics | 2025-12-11 | 1 | -17/+24 | |
| | | |||||
| * | c: support for noreturn, and decl parsing cleanup | 2025-12-11 | 5 | -110/+119 | |
| | | |||||
| * | driver: add -Werror | 2025-12-11 | 3 | -1/+6 | |
| | | |||||
| * | fatal() make noreturn | 2025-12-11 | 1 | -2/+8 | |
| | | |||||
| * | make fatal() _Noreturn | 2025-12-11 | 2 | -2/+2 | |
| | | |||||
| * | lex/expr(): cleanup | 2025-12-11 | 1 | -29/+29 | |
| | | |||||
| * | c: expr2reloc() change sig to return addend | 2025-12-11 | 1 | -15/+12 | |
| | | |||||
| * | ir: bump MAXINSTR | 2025-12-10 | 1 | -1/+1 | |
| | | |||||
| * | embedfilesdir: don't need that much padding | 2025-12-10 | 1 | -1/+1 | |
| | | |||||
| * | lexer: properly add padding for cpppredefs | 2025-12-10 | 1 | -2/+2 | |
| | | |||||
| * | c: fix static relocation for &sym[offset] | 2025-12-10 | 1 | -7/+6 | |
| | | |||||
| * | parallel move; implement reg<->stack swp | 2025-12-10 | 2 | -5/+21 | |
| | | |||||
| * | update lua/.gitignore | 2025-12-10 | 1 | -0/+2 | |
| | | |||||
| * | regalloc: optimize a little edge case better | 2025-12-10 | 1 | -4/+6 | |
| | | | | | | | | | | | | | With two-address instructions one needs to make sure the dst doesn't get allocated to the same reg as the right-hand operand: %r = mul %x, %y ; %y cannot be %r Except, if the operands are the same %r = mul %x, %x ; if %x is dead after this instr, it's fine to allocate %r to the same reg | ||||
| * | c: fix compound assignment type conversions when types don't match | 2025-12-10 | 3 | -2/+3 | |
| | | |||||
| * | misc fixes | 2025-12-10 | 3 | -5/+4 | |
| | | |||||
| * | elf: initialize str hashtable to a nicer size | 2025-12-09 | 1 | -0/+1 | |
| | | |||||
| * | mem: fix pmap_init and change hashmap load factors to 75% | 2025-12-09 | 2 | -5/+4 | |
| | | |||||
| * | lex: make some hashtables resizable | 2025-12-09 | 2 | -36/+73 | |
| | | | | | Was hiting the fixed limits trying to preprocess sqlite3amalgamation | ||||
| * | rega: change assert for spilled callee. it's ok if nspill==1 | 2025-12-09 | 1 | -1/+1 | |
| | | |||||
| * | c: fix some static initialziers | 2025-12-08 | 1 | -1/+3 | |
| | | |||||
| * | eval: &*x address constants | 2025-12-08 | 1 | -0/+4 | |
| | | |||||
| * | c: fix more declaration parsing bugs | 2025-12-08 | 1 | -7/+17 | |
| | | |||||
| * | driver: update help | 2025-12-08 | 1 | -14/+32 | |
| | | |||||
| * | driver: use fexecve for -run | 2025-12-08 | 1 | -17/+18 | |
| | | |||||