mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-05 03:30:24 +02:00
Aarch64 backend avoids needless temporary register allocation
This commit is contained in:
parent
9638e4f169
commit
f2d7321504
1 changed files with 109 additions and 104 deletions
|
@ -1544,10 +1544,11 @@ addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if ((iS << 12) == is && iS >= 0 && iS <= 0xfff) {
|
} else if ((iS << 12) == is && iS >= 0 && iS <= 0xfff) {
|
||||||
SUBI_12(_jit, r0, r1, iS);
|
SUBI_12(_jit, r0, r1, iS);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
addr(_jit, r0, r1, jit_gpr_regno(reg));
|
addr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1566,20 +1567,22 @@ addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if ((iS << 12) == is && iS >= 0 && iS <= 0xfff) {
|
} else if ((iS << 12) == is && iS >= 0 && iS <= 0xfff) {
|
||||||
SUBSI_12(_jit, r0, r1, iS);
|
SUBSI_12(_jit, r0, r1, iS);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
addcr(_jit, r0, r1, jit_gpr_regno(reg));
|
addcr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
addxr(_jit, r0, r1, jit_gpr_regno(reg));
|
addxr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1591,10 +1594,11 @@ subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if ((is << 12) == i0 && is >= 0 && is <= 0xfff) {
|
} else if ((is << 12) == i0 && is >= 0 && is <= 0xfff) {
|
||||||
SUBI_12(_jit, r0, r1, is);
|
SUBI_12(_jit, r0, r1, is);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
subr(_jit, r0, r1, jit_gpr_regno(reg));
|
subr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1607,20 +1611,22 @@ subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if ((is << 12) == i0 && is >= 0 && is <= 0xfff) {
|
} else if ((is << 12) == i0 && is >= 0 && is <= 0xfff) {
|
||||||
SUBSI_12(_jit, r0, r1, is);
|
SUBSI_12(_jit, r0, r1, is);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
subcr(_jit, r0, r1, jit_gpr_regno(reg));
|
subcr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
subxr(_jit, r0, r1, jit_gpr_regno(reg));
|
subxr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static jit_reloc_t
|
static jit_reloc_t
|
||||||
|
@ -1817,10 +1823,11 @@ nop(jit_state_t *_jit, int32_t i0)
|
||||||
static void
|
static void
|
||||||
muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
mulr(_jit, r0, r1, jit_gpr_regno(reg));
|
mulr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1878,19 +1885,21 @@ qmuli_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, jit_word_t i0)
|
||||||
static void
|
static void
|
||||||
divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
divr(_jit, r0, r1, jit_gpr_regno(reg));
|
divr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
divr_u(_jit, r0, r1, jit_gpr_regno(reg));
|
divr_u(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2007,10 +2016,11 @@ andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
if (imm != -1) {
|
if (imm != -1) {
|
||||||
ANDI(_jit, r0, r1, imm);
|
ANDI(_jit, r0, r1, imm);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
andr(_jit, r0, r1, jit_gpr_regno(reg));
|
andr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2028,10 +2038,11 @@ ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
if (imm != -1) {
|
if (imm != -1) {
|
||||||
ORRI(_jit, r0, r1, imm);
|
ORRI(_jit, r0, r1, imm);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
orr(_jit, r0, r1, jit_gpr_regno(reg));
|
orr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2049,10 +2060,11 @@ xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
if (imm != -1) {
|
if (imm != -1) {
|
||||||
EORI(_jit, r0, r1, imm);
|
EORI(_jit, r0, r1, imm);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
xorr(_jit, r0, r1, jit_gpr_regno(reg));
|
xorr(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2074,10 +2086,8 @@ bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
static void
|
static void
|
||||||
ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_c(_jit, r0, r0);
|
||||||
ldr_c(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2092,19 +2102,15 @@ ldr_uc(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
static void
|
static void
|
||||||
ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_uc(_jit, r0, r0);
|
||||||
ldr_uc(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_s(_jit, r0, r0);
|
||||||
ldr_s(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2119,19 +2125,15 @@ ldr_us(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
static void
|
static void
|
||||||
ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_us(_jit, r0, r0);
|
||||||
ldr_us(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_i(_jit, r0, r0);
|
||||||
ldr_i(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2146,10 +2148,8 @@ ldr_ui(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
static void
|
static void
|
||||||
ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_ui(_jit, r0, r0);
|
||||||
ldr_ui(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2161,10 +2161,8 @@ ldr_l(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||||
static void
|
static void
|
||||||
ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
|
||||||
{
|
{
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
movi(_jit, r0, i0);
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
ldr_l(_jit, r0, r0);
|
||||||
ldr_l(_jit, r0, jit_gpr_regno(reg));
|
|
||||||
unget_temp_gpr(_jit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2182,10 +2180,11 @@ ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURSB(_jit, r0, r1, i0 & 0x1ff);
|
LDURSB(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
LDRSB(_jit, r0, r1, jit_gpr_regno(reg));
|
LDRSB(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
extr_c(_jit, r0, r0);
|
extr_c(_jit, r0, r0);
|
||||||
}
|
}
|
||||||
|
@ -2207,10 +2206,11 @@ ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURB(_jit, r0, r1, i0 & 0x1ff);
|
LDURB(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
addi(_jit, jit_gpr_regno(reg), r1, i0);
|
addi(_jit, r2, r1, i0);
|
||||||
ldr_uc(_jit, r0, jit_gpr_regno(reg));
|
ldr_uc(_jit, r0, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
extr_uc(_jit, r0, r0);
|
extr_uc(_jit, r0, r0);
|
||||||
|
@ -2226,10 +2226,11 @@ ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURSH(_jit, r0, r1, i0 & 0x1ff);
|
LDURSH(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
LDRSH(_jit, r0, r1, jit_gpr_regno(reg));
|
LDRSH(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2251,10 +2252,11 @@ ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURH(_jit, r0, r1, i0 & 0x1ff);
|
LDURH(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
LDRH(_jit, r0, r1, jit_gpr_regno(reg));
|
LDRH(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
extr_us(_jit, r0, r0);
|
extr_us(_jit, r0, r0);
|
||||||
|
@ -2270,10 +2272,11 @@ ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURSW(_jit, r0, r1, i0 & 0x1ff);
|
LDURSW(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
addi(_jit, jit_gpr_regno(reg), r1, i0);
|
addi(_jit, r2, r1, i0);
|
||||||
ldr_i(_jit, r0, jit_gpr_regno(reg));
|
ldr_i(_jit, r0, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2295,10 +2298,11 @@ ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDURW(_jit, r0, r1, i0 & 0x1ff);
|
LDURW(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
movi(_jit, jit_gpr_regno(reg), i0);
|
movi(_jit, r2, i0);
|
||||||
LDRW(_jit, r0, r1, jit_gpr_regno(reg));
|
LDRW(_jit, r0, r1, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
extr_ui(_jit, r0, r0);
|
extr_ui(_jit, r0, r0);
|
||||||
|
@ -2314,10 +2318,11 @@ ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
|
||||||
} else if (i0 > -256 && i0 < 0) {
|
} else if (i0 > -256 && i0 < 0) {
|
||||||
LDUR(_jit, r0, r1, i0 & 0x1ff);
|
LDUR(_jit, r0, r1, i0 & 0x1ff);
|
||||||
} else {
|
} else {
|
||||||
jit_gpr_t reg = get_temp_gpr(_jit);
|
int32_t r2 = (r0 == r1) ? jit_gpr_regno(get_temp_gpr(_jit)) : r0;
|
||||||
addi(_jit, jit_gpr_regno(reg), r1, i0);
|
addi(_jit, r2, r1, i0);
|
||||||
ldr_l(_jit, r0, jit_gpr_regno(reg));
|
ldr_l(_jit, r0, r2);
|
||||||
unget_temp_gpr(_jit);
|
if (r0 == r1)
|
||||||
|
unget_temp_gpr(_jit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue