aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAgeFilesLines
...
* Shell script changes for portabilitylemon2026-03-193-13/+18
|
* test: add test for __func__lemon2026-03-191-0/+2
|
* ir: do not always try to put small literals in .textlemon2026-03-192-4/+13
| | | | | OpenBSD enforces read xor execute (XOM) even in x86-64. Not aware of any other platforms that do this.
* preeliminary support for openBSDlemon2026-03-195-16/+46
|
* regalloc & emit: explicit comparisons over memcmp of small structureslemon2026-03-192-3/+19
| | | | | The one in x86-64_emit was not portable due to relying on zero initialization of inactive union fields/padding.
* cpp: fix nullptr deref for unknown target predefslemon2026-03-191-1/+1
|
* c: remove unused initialization of decl.alignlemon2026-03-191-3/+3
| | | | | The intent is for _Alignas declarations but those aren't implemented yet. And initializing that field in declarator() can mess with .sym.
* c: fix edge cases with zero sized bitfields and static initializerslemon2026-03-183-10/+31
|
* regalloc: use in-place mergesort for intervalslemon2026-03-181-60/+60
| | | | | | Instead of constructing an array and doing quicksort. i love .02% speedup microoptimizations
* cpp: do not warn for "#define X(){}" with no space after the )lemon2026-03-181-1/+1
|
* 0.2.0lemon2026-03-181-3/+3
| | | | Changed directory/source files structure warrants minor version update.
* Use #pragma oncelemon2026-03-188-17/+12
|
* c.h: accidentally removed a constlemon2026-03-181-1/+1
|
* README missed filenamelemon2026-03-181-1/+1
|
* Refactor: use typedefs and CamelCase for aggregate typeslemon2026-03-1842-2066/+2092
| | | | Looks nicer
* Refactor: antcc.h move things aroundlemon2026-03-171-10/+10
|
* Refactor: move some utils from antcc.h to their own headerslemon2026-03-1712-117/+136
|
* REFACTOR: finish renaminglemon2026-03-1735-142/+154
|
* REFACTOR: move sources to src/lemon2026-03-1749-21/+10
|
* test/.gitignorelemon2026-03-171-0/+1
|
* switch to whitelist based .gitignorelemon2026-03-161-14/+29
|
* Update READMElemon2026-03-161-3/+1
|
* fix Makefilelemon2026-03-161-3/+3
|
* regalloc: improve spilling and cleanuplemon2026-03-164-354/+401
| | | | | | | | Instead of spilling current interval when running out of registers, spill the longest-lived active interval with a lower spill cost than current. Spill costs are estimated based on multiplicative loop depth. Also cleanup regalloc.c somewhat. Update todo.txt too.
* ir: blk loop index for spill costlemon2026-03-163-4/+39
|
* Makefile: add clean-toollemon2026-03-161-2/+5
|
* eval: fix errata with ELOGIOR, also rename lhs & rhslemon2026-03-151-78/+77
|
* c: default enum to unsigned int backing typelemon2026-03-151-1/+3
| | | | Matches GCC behavior.
* build system: use custom depgen instead of gcclemon2026-03-154-5/+170
|
* c-testsuite.shlemon2026-03-141-2/+4
|
* eval & fold: handle division overflow for MIN/-1lemon2026-03-142-2/+9
|
* cpp: better handling for #include file not foundlemon2026-03-141-12/+20
| | | | | | Instead of attempting to keep going (since things will probably break due to missing declarations), just report any other #include errors and abort.
* make clean rm --lemon2026-03-141-1/+1
|
* c: static eval refactoringlemon2026-03-148-279/+426
| | | | | Explicit node for static symbol (addresses). Should not break with edge cases like the previous ad-hoc approach. And some other bugfixes
* x86_64/isel: fix edge case with branch on float add resultlemon2026-03-112-1/+6
| | | | | | | | In `if (x + 1)` the implicit `!= 0` can be omitted for integers, because the x86 `add` instruction sets the zero flag accordingly. But for floats it doesn't, so applying that optimization there was wrong. Luckily it was caught by a nullptr dereference later in `emit::Xjcc()` for the (missing) unordered branch target, instead of miscompiling.
* c: relax constexpr constraints, fix alignoflemon2026-03-093-30/+62
| | | | | | | | | | | | - Allow short-circuiting of constant logical expressions where the unevaluated operand is not a constant expression (`1 || 0/0`) - Allow constant integer expressions that evaluate to zero to be used as null pointer constants (GNU extension). + According to the standard, `int *x = 5*0;` should be rejected. But compilers evaluate `5*0 -> 0` and allow it as if a null pointer literal.
* 0.1.10lemon2026-03-081-2/+2
|
* fix some more cases of signed integer overflowlemon2026-03-082-3/+3
|
* x86_64/emit: fix float store zero, unsafe range check for mul immediatelemon2026-03-081-1/+5
|
* ir/fold: fix float conversion overflowslemon2026-03-081-4/+14
|
* ir: fix inlining getting stuck on complex recursive call sequenceslemon2026-03-082-8/+30
| | | | | By maintaining a proper stack of inline expansions and refusing to expand callers already present in the stack.
* x86_64/isel: cleanup and fix edge caseslemon2026-03-082-79/+76
|
* ir: increase per-function stack size limitlemon2026-03-061-1/+1
|
* cpp: #include MACRO, free tkslemon2026-03-061-0/+1
|
* c: recognize another static initializer edge caselemon2026-03-051-3/+2
| | | | | | I think globsym & expr2reloc should be rewritten to be more robust to this kind of thing. Accumulate offsets whilst recursing into the child node that might contain a direct global symbol reference kind of thing.
* cpp: get rid of unnecessary ugly global variable for lexing header namelemon2026-03-051-31/+23
| | | | Make it a parameter.
* cpp: implement #include MACRO_NAMElemon2026-03-051-55/+98
|
* cpp: #include".." shouldn't look in working directorylemon2026-03-051-6/+8
|
* c: do not try to eval conditional expression's not taken branchlemon2026-03-052-2/+2
|
* ccopt.dbg.any -> uintlemon2026-03-041-1/+1
| | | | So it encompasses every bitfield.