aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAgeFilesLines
* c: emit data for __func__ lazilylemon2025-12-151-15/+16
|
* c: fix another memory-leak-when-errors caselemon2025-12-141-1/+2
|
* c: as a hack, warn for zero-length array instead of errorlemon2025-12-141-1/+1
| | | | | Treated as unsized array T[]. This shows up in some linux headers as a non-standard way to have flexible array members.
* c/builtin: fix vacopylemon2025-12-141-5/+6
|
* x86_64/emit: handle pseudo subtraction used for cmplemon2025-12-141-0/+2
| | | | Isel had this forever, but the matching code for it in emit wasn't there
* c: allow implicit type conversions between plain char pointer andlemon2025-12-141-3/+5
| | | | signed/unsigned char pointer
* c: fix memory leak if initializer data if errorlemon2025-12-141-1/+1
|
* eval: long double placeholderlemon2025-12-141-1/+2
|
* cpp: support #line directiveslemon2025-12-143-28/+137
|
* cpp: correctly handle extra tokens after directiveslemon2025-12-141-16/+21
|
* only put dats can in .text now when emitting itlemon2025-12-143-5/+5
|
* various relocation related optimizationlemon2025-12-146-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 symbolslemon2025-12-142-32/+52
| | | | | Gets rid of linear-time findsym(), though needs some extra indirection to emit sorted symbols.
* kill fredlemon2025-12-132-2/+1
|
* add c-testsuitelemon2025-12-13912-0/+9205
|
* c: handle more static eval edgecases for int -> ptrlemon2025-12-133-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 necessarylemon2025-12-131-7/+11
|
* regalloc: fixbug with phi move of stack <- stacklemon2025-12-132-6/+5
|
* Add -O optimization flaglemon2025-12-134-2/+15
|
* fix position independent loads of function symbols.lemon2025-12-139-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/14lemon2025-12-131-0/+12
|
* x86-64/emit erratalemon2025-12-121-7/+4
|
* x86_64: fix erroneous encoding of index reg in no-pie situationslemon2025-12-121-11/+1
|
* s/amd64/x86_64/lemon2025-12-1210-20/+20
|
* emit: turn ADD -imm into SUB immlemon2025-12-121-1/+5
|
* isel: fix bug where sub turned into add, but inplace didn't reflectlemon2025-12-121-2/+2
|
* c: switch stmt diagnosticslemon2025-12-121-8/+49
| | | | For duplicate cases, case value overflow
* amd64/emit: change instr desc table a littlelemon2025-12-121-157/+158
|
* lex: use pmap for macro lookuplemon2025-12-124-134/+100
| | | | To reduce hashmap code repetition. Also add pmap_del for this purpose
* rename arraylength macro -> countoflemon2025-12-1115-106/+106
|
* default to C11lemon2025-12-111-1/+1
|
* c: accept C99 `[static N]` style array decls, changes to fn qualslemon2025-12-115-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 stufflemon2025-12-115-13/+53
|
* c: use a look-up table for isdecltok()lemon2025-12-111-14/+18
|
* -trigraphs optionlemon2025-12-112-3/+5
|
* c: optimize environment decl lookuplemon2025-12-111-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 diagnosticslemon2025-12-111-17/+24
|
* c: support for noreturn, and decl parsing cleanuplemon2025-12-115-110/+119
|
* driver: add -Werrorlemon2025-12-113-1/+6
|
* fatal() make noreturnlemon2025-12-111-2/+8
|
* make fatal() _Noreturnlemon2025-12-112-2/+2
|
* lex/expr(): cleanuplemon2025-12-111-29/+29
|
* c: expr2reloc() change sig to return addendlemon2025-12-111-15/+12
|
* ir: bump MAXINSTRlemon2025-12-101-1/+1
|
* embedfilesdir: don't need that much paddinglemon2025-12-101-1/+1
|
* lexer: properly add padding for cpppredefslemon2025-12-101-2/+2
|
* c: fix static relocation for &sym[offset]lemon2025-12-101-7/+6
|
* parallel move; implement reg<->stack swplemon2025-12-102-5/+21
|
* update lua/.gitignorelemon2025-12-101-0/+2
|
* regalloc: optimize a little edge case betterlemon2025-12-101-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