| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | emit: turn ADD -imm into SUB imm | 2025-12-12 | 1 | -1/+5 | |
| | | |||||
| * | isel: fix bug where sub turned into add, but inplace didn't reflect | 2025-12-12 | 1 | -2/+2 | |
| | | |||||
| * | amd64/emit: change instr desc table a little | 2025-12-12 | 1 | -157/+158 | |
| | | |||||
| * | rename arraylength macro -> countof | 2025-12-11 | 3 | -12/+12 | |
| | | |||||
| * | parallel move; implement reg<->stack swp | 2025-12-10 | 1 | -2/+3 | |
| | | |||||
| * | misc fixes | 2025-12-10 | 1 | -3/+2 | |
| | | |||||
| * | amd64: fix wrong condition code being used for float gth | 2025-12-07 | 1 | -1/+1 | |
| | | | | | ughh | ||||
| * | amd64: use XORPS for floating point negation | 2025-12-07 | 2 | -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 | 2025-12-06 | 1 | -3/+7 | |
| | | | | | | | | | | 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) | 2025-12-06 | 1 | -1/+0 | |
| | | |||||
| * | amd64: fix pseudo-push/pop float reg | 2025-12-05 | 1 | -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 | 2025-12-05 | 1 | -0/+1 | |
| | | |||||
| * | amd64: handle unoredered float cmps | 2025-12-05 | 1 | -2/+30 | |
| | | |||||
| * | isel: fix immediate of flipped sub | 2025-12-04 | 1 | -0/+1 | |
| | | |||||
| * | test/11-abi | 2025-12-02 | 1 | -6/+9 | |
| | | |||||
| * | amd64/isel: fix addressing index shift being possibly too large to encode (duh) | 2025-11-29 | 2 | -1/+2 | |
| | | |||||
| * | isel: fix branch arg | 2025-11-27 | 1 | -0/+2 | |
| | | |||||
| * | abi/isel: aggregate args in stack wip | 2025-11-27 | 1 | -6/+11 | |
| | | |||||
| * | amd64/emit: I64 consts and fp push/pop | 2025-11-24 | 1 | -7/+22 | |
| | | |||||
| * | fix regression w/ store instr + memory immediate | 2025-11-24 | 1 | -11/+13 | |
| | | |||||
| * | isel: loadstoreaddr don't fuseaddr as much | 2025-11-24 | 1 | -3/+5 | |
| | | |||||
| * | amd64/emit: fix (partially) float comparisonsd | 2025-11-23 | 1 | -6/+10 | |
| | | |||||
| * | amd64: va_arg for small aggregates | 2025-11-23 | 1 | -2/+8 | |
| | | |||||
| * | amd64/emit: this rbpoff approach is kinda broken.. | 2025-11-23 | 1 | -1/+1 | |
| | | |||||
| * | implement float varargs, and some other fixes | 2025-11-23 | 2 | -46/+51 | |
| | | |||||
| * | amd64/isel: indirect call arg must be memaddr | 2025-11-22 | 1 | -2/+7 | |
| | | |||||
| * | make sure indirect function call pointer does not end up in clobber reg | 2025-11-22 | 1 | -0/+5 | |
| | | |||||
| * | sysv: nested scalar classification of struct shouldn't return KPTR, used to ↵ | 2025-11-22 | 1 | -1/+1 | |
| | | | | | indicate aggregate in the stack | ||||
| * | amd64/emit: fix REX-requiring 8-bit GPR encoding checking wrong reg | 2025-11-22 | 1 | -2/+2 | |
| | | |||||
| * | ir: barebones IR passes checked contracts | 2025-11-21 | 1 | -0/+2 | |
| | | |||||
| * | remove umul | 2025-11-21 | 2 | -4/+2 | |
| | | |||||
| * | change op names to match 285063eba44 | 2025-11-21 | 3 | -48/+48 | |
| | | |||||
| * | rename IR classes to reflect bitsize | 2025-11-21 | 3 | -47/+47 | |
| | | |||||
| * | isel: lower allocas a different way, such that stk address gets materialized ↵ | 2025-11-20 | 2 | -27/+62 | |
| | | | | | when necesary | ||||
| * | ir: for easier debugging, keep ctype in dats, print as literal when possible | 2025-11-20 | 1 | -3/+7 | |
| | | |||||
| * | debug output to stdout | 2025-11-19 | 1 | -1/+1 | |
| | | |||||
| * | ir: 'trap' jump; c: __builtin_trap; lex: __has_builtin | 2025-11-15 | 1 | -0/+2 | |
| | | |||||
| * | isel: don't incorrectly clamp constant lhs of shift operation | 2025-11-15 | 1 | -4/+4 | |
| | | |||||
| * | emit: stack alignment edgecases | 2025-11-15 | 1 | -5/+9 | |
| | | |||||
| * | isel: fold arith | 2025-11-14 | 1 | -1/+21 | |
| | | |||||
| * | sysv: document vaargs stack layout stuff | 2025-11-14 | 1 | -3/+29 | |
| | | |||||
| * | preeliminary va_list support | 2025-11-14 | 3 | -11/+186 | |
| | | |||||
| * | amd64/isel: fold Oext with immediates | 2025-11-12 | 1 | -0/+8 | |
| | | |||||
| * | implement argument passing in stack | 2025-11-12 | 1 | -6/+18 | |
| | | |||||
| * | amd64: fix positive RBP off (stack params); address encoding errata | 2025-11-12 | 1 | -2/+2 | |
| | | |||||
| * | fixup! amd64: get rid of xinc/xdec. handle those at emit stage | 2025-11-09 | 1 | -1/+1 | |
| | | |||||
| * | amd64/isel: make `sub imm` work for address fusing | 2025-11-09 | 1 | -2/+8 | |
| | | |||||
| * | amd64: get rid of xinc/xdec. handle those at emit stage | 2025-11-09 | 2 | -26/+7 | |
| | | |||||
| * | amd64: errata with unsigned greater than or equal (should be JAE) | 2025-11-06 | 1 | -1/+1 | |
| | | |||||
| * | amd64: fix aggregate abi stuff;; ir: fold, peephole optimizing constructors | 2025-11-05 | 2 | -19/+28 | |
| | | |||||