diff options
Diffstat (limited to 'ir/ir.h')
| -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; |