1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-06 12:10:28 +02:00

Port of arm-cpu.c to current lightening

This commit is contained in:
Andy Wingo 2019-05-19 22:21:50 +02:00
parent b71ddba1f7
commit 1ea34693cb
4 changed files with 2509 additions and 3990 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2017 Free Software Foundation, Inc.
* Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc.
*
* This file is part of GNU lightning.
*
@ -17,7 +17,6 @@
* Paulo Cesar Pereira de Andrade
*/
#if PROTO
/* as per vfp_regno macro, required due to "support" to soft float registers
* or using integer registers as arguments to float operations */
# define _D8_REGNO 32
@ -526,120 +525,14 @@ static void _vfp_divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
static void _vfp_cmp_f(jit_state_t*,int32_t,int32_t);
# define vfp_cmp_d(r0,r1) _vfp_cmp_d(_jit,r0,r1)
static void _vfp_cmp_d(jit_state_t*,int32_t,int32_t);
# define vcmp01_x(c0,c1,r0) _vcmp01_x(_jit,c0,c1,r0)
static void _vcmp01_x(jit_state_t*,int,int,int32_t);
# define vcmp01_f(c0,c1,r0,r1,r2) _vcmp01_f(_jit,c0,c1,r0,r1,r2)
static void _vcmp01_f(jit_state_t*,int,int,int32_t,int32_t,int32_t);
# define vcmp01_d(c0,c1,r0,r1,r2) _vcmp01_d(_jit,c0,c1,r0,r1,r2)
static void _vcmp01_d(jit_state_t*,int,int,int32_t,int32_t,int32_t);
# define vfp_ltr_f(r0,r1,r2) vcmp01_f(ARM_CC_PL,ARM_CC_MI,r0,r1,r2)
# define vfp_lti_f(r0,r1,i0) _vfp_lti_f(_jit,r0,r1,i0)
static void _vfp_lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ltr_d(r0,r1,r2) vcmp01_d(ARM_CC_PL,ARM_CC_MI,r0,r1,r2)
# define vfp_lti_d(r0,r1,i0) _vfp_lti_d(_jit,r0,r1,i0)
static void _vfp_lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ler_f(r0,r1,r2) vcmp01_f(ARM_CC_HS,ARM_CC_LS,r0,r1,r2)
# define vfp_lei_f(r0,r1,i0) _vfp_lei_f(_jit,r0,r1,i0)
static void _vfp_lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ler_d(r0,r1,r2) vcmp01_d(ARM_CC_HS,ARM_CC_LS,r0,r1,r2)
# define vfp_lei_d(r0,r1,i0) _vfp_lei_d(_jit,r0,r1,i0)
static void _vfp_lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_eqr_f(r0,r1,r2) vcmp01_f(ARM_CC_NE,ARM_CC_EQ,r0,r1,r2)
# define vfp_eqi_f(r0,r1,i0) _vfp_eqi_f(_jit,r0,r1,i0)
static void _vfp_eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_eqr_d(r0,r1,r2) vcmp01_d(ARM_CC_NE,ARM_CC_EQ,r0,r1,r2)
# define vfp_eqi_d(r0,r1,i0) _vfp_eqi_d(_jit,r0,r1,i0)
static void _vfp_eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ger_f(r0,r1,r2) vcmp01_f(ARM_CC_LT,ARM_CC_GE,r0,r1,r2)
# define vfp_gei_f(r0,r1,i0) _vfp_gei_f(_jit,r0,r1,i0)
static void _vfp_gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ger_d(r0,r1,r2) vcmp01_d(ARM_CC_LT,ARM_CC_GE,r0,r1,r2)
# define vfp_gei_d(r0,r1,i0) _vfp_gei_d(_jit,r0,r1,i0)
static void _vfp_gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_gtr_f(r0,r1,r2) vcmp01_f(ARM_CC_LE,ARM_CC_GT,r0,r1,r2)
# define vfp_gti_f(r0,r1,i0) _vfp_gti_f(_jit,r0,r1,i0)
static void _vfp_gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_gtr_d(r0,r1,r2) vcmp01_d(ARM_CC_LE,ARM_CC_GT,r0,r1,r2)
# define vfp_gti_d(r0,r1,i0) _vfp_gti_d(_jit,r0,r1,i0)
static void _vfp_gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ner_f(r0,r1,r2) vcmp01_f(ARM_CC_EQ,ARM_CC_NE,r0,r1,r2)
# define vfp_nei_f(r0,r1,i0) _vfp_nei_f(_jit,r0,r1,i0)
static void _vfp_nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ner_d(r0,r1,r2) vcmp01_d(ARM_CC_EQ,ARM_CC_NE,r0,r1,r2)
# define vfp_nei_d(r0,r1,i0) _vfp_nei_d(_jit,r0,r1,i0)
static void _vfp_nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vcmp10_x(c0,r0) _vcmp10_x(_jit,c0,r0)
static void _vcmp10_x(jit_state_t*,int,int32_t);
# define vcmp_10_f(c0,r0,r1,r2) _vcmp_10_f(_jit,c0,r0,r1,r2)
static void _vcmp_10_f(jit_state_t*,int,int32_t,int32_t,int32_t);
# define vcmp_10_d(c0,r0,r1,r2) _vcmp_10_d(_jit,c0,r0,r1,r2)
static void _vcmp_10_d(jit_state_t*,int,int32_t,int32_t,int32_t);
# define vfp_unltr_f(r0,r1,r2) vcmp_10_f(ARM_CC_GE,r0,r1,r2)
# define vfp_unlti_f(r0,r1,i0) _vfp_unlti_f(_jit,r0,r1,i0)
static void _vfp_unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_unltr_d(r0,r1,r2) vcmp_10_d(ARM_CC_GE,r0,r1,r2)
# define vfp_unlti_d(r0,r1,i0) _vfp_unlti_d(_jit,r0,r1,i0)
static void _vfp_unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_unler_f(r0,r1,r2) vcmp_10_f(ARM_CC_GT,r0,r1,r2)
# define vfp_unlei_f(r0,r1,i0) _vfp_unlei_f(_jit,r0,r1,i0)
static void _vfp_unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_unler_d(r0,r1,r2) vcmp_10_d(ARM_CC_GT,r0,r1,r2)
# define vfp_unlei_d(r0,r1,i0) _vfp_unlei_d(_jit,r0,r1,i0)
static void _vfp_unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_uneqr_x(r0) _vfp_uneqr_x(_jit,r0)
static void _vfp_uneqr_x(jit_state_t*,int32_t);
# define vfp_uneqr_f(r0,r1,r2) _vfp_uneqr_f(_jit,r0,r1,r2)
static void _vfp_uneqr_f(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_uneqi_f(r0,r1,i0) _vfp_uneqi_f(_jit,r0,r1,i0)
static void _vfp_uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_uneqr_d(r0,r1,r2) _vfp_uneqr_d(_jit,r0,r1,r2)
static void _vfp_uneqr_d(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_uneqi_d(r0,r1,i0) _vfp_uneqi_d(_jit,r0,r1,i0)
static void _vfp_uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vcmp_01_x(c0,r0) _vcmp_01_x(_jit,c0,r0)
static void _vcmp_01_x(jit_state_t*,int,int32_t);
# define vcmp_01_f(c0,r0,r1,r2) _vcmp_01_f(_jit,c0,r0,r1,r2)
static void _vcmp_01_f(jit_state_t*,int,int32_t,int32_t,int32_t);
# define vcmp_01_d(c0,r0,r1,r2) _vcmp_01_d(_jit,c0,r0,r1,r2)
static void _vcmp_01_d(jit_state_t*,int,int32_t,int32_t,int32_t);
# define vfp_unger_f(r0,r1,r2) vcmp_01_f(ARM_CC_CS,r0,r1,r2)
# define vfp_ungei_f(r0,r1,i0) _vfp_ungei_f(_jit,r0,r1,i0)
static void _vfp_ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_unger_d(r0,r1,r2) vcmp_01_d(ARM_CC_CS,r0,r1,r2)
# define vfp_ungei_d(r0,r1,i0) _vfp_ungei_d(_jit,r0,r1,i0)
static void _vfp_ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ungtr_f(r0,r1,r2) vcmp_01_f(ARM_CC_HI,r0,r1,r2)
# define vfp_ungti_f(r0,r1,i0) _vfp_ungti_f(_jit,r0,r1,i0)
static void _vfp_ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ungtr_d(r0,r1,r2) vcmp_01_d(ARM_CC_HI,r0,r1,r2)
# define vfp_ungti_d(r0,r1,i0) _vfp_ungti_d(_jit,r0,r1,i0)
static void _vfp_ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ltgtr_x(r0) _vfp_ltgtr_x(_jit,r0)
static void _vfp_ltgtr_x(jit_state_t*,int32_t);
# define vfp_ltgtr_f(r0,r1,r2) _vfp_ltgtr_f(_jit,r0,r1,r2)
static void _vfp_ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_ltgti_f(r0,r1,i0) _vfp_ltgti_f(_jit,r0,r1,i0)
static void _vfp_ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ltgtr_d(r0,r1,r2) _vfp_ltgtr_d(_jit,r0,r1,r2)
static void _vfp_ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_ltgti_d(r0,r1,i0) _vfp_ltgti_d(_jit,r0,r1,i0)
static void _vfp_ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_ordr_f(r0,r1,r2) _vfp_ordr_f(_jit,r0,r1,r2)
static void _vfp_ordr_f(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_ordi_f(r0,r1,i0) _vfp_ordi_f(_jit,r0,r1,i0)
static void _vfp_ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_ordr_d(r0,r1,r2) _vfp_ordr_d(_jit,r0,r1,r2)
static void _vfp_ordr_d(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_ordi_d(r0,r1,i0) _vfp_ordi_d(_jit,r0,r1,i0)
static void _vfp_ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vfp_unordr_f(r0,r1,r2) _vfp_unordr_f(_jit,r0,r1,r2)
static void _vfp_unordr_f(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_unordi_f(r0,r1,i0) _vfp_unordi_f(_jit,r0,r1,i0)
static void _vfp_unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t);
# define vfp_unordr_d(r0,r1,r2) _vfp_unordr_d(_jit,r0,r1,r2)
static void _vfp_unordr_d(jit_state_t*,int32_t,int32_t,int32_t);
# define vfp_unordi_d(r0,r1,i0) _vfp_unordi_d(_jit,r0,r1,i0)
static void _vfp_unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t);
# define vbcmp_x(cc,i0) _vbcmp_x(_jit,cc,i0)
static jit_word_t _vbcmp_x(jit_state_t*,int,jit_word_t);
# define vbcmp_f(cc,i0,r0,r1) _vbcmp_f(_jit,cc,i0,r0,r1)
@ -806,9 +699,7 @@ static void _vfp_stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t);
static void _vfp_stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t);
# define vfp_vaarg_d(r0, r1) _vfp_vaarg_d(_jit, r0, r1)
static void _vfp_vaarg_d(jit_state_t*, int32_t, int32_t);
#endif
#if CODE
# define vfp_regno(rn) (((rn) - 16) >> 1)
static int
@ -1416,64 +1307,6 @@ _vfp_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1)
jit_unget_reg(reg);
}
# define fopi(name) \
static void \
_vfp_##name##i_f(jit_state_t *_jit, \
int32_t r0, int32_t r1, jit_float32_t i0) \
{ \
int32_t reg = jit_get_reg(jit_class_fpr); \
vfp_movi_f(rn(reg), i0); \
vfp_##name##r_f(r0, r1, rn(reg)); \
jit_unget_reg(reg); \
}
# define dopi(name) \
static void \
_vfp_##name##i_d(jit_state_t *_jit, \
int32_t r0, int32_t r1, jit_float64_t i0) \
{ \
int32_t reg = jit_get_reg(jit_class_fpr); \
vfp_movi_d(rn(reg), i0); \
vfp_##name##r_d(r0, r1, rn(reg)); \
jit_unget_reg(reg); \
}
# define fbopi(name) \
static jit_word_t \
_vfp_b##name##i_f(jit_state_t *_jit, \
int32_t r0, int32_t r1, jit_float32_t i0) \
{ \
jit_word_t word; \
int32_t reg = jit_get_reg(jit_class_fpr| \
jit_class_nospill); \
vfp_movi_f(rn(reg), i0); \
word = vfp_b##name##r_f(r0, r1, rn(reg)); \
jit_unget_reg(reg); \
return (word); \
}
# define dbopi(name) \
static jit_word_t \
_vfp_b##name##i_d(jit_state_t *_jit, \
int32_t r0, int32_t r1, jit_float64_t i0) \
{ \
jit_word_t word; \
int32_t reg = jit_get_reg(jit_class_fpr| \
jit_class_nospill); \
vfp_movi_d(rn(reg), i0); \
word = vfp_b##name##r_d(r0, r1, rn(reg)); \
jit_unget_reg(reg); \
return (word); \
}
fopi(add)
dopi(add)
fopi(sub)
fopi(rsb)
dopi(rsb)
dopi(sub)
fopi(mul)
dopi(mul)
fopi(div)
dopi(div)
static void
_vfp_cmp_f(jit_state_t *_jit, int32_t r0, int32_t r1)
{
@ -1532,284 +1365,6 @@ _vfp_cmp_d(jit_state_t *_jit, int32_t r0, int32_t r1)
}
}
static void
_vcmp01_x(jit_state_t *_jit, int c0, int c1, int32_t r0)
{
VMRS(_R15_REGNO);
if (jit_thumb_p()) {
if ((c0 ^ c1) >> 28 == 1) {
ITE(c0);
if (r0 < 8) {
T1_MOVI(r0, 0);
T1_MOVI(r0, 1);
}
else {
T2_MOVI(r0, 0);
T2_MOVI(r0, 1);
}
}
else {
if (r0 < 8) {
IT(c0);
T1_MOVI(r0, 0);
IT(c1);
T1_MOVI(r0, 1);
}
else {
IT(c0);
T2_MOVI(r0, 0);
IT(c1);
T2_MOVI(r0, 1);
}
}
}
else {
CC_MOVI(c0, r0, 0);
CC_MOVI(c1, r0, 1);
}
}
static void
_vcmp01_f(jit_state_t *_jit, int c0, int c1,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vcmp01_x(c0, c1, r0);
}
static void
_vcmp01_d(jit_state_t *_jit, int c0, int c1,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vcmp01_x(c0, c1, r0);
}
static void
_vcmp10_x(jit_state_t *_jit, int cc, int32_t r0)
{
if (jit_thumb_p()) {
if (r0 < 8) {
T1_MOVI(r0, 1);
VMRS(_R15_REGNO);
IT(cc);
T1_MOVI(r0, 0);
}
else {
T2_MOVI(r0, 1);
VMRS(_R15_REGNO);
IT(cc);
T2_MOVI(r0, 0);
}
}
else {
VMRS(_R15_REGNO);
MOVI(r0, 1);
CC_MOVI(cc, r0, 0);
}
}
static void
_vcmp_10_f(jit_state_t *_jit, int cc,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vcmp10_x(cc, r0);
}
static void
_vcmp_10_d(jit_state_t *_jit, int cc,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vcmp10_x(cc, r0);
}
fopi(lt)
dopi(lt)
fopi(le)
dopi(le)
fopi(eq)
dopi(eq)
fopi(ge)
dopi(ge)
fopi(gt)
dopi(gt)
fopi(ne)
dopi(ne)
fopi(unlt)
dopi(unlt)
fopi(unle)
dopi(unle)
static void
_vfp_uneqr_x(jit_state_t *_jit, int32_t r0)
{
VMRS(_R15_REGNO);
if (jit_thumb_p()) {
ITE(ARM_CC_NE);
if (r0 < 8) {
T1_MOVI(r0, 0);
T1_MOVI(r0, 1);
IT(ARM_CC_VS);
T1_MOVI(r0, 1);
}
else {
T2_MOVI(r0, 0);
T2_MOVI(r0, 1);
IT(ARM_CC_VS);
T2_MOVI(r0, 1);
}
}
else {
CC_MOVI(ARM_CC_NE, r0, 0);
CC_MOVI(ARM_CC_EQ, r0, 1);
CC_MOVI(ARM_CC_VS, r0, 1);
}
}
static void
_vfp_uneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vfp_uneqr_x(r0);
}
fopi(uneq)
static void
_vfp_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vfp_uneqr_x(r0);
}
dopi(uneq)
static void
_vcmp_01_x(jit_state_t *_jit, int cc, int32_t r0)
{
if (jit_thumb_p()) {
if (r0 < 8) {
T1_MOVI(r0, 0);
VMRS(_R15_REGNO);
IT(cc);
T1_MOVI(r0, 1);
}
else {
T2_MOVI(r0, 0);
VMRS(_R15_REGNO);
IT(cc);
T2_MOVI(r0, 1);
}
}
else {
MOVI(r0, 0);
VMRS(_R15_REGNO);
CC_MOVI(cc, r0, 1);
}
}
static void
_vcmp_01_f(jit_state_t *_jit, int cc,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vcmp_01_x(cc, r0);
}
static void
_vcmp_01_d(jit_state_t *_jit, int cc,
int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vcmp_01_x(cc, r0);
}
fopi(unge)
dopi(unge)
fopi(ungt)
dopi(ungt)
static void
_vfp_ltgtr_x(jit_state_t *_jit, int32_t r0)
{
VMRS(_R15_REGNO);
if (jit_thumb_p()) {
ITE(ARM_CC_NE);
if (r0 < 8) {
T1_MOVI(r0, 1);
T1_MOVI(r0, 0);
IT(ARM_CC_VS);
T1_MOVI(r0, 0);
}
else {
T2_MOVI(r0, 1);
T2_MOVI(r0, 0);
IT(ARM_CC_VS);
T2_MOVI(r0, 0);
}
}
else {
CC_MOVI(ARM_CC_NE, r0, 1);
CC_MOVI(ARM_CC_EQ, r0, 0);
CC_MOVI(ARM_CC_VS, r0, 0);
}
}
static void
_vfp_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vfp_ltgtr_x(r0);
}
fopi(ltgt)
static void
_vfp_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vfp_ltgtr_x(r0);
}
dopi(ltgt)
static void
_vfp_ordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vcmp10_x(ARM_CC_VS, r0);
}
fopi(ord)
static void
_vfp_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vcmp10_x(ARM_CC_VS, r0);
}
dopi(ord)
static void
_vfp_unordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_f(r1, r2);
vcmp_01_x(ARM_CC_VS, r0);
}
fopi(unord)
static void
_vfp_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
{
vfp_cmp_d(r1, r2);
vcmp_01_x(ARM_CC_VS, r0);
}
dopi(unord)
static jit_word_t
_vbcmp_x(jit_state_t *_jit, int cc, jit_word_t i0)
{
@ -1886,23 +1441,6 @@ _vbncmp_d(jit_state_t *_jit, int cc,
return (vbncmp_x(cc, i0));
}
fbopi(lt)
dbopi(lt)
fbopi(le)
dbopi(le)
fbopi(eq)
dbopi(eq)
fbopi(ge)
dbopi(ge)
fbopi(gt)
dbopi(gt)
fbopi(ne)
dbopi(ne)
fbopi(unlt)
dbopi(unlt)
fbopi(unle)
dbopi(unle)
static jit_word_t
_vfp_buneqr_x(jit_state_t *_jit, jit_word_t i0)
{
@ -1940,8 +1478,6 @@ _vfp_buneqr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_buneqr_x(i0));
}
fbopi(uneq)
static jit_word_t
_vfp_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
{
@ -1949,8 +1485,6 @@ _vfp_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_buneqr_x(i0));
}
dbopi(uneq)
static jit_word_t
_vfp_bunger_x(jit_state_t *_jit, jit_word_t i0)
{
@ -1982,8 +1516,6 @@ _vfp_bunger_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_bunger_x(i0));
}
fbopi(unge)
static jit_word_t
_vfp_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
{
@ -1991,8 +1523,6 @@ _vfp_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_bunger_x(i0));
}
dbopi(unge)
static jit_word_t
_vfp_bltgtr_x(jit_state_t *_jit, jit_word_t i0)
{
@ -2029,10 +1559,6 @@ _vfp_bltgtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_bltgtr_x(i0));
}
fbopi(ungt)
dbopi(ungt)
fbopi(ltgt)
static jit_word_t
_vfp_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
{
@ -2040,12 +1566,6 @@ _vfp_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
return (vfp_bltgtr_x(i0));
}
dbopi(ltgt)
fbopi(ord)
dbopi(ord)
fbopi(unord)
dbopi(unord)
static void
_vfp_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
{
@ -2323,8 +1843,3 @@ _vfp_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1)
/* Update stack pointer. */
addi(r1, r1, sizeof(jit_float64_t));
}
# undef dbopi
# undef fbopi
# undef dopi
# undef fopi
#endif

