| Commit message (Collapse) | Author | Age | Files | Lines | ||
|---|---|---|---|---|---|---|
| ... | ||||||
| * | switch to whitelist based .gitignore | 2026-03-16 | 1 | -14/+29 | ||
| | | ||||||
| * | Update README | 2026-03-16 | 1 | -3/+1 | ||
| | | ||||||
| * | fix Makefile | 2026-03-16 | 1 | -3/+3 | ||
| | | ||||||
| * | regalloc: improve spilling and cleanup | 2026-03-16 | 4 | -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 cost | 2026-03-16 | 3 | -4/+39 | ||
| | | ||||||
| * | Makefile: add clean-tool | 2026-03-16 | 1 | -2/+5 | ||
| | | ||||||
| * | eval: fix errata with ELOGIOR, also rename lhs & rhs | 2026-03-15 | 1 | -78/+77 | ||
| | | ||||||
| * | c: default enum to unsigned int backing type | 2026-03-15 | 1 | -1/+3 | ||
| | | | | | Matches GCC behavior. | |||||
| * | build system: use custom depgen instead of gcc | 2026-03-15 | 4 | -5/+170 | ||
| | | ||||||
| * | c-testsuite.sh | 2026-03-14 | 1 | -2/+4 | ||
| | | ||||||
| * | eval & fold: handle division overflow for MIN/-1 | 2026-03-14 | 2 | -2/+9 | ||
| | | ||||||
| * | cpp: better handling for #include file not found | 2026-03-14 | 1 | -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 -- | 2026-03-14 | 1 | -1/+1 | ||
| | | ||||||
| * | c: static eval refactoring | 2026-03-14 | 8 | -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 result | 2026-03-11 | 2 | -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 alignof | 2026-03-09 | 3 | -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.10 | 2026-03-08 | 1 | -2/+2 | ||
| | | ||||||
| * | fix some more cases of signed integer overflow | 2026-03-08 | 2 | -3/+3 | ||
| | | ||||||
| * | x86_64/emit: fix float store zero, unsafe range check for mul immediate | 2026-03-08 | 1 | -1/+5 | ||
| | | ||||||
| * | ir/fold: fix float conversion overflows | 2026-03-08 | 1 | -4/+14 | ||
| | | ||||||
| * | ir: fix inlining getting stuck on complex recursive call sequences | 2026-03-08 | 2 | -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 cases | 2026-03-08 | 2 | -79/+76 | ||
| | | ||||||
| * | ir: increase per-function stack size limit | 2026-03-06 | 1 | -1/+1 | ||
| | | ||||||
| * | cpp: #include MACRO, free tks | 2026-03-06 | 1 | -0/+1 | ||
| | | ||||||
| * | c: recognize another static initializer edge case | 2026-03-05 | 1 | -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 name | 2026-03-05 | 1 | -31/+23 | ||
| | | | | | Make it a parameter. | |||||
| * | cpp: implement #include MACRO_NAME | 2026-03-05 | 1 | -55/+98 | ||
| | | ||||||
| * | cpp: #include".." shouldn't look in working directory | 2026-03-05 | 1 | -6/+8 | ||
| | | ||||||
| * | c: do not try to eval conditional expression's not taken branch | 2026-03-05 | 2 | -2/+2 | ||
| | | ||||||
| * | ccopt.dbg.any -> uint | 2026-03-04 | 1 | -1/+1 | ||
| | | | | | So it encompasses every bitfield. | |||||
| * | ir/dump: fix dumping data in .text | 2026-03-04 | 1 | -4/+16 | ||
| | | ||||||
| * | regalloc: fix minor regression with storing of regs into spilled stack slots | 2026-03-04 | 1 | -1/+1 | ||
| | | ||||||
| * | driver: fix -pthread, -U | 2026-03-02 | 2 | -2/+6 | ||
| | | ||||||
| * | add bswap16/32/64 | 2026-03-02 | 10 | -37/+125 | ||
| | | | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions | |||||
| * | cpp: fix token spacing edge case when empty macros are involved | 2026-03-01 | 2 | -3/+8 | ||
| | | ||||||
| * | cpp: fix token spacing (#2) (hopefully) | 2026-03-01 | 3 | -35/+104 | ||
| | | ||||||
| * | 0.1.9 | 2026-02-28 | 1 | -2/+2 | ||
| | | ||||||
| * | ir: make address ref hash table resizable | 2026-02-28 | 7 | -27/+49 | ||
| | | | | | Would hit the limit on very large functions (thanks csmith). | |||||
| * | Update README.md | lsof | 2026-02-28 | 1 | -1/+1 | |
| | | ||||||
| * | c: static intializer bugfix introduced in6c3f1593e9 | 2026-02-28 | 1 | -0/+1 | ||
| | | ||||||
| * | aarch64/isel: handle more instructions | 2026-02-28 | 1 | -13/+18 | ||
| | | ||||||
| * | backend: fix edgecases where imm32 immediate overflows | 2026-02-28 | 2 | -3/+10 | ||
| | | ||||||
| * | regalloc: fix defn of spilled var with immediate | 2026-02-28 | 2 | -2/+16 | ||
| | | | | | | | With `i64 %a = copy 0xabcdef12345`, if `%a` was spilled, this would turn into a `storei64` instruction with an unencondable immediate operand (larger than 32 bits in x86, non-zero in aarch64). | |||||
| * | cpp: allow comments between function-like macro name and arguments | 2026-02-26 | 2 | -9/+29 | ||
| | | ||||||
| * | 0.1.8 | 2026-02-25 | 1 | -2/+2 | ||
| | | ||||||
| * | c: allow casting of symbol address to intptr_t in static initializers | 2026-02-25 | 2 | -2/+4 | ||
| | | ||||||
| * | preprocessor: use shared static buffers for replacement lists | 2026-02-25 | 1 | -150/+178 | ||
| | | | | | | | | One for macro definitions' bodies, another one for function-like macros with substituted arguments in the macro expansion stack. Cuts down on a lot of individual allocations. #undef'd macros' replacement lists are "leaked" but that is very minor | |||||
| * | fix io fa8c39d6df : make buffer shared (for nested note()) | 2026-02-24 | 1 | -1/+1 | ||
| | | ||||||
| * | fix various warnings | 2026-02-24 | 6 | -14/+11 | ||
| | | ||||||
| * | inline: fix undefined value returns | 2026-02-24 | 1 | -1/+2 | ||
| | | | | | | | Previously if an inlined function has a return statement with no value (control flow reaching the closing brace of the function), would use an invalid null reference in the inlined body. Turn it into undef. | |||||