diff options
| author | 2025-11-16 09:19:14 +0100 | |
|---|---|---|
| committer | 2025-11-16 09:19:14 +0100 | |
| commit | dfda5c86b24284aca09da6055ef721ff7a18cd7b (patch) | |
| tree | 6a3f563d639f8ec380c6b5040593087f3b9516df /ir | |
| parent | 9abe27f6712852bd6a98d04baeca6d81470cc61c (diff) | |
factor type stuff into type.h
Diffstat (limited to 'ir')
| -rw-r--r-- | ir/ir.h | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -1,4 +1,5 @@ #include "../common.h" +#include "../type.h" enum irclass { KXXX, @@ -137,6 +138,19 @@ enum { USERJUMP = 0xFFFF }; struct use { struct block *blk; ushort u; }; enum { MAXREGS = 64 }; +/** register set **/ +typedef uvlong regset; +#define rsset(pS, r) (*(pS) |= 1ull << (r)) +#define rsclr(pS, r) (*(pS) &=~ (1ull << (r))) +#define rstest(S, r) ((S) >> (r) & 1) +static inline bool +rsiter(int *i, uvlong rs) +{ + uvlong mask = -(1ull << *i); + if ((rs & mask) == 0) return 0; + *i = lowestsetbit(rs & mask); + return 1; +} struct function { struct arena **arena; |