View file

@ -90,14 +90,11 @@
#define _S30 JIT_FPR(30)
#define _S31 JIT_FPR(31)
#define _SP _R13
#define _LR _R14
#define _PC _R15
#define JIT_R0 _R0
#define JIT_R1 _R1
#define JIT_R2 _R2
#define JIT_R3 _R3
#define JIT_R3 _R12
#define JIT_TMP0 _R3
#define JIT_V0 _R4
#define JIT_V1 _R5
@ -108,6 +105,10 @@
#define JIT_V6 _R10
#define JIT_V7 _R11
#define _SP _R13
#define _LR _R14
#define _PC _R15
#define JIT_F0 _D0
#define JIT_F1 _D1
#define JIT_F2 _D2
@ -115,7 +116,7 @@
#define JIT_F4 _D4
#define JIT_F5 _D5
#define JIT_F6 _D6
#define JIT_F7 _D7
#define JIT_FTMP _D7
#define JIT_VF0 _D8
#define JIT_VF1 _D9

View file

@ -395,7 +395,7 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
remove_pending_literal(_jit, reloc);
} else {
// Target out of range; branch to veneer.
patch_pending_literal(_jit, reloc, (uint64_t) addr);
patch_pending_literal(_jit, reloc, (uintptr_t) addr);
}
} else {
// Already emitted a veneer. In this case, patch the veneer
@ -412,7 +412,7 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
patch_jcc_offset(loc.ui, diff);
remove_pending_literal(_jit, reloc);
} else {
patch_pending_literal(_jit, reloc, (uint64_t) addr);
patch_pending_literal(_jit, reloc, (uintptr_t) addr);
}
} else {
uint8_t *target = pc_base + (voff << reloc.rsh);
@ -423,7 +423,7 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
case JIT_RELOC_LOAD_FROM_POOL: {
uint32_t voff = read_load_from_pool_offset(loc.ui);
if (voff == 0) {
patch_pending_literal(_jit, reloc, (uint64_t) addr);
patch_pending_literal(_jit, reloc, (uintptr_t) addr);
} else {
uint8_t *target = pc_base + (voff << reloc.rsh);
*(uintptr_t *) target = (uintptr_t) addr;