diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_target.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/lj_target.h b/src/lj_target.h index 33feb17c..a80cc027 100644 --- a/src/lj_target.h +++ b/src/lj_target.h | |||
@@ -50,21 +50,30 @@ typedef uint32_t RegSP; | |||
50 | 50 | ||
51 | /* -- Register sets ------------------------------------------------------- */ | 51 | /* -- Register sets ------------------------------------------------------- */ |
52 | 52 | ||
53 | /* Bitset for registers. 32 registers suffice right now. | 53 | /* Bitset for registers. 32 registers suffice for most architectures. |
54 | ** Note that one set holds bits for both GPRs and FPRs. | 54 | ** Note that one set holds bits for both GPRs and FPRs. |
55 | */ | 55 | */ |
56 | #if LJ_TARGET_PPC | ||
57 | typedef uint64_t RegSet; | ||
58 | #else | ||
56 | typedef uint32_t RegSet; | 59 | typedef uint32_t RegSet; |
60 | #endif | ||
57 | 61 | ||
58 | #define RID2RSET(r) (((RegSet)1) << (r)) | 62 | #define RID2RSET(r) (((RegSet)1) << (r)) |
59 | #define RSET_EMPTY 0 | 63 | #define RSET_EMPTY ((RegSet)0) |
60 | #define RSET_RANGE(lo, hi) ((RID2RSET((hi)-(lo))-1) << (lo)) | 64 | #define RSET_RANGE(lo, hi) ((RID2RSET((hi)-(lo))-1) << (lo)) |
61 | 65 | ||
62 | #define rset_test(rs, r) (((rs) >> (r)) & 1) | 66 | #define rset_test(rs, r) (((rs) >> (r)) & 1) |
63 | #define rset_set(rs, r) (rs |= RID2RSET(r)) | 67 | #define rset_set(rs, r) (rs |= RID2RSET(r)) |
64 | #define rset_clear(rs, r) (rs &= ~RID2RSET(r)) | 68 | #define rset_clear(rs, r) (rs &= ~RID2RSET(r)) |
65 | #define rset_exclude(rs, r) (rs & ~RID2RSET(r)) | 69 | #define rset_exclude(rs, r) (rs & ~RID2RSET(r)) |
70 | #if LJ_TARGET_PPC | ||
71 | #define rset_picktop(rs) ((Reg)(__builtin_clzll(rs)^63)) | ||
72 | #define rset_pickbot(rs) ((Reg)__builtin_ctzll(rs)) | ||
73 | #else | ||
66 | #define rset_picktop(rs) ((Reg)lj_fls(rs)) | 74 | #define rset_picktop(rs) ((Reg)lj_fls(rs)) |
67 | #define rset_pickbot(rs) ((Reg)lj_ffs(rs)) | 75 | #define rset_pickbot(rs) ((Reg)lj_ffs(rs)) |
76 | #endif | ||
68 | 77 | ||
69 | /* -- Register allocation cost -------------------------------------------- */ | 78 | /* -- Register allocation cost -------------------------------------------- */ |
70 | 79 | ||
@@ -127,6 +136,8 @@ typedef uint32_t RegCost; | |||
127 | #include "lj_target_x86.h" | 136 | #include "lj_target_x86.h" |
128 | #elif LJ_TARGET_ARM | 137 | #elif LJ_TARGET_ARM |
129 | #include "lj_target_arm.h" | 138 | #include "lj_target_arm.h" |
139 | #elif LJ_TARGET_PPC | ||
140 | #include "lj_target_ppc.h" | ||
130 | #else | 141 | #else |
131 | #error "Missing include for target CPU" | 142 | #error "Missing include for target CPU" |
132 | #endif | 143 | #endif |