X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightning%2Flib%2Fjit_aarch64-cpu.c;h=b0bc26fcba80045e84319fc5940dc0026c6e17d3;hb=d481fb64f2aac7a36532142cda11fa43f5ca792f;hp=76a988bd6cd07fb82952f293e2ac983dfeb22d9a;hpb=85d4a8394339a2ad11b24322f92643f18f645c73;p=pcsx_rearmed.git diff --git a/deps/lightning/lib/jit_aarch64-cpu.c b/deps/lightning/lib/jit_aarch64-cpu.c index 76a988bd..b0bc26fc 100644 --- a/deps/lightning/lib/jit_aarch64-cpu.c +++ b/deps/lightning/lib/jit_aarch64-cpu.c @@ -1580,9 +1580,7 @@ static void _xrshr(jit_state_t *_jit, jit_bool_t sign, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) { - jit_bool_t branch; - jit_word_t over, zero, done, done_over; - jit_int32_t t0, s0, t1, s1, t2, s2, t3, s3; + jit_int32_t t0, s0, t2, s2, t3, s3; s0 = jit_get_reg(jit_class_gpr); t0 = rn(s0); if (r0 == r2 || r1 == r2) { @@ -1599,51 +1597,26 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign, } else t3 = r3; - if ((s1 = jit_get_reg(jit_class_gpr|jit_class_nospill|jit_class_chk))) { - t1 = rn(s1); - branch = 0; - } - else - branch = 1; - rsbi(t0, t3, __WORDSIZE); - if (sign) - rshr(r0, t2, t3); - else - rshr_u(r0, t2, t3); - lshr(r1, t2, t0); - if (branch) { - zero = beqi(_jit->pc.w, t3, 0); - over = beqi(_jit->pc.w, t3, __WORDSIZE); - done = jmpi(_jit->pc.w); - patch_at(over, _jit->pc.w); - /* underflow */ - if (sign) - rshi(r0, t2, __WORDSIZE - 1); - else - movi(r0, 0); - done_over = jmpi(_jit->pc.w); - /* zero */ - patch_at(zero, _jit->pc.w); - if (sign) - rshi(r1, t2, __WORDSIZE - 1); - else - movi(r1, 0); - patch_at(done, _jit->pc.w); - patch_at(done_over, _jit->pc.w); - jit_unget_reg(s1); + + if (sign) { + /* underflow? */ + eqi(t0, t3, __WORDSIZE); + subr(t0, t3, t0); + rshr(r0, t2, t0); } else { - /* zero? */ - if (sign) - rshi(t0, t2, __WORDSIZE - 1); - else - movi(t0, 0); - movzr(r1, t0, t3); /* underflow? */ - eqi(t1, t3, __WORDSIZE); - movnr(r0, t0, t1); - jit_unget_reg(s1); + nei(t0, t3, __WORDSIZE); + rshr_u(r0, t2, t3); + movzr(r0, t0, t0); } + + rsbi(t0, t3, __WORDSIZE); + lshr(r1, t2, t0); + + /* zero? */ + movzr(r1, t3, t3); + jit_unget_reg(s0); if (t2 != r2) jit_unget_reg(s2); @@ -1657,10 +1630,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign, { if (i0 == 0) { movr(r0, r2); - if (sign) - rshi(r1, r2, __WORDSIZE - 1); - else - movi(r1, 0); + movi(r1, 0); } else if (i0 == __WORDSIZE) { movr(r1, r2);