lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat
-rw-r--r--lib/jit_hppa-fpu.c 106
1 files changed, 102 insertions, 4 deletions
diff --git a/lib/jit_hppa-fpu.c b/lib/jit_hppa-fpu.c
index d48d5ae..c676884 100644
--- a/lib/jit_hppa-fpu.c
+++ b/lib/jit_hppa-fpu.c
@@ -271,11 +271,19 @@ static void _f54(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,
#define negr_f(r0,r1) FNEG_S(r1,r0)
#define negr_d(r0,r1) FNEG_D(r1,r0)
#define sqrtr_f(r0,r1) FSQRT_S(r1,r0)
-#define fmar_f(r0,r1,r2,r3) FMPYFADD_S(r1,r2,r3,r0)
-#define fmsr_f(r0,r1,r2,r3) FMPYFSUB_S(r1,r2,r3,r0)
+#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 sqrtr_d(r0,r1) FSQRT_D(r1,r0)
-#define fmar_d(r0,r1,r2,r3) FMPYFADD_D(r1,r2,r3,r0)
-#define fmsr_d(r0,r1,r2,r3) FMPYFSUB_D(r1,r2,r3,r0)
+#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 extr_f(r0,r1) _extr_f(_jit,r0,r1)
static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
#define extr_d(r0,r1) _extr_d(_jit,r0,r1)
@@ -704,6 +712,51 @@ _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
}
static void
+_fmar_f(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+#if 1
+ jit_int32_t reg;
+ if (r0 != r3) {
+ mulr_f(r0, r1, r2);
+ addr_f(r0, r0, r3);
+ }
+ else {
+ reg = jit_get_reg(jit_class_fpr);
+ mulr_f(rn(reg), r1, r2);
+ addr_f(r0, rn(reg), r3);
+ jit_unget_reg(reg);
+ }
+#else
+ FMPYFADD_S(r1, r2, r3, r0);
+#endif
+}
+
+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 reg;
+#if 1
+ if (r0 != r3) {
+ mulr_f(r0, r1, r2);
+ subr_f(r0, r0, r3);
+ }
+ else {
+ reg = jit_get_reg(jit_class_fpr);
+ mulr_f(rn(reg), r1, r2);
+ subr_f(r0, rn(reg), r3);
+ jit_unget_reg(reg);
+ }
+#else
+ reg = jit_get_reg(jit_class_fpr);
+ negr_f(rn(reg), r3);
+ fmar_f(r0, r1, r2, rn(reg));
+ jit_unget_reg(reg);
+#endif
+}
+
+static void
_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
{
union {
@@ -735,6 +788,51 @@ _movi_w_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
}
static void
+_fmar_d(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+#if 1
+ jit_int32_t reg;
+ if (r0 != r3) {
+ mulr_d(r0, r1, r2);
+ addr_d(r0, r0, r3);
+ }
+ else {
+ reg = jit_get_reg(jit_class_fpr);
+ mulr_d(rn(reg), r1, r2);
+ addr_d(r0, rn(reg), r3);
+ jit_unget_reg(reg);
+ }
+#else
+ FMPYFADD_D(r1, r2, r3, r0);
+#endif
+}
+
+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 reg;
+#if 1
+ if (r0 != r3) {
+ mulr_d(r0, r1, r2);
+ subr_d(r0, r0, r3);
+ }
+ else {
+ reg = jit_get_reg(jit_class_fpr);
+ mulr_d(rn(reg), r1, r2);
+ subr_d(r0, rn(reg), r3);
+ jit_unget_reg(reg);
+ }
+#else
+ reg = jit_get_reg(jit_class_fpr);
+ negr_d(rn(reg), r3);
+ fmar_d(r0, r1, r2, rn(reg));
+ jit_unget_reg(reg);
+#endif
+}
+
+static void
_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
{
union {
generated by cgit v1.2.3 (git 2.39.1) at 2025年10月03日 07:33:20 +0000

AltStyle によって変換されたページ (->オリジナル) /