aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAgeFilesLines
* 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
* c: fix compound assignment type conversions when types don't matchlemon2025-12-103-2/+3
|
* misc fixeslemon2025-12-103-5/+4
|
* elf: initialize str hashtable to a nicer sizelemon2025-12-091-0/+1
|
* mem: fix pmap_init and change hashmap load factors to 75%lemon2025-12-092-5/+4
|
* lex: make some hashtables resizablelemon2025-12-092-36/+73
| | | | Was hiting the fixed limits trying to preprocess sqlite3amalgamation
* rega: change assert for spilled callee. it's ok if nspill==1lemon2025-12-091-1/+1
|
* c: fix some static initialzierslemon2025-12-081-1/+3
|
* eval: &*x address constantslemon2025-12-081-0/+4
|
* c: fix more declaration parsing bugslemon2025-12-081-7/+17
|
* driver: update helplemon2025-12-081-14/+32
|
* driver: use fexecve for -runlemon2025-12-081-17/+18
|
* 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
|