aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAgeFilesLines
* io: just use sprintf for printing doubles lemon2025-12-071-28/+6
|
* amd64: fix wrong condition code being used for float gth lemon2025-12-071-1/+1
| | | | ughh
* amd64: use XORPS for floating point negation lemon2025-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 offset lemon2025-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-flt lemon2025-12-053-4/+36
|
* amd64: fix pseudo-push/pop float reg lemon2025-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 inplace lemon2025-12-051-0/+1
|
* amd64: handle unoredered float cmps lemon2025-12-051-2/+30
|
* ir: float fold div/0 lemon2025-12-051-4/+3
|
* io: print nans as NaN lemon2025-12-051-0/+5
|
* eval: fix float cmps lemon2025-12-051-0/+2
|
* update todo.txt lemon2025-12-041-1/+2
|
* driver: more commandline option placeholders, .a file support lemon2025-12-041-3/+9
|
* regalloc: kill dead defs of physical regs lemon2025-12-041-8/+16
|
* isel: fix immediate of flipped sub lemon2025-12-041-0/+1
|
* cpp: implement preprocessor expressions short circuiting behaviour lemon2025-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 prototypes lemon2025-12-031-2/+10
|
* preprocessor: add #ifndef...#endif include guard optimization lemon2025-12-024-16/+38
|
* test/11-abi lemon2025-12-022-6/+46
|
* c: make tentative definitions work lemon2025-12-025-18/+57
|
* c: narrowing ints of different signedness... lemon2025-12-011-1/+1
|
* c: edgecase for redeclaration of implicit sized array lemon2025-12-011-1/+1
|
* driver: add -run option like tcc lemon2025-11-302-24/+80
| | | | convenient for quick testing
* c: fix some decl bugs and diagnostics lemon2025-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 preprocessor lemon2025-11-282-40/+35
|
* isel: fix branch arg lemon2025-11-271-0/+2
|
* abi/isel: aggregate args in stack wip lemon2025-11-272-15/+42
|
* regalloc: skip dead phis lemon2025-11-261-1/+4
|
* c/type: make implicit const T* -> T* conversion warning, not error lemon2025-11-263-4/+11
|
* io: diagnostics print source code underline correctly with hard tabs lemon2025-11-261-8/+26
|
* c: more static initializer fixes lemon2025-11-262-7/+9
|
* c: fix elided-braces initializers for nested unions lemon2025-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 -E lemon2025-11-262-7/+7
|
* amd64/emit: I64 consts and fp push/pop lemon2025-11-241-7/+22
|
* fix regression w/ store instr + memory immediate lemon2025-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 phis lemon2025-11-242-8/+17
|
* c: fix condexprvalue lemon2025-11-241-54/+42
| | | | | The original implementation was broken when presented with nested short-circuiting logical operators.
* c: remove unused function lemon2025-11-241-8/+0
|
* c: create dummy unreachable block after trap lemon2025-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 much lemon2025-11-241-3/+5
|
* ir.h: tweak mkintrin() definition to work with tinycc lemon2025-11-241-1/+1
|
* ir: implement cvtu64f. and other bug fixes lemon2025-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 builder lemon2025-11-232-11/+48
| | | | this should probably be in a separate pass?
* c: check actual reachability for non-void func may not return value lemon2025-11-233-2/+28
|
* c: implement compound initializer in static context lemon2025-11-232-3/+18
|
* update todo.txt lemon2025-11-231-1/+0
|