X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightning%2Flib%2Fjit_ia64-fpu.c;h=bca90b70f06246f4e67447c6be3017af59c2fe9e;hb=ba86ff938a6b17c171dd68ebdf897ca3e30550f8;hp=19cc381a3277b7ffa273e3d2215fb36d4401a122;hpb=0adc619b5a5705d16cc6caea64951776ababbb96;p=pcsx_rearmed.git diff --git a/deps/lightning/lib/jit_ia64-fpu.c b/deps/lightning/lib/jit_ia64-fpu.c index 19cc381a..bca90b70 100644 --- a/deps/lightning/lib/jit_ia64-fpu.c +++ b/deps/lightning/lib/jit_ia64-fpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2019 Free Software Foundation, Inc. + * Copyright (C) 2013-2023 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -439,22 +439,34 @@ static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); static void _movr_w_f(jit_state_t*,jit_int32_t,jit_int32_t); #define movr_f_w(r0,r1) _movr_f_w(_jit,r0,r1) static void _movr_f_w(jit_state_t*,jit_int32_t,jit_int32_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 movr_w_d(r0,r1) _movr_w_d(_jit,r0,r1) static void _movr_w_d(jit_state_t*,jit_int32_t,jit_int32_t); #define movr_d_w(r0,r1) _movr_d_w(_jit,r0,r1) static void _movr_d_w(jit_state_t*,jit_int32_t,jit_int32_t); -#define movi_f_w(r0,i0) _movi_f_w(_jit,r0,i0) -static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*); -#define movi_d_w(r0,i0) _movi_d_w(_jit,r0,i0) -static void _movi_d_w(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) absr_d(r0,r1) #define absr_d(r0,r1) FABS(r0,r1) #define negr_f(r0,r1) negr_d(r0,r1) #define negr_d(r0,r1) FNEG(r0,r1) #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) FMA_S(r0,r1,r2,r3) +#define fmsr_f(r0,r1,r2,r3) FMS_S(r0,r1,r2,r3) +#define fnmsr_f(r0,r1,r2,r3) FNMA_S(r0,r1,r2,r3) +#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 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) FMA_D(r0,r1,r2,r3) +#define fmsr_d(r0,r1,r2,r3) FMS_D(r0,r1,r2,r3) +#define fnmsr_d(r0,r1,r2,r3) FNMA_D(r0,r1,r2,r3) +#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 extr_f_d(r0,r1) FNORM_D(r0,r1) #define extr_d_f(r0,r1) FNORM_S(r0,r1) #define extr_f(r0,r1) _extr_f(_jit,r0,r1) @@ -603,6 +615,10 @@ static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); #define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +# define unldr_x(r0, r1, i0) _unldr_x(_jit, r0, r1, i0) +static void _unldr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +# define unldi_x(r0, i0, i1) _unldi_x(_jit, r0, i0, i1) +static void _unldi_x(jit_state_t*, jit_int32_t, jit_word_t, jit_word_t); #define ldr_d(r0,r1) LDFD(r0,r1) #define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); @@ -617,6 +633,10 @@ static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); #define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +#define unstr_x(r0, r1, i0) _unstr_x(_jit, r0, r1, i0) +static void _unstr_x(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +#define unsti_x(i0, r0, i1) _unsti_x(_jit, i0, r0, i1) +static void _unsti_x(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); #define str_d(r0,r1) STFD(r0,r1) #define sti_d(i0,r0) _sti_d(_jit,i0,r0) static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); @@ -1072,19 +1092,13 @@ _movr_f_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) { - jit_data_t data; - - /* Should be used only in this case (with out0 == 120) */ - if (r0 >= 120) - r0 = _jitc->rout + (r0 - 120); - if (_jitc->no_data) { - data.f = *i0; - movi(r0, data.q.l); - } - else - ldi_i(r0, (jit_word_t)i0); + jit_int32_t reg; + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + movr_w_f(r0, rn(reg)); + jit_unget_reg(reg); } static void @@ -1106,22 +1120,13 @@ _movr_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_w_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) { - union { - jit_word_t w; - jit_float64_t d; - } data; - - /* Should be used only in this case (with out0 == 120) */ - if (r0 >= 120) - r0 = _jitc->rout + (r0 - 120); - if (_jitc->no_data) { - data.d = *i0; - movi(r0, data.w); - } - else - ldi_l(r0, (jit_word_t)i0); + jit_int32_t reg; + reg = jit_get_reg(jit_class_gpr); + movi(rn(reg), i0); + movr_w_d(r0, rn(reg)); + jit_unget_reg(reg); } #define fpr_opi(name, type, size) \ @@ -1421,6 +1426,24 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) ldr_f(r0, r1); } +static void +_unldr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +{ + if (jit_unaligned_p()) + fallback_unldr_x(r0, r1, i0); + else + generic_unldr_x(r0, r1, i0); +} + +static void +_unldi_x(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0, jit_word_t i1) +{ + if (jit_unaligned_p()) + fallback_unldi_x(r0, i0, i1); + else + generic_unldi_x(r0, i0, i1); +} + static void _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) { @@ -1489,6 +1512,24 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) str_f(r0, r1); } +static void +_unstr_x(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +{ + if (jit_unaligned_p()) + fallback_unstr_x(r0, r1, i0); + else + generic_unstr_x(r0, r1, i0); +} + +static void +_unsti_x(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +{ + if (jit_unaligned_p()) + fallback_unsti_x(i0, r0, i1); + else + fallback_unsti_x(i0, r0, i1); +} + static void _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) { @@ -1531,6 +1572,14 @@ _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) MOVF(r0, GR_8); } +static void +_fnmar_f(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + fmar_f(r0, r1, r2, r3); + negr_f(r0, r0); +} + static void _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { @@ -1539,6 +1588,14 @@ _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) MOVF(r0, GR_8); } +static void +_fnmar_d(jit_state_t *_jit, + jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +{ + fmar_d(r0, r1, r2, r3); + negr_d(r0, r0); +} + static jit_word_t _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) {