mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 13:30:26 +02:00
Simplify register representation again
There's only one flag, "callee-save". Also the regno range is limited to 0-63 inclusive, to allow for cheap register sets as uint64_t values.
This commit is contained in:
parent
af4e0422ae
commit
2602f17fb4
10 changed files with 304 additions and 292 deletions
52
lightening.h
52
lightening.h
|
@ -37,18 +37,51 @@ typedef float jit_float32_t;
|
||||||
typedef double jit_float64_t;
|
typedef double jit_float64_t;
|
||||||
typedef void* jit_pointer_t;
|
typedef void* jit_pointer_t;
|
||||||
typedef int jit_bool_t;
|
typedef int jit_bool_t;
|
||||||
typedef struct jit_gpr { int bits; } jit_gpr_t;
|
|
||||||
typedef struct jit_fpr { int bits; } jit_fpr_t;
|
|
||||||
|
|
||||||
typedef void* jit_addr_t;
|
typedef void* jit_addr_t;
|
||||||
typedef ptrdiff_t jit_off_t;
|
typedef ptrdiff_t jit_off_t;
|
||||||
typedef intptr_t jit_imm_t;
|
typedef intptr_t jit_imm_t;
|
||||||
typedef uintptr_t jit_uimm_t;
|
typedef uintptr_t jit_uimm_t;
|
||||||
|
|
||||||
#define JIT_GPR(bits) ((jit_gpr_t) { bits })
|
typedef struct jit_gpr { uint8_t bits; } jit_gpr_t;
|
||||||
#define JIT_FPR(bits) ((jit_fpr_t) { bits })
|
typedef struct jit_fpr { uint8_t bits; } jit_fpr_t;
|
||||||
static inline jit_gpr_t jit_gpr(int bits) { return JIT_GPR(bits); }
|
|
||||||
static inline jit_fpr_t jit_fpr(int bits) { return JIT_FPR(bits); }
|
enum jit_register_flags
|
||||||
|
{
|
||||||
|
JIT_REGISTER_CALLEE_SAVE = 0x40
|
||||||
|
};
|
||||||
|
|
||||||
|
// Precondition: regno between 0 and 63, inclusive.
|
||||||
|
#define JIT_GPR(regno) ((jit_gpr_t) { regno })
|
||||||
|
#define JIT_FPR(regno) ((jit_fpr_t) { regno })
|
||||||
|
#define JIT_CALLEE_SAVE_GPR(regno) \
|
||||||
|
((jit_gpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
|
||||||
|
#define JIT_CALLEE_SAVE_FPR(regno) \
|
||||||
|
((jit_fpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
|
||||||
|
|
||||||
|
static inline jit_bool_t
|
||||||
|
jit_gpr_is_callee_save (jit_gpr_t reg)
|
||||||
|
{
|
||||||
|
return reg.bits & JIT_REGISTER_CALLEE_SAVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline jit_bool_t
|
||||||
|
jit_fpr_is_callee_save (jit_fpr_t reg)
|
||||||
|
{
|
||||||
|
return reg.bits & JIT_REGISTER_CALLEE_SAVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint8_t
|
||||||
|
jit_gpr_regno (jit_gpr_t reg)
|
||||||
|
{
|
||||||
|
return reg.bits & 0x3f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint8_t
|
||||||
|
jit_fpr_regno (jit_fpr_t reg)
|
||||||
|
{
|
||||||
|
return reg.bits & 0x3f;
|
||||||
|
}
|
||||||
|
|
||||||
enum jit_reloc_kind
|
enum jit_reloc_kind
|
||||||
{
|
{
|
||||||
|
@ -95,10 +128,6 @@ typedef struct jit_reloc
|
||||||
# include "lightening/alpha.h"
|
# include "lightening/alpha.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define jit_class_sav 0x10000000 /* callee save */
|
|
||||||
#define jit_class(bits) ((bits) & 0xffff0000)
|
|
||||||
#define jit_regno(bits) ((bits) & 0x00007fff)
|
|
||||||
|
|
||||||
static inline jit_bool_t
|
static inline jit_bool_t
|
||||||
jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
|
jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
|
||||||
{
|
{
|
||||||
|
@ -224,9 +253,6 @@ JIT_API jit_pointer_t jit_address(jit_state_t*);
|
||||||
JIT_API void jit_patch_here(jit_state_t*, jit_reloc_t);
|
JIT_API void jit_patch_here(jit_state_t*, jit_reloc_t);
|
||||||
JIT_API void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t);
|
JIT_API void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t);
|
||||||
|
|
||||||
JIT_API jit_bool_t jit_gpr_is_callee_save (jit_state_t*, jit_gpr_t);
|
|
||||||
JIT_API jit_bool_t jit_fpr_is_callee_save (jit_state_t*, jit_fpr_t);
|
|
||||||
|
|
||||||
JIT_API void jit_move_operands (jit_state_t *_jit, jit_operand_t *dst,
|
JIT_API void jit_move_operands (jit_state_t *_jit, jit_operand_t *dst,
|
||||||
jit_operand_t *src, size_t argc);
|
jit_operand_t *src, size_t argc);
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _NOREG 0xffff
|
#define _NOREG 0xffff
|
||||||
#define rc(value) jit_class_##value
|
|
||||||
#define rn(reg) jit_regno(reg.bits)
|
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
# define JIT_RET _RAX
|
# define JIT_RET _RAX
|
||||||
|
@ -373,18 +371,6 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_bool_t
|
|
||||||
jit_gpr_is_callee_save (jit_state_t *_jit, jit_gpr_t reg)
|
|
||||||
{
|
|
||||||
return jit_class(reg.bits) & jit_class_sav;
|
|
||||||
}
|
|
||||||
|
|
||||||
jit_bool_t
|
|
||||||
jit_fpr_is_callee_save (jit_state_t *_jit, jit_fpr_t reg)
|
|
||||||
{
|
|
||||||
return jit_class(reg.bits) & jit_class_sav;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
# include "x86.c"
|
# include "x86.c"
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
|
@ -469,8 +455,8 @@ jit_fpr_is_callee_save (jit_state_t *_jit, jit_fpr_t reg)
|
||||||
#define JIT_IMPL__pG__(stem) JIT_IMPL_2(stem, void, pointer, gpr)
|
#define JIT_IMPL__pG__(stem) JIT_IMPL_2(stem, void, pointer, gpr)
|
||||||
#define JIT_IMPL__p___(stem) JIT_IMPL_1(stem, void, pointer)
|
#define JIT_IMPL__p___(stem) JIT_IMPL_1(stem, void, pointer)
|
||||||
|
|
||||||
#define unwrap_gpr(r) rn(r)
|
#define unwrap_gpr(r) jit_gpr_regno(r)
|
||||||
#define unwrap_fpr(r) rn(r)
|
#define unwrap_fpr(r) jit_fpr_regno(r)
|
||||||
#define unwrap_imm(i) i
|
#define unwrap_imm(i) i
|
||||||
#define unwrap_uimm(u) u
|
#define unwrap_uimm(u) u
|
||||||
#define unwrap_off(o) o
|
#define unwrap_off(o) o
|
||||||
|
|
|
@ -505,8 +505,8 @@ alui(jit_state_t *_jit, int32_t code, int32_t r0, jit_word_t i0)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
alur(_jit, code, r0, rn(reg));
|
alur(_jit, code, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -710,8 +710,8 @@ addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
iaddr(_jit, r0, r1);
|
iaddr(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
iaddr(_jit, r0, rn(reg));
|
iaddr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -736,8 +736,8 @@ addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
}
|
}
|
||||||
else if (r0 == r1) {
|
else if (r0 == r1) {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
iaddr(_jit, r0, rn(reg));
|
iaddr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movi(_jit, r0, i0);
|
movi(_jit, r0, i0);
|
||||||
|
@ -765,8 +765,8 @@ addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
}
|
}
|
||||||
else if (r0 == r1) {
|
else if (r0 == r1) {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
iaddxr(_jit, r0, rn(reg));
|
iaddxr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movi(_jit, r0, i0);
|
movi(_jit, r0, i0);
|
||||||
|
@ -810,8 +810,8 @@ subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
iaddr(_jit, r0, r1);
|
iaddr(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
isubr(_jit, r0, rn(reg));
|
isubr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -821,9 +821,9 @@ subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
if (r0 == r2 && r0 != r1) {
|
if (r0 == r2 && r0 != r1) {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r0);
|
movr(_jit, jit_gpr_regno(reg), r0);
|
||||||
movr(_jit, r0, r1);
|
movr(_jit, r0, r1);
|
||||||
isubr(_jit, r0, rn(reg));
|
isubr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movr(_jit, r0, r1);
|
movr(_jit, r0, r1);
|
||||||
|
@ -839,8 +839,8 @@ subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
isubi(_jit, r0, i0);
|
isubi(_jit, r0, i0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
isubr(_jit, r0, rn(reg));
|
isubr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -850,9 +850,9 @@ subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
if (r0 == r2 && r0 != r1) {
|
if (r0 == r2 && r0 != r1) {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r0);
|
movr(_jit, jit_gpr_regno(reg), r0);
|
||||||
movr(_jit, r0, r1);
|
movr(_jit, r0, r1);
|
||||||
isubxr(_jit, r0, rn(reg));
|
isubxr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movr(_jit, r0, r1);
|
movr(_jit, r0, r1);
|
||||||
|
@ -868,8 +868,8 @@ subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
isubxi(_jit, r0, i0);
|
isubxi(_jit, r0, i0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
imovi(_jit, rn(reg), i0);
|
imovi(_jit, jit_gpr_regno(reg), i0);
|
||||||
isubxr(_jit, r0, rn(reg));
|
isubxr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -888,11 +888,11 @@ rotshr(jit_state_t *_jit, int32_t code,
|
||||||
{
|
{
|
||||||
if (r0 == _RCX_REGNO) {
|
if (r0 == _RCX_REGNO) {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r1);
|
movr(_jit, jit_gpr_regno(reg), r1);
|
||||||
if (r2 != _RCX_REGNO)
|
if (r2 != _RCX_REGNO)
|
||||||
movr(_jit, _RCX_REGNO, r2);
|
movr(_jit, _RCX_REGNO, r2);
|
||||||
irotshr(_jit, code, rn(reg));
|
irotshr(_jit, code, jit_gpr_regno(reg));
|
||||||
movr(_jit, _RCX_REGNO, rn(reg));
|
movr(_jit, _RCX_REGNO, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
} else if (r2 != _RCX_REGNO) {
|
} else if (r2 != _RCX_REGNO) {
|
||||||
/* Already know that R0 isn't RCX. */
|
/* Already know that R0 isn't RCX. */
|
||||||
|
@ -1005,8 +1005,8 @@ imuli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
imulr(_jit, r0, rn(reg));
|
imulr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1133,11 +1133,11 @@ iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1,
|
||||||
ixorr(_jit, r1, r1);
|
ixorr(_jit, r1, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
if (sign)
|
if (sign)
|
||||||
qmulr(_jit, r0, r1, r2, rn(reg));
|
qmulr(_jit, r0, r1, r2, jit_gpr_regno(reg));
|
||||||
else
|
else
|
||||||
qmulr_u(_jit, r0, r1, r2, rn(reg));
|
qmulr_u(_jit, r0, r1, r2, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1173,8 +1173,8 @@ divremr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2,
|
||||||
int tmp_divisor = 0;
|
int tmp_divisor = 0;
|
||||||
if (r2 == _RAX_REGNO || r2 == _RDX_REGNO) {
|
if (r2 == _RAX_REGNO || r2 == _RDX_REGNO) {
|
||||||
jit_gpr_t tmp = get_temp_gpr(_jit);
|
jit_gpr_t tmp = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(tmp), r2);
|
movr(_jit, jit_gpr_regno(tmp), r2);
|
||||||
r2 = rn(tmp);
|
r2 = jit_gpr_regno(tmp);
|
||||||
tmp_divisor = 1;
|
tmp_divisor = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1207,9 +1207,9 @@ divremi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0,
|
||||||
jit_bool_t sign, jit_bool_t divide)
|
jit_bool_t sign, jit_bool_t divide)
|
||||||
{
|
{
|
||||||
jit_gpr_t tmp = get_temp_gpr(_jit);
|
jit_gpr_t tmp = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(tmp), i0);
|
movi(_jit, jit_gpr_regno(tmp), i0);
|
||||||
|
|
||||||
divremr(_jit, r0, r1, rn(tmp), sign, divide);
|
divremr(_jit, r0, r1, jit_gpr_regno(tmp), sign, divide);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1273,8 +1273,8 @@ iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1,
|
||||||
int tmp_divisor = 0;
|
int tmp_divisor = 0;
|
||||||
if (r3 == _RAX_REGNO || r3 == _RDX_REGNO) {
|
if (r3 == _RAX_REGNO || r3 == _RDX_REGNO) {
|
||||||
jit_gpr_t tmp = get_temp_gpr(_jit);
|
jit_gpr_t tmp = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(tmp), r3);
|
movr(_jit, jit_gpr_regno(tmp), r3);
|
||||||
r3 = rn(tmp);
|
r3 = jit_gpr_regno(tmp);
|
||||||
tmp_divisor = 1;
|
tmp_divisor = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1324,11 +1324,11 @@ iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1,
|
||||||
int32_t r2, jit_word_t i0, jit_bool_t sign)
|
int32_t r2, jit_word_t i0, jit_bool_t sign)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
if (sign)
|
if (sign)
|
||||||
qdivr(_jit, r0, r1, r2, rn(reg));
|
qdivr(_jit, r0, r1, r2, jit_gpr_regno(reg));
|
||||||
else
|
else
|
||||||
qdivr_u(_jit, r0, r1, r2, rn(reg));
|
qdivr_u(_jit, r0, r1, r2, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1379,8 +1379,8 @@ andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
iandi(_jit, r0, i0);
|
iandi(_jit, r0, i0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
iandr(_jit, r0, rn(reg));
|
iandr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1420,8 +1420,8 @@ ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
iorr(_jit, r0, r1);
|
iorr(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
iorr(_jit, r0, rn(reg));
|
iorr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1457,8 +1457,8 @@ xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
ixorr(_jit, r0, r1);
|
ixorr(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ixorr(_jit, r0, rn(reg));
|
ixorr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1476,10 +1476,10 @@ cr(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1, int32_t r2)
|
||||||
cc(_jit, code, r0);
|
cc(_jit, code, r0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
ixorr(_jit, rn(reg), rn(reg));
|
ixorr(_jit, jit_gpr_regno(reg), jit_gpr_regno(reg));
|
||||||
icmpr(_jit, r1, r2);
|
icmpr(_jit, r1, r2);
|
||||||
cc(_jit, code, rn(reg));
|
cc(_jit, code, jit_gpr_regno(reg));
|
||||||
movr(_jit, r0, rn(reg));
|
movr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1497,10 +1497,10 @@ ci(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
cc(_jit, code, r0);
|
cc(_jit, code, r0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
ixorr(_jit, rn(reg), rn(reg));
|
ixorr(_jit, jit_gpr_regno(reg), jit_gpr_regno(reg));
|
||||||
icmpi(_jit, r1, i0);
|
icmpi(_jit, r1, i0);
|
||||||
cc(_jit, code, rn(reg));
|
cc(_jit, code, jit_gpr_regno(reg));
|
||||||
movr(_jit, r0, rn(reg));
|
movr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1518,10 +1518,10 @@ ci0(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1)
|
||||||
cc(_jit, code, r0);
|
cc(_jit, code, r0);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
ixorr(_jit, rn(reg), rn(reg));
|
ixorr(_jit, jit_gpr_regno(reg), jit_gpr_regno(reg));
|
||||||
testr(_jit, r1, r1);
|
testr(_jit, r1, r1);
|
||||||
cc(_jit, code, rn(reg));
|
cc(_jit, code, jit_gpr_regno(reg));
|
||||||
movr(_jit, r0, rn(reg));
|
movr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1533,8 +1533,8 @@ extr_c(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
movcr(_jit, r0, r1);
|
movcr(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r1);
|
movr(_jit, jit_gpr_regno(reg), r1);
|
||||||
movcr(_jit, r0, rn(reg));
|
movcr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1546,8 +1546,8 @@ extr_uc(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
movcr_u(_jit, r0, r1);
|
movcr_u(_jit, r0, r1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r1);
|
movr(_jit, jit_gpr_regno(reg), r1);
|
||||||
movcr_u(_jit, r0, rn(reg));
|
movcr_u(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1627,8 +1627,8 @@ ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_c(_jit, r0, rn(reg));
|
ldr_c(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1652,8 +1652,8 @@ ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_uc(_jit, r0, rn(reg));
|
ldr_uc(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1677,8 +1677,8 @@ ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_s(_jit, r0, rn(reg));
|
ldr_s(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1702,8 +1702,8 @@ ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_us(_jit, r0, rn(reg));
|
ldr_us(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1734,8 +1734,8 @@ ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_i(_jit, r0, rn(reg));
|
ldr_i(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1759,8 +1759,8 @@ ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_ui(_jit, r0, rn(reg));
|
ldr_ui(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1783,8 +1783,8 @@ ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_l(_jit, r0, rn(reg));
|
ldr_l(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1815,8 +1815,8 @@ ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_c(_jit, r0, r1, rn(reg));
|
ldxr_c(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1845,8 +1845,8 @@ ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_uc(_jit, r0, r1, rn(reg));
|
ldxr_uc(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1875,8 +1875,8 @@ ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_s(_jit, r0, r1, rn(reg));
|
ldxr_s(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1905,8 +1905,8 @@ ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_us(_jit, r0, r1, rn(reg));
|
ldxr_us(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1937,8 +1937,8 @@ ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_i(_jit, r0, r1, rn(reg));
|
ldxr_i(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1968,8 +1968,8 @@ ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_ui(_jit, r0, r1, rn(reg));
|
ldxr_ui(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1992,8 +1992,8 @@ ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
rx(_jit, r0, i0, r1, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_l(_jit, r0, r1, rn(reg));
|
ldxr_l(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2009,10 +2009,10 @@ str_c(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
rx(_jit, r1, 0, r0, _NOREG, _SCL1);
|
rx(_jit, r1, 0, r0, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r1);
|
movr(_jit, jit_gpr_regno(reg), r1);
|
||||||
rex(_jit, 0, 0, rn(reg), _NOREG, r0);
|
rex(_jit, 0, 0, jit_gpr_regno(reg), _NOREG, r0);
|
||||||
ic(_jit, 0x88);
|
ic(_jit, 0x88);
|
||||||
rx(_jit, rn(reg), 0, r0, _NOREG, _SCL1);
|
rx(_jit, jit_gpr_regno(reg), 0, r0, _NOREG, _SCL1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2027,16 +2027,16 @@ sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r0);
|
movr(_jit, jit_gpr_regno(reg), r0);
|
||||||
rex(_jit, 0, 0, rn(reg), _NOREG, _NOREG);
|
rex(_jit, 0, 0, jit_gpr_regno(reg), _NOREG, _NOREG);
|
||||||
ic(_jit, 0x88);
|
ic(_jit, 0x88);
|
||||||
rx(_jit, rn(reg), i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, jit_gpr_regno(reg), i0, _NOREG, _NOREG, _SCL1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_c(_jit, rn(reg), r0);
|
str_c(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2060,8 +2060,8 @@ sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_s(_jit, rn(reg), r0);
|
str_s(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2083,8 +2083,8 @@ sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_i(_jit, rn(reg), r0);
|
str_i(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2107,8 +2107,8 @@ sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_l(_jit, rn(reg), r0);
|
str_l(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2119,8 +2119,8 @@ stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r0, r1);
|
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
str_c(_jit, rn(reg), r2);
|
str_c(_jit, jit_gpr_regno(reg), r2);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
if (reg8_p(r2)) {
|
if (reg8_p(r2)) {
|
||||||
|
@ -2129,10 +2129,10 @@ stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
rx(_jit, r2, 0, r0, r1, _SCL1);
|
rx(_jit, r2, 0, r0, r1, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r2);
|
movr(_jit, jit_gpr_regno(reg), r2);
|
||||||
rex(_jit, 0, 0, rn(reg), r1, r0);
|
rex(_jit, 0, 0, jit_gpr_regno(reg), r1, r0);
|
||||||
ic(_jit, 0x88);
|
ic(_jit, 0x88);
|
||||||
rx(_jit, rn(reg), 0, r0, r1, _SCL1);
|
rx(_jit, jit_gpr_regno(reg), 0, r0, r1, _SCL1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2148,16 +2148,16 @@ stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movr(_jit, rn(reg), r1);
|
movr(_jit, jit_gpr_regno(reg), r1);
|
||||||
rex(_jit, 0, 0, rn(reg), _NOREG, r0);
|
rex(_jit, 0, 0, jit_gpr_regno(reg), _NOREG, r0);
|
||||||
ic(_jit, 0x88);
|
ic(_jit, 0x88);
|
||||||
rx(_jit, rn(reg), i0, r0, _NOREG, _SCL1);
|
rx(_jit, jit_gpr_regno(reg), i0, r0, _NOREG, _SCL1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_c(_jit, rn(reg), r0, r1);
|
stxr_c(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2167,8 +2167,8 @@ stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r0, r1);
|
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
str_s(_jit, rn(reg), r2);
|
str_s(_jit, jit_gpr_regno(reg), r2);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
ic(_jit, 0x66);
|
ic(_jit, 0x66);
|
||||||
|
@ -2188,8 +2188,8 @@ stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_s(_jit, rn(reg), r0, r1);
|
stxr_s(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2199,8 +2199,8 @@ stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r0, r1);
|
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
str_i(rn(reg), r2);
|
str_i(jit_gpr_regno(reg), r2);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
rex(_jit, 0, 0, r2, r1, r0);
|
rex(_jit, 0, 0, r2, r1, r0);
|
||||||
|
@ -2218,8 +2218,8 @@ stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_i(_jit, rn(reg), r0, r1);
|
stxr_i(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2242,8 +2242,8 @@ stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
rx(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_l(_jit, rn(reg), r0, r1);
|
stxr_l(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2439,8 +2439,8 @@ bmsi(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
testi(_jit, r0, i1);
|
testi(_jit, r0, i1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
testr(_jit, r0, rn(reg));
|
testr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
return jnz(_jit);
|
return jnz(_jit);
|
||||||
|
@ -2460,8 +2460,8 @@ bmci(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
testi(_jit, r0, i1);
|
testi(_jit, r0, i1);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
testr(_jit, r0, rn(reg));
|
testr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
return jz(_jit);
|
return jz(_jit);
|
||||||
|
@ -2482,9 +2482,9 @@ boaddi(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jo(_jit);
|
return jo(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return boaddr(_jit, r0, rn(reg));
|
return boaddr(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2502,9 +2502,9 @@ boaddi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jc(_jit);
|
return jc(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return boaddr_u(_jit, r0, rn(reg));
|
return boaddr_u(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2522,9 +2522,9 @@ bxaddi(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jno(_jit);
|
return jno(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bxaddr(_jit, r0, rn(reg));
|
return bxaddr(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2542,9 +2542,9 @@ bxaddi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jnc(_jit);
|
return jnc(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bxaddr_u(_jit, r0, rn(reg));
|
return bxaddr_u(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2562,9 +2562,9 @@ bosubi(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jo(_jit);
|
return jo(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bosubr(_jit, r0, rn(reg));
|
return bosubr(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2582,9 +2582,9 @@ bosubi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jc(_jit);
|
return jc(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bosubr_u(_jit, r0, rn(reg));
|
return bosubr_u(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2602,9 +2602,9 @@ bxsubi(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jno(_jit);
|
return jno(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bxsubr(_jit, r0, rn(reg));
|
return bxsubr(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -2622,9 +2622,9 @@ bxsubi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1)
|
||||||
return jnc(_jit);
|
return jnc(_jit);
|
||||||
}
|
}
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i1);
|
movi(_jit, jit_gpr_regno(reg), i1);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
return bxsubr_u(_jit, r0, rn(reg));
|
return bxsubr_u(_jit, r0, jit_gpr_regno(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2647,8 +2647,8 @@ calli(jit_state_t *_jit, jit_word_t i0)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
jit_patch_there(_jit, mov_addr(_jit, rn(reg)), (void*)i0);
|
jit_patch_there(_jit, mov_addr(_jit, jit_gpr_regno(reg)), (void*)i0);
|
||||||
callr(_jit, rn(reg));
|
callr(_jit, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2673,8 +2673,8 @@ jmpi(jit_state_t *_jit, jit_word_t i0)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
jit_patch_there(_jit, mov_addr(_jit, rn(reg)), (void*)i0);
|
jit_patch_there(_jit, mov_addr(_jit, jit_gpr_regno(reg)), (void*)i0);
|
||||||
jmpr(_jit, rn(reg));
|
jmpr(_jit, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2716,34 +2716,34 @@ reti(jit_state_t *_jit, jit_word_t i0)
|
||||||
static void
|
static void
|
||||||
retval_c(jit_state_t *_jit, int32_t r0)
|
retval_c(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
extr_c(_jit, r0, rn(JIT_RET));
|
extr_c(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retval_uc(jit_state_t *_jit, int32_t r0)
|
retval_uc(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
extr_uc(_jit, r0, rn(JIT_RET));
|
extr_uc(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retval_s(jit_state_t *_jit, int32_t r0)
|
retval_s(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
extr_s(_jit, r0, rn(JIT_RET));
|
extr_s(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retval_us(jit_state_t *_jit, int32_t r0)
|
retval_us(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
extr_us(_jit, r0, rn(JIT_RET));
|
extr_us(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retval_i(jit_state_t *_jit, int32_t r0)
|
retval_i(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
#if __X32 || __X64_32
|
#if __X32 || __X64_32
|
||||||
movr(_jit, r0, rn(JIT_RET));
|
movr(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
#else
|
#else
|
||||||
extr_i(_jit, r0, rn(JIT_RET));
|
extr_i(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2751,12 +2751,12 @@ retval_i(jit_state_t *_jit, int32_t r0)
|
||||||
static void
|
static void
|
||||||
retval_ui(jit_state_t *_jit, int32_t r0)
|
retval_ui(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
extr_ui(_jit, r0, rn(JIT_RET));
|
extr_ui(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retval_l(jit_state_t *_jit, int32_t r0)
|
retval_l(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
movr(_jit, r0, rn(JIT_RET));
|
movr(_jit, r0, jit_gpr_regno(JIT_RET));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -173,8 +173,8 @@ static void
|
||||||
pushr_d(jit_state_t *_jit, int32_t r0)
|
pushr_d(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
jit_gpr_t tmp = get_temp_gpr(_jit);
|
jit_gpr_t tmp = get_temp_gpr(_jit);
|
||||||
movdqxr(_jit, rn(tmp), r0);
|
movdqxr(_jit, jit_gpr_regno(tmp), r0);
|
||||||
pushr(_jit, rn(tmp));
|
pushr(_jit, jit_gpr_regno(tmp));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,8 +182,8 @@ static void
|
||||||
popr_d(jit_state_t *_jit, int32_t r0)
|
popr_d(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
jit_gpr_t tmp = get_temp_gpr(_jit);
|
jit_gpr_t tmp = get_temp_gpr(_jit);
|
||||||
popr(_jit, rn(tmp));
|
popr(_jit, jit_gpr_regno(tmp));
|
||||||
ssexr(_jit, 0x66, X86_SSE_G2X, r0, rn(tmp));
|
ssexr(_jit, 0x66, X86_SSE_G2X, r0, jit_gpr_regno(tmp));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,8 +379,8 @@ movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t i0)
|
||||||
xorpsr(_jit, r0, r0);
|
xorpsr(_jit, r0, r0);
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), data.i);
|
movi(_jit, jit_gpr_regno(reg), data.i);
|
||||||
movdlxr(_jit, r0, rn(reg));
|
movdlxr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -400,14 +400,14 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
#if __X64 && !__X64_32
|
#if __X64 && !__X64_32
|
||||||
movi(_jit, rn(reg), data.w);
|
movi(_jit, jit_gpr_regno(reg), data.w);
|
||||||
movdqxr(_jit, r0, rn(reg));
|
movdqxr(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
movi(_jit, rn(reg), data.ii[0]);
|
movi(_jit, jit_gpr_regno(reg), data.ii[0]);
|
||||||
stxi_i(CVT_OFFSET, _RBP_REGNO, rn(reg));
|
stxi_i(CVT_OFFSET, _RBP_REGNO, jit_gpr_regno(reg));
|
||||||
movi(_jit, rn(reg), data.ii[1]);
|
movi(_jit, jit_gpr_regno(reg), data.ii[1]);
|
||||||
stxi_i(CVT_OFFSET + 4, _RBP_REGNO, rn(reg));
|
stxi_i(CVT_OFFSET + 4, _RBP_REGNO, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
ldxi_d(_jit, r0, _RBP_REGNO, CVT_OFFSET);
|
ldxi_d(_jit, r0, _RBP_REGNO, CVT_OFFSET);
|
||||||
#endif
|
#endif
|
||||||
|
@ -418,7 +418,7 @@ static void
|
||||||
retval_f(jit_state_t *_jit, int32_t r0)
|
retval_f(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
#if __X64
|
#if __X64
|
||||||
movr_f(_jit, r0, rn(JIT_FRET));
|
movr_f(_jit, r0, jit_fpr_regno(JIT_FRET));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,21 +426,21 @@ static void
|
||||||
retval_d(jit_state_t *_jit, int32_t r0)
|
retval_d(jit_state_t *_jit, int32_t r0)
|
||||||
{
|
{
|
||||||
#if __X64
|
#if __X64
|
||||||
movr_d(_jit, r0, rn(JIT_FRET));
|
movr_d(_jit, r0, jit_fpr_regno(JIT_FRET));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retr_f(jit_state_t *_jit, int32_t u)
|
retr_f(jit_state_t *_jit, int32_t u)
|
||||||
{
|
{
|
||||||
movr_f(_jit, rn(JIT_FRET), u);
|
movr_f(_jit, jit_fpr_regno(JIT_FRET), u);
|
||||||
ret(_jit);
|
ret(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
retr_d(jit_state_t *_jit, int32_t u)
|
retr_d(jit_state_t *_jit, int32_t u)
|
||||||
{
|
{
|
||||||
movr_d(_jit, rn(JIT_FRET), u);
|
movr_d(_jit, jit_fpr_regno(JIT_FRET), u);
|
||||||
ret(_jit);
|
ret(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,9 +477,9 @@ subr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
subssr(_jit, r0, r2);
|
subssr(_jit, r0, r2);
|
||||||
else if (r0 == r2) {
|
else if (r0 == r2) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
movr_f(_jit, rn(reg), r0);
|
movr_f(_jit, jit_fpr_regno(reg), r0);
|
||||||
movr_f(_jit, r0, r1);
|
movr_f(_jit, r0, r1);
|
||||||
subssr(_jit, r0, rn(reg));
|
subssr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -495,9 +495,9 @@ subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
subsdr(_jit, r0, r2);
|
subsdr(_jit, r0, r2);
|
||||||
else if (r0 == r2) {
|
else if (r0 == r2) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
movr_d(_jit, rn(reg), r0);
|
movr_d(_jit, jit_fpr_regno(reg), r0);
|
||||||
movr_d(_jit, r0, r1);
|
movr_d(_jit, r0, r1);
|
||||||
subsdr(_jit, r0, rn(reg));
|
subsdr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -539,9 +539,9 @@ divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
divssr(_jit, r0, r2);
|
divssr(_jit, r0, r2);
|
||||||
else if (r0 == r2) {
|
else if (r0 == r2) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
movr_f(_jit, rn(reg), r0);
|
movr_f(_jit, jit_fpr_regno(reg), r0);
|
||||||
movr_f(_jit, r0, r1);
|
movr_f(_jit, r0, r1);
|
||||||
divssr(_jit, r0, rn(reg));
|
divssr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -557,9 +557,9 @@ divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
divsdr(_jit, r0, r2);
|
divsdr(_jit, r0, r2);
|
||||||
else if (r0 == r2) {
|
else if (r0 == r2) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
movr_d(_jit, rn(reg), r0);
|
movr_d(_jit, jit_fpr_regno(reg), r0);
|
||||||
movr_d(_jit, r0, r1);
|
movr_d(_jit, r0, r1);
|
||||||
divsdr(_jit, r0, rn(reg));
|
divsdr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -573,9 +573,9 @@ absr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
{
|
{
|
||||||
if (r0 == r1) {
|
if (r0 == r1) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
pcmpeqlr(_jit, rn(reg), rn(reg));
|
pcmpeqlr(_jit, jit_fpr_regno(reg), jit_fpr_regno(reg));
|
||||||
psrl(_jit, rn(reg), 1);
|
psrl(_jit, jit_fpr_regno(reg), 1);
|
||||||
andpsr(_jit, r0, rn(reg));
|
andpsr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -590,9 +590,9 @@ absr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
{
|
{
|
||||||
if (r0 == r1) {
|
if (r0 == r1) {
|
||||||
jit_fpr_t reg = get_temp_xpr(_jit);
|
jit_fpr_t reg = get_temp_xpr(_jit);
|
||||||
pcmpeqlr(_jit, rn(reg), rn(reg));
|
pcmpeqlr(_jit, jit_fpr_regno(reg), jit_fpr_regno(reg));
|
||||||
psrq(_jit, rn(reg), 1);
|
psrq(_jit, jit_fpr_regno(reg), 1);
|
||||||
andpdr(_jit, r0, rn(reg));
|
andpdr(_jit, r0, jit_fpr_regno(reg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -606,14 +606,14 @@ static void
|
||||||
negr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
negr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
{
|
{
|
||||||
jit_gpr_t ireg = get_temp_gpr(_jit);
|
jit_gpr_t ireg = get_temp_gpr(_jit);
|
||||||
imovi(_jit, rn(ireg), 0x80000000);
|
imovi(_jit, jit_gpr_regno(ireg), 0x80000000);
|
||||||
if (r0 == r1) {
|
if (r0 == r1) {
|
||||||
jit_fpr_t freg = get_temp_xpr(_jit);
|
jit_fpr_t freg = get_temp_xpr(_jit);
|
||||||
movdlxr(_jit, rn(freg), rn(ireg));
|
movdlxr(_jit, jit_fpr_regno(freg), jit_gpr_regno(ireg));
|
||||||
xorpsr(_jit, r0, rn(freg));
|
xorpsr(_jit, r0, jit_fpr_regno(freg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movdlxr(_jit, r0, rn(ireg));
|
movdlxr(_jit, r0, jit_gpr_regno(ireg));
|
||||||
xorpsr(_jit, r0, r1);
|
xorpsr(_jit, r0, r1);
|
||||||
}
|
}
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
|
@ -623,15 +623,15 @@ static void
|
||||||
negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
{
|
{
|
||||||
jit_gpr_t ireg = get_temp_gpr(_jit);
|
jit_gpr_t ireg = get_temp_gpr(_jit);
|
||||||
imovi(_jit, rn(ireg), 0x80000000);
|
imovi(_jit, jit_gpr_regno(ireg), 0x80000000);
|
||||||
if (r0 == r1) {
|
if (r0 == r1) {
|
||||||
jit_fpr_t freg = get_temp_xpr(_jit);
|
jit_fpr_t freg = get_temp_xpr(_jit);
|
||||||
movdlxr(_jit, rn(freg), rn(ireg));
|
movdlxr(_jit, jit_fpr_regno(freg), jit_gpr_regno(ireg));
|
||||||
pslq(_jit, rn(freg), 32);
|
pslq(_jit, jit_fpr_regno(freg), 32);
|
||||||
xorpdr(_jit, r0, rn(freg));
|
xorpdr(_jit, r0, jit_fpr_regno(freg));
|
||||||
unget_temp_xpr(_jit);
|
unget_temp_xpr(_jit);
|
||||||
} else {
|
} else {
|
||||||
movdlxr(_jit, r0, rn(ireg));
|
movdlxr(_jit, r0, jit_gpr_regno(ireg));
|
||||||
pslq(_jit, r0, 32);
|
pslq(_jit, r0, 32);
|
||||||
xorpdr(_jit, r0, r1);
|
xorpdr(_jit, r0, r1);
|
||||||
}
|
}
|
||||||
|
@ -653,8 +653,8 @@ ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
movssmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
movssmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_f(_jit, r0, rn(reg));
|
ldr_f(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -664,8 +664,8 @@ ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r1, r2);
|
addr(_jit, jit_gpr_regno(reg), r1, r2);
|
||||||
ldr_f(_jit, r0, rn(reg));
|
ldr_f(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
movssmr(_jit, 0, r1, r2, _SCL1, r0);
|
movssmr(_jit, 0, r1, r2, _SCL1, r0);
|
||||||
|
@ -680,11 +680,11 @@ ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
addi(rn(reg), r1, i0);
|
addi(jit_gpr_regno(reg), r1, i0);
|
||||||
ldr_f(_jit, r0, rn(reg));
|
ldr_f(_jit, r0, jit_gpr_regno(reg));
|
||||||
#else
|
#else
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_f(_jit, r0, r1, rn(reg));
|
ldxr_f(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
#endif
|
#endif
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
@ -697,8 +697,8 @@ sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
movssrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
movssrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_f(_jit, rn(reg), r0);
|
str_f(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -708,8 +708,8 @@ stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r0, r1);
|
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
str_f(_jit, rn(reg), r2);
|
str_f(_jit, jit_gpr_regno(reg), r2);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
movssrm(_jit, r2, 0, r0, r1, _SCL1);
|
movssrm(_jit, r2, 0, r0, r1, _SCL1);
|
||||||
|
@ -724,11 +724,11 @@ stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
addi(rn(reg), r0, i0);
|
addi(jit_gpr_regno(reg), r0, i0);
|
||||||
str_f(_jit, rn(reg), r1);
|
str_f(_jit, jit_gpr_regno(reg), r1);
|
||||||
#else
|
#else
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_f(_jit, rn(reg), r0, r1);
|
stxr_f(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
#endif
|
#endif
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
@ -847,8 +847,8 @@ ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
movsdmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
movsdmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldr_d(_jit, r0, rn(reg));
|
ldr_d(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -858,8 +858,8 @@ ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r1, r2);
|
addr(_jit, jit_gpr_regno(reg), r1, r2);
|
||||||
ldr_d(_jit, r0, rn(reg));
|
ldr_d(_jit, r0, jit_gpr_regno(reg));
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
movsdmr(_jit, 0, r1, r2, _SCL1, r0);
|
movsdmr(_jit, 0, r1, r2, _SCL1, r0);
|
||||||
|
@ -874,11 +874,11 @@ ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
addi(rn(reg), r1, i0);
|
addi(jit_gpr_regno(reg), r1, i0);
|
||||||
ldr_d(_jit, r0, rn(reg));
|
ldr_d(_jit, r0, jit_gpr_regno(reg));
|
||||||
#else
|
#else
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
ldxr_d(_jit, r0, r1, rn(reg));
|
ldxr_d(_jit, r0, r1, jit_gpr_regno(reg));
|
||||||
#endif
|
#endif
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
@ -891,8 +891,8 @@ sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||||
movsdrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
movsdrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
str_d(_jit, rn(reg), r0);
|
str_d(_jit, jit_gpr_regno(reg), r0);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -902,8 +902,8 @@ stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||||
{
|
{
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
addr(_jit, rn(reg), r0, r1);
|
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
str_d(_jit, rn(reg), r2);
|
str_d(_jit, jit_gpr_regno(reg), r2);
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
#else
|
#else
|
||||||
movsdrm(_jit, r2, 0, r0, r1, _SCL1);
|
movsdrm(_jit, r2, 0, r0, r1, _SCL1);
|
||||||
|
@ -918,11 +918,11 @@ stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
||||||
else {
|
else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||||
#if __X64_32
|
#if __X64_32
|
||||||
addi(rn(reg), r0, i0);
|
addi(jit_gpr_regno(reg), r0, i0);
|
||||||
str_d(_jit, rn(reg), r1);
|
str_d(_jit, jit_gpr_regno(reg), r1);
|
||||||
#else
|
#else
|
||||||
movi(_jit, rn(reg), i0);
|
movi(_jit, jit_gpr_regno(reg), i0);
|
||||||
stxr_d(_jit, rn(reg), r0, r1);
|
stxr_d(_jit, jit_gpr_regno(reg), r0, r1);
|
||||||
#endif
|
#endif
|
||||||
unget_temp_gpr(_jit);
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
|
@ -617,7 +617,7 @@ jit_move_operands(jit_state_t *_jit, jit_operand_t *dst, jit_operand_t *src,
|
||||||
for (size_t i = 0; i < argc; i++) {
|
for (size_t i = 0; i < argc; i++) {
|
||||||
switch (src[i].kind) {
|
switch (src[i].kind) {
|
||||||
case JIT_OPERAND_KIND_GPR:
|
case JIT_OPERAND_KIND_GPR:
|
||||||
src_gprs |= 1ULL << rn(src[i].loc.gpr.gpr);
|
src_gprs |= 1ULL << jit_gpr_regno(src[i].loc.gpr.gpr);
|
||||||
break;
|
break;
|
||||||
case JIT_OPERAND_KIND_FPR:
|
case JIT_OPERAND_KIND_FPR:
|
||||||
case JIT_OPERAND_KIND_IMM:
|
case JIT_OPERAND_KIND_IMM:
|
||||||
|
@ -629,20 +629,20 @@ jit_move_operands(jit_state_t *_jit, jit_operand_t *dst, jit_operand_t *src,
|
||||||
switch (dst[i].kind) {
|
switch (dst[i].kind) {
|
||||||
case JIT_OPERAND_KIND_GPR: {
|
case JIT_OPERAND_KIND_GPR: {
|
||||||
ASSERT(dst[i].loc.gpr.addend == 0);
|
ASSERT(dst[i].loc.gpr.addend == 0);
|
||||||
uint64_t bit = 1ULL << rn(dst[i].loc.gpr.gpr);
|
uint64_t bit = 1ULL << jit_gpr_regno(dst[i].loc.gpr.gpr);
|
||||||
ASSERT((dst_gprs & bit) == 0);
|
ASSERT((dst_gprs & bit) == 0);
|
||||||
dst_gprs |= bit;
|
dst_gprs |= bit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case JIT_OPERAND_KIND_FPR: {
|
case JIT_OPERAND_KIND_FPR: {
|
||||||
uint64_t bit = 1ULL << rn(dst[i].loc.fpr);
|
uint64_t bit = 1ULL << jit_fpr_regno(dst[i].loc.fpr);
|
||||||
ASSERT((dst_fprs & bit) == 0);
|
ASSERT((dst_fprs & bit) == 0);
|
||||||
dst_fprs |= bit;
|
dst_fprs |= bit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case JIT_OPERAND_KIND_MEM: {
|
case JIT_OPERAND_KIND_MEM: {
|
||||||
ASSERT(dst[i].loc.mem.addend == 0);
|
ASSERT(dst[i].loc.mem.addend == 0);
|
||||||
uint64_t bit = 1ULL << rn(dst[i].loc.mem.base);
|
uint64_t bit = 1ULL << jit_gpr_regno(dst[i].loc.mem.base);
|
||||||
dst_mem_base_gprs |= bit;
|
dst_mem_base_gprs |= bit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -830,7 +830,7 @@ jit_callr(jit_state_t *_jit, jit_gpr_t f, size_t argc, jit_operand_t args[])
|
||||||
{
|
{
|
||||||
size_t spill_size = prepare_call_args(_jit, argc, args);
|
size_t spill_size = prepare_call_args(_jit, argc, args);
|
||||||
|
|
||||||
callr(_jit, rn(f));
|
callr(_jit, jit_gpr_regno(f));
|
||||||
|
|
||||||
if (spill_size)
|
if (spill_size)
|
||||||
jit_addi(_jit, JIT_SP, JIT_SP, spill_size);
|
jit_addi(_jit, JIT_SP, JIT_SP, spill_size);
|
||||||
|
|
|
@ -48,11 +48,11 @@
|
||||||
# define _RAX JIT_GPR(0)
|
# define _RAX JIT_GPR(0)
|
||||||
# define _RCX JIT_GPR(1)
|
# define _RCX JIT_GPR(1)
|
||||||
# define _RDX JIT_GPR(2)
|
# define _RDX JIT_GPR(2)
|
||||||
# define _RBX JIT_GPR(3 | jit_class_sav)
|
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||||
# define _RSI JIT_GPR(6 | jit_class_sav)
|
# define _RSI JIT_CALLEE_SAVE_GPR(6)
|
||||||
# define _RDI JIT_GPR(7 | jit_class_sav)
|
# define _RDI JIT_CALLEE_SAVE_GPR(7)
|
||||||
# define _XMM0 JIT_FPR(0)
|
# define _XMM0 JIT_FPR(0)
|
||||||
# define _XMM1 JIT_FPR(1)
|
# define _XMM1 JIT_FPR(1)
|
||||||
# define _XMM2 JIT_FPR(2)
|
# define _XMM2 JIT_FPR(2)
|
||||||
|
@ -65,52 +65,52 @@
|
||||||
# define _RAX JIT_GPR(0)
|
# define _RAX JIT_GPR(0)
|
||||||
# define _RCX JIT_GPR(1)
|
# define _RCX JIT_GPR(1)
|
||||||
# define _RDX JIT_GPR(2)
|
# define _RDX JIT_GPR(2)
|
||||||
# define _RBX JIT_GPR(3 | jit_class_sav)
|
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||||
# define _RSI JIT_GPR(6 | jit_class_sav)
|
# define _RSI JIT_CALLEE_SAVE_GPR(6)
|
||||||
# define _RDI JIT_GPR(7 | jit_class_sav)
|
# define _RDI JIT_CALLEE_SAVE_GPR(7)
|
||||||
# define _R8 JIT_GPR(8)
|
# define _R8 JIT_GPR(8)
|
||||||
# define _R9 JIT_GPR(9)
|
# define _R9 JIT_GPR(9)
|
||||||
# define _R10 JIT_GPR(10)
|
# define _R10 JIT_GPR(10)
|
||||||
# define _R11 JIT_GPR(11)
|
# define _R11 JIT_GPR(11)
|
||||||
# define _R12 JIT_GPR(12 | jit_class_sav)
|
# define _R12 JIT_CALLEE_SAVE_GPR(12)
|
||||||
# define _R13 JIT_GPR(13 | jit_class_sav)
|
# define _R13 JIT_CALLEE_SAVE_GPR(13)
|
||||||
# define _R14 JIT_GPR(14 | jit_class_sav)
|
# define _R14 JIT_CALLEE_SAVE_GPR(14)
|
||||||
# define _R15 JIT_GPR(15 | jit_class_sav)
|
# define _R15 JIT_CALLEE_SAVE_GPR(15)
|
||||||
# define _XMM0 JIT_FPR(0)
|
# define _XMM0 JIT_FPR(0)
|
||||||
# define _XMM1 JIT_FPR(1)
|
# define _XMM1 JIT_FPR(1)
|
||||||
# define _XMM2 JIT_FPR(2)
|
# define _XMM2 JIT_FPR(2)
|
||||||
# define _XMM3 JIT_FPR(3)
|
# define _XMM3 JIT_FPR(3)
|
||||||
# define _XMM4 JIT_FPR(4)
|
# define _XMM4 JIT_FPR(4)
|
||||||
# define _XMM5 JIT_FPR(5)
|
# define _XMM5 JIT_FPR(5)
|
||||||
# define _XMM6 JIT_FPR(6 | jit_class_sav)
|
# define _XMM6 JIT_CALLEE_SAVE_FPR(6)
|
||||||
# define _XMM7 JIT_FPR(7 | jit_class_sav)
|
# define _XMM7 JIT_CALLEE_SAVE_FPR(7)
|
||||||
# define _XMM8 JIT_FPR(8 | jit_class_sav)
|
# define _XMM8 JIT_CALLEE_SAVE_FPR(8)
|
||||||
# define _XMM9 JIT_FPR(9 | jit_class_sav)
|
# define _XMM9 JIT_CALLEE_SAVE_FPR(9)
|
||||||
# define _XMM10 JIT_FPR(10 | jit_class_sav)
|
# define _XMM10 JIT_CALLEE_SAVE_FPR(10)
|
||||||
# define _XMM11 JIT_FPR(11 | jit_class_sav)
|
# define _XMM11 JIT_CALLEE_SAVE_FPR(11)
|
||||||
# define _XMM12 JIT_FPR(12 | jit_class_sav)
|
# define _XMM12 JIT_CALLEE_SAVE_FPR(12)
|
||||||
# define _XMM13 JIT_FPR(13 | jit_class_sav)
|
# define _XMM13 JIT_CALLEE_SAVE_FPR(13)
|
||||||
# define _XMM14 JIT_FPR(14 | jit_class_sav)
|
# define _XMM14 JIT_CALLEE_SAVE_FPR(14)
|
||||||
# define _XMM15 JIT_FPR(15 | jit_class_sav)
|
# define _XMM15 JIT_CALLEE_SAVE_FPR(15)
|
||||||
#else
|
#else
|
||||||
# define _RAX JIT_GPR(0)
|
# define _RAX JIT_GPR(0)
|
||||||
# define _RCX JIT_GPR(1)
|
# define _RCX JIT_GPR(1)
|
||||||
# define _RDX JIT_GPR(2)
|
# define _RDX JIT_GPR(2)
|
||||||
# define _RBX JIT_GPR(3 | jit_class_sav)
|
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||||
# define _RSI JIT_GPR(6)
|
# define _RSI JIT_GPR(6)
|
||||||
# define _RDI JIT_GPR(7)
|
# define _RDI JIT_GPR(7)
|
||||||
# define _R8 JIT_GPR(8)
|
# define _R8 JIT_GPR(8)
|
||||||
# define _R9 JIT_GPR(9)
|
# define _R9 JIT_GPR(9)
|
||||||
# define _R10 JIT_GPR(10)
|
# define _R10 JIT_GPR(10)
|
||||||
# define _R11 JIT_GPR(11)
|
# define _R11 JIT_GPR(11)
|
||||||
# define _R12 JIT_GPR(12 | jit_class_sav)
|
# define _R12 JIT_CALLEE_SAVE_GPR(12)
|
||||||
# define _R13 JIT_GPR(13 | jit_class_sav)
|
# define _R13 JIT_CALLEE_SAVE_GPR(13)
|
||||||
# define _R14 JIT_GPR(14 | jit_class_sav)
|
# define _R14 JIT_CALLEE_SAVE_GPR(14)
|
||||||
# define _R15 JIT_GPR(15 | jit_class_sav)
|
# define _R15 JIT_CALLEE_SAVE_GPR(15)
|
||||||
# define _XMM0 JIT_FPR(0)
|
# define _XMM0 JIT_FPR(0)
|
||||||
# define _XMM1 JIT_FPR(1)
|
# define _XMM1 JIT_FPR(1)
|
||||||
# define _XMM2 JIT_FPR(2)
|
# define _XMM2 JIT_FPR(2)
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
static void
|
static void
|
||||||
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_pushr(j, reg);
|
jit_pushr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_popr(j, reg);
|
jit_popr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
static void
|
static void
|
||||||
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_pushr(j, reg);
|
jit_pushr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_popr(j, reg);
|
jit_popr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
static void
|
static void
|
||||||
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_pushr(j, reg);
|
jit_pushr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_popr(j, reg);
|
jit_popr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
static void
|
static void
|
||||||
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
maybe_save(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_pushr(j, reg);
|
jit_pushr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
maybe_restore(jit_state_t *j, jit_gpr_t reg)
|
||||||
{
|
{
|
||||||
if (jit_gpr_is_callee_save (j, reg))
|
if (jit_gpr_is_callee_save (reg))
|
||||||
jit_popr(j, reg);
|
jit_popr(j, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue