ARM JIT: avoid direct use of __aeabi_... for software fp
This commit is contained in:
parent
0b8e764e99
commit
7e0d3beb67
|
@ -38,6 +38,9 @@
|
||||||
|
|
||||||
#define swf_off(rn) (-JIT_FRAME_EXTRA_SPACE_OFFSET + ((rn) << 2))
|
#define swf_off(rn) (-JIT_FRAME_EXTRA_SPACE_OFFSET + ((rn) << 2))
|
||||||
|
|
||||||
|
#ifdef USE_DIRECT_AEABI_FP_FUNCTIONS
|
||||||
|
/* These functions are normally provided by fplib: */
|
||||||
|
# define jit_swf_fp(f) f
|
||||||
extern float __addsf3(float, float);
|
extern float __addsf3(float, float);
|
||||||
extern double __adddf3(double, double);
|
extern double __adddf3(double, double);
|
||||||
extern float __aeabi_fsub(float, float);
|
extern float __aeabi_fsub(float, float);
|
||||||
|
@ -64,6 +67,36 @@ extern int __aeabi_fcmpgt(float, float);
|
||||||
extern int __aeabi_dcmpgt(double, double);
|
extern int __aeabi_dcmpgt(double, double);
|
||||||
extern int __aeabi_fcmpun(float, float);
|
extern int __aeabi_fcmpun(float, float);
|
||||||
extern int __aeabi_dcmpun(double, double);
|
extern int __aeabi_dcmpun(double, double);
|
||||||
|
#else
|
||||||
|
/* More portable (to older systems that use trapped instructions, instead): */
|
||||||
|
# define jit_swf_fp(f) jit_swf__ ## f
|
||||||
|
static float jit_swf_fp(__addsf3)(float a, float b) { return a + b; }
|
||||||
|
static double jit_swf_fp(__adddf3)(double a, double b) { return a + b; }
|
||||||
|
static float jit_swf_fp(__aeabi_fsub)(float a, float b) { return a - b; }
|
||||||
|
static double jit_swf_fp(__aeabi_dsub)(double a, double b) { return a - b; }
|
||||||
|
static float jit_swf_fp(__aeabi_fmul)(float a, float b) { return a * b; }
|
||||||
|
static double jit_swf_fp(__aeabi_dmul)(double a, double b) { return a * b; }
|
||||||
|
static float jit_swf_fp(__aeabi_fdiv)(float a, float b) { return a / b; }
|
||||||
|
static double jit_swf_fp(__aeabi_ddiv)(double a, double b) { return a / b; }
|
||||||
|
static float jit_swf_fp(__aeabi_i2f)(int a) { return (float)a; }
|
||||||
|
static double jit_swf_fp(__aeabi_i2d)(int a) { return (double)a; }
|
||||||
|
static float jit_swf_fp(__aeabi_d2f)(double a) { return (float)a; }
|
||||||
|
static double jit_swf_fp(__aeabi_f2d)(float a) { return (double)a; }
|
||||||
|
static int jit_swf_fp(__aeabi_f2iz)(double a) { return (int)a; }
|
||||||
|
static int jit_swf_fp(__aeabi_d2iz)(float a) { return (float)a; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmplt)(float a, float b) { return a < b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmplt)(double a, double b) { return a < b; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmple)(float a, float b) { return a <= b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmple)(double a, double b) { return a <= b; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmpeq)(float a, float b) { return a == b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmpeq)(double a, double b) { return a == b; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmpge)(float a, float b) { return a >= b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmpge)(double a, double b) { return a >= b; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmpgt)(float a, float b) { return a > b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmpgt)(double a, double b) { return a > b; }
|
||||||
|
static int jit_swf_fp(__aeabi_fcmpun)(float a, float b) { return a != b; }
|
||||||
|
static int jit_swf_fp(__aeabi_dcmpun)(double a, double b) { return a != b; }
|
||||||
|
#endif
|
||||||
|
|
||||||
#define swf_call(function, label) \
|
#define swf_call(function, label) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -206,7 +239,7 @@ swf_extr_i_f(jit_state_t _jitp, jit_fpr_t r0, jit_gpr_t r1)
|
||||||
swf_push(0xf);
|
swf_push(0xf);
|
||||||
if (r1 != _R0)
|
if (r1 != _R0)
|
||||||
jit_movr_i(_R0, r1);
|
jit_movr_i(_R0, r1);
|
||||||
swf_call(__aeabi_i2f, i2f);
|
swf_call(jit_swf_fp(__aeabi_i2f), i2f);
|
||||||
swf_strin(_R0, JIT_FP, swf_off(r0) + 8);
|
swf_strin(_R0, JIT_FP, swf_off(r0) + 8);
|
||||||
swf_pop(0xf);
|
swf_pop(0xf);
|
||||||
}
|
}
|
||||||
|
@ -217,7 +250,7 @@ swf_extr_i_d(jit_state_t _jitp, jit_fpr_t r0, jit_gpr_t r1)
|
||||||
swf_push(0xf);
|
swf_push(0xf);
|
||||||
if (r1 != _R0)
|
if (r1 != _R0)
|
||||||
jit_movr_i(_R0, r1);
|
jit_movr_i(_R0, r1);
|
||||||
swf_call(__aeabi_i2d, i2d);
|
swf_call(jit_swf_fp(__aeabi_i2d), i2d);
|
||||||
if (!jit_thumb_p() && jit_armv5e_p())
|
if (!jit_thumb_p() && jit_armv5e_p())
|
||||||
_STRDIN(_R0, JIT_FP, swf_off(r0) + 8);
|
_STRDIN(_R0, JIT_FP, swf_off(r0) + 8);
|
||||||
else {
|
else {
|
||||||
|
@ -237,7 +270,7 @@ swf_extr_d_f(jit_state_t _jitp, jit_fpr_t r0, jit_fpr_t r1)
|
||||||
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
||||||
swf_ldrin(_R1, JIT_FP, swf_off(r1) + 4);
|
swf_ldrin(_R1, JIT_FP, swf_off(r1) + 4);
|
||||||
}
|
}
|
||||||
swf_call(__aeabi_d2f, d2f);
|
swf_call(jit_swf_fp(__aeabi_d2f), d2f);
|
||||||
swf_strin(_R0, JIT_FP, swf_off(r0) + 8);
|
swf_strin(_R0, JIT_FP, swf_off(r0) + 8);
|
||||||
swf_pop(0xf);
|
swf_pop(0xf);
|
||||||
}
|
}
|
||||||
|
@ -247,7 +280,7 @@ swf_extr_f_d(jit_state_t _jitp, jit_fpr_t r0, jit_fpr_t r1)
|
||||||
{
|
{
|
||||||
swf_push(0xf);
|
swf_push(0xf);
|
||||||
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
||||||
swf_call(__aeabi_f2d, f2d);
|
swf_call(jit_swf_fp(__aeabi_f2d), f2d);
|
||||||
if (!jit_thumb_p() && jit_armv5e_p())
|
if (!jit_thumb_p() && jit_armv5e_p())
|
||||||
_STRDIN(_R0, JIT_FP, swf_off(r0) + 8);
|
_STRDIN(_R0, JIT_FP, swf_off(r0) + 8);
|
||||||
else {
|
else {
|
||||||
|
@ -306,7 +339,7 @@ swf_if(jit_state_t _jitp, float (*i0)(float), jit_gpr_t r0, jit_fpr_t r1)
|
||||||
#endif
|
#endif
|
||||||
if (i0)
|
if (i0)
|
||||||
swf_call(i0, fallback);
|
swf_call(i0, fallback);
|
||||||
swf_call(__aeabi_f2iz, f2iz);
|
swf_call(jit_swf_fp(__aeabi_f2iz), f2iz);
|
||||||
jit_movr_i(r0, _R0);
|
jit_movr_i(r0, _R0);
|
||||||
#if !NAN_TO_INT_IS_ZERO
|
#if !NAN_TO_INT_IS_ZERO
|
||||||
jit_patch(is_nan);
|
jit_patch(is_nan);
|
||||||
|
@ -369,7 +402,7 @@ swf_id(jit_state_t _jitp, double (*i0)(double), jit_gpr_t r0, jit_fpr_t r1)
|
||||||
#endif
|
#endif
|
||||||
if (i0)
|
if (i0)
|
||||||
swf_call(i0, fallback);
|
swf_call(i0, fallback);
|
||||||
swf_call(__aeabi_d2iz, d2iz);
|
swf_call(jit_swf_fp(__aeabi_d2iz), d2iz);
|
||||||
jit_movr_i(r0, _R0);
|
jit_movr_i(r0, _R0);
|
||||||
#if !NAN_TO_INT_IS_ZERO
|
#if !NAN_TO_INT_IS_ZERO
|
||||||
jit_patch(is_nan);
|
jit_patch(is_nan);
|
||||||
|
@ -507,14 +540,14 @@ swf_ddd(jit_state_t _jitp, double (*i0)(double, double),
|
||||||
swf_pop(0xf);
|
swf_pop(0xf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define swf_addr_f(_jitp, r0, r1, r2) swf_fff(_jitp, __addsf3, r0, r1, r2)
|
#define swf_addr_f(_jitp, r0, r1, r2) swf_fff(_jitp, jit_swf_fp(__addsf3), r0, r1, r2)
|
||||||
#define swf_addr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, __adddf3, r0, r1, r2)
|
#define swf_addr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, jit_swf_fp(__adddf3), r0, r1, r2)
|
||||||
#define swf_subr_f(_jitp, r0, r1, r2) swf_fff(_jitp, __aeabi_fsub, r0, r1, r2)
|
#define swf_subr_f(_jitp, r0, r1, r2) swf_fff(_jitp, jit_swf_fp(__aeabi_fsub), r0, r1, r2)
|
||||||
#define swf_subr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, __aeabi_dsub, r0, r1, r2)
|
#define swf_subr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, jit_swf_fp(__aeabi_dsub), r0, r1, r2)
|
||||||
#define swf_mulr_f(_jitp, r0, r1, r2) swf_fff(_jitp, __aeabi_fmul, r0, r1, r2)
|
#define swf_mulr_f(_jitp, r0, r1, r2) swf_fff(_jitp, jit_swf_fp(__aeabi_fmul), r0, r1, r2)
|
||||||
#define swf_mulr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, __aeabi_dmul, r0, r1, r2)
|
#define swf_mulr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, jit_swf_fp(__aeabi_dmul), r0, r1, r2)
|
||||||
#define swf_divr_f(_jitp, r0, r1, r2) swf_fff(_jitp, __aeabi_fdiv, r0, r1, r2)
|
#define swf_divr_f(_jitp, r0, r1, r2) swf_fff(_jitp, jit_swf_fp(__aeabi_fdiv), r0, r1, r2)
|
||||||
#define swf_divr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, __aeabi_ddiv, r0, r1, r2)
|
#define swf_divr_d(_jitp, r0, r1, r2) swf_ddd(_jitp, jit_swf_fp(__aeabi_ddiv), r0, r1, r2)
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_iff(jit_state_t _jitp, int (*i0)(float, float),
|
swf_iff(jit_state_t _jitp, int (*i0)(float, float),
|
||||||
|
@ -558,28 +591,28 @@ swf_idd(jit_state_t _jitp, int (*i0)(double, double),
|
||||||
swf_pop(l);
|
swf_pop(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define swf_ltr_f(_jitp, r0, r1, r2) swf_iff(_jitp, __aeabi_fcmplt,r0,r1,r2)
|
#define swf_ltr_f(_jitp, r0, r1, r2) swf_iff(_jitp, jit_swf_fp(__aeabi_fcmplt),r0,r1,r2)
|
||||||
#define swf_ltr_d(_jitp, r0, r1, r2) swf_idd(_jitp, __aeabi_dcmplt,r0,r1,r2)
|
#define swf_ltr_d(_jitp, r0, r1, r2) swf_idd(_jitp, jit_swf_fp(__aeabi_dcmplt),r0,r1,r2)
|
||||||
#define swf_ler_f(_jitp, r0, r1, r2) swf_iff(_jitp, __aeabi_fcmple,r0,r1,r2)
|
#define swf_ler_f(_jitp, r0, r1, r2) swf_iff(_jitp, jit_swf_fp(__aeabi_fcmple),r0,r1,r2)
|
||||||
#define swf_ler_d(_jitp, r0, r1, r2) swf_idd(_jitp, __aeabi_dcmple,r0,r1,r2)
|
#define swf_ler_d(_jitp, r0, r1, r2) swf_idd(_jitp, jit_swf_fp(__aeabi_dcmple),r0,r1,r2)
|
||||||
#define swf_eqr_f(_jitp, r0, r1, r2) swf_iff(_jitp, __aeabi_fcmpeq,r0,r1,r2)
|
#define swf_eqr_f(_jitp, r0, r1, r2) swf_iff(_jitp, jit_swf_fp(__aeabi_fcmpeq),r0,r1,r2)
|
||||||
#define swf_eqr_d(_jitp, r0, r1, r2) swf_idd(_jitp, __aeabi_dcmpeq,r0,r1,r2)
|
#define swf_eqr_d(_jitp, r0, r1, r2) swf_idd(_jitp, jit_swf_fp(__aeabi_dcmpeq),r0,r1,r2)
|
||||||
#define swf_ger_f(_jitp, r0, r1, r2) swf_iff(_jitp, __aeabi_fcmpge,r0,r1,r2)
|
#define swf_ger_f(_jitp, r0, r1, r2) swf_iff(_jitp, jit_swf_fp(__aeabi_fcmpge),r0,r1,r2)
|
||||||
#define swf_ger_d(_jitp, r0, r1, r2) swf_idd(_jitp, __aeabi_dcmpge,r0,r1,r2)
|
#define swf_ger_d(_jitp, r0, r1, r2) swf_idd(_jitp, jit_swf_fp(__aeabi_dcmpge),r0,r1,r2)
|
||||||
#define swf_gtr_f(_jitp, r0, r1, r2) swf_iff(_jitp, __aeabi_fcmpgt,r0,r1,r2)
|
#define swf_gtr_f(_jitp, r0, r1, r2) swf_iff(_jitp, jit_swf_fp(__aeabi_fcmpgt),r0,r1,r2)
|
||||||
#define swf_gtr_d(_jitp, r0, r1, r2) swf_idd(_jitp, __aeabi_dcmpgt,r0,r1,r2)
|
#define swf_gtr_d(_jitp, r0, r1, r2) swf_idd(_jitp, jit_swf_fp(__aeabi_dcmpgt),r0,r1,r2)
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ner_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ner_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_iff(_jitp, __aeabi_fcmpeq, r0, r1, r2);
|
swf_iff(_jitp, jit_swf_fp(__aeabi_fcmpeq), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ner_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ner_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_idd(_jitp, __aeabi_dcmpeq, r0, r1, r2);
|
swf_idd(_jitp, jit_swf_fp(__aeabi_dcmpeq), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,7 +629,7 @@ swf_iunff(jit_state_t _jitp, int (*i0)(float, float),
|
||||||
swf_push(l);
|
swf_push(l);
|
||||||
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
||||||
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_call(__aeabi_fcmpun, fcmpun);
|
swf_call(jit_swf_fp(__aeabi_fcmpun), fcmpun);
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
_IT(ARM_CC_NE);
|
_IT(ARM_CC_NE);
|
||||||
|
@ -642,7 +675,7 @@ swf_iundd(jit_state_t _jitp, int (*i0)(double, double),
|
||||||
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
||||||
}
|
}
|
||||||
swf_call(__aeabi_dcmpun, dcmpun);
|
swf_call(jit_swf_fp(__aeabi_dcmpun), dcmpun);
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
_IT(ARM_CC_NE);
|
_IT(ARM_CC_NE);
|
||||||
|
@ -675,47 +708,47 @@ swf_iundd(jit_state_t _jitp, int (*i0)(double, double),
|
||||||
swf_pop(l);
|
swf_pop(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define swf_unltr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmplt,r0,r1,r2)
|
#define swf_unltr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmplt),r0,r1,r2)
|
||||||
#define swf_unltr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmplt,r0,r1,r2)
|
#define swf_unltr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmplt),r0,r1,r2)
|
||||||
#define swf_unler_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmple,r0,r1,r2)
|
#define swf_unler_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmple),r0,r1,r2)
|
||||||
#define swf_unler_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmple,r0,r1,r2)
|
#define swf_unler_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmple),r0,r1,r2)
|
||||||
#define swf_uneqr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmpeq,r0,r1,r2)
|
#define swf_uneqr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmpeq),r0,r1,r2)
|
||||||
#define swf_uneqr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmpeq,r0,r1,r2)
|
#define swf_uneqr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmpeq),r0,r1,r2)
|
||||||
#define swf_unger_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmpge,r0,r1,r2)
|
#define swf_unger_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmpge),r0,r1,r2)
|
||||||
#define swf_unger_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmpge,r0,r1,r2)
|
#define swf_unger_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmpge),r0,r1,r2)
|
||||||
#define swf_ungtr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmpgt,r0,r1,r2)
|
#define swf_ungtr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmpgt),r0,r1,r2)
|
||||||
#define swf_ungtr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmpgt,r0,r1,r2)
|
#define swf_ungtr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmpgt),r0,r1,r2)
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ltgtr_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ltgtr_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_iunff(_jitp, __aeabi_fcmpeq, r0, r1, r2);
|
swf_iunff(_jitp, jit_swf_fp(__aeabi_fcmpeq), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ltgtr_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ltgtr_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_iundd(_jitp, __aeabi_dcmpeq, r0, r1, r2);
|
swf_iundd(_jitp, jit_swf_fp(__aeabi_dcmpeq), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ordr_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ordr_f(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_iff(_jitp, __aeabi_fcmpun, r0, r1, r2);
|
swf_iff(_jitp, jit_swf_fp(__aeabi_fcmpun), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ordr_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
swf_ordr_d(jit_state_t _jitp, jit_gpr_t r0, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
{
|
{
|
||||||
swf_idd(_jitp, __aeabi_dcmpun, r0, r1, r2);
|
swf_idd(_jitp, jit_swf_fp(__aeabi_dcmpun), r0, r1, r2);
|
||||||
jit_xori_i(r0, r0, 1);
|
jit_xori_i(r0, r0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define swf_unordr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,__aeabi_fcmpun,r0,r1,r2)
|
#define swf_unordr_f(_jitp, r0, r1, r2) swf_iunff(_jitp,jit_swf_fp(__aeabi_fcmpun),r0,r1,r2)
|
||||||
#define swf_unordr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,__aeabi_dcmpun,r0,r1,r2)
|
#define swf_unordr_d(_jitp, r0, r1, r2) swf_iundd(_jitp,jit_swf_fp(__aeabi_dcmpun),r0,r1,r2)
|
||||||
|
|
||||||
__jit_inline jit_insn *
|
__jit_inline jit_insn *
|
||||||
swf_bff(jit_state_t _jitp, int (*i0)(float, float), int cc,
|
swf_bff(jit_state_t _jitp, int (*i0)(float, float), int cc,
|
||||||
|
@ -772,22 +805,22 @@ swf_bdd(jit_state_t _jitp, int (*i0)(double, double), int cc,
|
||||||
return (l);
|
return (l);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define swf_bltr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmplt,ARM_CC_NE,i0,r0,r1)
|
#define swf_bltr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmplt),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bltr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmplt,ARM_CC_NE,i0,r0,r1)
|
#define swf_bltr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmplt),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bler_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmple,ARM_CC_NE,i0,r0,r1)
|
#define swf_bler_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmple),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bler_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmple,ARM_CC_NE,i0,r0,r1)
|
#define swf_bler_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmple),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_beqr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpeq,ARM_CC_NE,i0,r0,r1)
|
#define swf_beqr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpeq),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_beqr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpeq,ARM_CC_NE,i0,r0,r1)
|
#define swf_beqr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpeq),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bger_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpge,ARM_CC_NE,i0,r0,r1)
|
#define swf_bger_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpge),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bger_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpge,ARM_CC_NE,i0,r0,r1)
|
#define swf_bger_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpge),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bgtr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpgt,ARM_CC_NE,i0,r0,r1)
|
#define swf_bgtr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpgt),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bgtr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpgt,ARM_CC_NE,i0,r0,r1)
|
#define swf_bgtr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpgt),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bner_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpeq,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bner_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpeq),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bner_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpeq,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bner_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpeq),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunltr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpge,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunltr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpge),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunltr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpge,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunltr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpge),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunler_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpgt,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunler_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpgt),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunler_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpgt,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunler_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpgt),ARM_CC_EQ,i0,r0,r1)
|
||||||
|
|
||||||
__jit_inline jit_insn *
|
__jit_inline jit_insn *
|
||||||
swf_bunff(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
swf_bunff(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
|
@ -799,7 +832,7 @@ swf_bunff(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
swf_push(0xf);
|
swf_push(0xf);
|
||||||
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
||||||
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_call(__aeabi_fcmpun, fcmpun);
|
swf_call(jit_swf_fp(__aeabi_fcmpun), fcmpun);
|
||||||
/* if unordered */
|
/* if unordered */
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
|
@ -813,7 +846,7 @@ swf_bunff(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
}
|
}
|
||||||
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
swf_ldrin(_R0, JIT_FP, swf_off(r1) + 8);
|
||||||
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R1, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_call(__aeabi_fcmpeq, fcmpeq);
|
swf_call(jit_swf_fp(__aeabi_fcmpeq), fcmpeq);
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
j1 = _jitp->x.pc;
|
j1 = _jitp->x.pc;
|
||||||
|
@ -863,7 +896,7 @@ swf_bundd(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
||||||
}
|
}
|
||||||
swf_call(__aeabi_dcmpun, dcmpun);
|
swf_call(jit_swf_fp(__aeabi_dcmpun), dcmpun);
|
||||||
/* if unordered */
|
/* if unordered */
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
|
@ -885,7 +918,7 @@ swf_bundd(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
swf_ldrin(_R2, JIT_FP, swf_off(r2) + 8);
|
||||||
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
swf_ldrin(_R3, JIT_FP, swf_off(r2) + 4);
|
||||||
}
|
}
|
||||||
swf_call(__aeabi_dcmpeq, dcmpeq);
|
swf_call(jit_swf_fp(__aeabi_dcmpeq), dcmpeq);
|
||||||
if (jit_thumb_p()) {
|
if (jit_thumb_p()) {
|
||||||
T1_CMPI(_R0, 0);
|
T1_CMPI(_R0, 0);
|
||||||
j1 = _jitp->x.pc;
|
j1 = _jitp->x.pc;
|
||||||
|
@ -919,16 +952,16 @@ swf_bundd(jit_state_t _jitp, int eq, void *i1, jit_fpr_t r1, jit_fpr_t r2)
|
||||||
|
|
||||||
#define swf_buneqr_f(_jitp,i0,r0,r1) swf_bunff(_jitp,1,i0,r0,r1)
|
#define swf_buneqr_f(_jitp,i0,r0,r1) swf_bunff(_jitp,1,i0,r0,r1)
|
||||||
#define swf_buneqr_d(_jitp,i0,r0,r1) swf_bundd(_jitp,1,i0,r0,r1)
|
#define swf_buneqr_d(_jitp,i0,r0,r1) swf_bundd(_jitp,1,i0,r0,r1)
|
||||||
#define swf_bunger_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmplt,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunger_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmplt),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunger_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmplt,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bunger_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmplt),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bungtr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmple,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bungtr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmple),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bungtr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmple,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bungtr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmple),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bltgtr_f(_jitp,i0,r0,r1) swf_bunff(_jitp,0,i0,r0,r1)
|
#define swf_bltgtr_f(_jitp,i0,r0,r1) swf_bunff(_jitp,0,i0,r0,r1)
|
||||||
#define swf_bltgtr_d(_jitp,i0,r0,r1) swf_bundd(_jitp,0,i0,r0,r1)
|
#define swf_bltgtr_d(_jitp,i0,r0,r1) swf_bundd(_jitp,0,i0,r0,r1)
|
||||||
#define swf_bordr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpun,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bordr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpun),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bordr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpun,ARM_CC_EQ,i0,r0,r1)
|
#define swf_bordr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpun),ARM_CC_EQ,i0,r0,r1)
|
||||||
#define swf_bunordr_f(_jitp,i0,r0,r1) swf_bff(_jitp,__aeabi_fcmpun,ARM_CC_NE,i0,r0,r1)
|
#define swf_bunordr_f(_jitp,i0,r0,r1) swf_bff(_jitp,jit_swf_fp(__aeabi_fcmpun),ARM_CC_NE,i0,r0,r1)
|
||||||
#define swf_bunordr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,__aeabi_dcmpun,ARM_CC_NE,i0,r0,r1)
|
#define swf_bunordr_d(_jitp,i0,r0,r1) swf_bdd(_jitp,jit_swf_fp(__aeabi_dcmpun),ARM_CC_NE,i0,r0,r1)
|
||||||
|
|
||||||
__jit_inline void
|
__jit_inline void
|
||||||
swf_ldr_f(jit_state_t _jitp, jit_fpr_t r0, jit_gpr_t r1)
|
swf_ldr_f(jit_state_t _jitp, jit_fpr_t r0, jit_gpr_t r1)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user