mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-01 01:40:21 +02:00
Remove most __X64_32 code
The x32 ABI (i.e., amd64 with 32-bit pointers) is mostly a C language question. From a JIT perspective it mostly looks just like amd64. We can fix any differences in a followup, but x32 is also a pretty dead ABI, so I feel OK with this.
This commit is contained in:
parent
24950994ef
commit
9906cd5f84
2 changed files with 19 additions and 132 deletions
|
@ -20,7 +20,7 @@
|
|||
/* avoid using it due to partial stalls */
|
||||
#define USE_INC_DEC 0
|
||||
|
||||
#if __X32 || __X64_32
|
||||
#if __X32
|
||||
# define WIDE 0
|
||||
# define IF_WIDE(wide, narrow) narrow
|
||||
#else
|
||||
|
@ -46,7 +46,7 @@
|
|||
#define _R15_REGNO 15
|
||||
#define r7(reg) ((reg) & 7)
|
||||
#define r8(reg) ((reg) & 15)
|
||||
#if __X32 || __CYGWIN__ || __X64_32
|
||||
#if __X32
|
||||
# define reg8_p(rn) ((rn) >= _RAX_REGNO && (rn) <= _RBX_REGNO)
|
||||
#else
|
||||
# define reg8_p(rn) 1
|
||||
|
@ -160,15 +160,13 @@ ii(jit_state_t *_jit, uint32_t i)
|
|||
emit_u32(_jit, i);
|
||||
}
|
||||
|
||||
static inline void
|
||||
iw(jit_state_t *_jit, jit_word_t l)
|
||||
{
|
||||
#if __X64
|
||||
static inline void
|
||||
il(jit_state_t *_jit, uint64_t l)
|
||||
{
|
||||
emit_u64(_jit, l);
|
||||
#else
|
||||
ii(_jit, l);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
rex(jit_state_t *_jit, int32_t l, int32_t w,
|
||||
|
@ -417,7 +415,7 @@ imovi(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
} else {
|
||||
rex(_jit, 0, 1, _NOREG, _NOREG, r0);
|
||||
ic(_jit, 0xb8 | r7(r0));
|
||||
iw(_jit, i0);
|
||||
il(_jit, i0);
|
||||
}
|
||||
#else
|
||||
ic(_jit, 0xb8 | r7(r0));
|
||||
|
@ -1490,7 +1488,7 @@ extr_us(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
return movsr_u(_jit, r0, r1);
|
||||
}
|
||||
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
static void
|
||||
extr_i(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -1523,7 +1521,7 @@ bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
ic(_jit, 0xc8 | r7(r0));
|
||||
}
|
||||
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
static void
|
||||
bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -1634,7 +1632,6 @@ ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
}
|
||||
}
|
||||
|
||||
#if __X32 || !__X64_32
|
||||
static void
|
||||
ldr_i(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -1665,7 +1662,6 @@ ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __X64
|
||||
static void
|
||||
|
@ -1691,7 +1687,6 @@ ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
}
|
||||
}
|
||||
|
||||
# if !__X64_32
|
||||
static void
|
||||
ldr_l(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -1714,21 +1709,15 @@ ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static void
|
||||
ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
addr(_jit, r0, r1, r2);
|
||||
ldr_c(r0, r0);
|
||||
#else
|
||||
rex(_jit, 0, WIDE, r0, r1, r2);
|
||||
ic(_jit, 0x0f);
|
||||
ic(_jit, 0xbe);
|
||||
rx(_jit, r0, 0, r2, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1750,15 +1739,10 @@ ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
static void
|
||||
ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
addr(_jit, r0, r1, r2);
|
||||
ldr_uc(_jit, r0, r0);
|
||||
#else
|
||||
rex(_jit, 0, WIDE, r0, r1, r2);
|
||||
ic(_jit, 0x0f);
|
||||
ic(_jit, 0xb6);
|
||||
rx(_jit, r0, 0, r2, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1780,15 +1764,10 @@ ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
static void
|
||||
ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
addr(_jit, r0, r1, r2);
|
||||
ldr_s(_jit, r0, r0);
|
||||
#else
|
||||
rex(_jit, 0, WIDE, r0, r1, r2);
|
||||
ic(_jit, 0x0f);
|
||||
ic(_jit, 0xbf);
|
||||
rx(_jit, r0, 0, r2, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1810,15 +1789,10 @@ ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
static void
|
||||
ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
addr(_jit, r0, r1, r2);
|
||||
ldr_us(_jit, r0, r0);
|
||||
#else
|
||||
rex(_jit, 0, WIDE, r0, r1, r2);
|
||||
ic(_jit, 0x0f);
|
||||
ic(_jit, 0xb7);
|
||||
rx(_jit, r0, 0, r2, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1837,7 +1811,6 @@ ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
}
|
||||
}
|
||||
|
||||
#if __X64 || !__X64_32
|
||||
static void
|
||||
ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
|
@ -1868,21 +1841,14 @@ ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __X64
|
||||
static void
|
||||
ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
addr(_jit, r0, r1, r2);
|
||||
/* to avoid confusion with macro renames */
|
||||
_ldr_ui(_jit, r0, r0);
|
||||
#else
|
||||
rex(_jit, 0, 0, r0, r1, r2);
|
||||
ic(_jit, 0x8b);
|
||||
rx(_jit, r0, 0, r2, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1900,7 +1866,6 @@ ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
}
|
||||
}
|
||||
|
||||
# if !__X64_32
|
||||
static void
|
||||
ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
|
@ -1923,7 +1888,6 @@ ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static void
|
||||
|
@ -2015,7 +1979,7 @@ sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
|||
}
|
||||
}
|
||||
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
static void
|
||||
str_l(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -2043,12 +2007,6 @@ sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
|||
static void
|
||||
stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
str_c(_jit, jit_gpr_regno(reg), r2);
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
if (reg8_p(r2)) {
|
||||
rex(_jit, 0, 0, r2, r1, r0);
|
||||
ic(_jit, 0x88);
|
||||
|
@ -2061,7 +2019,6 @@ stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
|||
rx(_jit, jit_gpr_regno(reg), 0, r0, r1, _SCL1);
|
||||
unget_temp_gpr(_jit);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2091,17 +2048,10 @@ stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
|||
static void
|
||||
stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
str_s(_jit, jit_gpr_regno(reg), r2);
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
ic(_jit, 0x66);
|
||||
rex(_jit, 0, 0, r2, r1, r0);
|
||||
ic(_jit, 0x89);
|
||||
rx(_jit, r2, 0, r0, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2123,16 +2073,9 @@ stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
|||
static void
|
||||
stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
str_i(jit_gpr_regno(reg), r2);
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
rex(_jit, 0, 0, r2, r1, r0);
|
||||
ic(_jit, 0x89);
|
||||
rx(_jit, r2, 0, r0, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2150,7 +2093,7 @@ stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
|||
}
|
||||
}
|
||||
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
static void
|
||||
stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
|
@ -2684,14 +2627,14 @@ retval_us(jit_state_t *_jit, int32_t r0)
|
|||
static void
|
||||
retval_i(jit_state_t *_jit, int32_t r0)
|
||||
{
|
||||
#if __X32 || __X64_32
|
||||
#if __X32
|
||||
movr(_jit, r0, _RAX_REGNO);
|
||||
#else
|
||||
extr_i(_jit, r0, _RAX_REGNO);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
static void
|
||||
retval_ui(jit_state_t *_jit, int32_t r0)
|
||||
{
|
||||
|
|
|
@ -101,7 +101,7 @@ ssexi(jit_state_t *_jit, int32_t c, int32_t r0,
|
|||
static void
|
||||
sselxr(jit_state_t *_jit, int32_t p, int32_t c, int32_t r0, int32_t r1)
|
||||
{
|
||||
if (__X64 && !__X64_32) {
|
||||
if (__X64) {
|
||||
ic(_jit, p);
|
||||
rex(_jit, 0, 1, r0, 0, r1);
|
||||
ic(_jit, 0x0f);
|
||||
|
@ -404,7 +404,7 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
|
|||
xorpdr(_jit, r0, r0);
|
||||
else {
|
||||
jit_gpr_t ireg = get_temp_gpr(_jit);
|
||||
#if __X64 && !__X64_32
|
||||
#if __X64
|
||||
movi(_jit, jit_gpr_regno(ireg), data.w);
|
||||
movdqxr(_jit, r0, jit_gpr_regno(ireg));
|
||||
unget_temp_gpr(_jit);
|
||||
|
@ -705,18 +705,10 @@ negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
unget_temp_gpr(_jit);
|
||||
}
|
||||
|
||||
#if __X32
|
||||
# define sse_address_p(i0) 1
|
||||
#elif __X64_32
|
||||
# define sse_address_p(i0) ((jit_word_t)(i0) >= 0)
|
||||
# else
|
||||
# define sse_address_p(i0) can_sign_extend_int_p(i0)
|
||||
#endif
|
||||
|
||||
static void
|
||||
ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||
{
|
||||
if (sse_address_p(i0))
|
||||
if (can_sign_extend_int_p(i0))
|
||||
movssmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
|
@ -729,14 +721,7 @@ ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
static void
|
||||
ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r1, r2);
|
||||
ldr_f(_jit, r0, jit_gpr_regno(reg));
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
movssmr(_jit, 0, r1, r2, _SCL1, r0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -746,13 +731,8 @@ ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
movssmr(_jit, i0, r1, _NOREG, _SCL1, r0);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
#if __X64_32
|
||||
addi(jit_gpr_regno(reg), r1, i0);
|
||||
ldr_f(_jit, r0, jit_gpr_regno(reg));
|
||||
#else
|
||||
movi(_jit, jit_gpr_regno(reg), i0);
|
||||
ldxr_f(_jit, r0, r1, jit_gpr_regno(reg));
|
||||
#endif
|
||||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
|
@ -760,7 +740,7 @@ ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
static void
|
||||
sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||
{
|
||||
if (sse_address_p(i0))
|
||||
if (can_sign_extend_int_p(i0))
|
||||
movssrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
|
@ -773,14 +753,7 @@ sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
|||
static void
|
||||
stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
str_f(_jit, jit_gpr_regno(reg), r2);
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
movssrm(_jit, r2, 0, r0, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -790,13 +763,8 @@ stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
|||
movssrm(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
#if __X64_32
|
||||
addi(jit_gpr_regno(reg), r0, i0);
|
||||
str_f(_jit, jit_gpr_regno(reg), r1);
|
||||
#else
|
||||
movi(_jit, jit_gpr_regno(reg), i0);
|
||||
stxr_f(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
#endif
|
||||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
|
@ -910,7 +878,7 @@ bunordr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
static void
|
||||
ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||
{
|
||||
if (sse_address_p(i0))
|
||||
if (can_sign_extend_int_p(i0))
|
||||
movsdmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
|
@ -923,14 +891,7 @@ ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
|||
static void
|
||||
ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r1, r2);
|
||||
ldr_d(_jit, r0, jit_gpr_regno(reg));
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
movsdmr(_jit, 0, r1, r2, _SCL1, r0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -940,13 +901,8 @@ ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
movsdmr(_jit, i0, r1, _NOREG, _SCL1, r0);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
#if __X64_32
|
||||
addi(jit_gpr_regno(reg), r1, i0);
|
||||
ldr_d(_jit, r0, jit_gpr_regno(reg));
|
||||
#else
|
||||
movi(_jit, jit_gpr_regno(reg), i0);
|
||||
ldxr_d(_jit, r0, r1, jit_gpr_regno(reg));
|
||||
#endif
|
||||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
|
@ -954,7 +910,7 @@ ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
|||
static void
|
||||
sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
||||
{
|
||||
if (sse_address_p(i0))
|
||||
if (can_sign_extend_int_p(i0))
|
||||
movsdrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
|
@ -967,14 +923,7 @@ sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
|
|||
static void
|
||||
stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
|
||||
{
|
||||
#if __X64_32
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
addr(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
str_d(_jit, jit_gpr_regno(reg), r2);
|
||||
unget_temp_gpr(_jit);
|
||||
#else
|
||||
movsdrm(_jit, r2, 0, r0, r1, _SCL1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -984,13 +933,8 @@ stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
|
|||
movsdrm(_jit, r1, i0, r0, _NOREG, _SCL1);
|
||||
else {
|
||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
||||
#if __X64_32
|
||||
addi(jit_gpr_regno(reg), r0, i0);
|
||||
str_d(_jit, jit_gpr_regno(reg), r1);
|
||||
#else
|
||||
movi(_jit, jit_gpr_regno(reg), i0);
|
||||
stxr_d(_jit, jit_gpr_regno(reg), r0, r1);
|
||||
#endif
|
||||
unget_temp_gpr(_jit);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue