| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | backend: general simplification pass skeleton | 2025-12-20 | 1 | -0/+4 | |
| | | |||||
| * | ir: move some filluses() to ir.c, rename optmem.c -> mem2reg.c | 2025-12-19 | 1 | -2/+2 | |
| | | |||||
| * | ir: move cls2load to interface | 2025-12-18 | 1 | -0/+1 | |
| | | | | | | There's plenty of code duplication like this around I'm looking to reduce. | ||||
| * | create distinct interned string type | 2025-12-15 | 1 | -6/+6 | |
| | | | | | | | | | | | | | | | Interned strings are used pervasively, so it's a good idea to add a layer of type safety to differentiate them from general cstrs and avoid potential bugs from comparing non-interned and interned strings. Not that that's happened so far that I can remember, but it could. I'm 90% sure it's legal to alias `struct {char c;}` pointers with `char` pointers. This specific typedef gives type safety but with a simple one-way `internstr -> const char *` typecast (with `&istr->c`). Converting the other way around is more intentional: a straight up cast `(internstr)cstr` which sticks out as unchecked and probably wrong, or calling the intern(cstr) function, which is the right way. | ||||
| * | fix position independent loads of function symbols. | 2025-12-13 | 1 | -2/+2 | |
| | | | | | | | | | For `extern int x[1];`, can use PCREL32 for &x. But for `extern int x(int)`, must use GOTREL, when not being called directly (that's PLT). Therefore the type of an external symbol (actually just whether it denotes a function) matters when deciding what kind of relocation to emit, so keep that information. | ||||
| * | ir: bump MAXINSTR | 2025-12-10 | 1 | -1/+1 | |
| | | |||||
| * | abi: fix aggregate passed by regs 2nd reg offset | 2025-12-06 | 1 | -3/+6 | |
| | | | | | | | | | | 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 | -2/+0 | |
| | | |||||
| * | ir.h: tweak mkintrin() definition to work with tinycc | 2025-11-24 | 1 | -1/+1 | |
| | | |||||
| * | c: check actual reachability for non-void func may not return value | 2025-11-23 | 1 | -0/+1 | |
| | | |||||
| * | ir: implement dominator tree computation | 2025-11-21 | 1 | -0/+2 | |
| | | |||||
| * | ir: barebones IR passes checked contracts | 2025-11-21 | 1 | -0/+8 | |
| | | |||||
| * | change op names to match 285063eba44 | 2025-11-21 | 1 | -2/+2 | |
| | | |||||
| * | rename IR classes to reflect bitsize | 2025-11-21 | 1 | -7/+7 | |
| | | |||||
| * | isel: lower allocas a different way, such that stk address gets materialized ↵ | 2025-11-20 | 1 | -1/+1 | |
| | | | | | when necesary | ||||
| * | ir: for easier debugging, keep ctype in dats, print as literal when possible | 2025-11-20 | 1 | -1/+2 | |
| | | |||||
| * | factor type stuff into type.h | 2025-11-16 | 1 | -0/+14 | |
| | | |||||
| * | ir: 'trap' jump; c: __builtin_trap; lex: __has_builtin | 2025-11-15 | 1 | -1/+2 | |
| | | |||||
| * | preeliminary va_list support | 2025-11-14 | 1 | -3/+6 | |
| | | |||||
| * | implement argument passing in stack | 2025-11-12 | 1 | -0/+1 | |
| | | |||||
| * | fixup! amd64: get rid of xinc/xdec. handle those at emit stage | 2025-11-09 | 1 | -0/+1 | |
| | | |||||
| * | amd64: fix aggregate abi stuff;; ir: fold, peephole optimizing constructors | 2025-11-05 | 1 | -2/+10 | |
| | | |||||
| * | ir bugfixes | 2025-10-23 | 1 | -0/+1 | |
| | | |||||
| * | Organize source files into directories | 2025-10-19 | 1 | -0/+280 | |