X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightning%2Flib%2Fjit_alpha-fpu.c;h=9e4d0dc1c224cf1f2a277e1910682c74a092bf26;hb=1fec8a9574a8128c9b64f79a5c1f72bbd86ac2bf;hp=ea5c7465a19ede1562b1181120dcd5ffe9381fc7;hpb=70575e81838e2c8d842dd28c3fc7fbb91b395061;p=pcsx_rearmed.git diff --git a/deps/lightning/lib/jit_alpha-fpu.c b/deps/lightning/lib/jit_alpha-fpu.c index ea5c7465..9e4d0dc1 100644 --- a/deps/lightning/lib/jit_alpha-fpu.c +++ b/deps/lightning/lib/jit_alpha-fpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 Free Software Foundation, Inc. + * Copyright (C) 2014-2023 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -303,16 +303,44 @@ static void _Opr(jit_state_t*,int,int,int,unsigned int,int); static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); # define movi_f(r0,i0) _movi_f(_jit,r0,i0) static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +# define movi_w_f(r0, i0) _movi_w_f(_jit, r0, i0) +static void _movi_w_f(jit_state_t*, jit_int32_t, jit_word_t); # define movi_d(r0,i0) _movi_d(_jit,r0,i0) static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +# define movi_w_d(r0, i0) _movi_w_d(_jit, r0, i0) +static void _movi_w_d(jit_state_t*, jit_int32_t, jit_word_t); # define absr_f(r0,r1) FABS(r1,r0) # define absr_d(r0,r1) FABS(r1,r0) # define negr_f(r0,r1) FNEGS(r1,r0) # define negr_d(r0,r1) FNEGT(r1,r0) # define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1) static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t); +# define fmar_f(r0,r1,r2,r3) _fmar_f(_jit,r0,r1,r2,r3) +static void _fmar_f(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fmsr_f(r0,r1,r2,r3) _fmsr_f(_jit,r0,r1,r2,r3) +static void _fmsr_f(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fnmar_f(r0,r1,r2,r3) _fnmar_f(_jit,r0,r1,r2,r3) +static void _fnmar_f(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fnmsr_f(r0,r1,r2,r3) _fnmsr_f(_jit,r0,r1,r2,r3) +static void _fnmsr_f(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); # define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1) static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t); +# define fmar_d(r0,r1,r2,r3) _fmar_d(_jit,r0,r1,r2,r3) +static void _fmar_d(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fmsr_d(r0,r1,r2,r3) _fmsr_d(_jit,r0,r1,r2,r3) +static void _fmsr_d(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fnmar_d(r0,r1,r2,r3) _fnmar_d(_jit,r0,r1,r2,r3) +static void _fnmar_d(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +# define fnmsr_d(r0,r1,r2,r3) _fnmsr_d(_jit,r0,r1,r2,r3) +static void _fnmsr_d(jit_state_t*, + jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); # define extr_f_d(r0,r1) movr_d(r0,r1) # define extr_d_f(r0,r1) movr_f(r0,r1) # define truncr_f_i(r0,r1) truncr_d_i(r0,r1) @@ -648,6 +676,17 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) ldi_f(r0, (jit_word_t)i0); } +static void +_movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +{ + jit_int32_t reg; + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxi_i(-8, _FP_REGNO, rn(reg)); + jit_unget_reg(reg); + ldxi_f(r0, _FP_REGNO, -8); +} + static void _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) { @@ -669,6 +708,17 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) ldi_d(r0, (jit_word_t)i0); } +static void +_movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +{ + jit_int32_t reg; + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + stxi(-8, _FP_REGNO, rn(reg)); + jit_unget_reg(reg); + ldxi_d(r0, _FP_REGNO, -8); +} + static void _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { @@ -688,6 +738,65 @@ _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) TRAPB(); } + +static void +_fmar_f(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + if (r0 != r3) { + mulr_f(r0, r1, r2); + addr_f(r0, r0, r3); + } + else { + t0 = jit_get_reg(jit_class_fpr); + mulr_f(rn(t0), r1, r2); + addr_f(r0, rn(t0), r3); + jit_unget_reg(t0); + } +} + +static void +_fmsr_f(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + if (r0 != r3) { + mulr_f(r0, r1, r2); + subr_f(r0, r0, r3); + } + else { + t0 = jit_get_reg(jit_class_fpr); + mulr_f(rn(t0), r1, r2); + subr_f(r0, rn(t0), r3); + jit_unget_reg(t0); + } +} + +static void +_fnmar_f(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + t0 = jit_get_reg(jit_class_fpr); + negr_f(rn(t0), r1); + mulr_f(rn(t0), rn(t0), r2); + subr_f(r0, rn(t0), r3); + jit_unget_reg(t0); +} + +static void +_fnmsr_f(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + t0 = jit_get_reg(jit_class_fpr); + negr_f(rn(t0), r1); + mulr_f(rn(t0), rn(t0), r2); + addr_f(r0, rn(t0), r3); + jit_unget_reg(t0); +} + static void _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { @@ -695,6 +804,64 @@ _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) TRAPB(); } +static void +_fmar_d(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + if (r0 != r3) { + mulr_d(r0, r1, r2); + addr_d(r0, r0, r3); + } + else { + t0 = jit_get_reg(jit_class_fpr); + mulr_d(rn(t0), r1, r2); + addr_d(r0, rn(t0), r3); + jit_unget_reg(t0); + } +} + +static void +_fmsr_d(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + if (r0 != r3) { + mulr_d(r0, r1, r2); + subr_d(r0, r0, r3); + } + else { + t0 = jit_get_reg(jit_class_fpr); + mulr_d(rn(t0), r1, r2); + subr_d(r0, rn(t0), r3); + jit_unget_reg(t0); + } +} + +static void +_fnmar_d(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + t0 = jit_get_reg(jit_class_fpr); + negr_d(rn(t0), r1); + mulr_d(rn(t0), rn(t0), r2); + subr_d(r0, rn(t0), r3); + jit_unget_reg(t0); +} + +static void +_fnmsr_d(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + jit_int32_t t0; + t0 = jit_get_reg(jit_class_fpr); + negr_d(rn(t0), r1); + mulr_d(rn(t0), rn(t0), r2); + addr_d(r0, rn(t0), r3); + jit_unget_reg(t0); +} + static void _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) {