aboutsummaryrefslogtreecommitdiff
path: root/src/lj_target.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_target.h15
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
57typedef uint64_t RegSet;
58#else
56typedef uint32_t RegSet; 59typedef 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