aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir/intrin.c
Commit message (Collapse)AuthorAgeFilesLines
* backend: unify pass memory allocation strategieslemon2025-12-201-1/+1
| | | | | | It was all over the place for temporary data structures used by individual passes. Now there is an arena specifically for that, which is nicer.
* create distinct interned string typelemon2025-12-151-1/+1
| | | | | | | | | | | | | | 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.lemon2025-12-131-1/+1
| | | | | | | | 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.
* rename arraylength macro -> countoflemon2025-12-111-3/+3
|
* change op names to match 285063eba44lemon2025-11-211-2/+2
|
* rename IR classes to reflect bitsizelemon2025-11-211-1/+1
|
* Organize source files into directorieslemon2025-10-191-0/+77