aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAgeFilesLines
* Add lua 5.4.0 test suitelemon2025-12-07121-2/+59828
|
* test/12-flt: add some weird float cmp edgecaseslemon2025-12-071-2/+9
|
* io: just use sprintf for printing doubleslemon2025-12-071-28/+6
|
* amd64: fix wrong condition code being used for float gthlemon2025-12-071-1/+1
| | | | ughh
* amd64: use XORPS for floating point negationlemon2025-12-072-3/+7
| | | | | | | | | | Previously `neg x` was being turned into `sub 0, x`. But this gives the wrong result for zero/negative zero (-0.0 == -0.0 but 0.0 - 0.0 == 0.0), so it wasn't IEEE compliant or correct. Do what every other compiler does instead and flip the sign bit with an exclusive or. Should implement someway of deduplicating small data constants like the ones used here though.
* abi: fix aggregate passed by regs 2nd reg offsetlemon2025-12-063-27/+35
| | | | | | | | | It was broken for example `struct { i32 a; f64 b; }` (would try to load/store b from byte offset 4, not 8). Introduce r2off, realize in x86-64 it's always 8; even `struct {i32 a; f32 b;}` gets passed in one (integer) register. But not so in (future) ABIs like RISC-V, I believe there `{i32, f32}` would get passed in 1 integer and 1 float register (r2off = 4).
* add command-line predefined macros (-D, -U)lemon2025-12-0610-20/+107
|
* test 12-fltlemon2025-12-053-4/+36
|
* amd64: fix pseudo-push/pop float reglemon2025-12-051-2/+2
| | | | | | With add/sub flags can be trashed which can result in miscompilations, use lea. This shouldn't even exist, need to get rid of xsave/xrestore, but for now fix this kludge
* isel: fix flipped sub not being inplacelemon2025-12-051-0/+1
|
* amd64: handle unoredered float cmpslemon2025-12-051-2/+30
|
* ir: float fold div/0lemon2025-12-051-4/+3
|
* io: print nans as NaNlemon2025-12-051-0/+5
|
* eval: fix float cmpslemon2025-12-051-0/+2
|
* update todo.txtlemon2025-12-041-1/+2
|
* driver: more commandline option placeholders, .a file supportlemon2025-12-041-3/+9
|
* regalloc: kill dead defs of physical regslemon2025-12-041-8/+16
|
* isel: fix immediate of flipped sublemon2025-12-041-0/+1
|
* cpp: implement preprocessor expressions short circuiting behaviourlemon2025-12-031-17/+23
| | | | This only affects whether an error is given for something like `0 && 0/0` (it shouldn't)
* c: allow redeclaration with K&R and non K&R prototypeslemon2025-12-031-2/+10
|
* preprocessor: add #ifndef...#endif include guard optimizationlemon2025-12-024-16/+38
|
* test/11-abilemon2025-12-022-6/+46
|
* c: make tentative definitions worklemon2025-12-025-18/+57
|
* c: narrowing ints of different signedness...lemon2025-12-011-1/+1
|
* c: edgecase for redeclaration of implicit sized arraylemon2025-12-011-1/+1
|
* driver: add -run option like tcclemon2025-11-302-24/+80
| | | | convenient for quick testing
* c: fix some decl bugs and diagnosticslemon2025-11-301-18/+34
|
* amd64/isel: fix addressing index shift being possibly too large to encode (duh)lemon2025-11-292-1/+2
|
* lex: remove some hacks and optimize preprocessorlemon2025-11-282-40/+35
|
* isel: fix branch arglemon2025-11-271-0/+2
|
* abi/isel: aggregate args in stack wiplemon2025-11-272-15/+42
|
* regalloc: skip dead phislemon2025-11-261-1/+4
|
* c/type: make implicit const T* -> T* conversion warning, not errorlemon2025-11-263-4/+11
|
* io: diagnostics print source code underline correctly with hard tabslemon2025-11-261-8/+26
|
* c: more static initializer fixeslemon2025-11-262-7/+9
|
* c: fix elided-braces initializers for nested unionslemon2025-11-261-5/+16
| | | | | | | | For example in ```c struct {int a; union { int b,c; }; int d; } X = {1,2,3}; ``` Fields `a`,`b`,`d` must get initialized to 1,2,3. Not `c`
* use bstdout for -Elemon2025-11-262-7/+7
|
* amd64/emit: I64 consts and fp push/poplemon2025-11-241-7/+22
|
* fix regression w/ store instr + memory immediatelemon2025-11-241-11/+13
|
* pp: fix token pasting (hopefully)lemon2025-11-241-27/+15
|
* bootstrapping 🎉lemon2025-11-243-2/+24
|
* ir: simplify some occurrences of single-argument phislemon2025-11-242-8/+17
|
* c: fix condexprvaluelemon2025-11-241-54/+42
| | | | | The original implementation was broken when presented with nested short-circuiting logical operators.
* c: remove unused functionlemon2025-11-241-8/+0
|
* c: create dummy unreachable block after traplemon2025-11-242-5/+2
| | | | | | Reverts 9abe27f6712. This simplies expr codegen, otherwise would manually have to check `fn->curblk != NULL` repeatedly. Later passes will easily delete those unreachable blocks
* isel: loadstoreaddr don't fuseaddr as muchlemon2025-11-241-3/+5
|
* ir.h: tweak mkintrin() definition to work with tinycclemon2025-11-241-1/+1
|
* ir: implement cvtu64f. and other bug fixeslemon2025-11-235-12/+50
| | | | | compiler is bootstrapping?! however, stage1 and stage2+ executables aren't bit-identical.. small differences in the codegen.. need to look into that
* implement cvtfXu64 by lowering it in builderlemon2025-11-232-11/+48
| | | | this should probably be in a separate pass?
* c: check actual reachability for non-void func may not return valuelemon2025-11-233-2/+28
|