diff --git a/src/runtime/c/pgf/jit.c b/src/runtime/c/pgf/jit.c index 963da45c7..056f3d872 100644 --- a/src/runtime/c/pgf/jit.c +++ b/src/runtime/c/pgf/jit.c @@ -636,10 +636,11 @@ pgf_jit_function(PgfReader* rdr, PgfAbstr* abstr, PgfSegmentPatch* patch = gu_buf_index(rdr->jit_state->segment_patches, PgfSegmentPatch, i); if (patch->segment == segment) { - if (patch->is_abs) + if (patch->is_abs) { jit_patch_movi(patch->ref,jit_get_ip().ptr); - else + } else { jit_patch(patch->ref); + } } } @@ -1128,9 +1129,9 @@ pgf_jit_done(PgfReader* rdr, PgfAbstr* abstr) PgfAbsCat* arg = gu_map_get(abstr->cats, patch->cid, PgfAbsCat*); - if (arg != NULL) + if (arg != NULL) { jit_patch_calli(patch->ref,(jit_insn*) arg->predicate); - else { + } else { PgfAbsFun* con = gu_map_get(abstr->funs, patch->cid, PgfAbsFun*); if (con == NULL) diff --git a/src/runtime/c/pgf/lightning/arm/core.h b/src/runtime/c/pgf/lightning/arm/core.h index e199bcc87..e854d5d52 100644 --- a/src/runtime/c/pgf/lightning/arm/core.h +++ b/src/runtime/c/pgf/lightning/arm/core.h @@ -61,6 +61,7 @@ struct jit_local_state { jit_thumb_t thumb; jit_insn* thumb_pc; jit_insn* thumb_tmp; + int tmp; /* hackish mostly to make test cases work; use arm instruction * set in jmpi if did not yet see a prolog */ int after_prolog; @@ -132,20 +133,14 @@ jit_v_order[JIT_V_NUM] = { #endif #define jit_movi_i(r0, i0) \ -{ \ - int i; \ - if (!jit_no_set_flags() && r0 < 8 && !(i0 & 0xffffff80)) \ - T1_MOVI(r0, i0); \ - else if ((i = encode_thumb_immediate(i0)) != -1) \ - T2_MOVI(r0, i); \ - else if ((i = encode_thumb_immediate(~i0)) != -1) \ - T2_MVNI(r0, i); \ - else { \ - T2_MOVWI(r0, _jit_US(i0)); \ - if (i0 & 0xffff0000) \ - T2_MOVTI(r0, _jit_US((unsigned)i0 >> 16)); \ - } \ -} + ((!jit_no_set_flags() && r0 < 8 && !(i0 & 0xffffff80)) ? \ + T1_MOVI(r0, i0) : \ + ((_jitl.tmp = encode_thumb_immediate(i0)) != -1) ? \ + T2_MOVI(r0, _jitl.tmp) : \ + ((_jitl.tmp = encode_thumb_immediate(~i0)) != -1) ? \ + T2_MVNI(r0, _jitl.tmp) : \ + ( T2_MOVWI(r0, _jit_US(i0)), \ + ((i0 & 0xffff0000) ? T2_MOVTI(r0, _jit_US((unsigned)i0 >> 16)) : 0) )) #ifdef USE_THUMB_CODE #define jit_movi_p(r0, i0) \ @@ -361,19 +356,7 @@ jit_v_order[JIT_V_NUM] = { } \ } #else -#define jit_addi_i(r0, r1, i0) \ -{ \ - int i; \ - if ((i = encode_arm_immediate(i0)) != -1) \ - _ADDI(r0, r1, i); \ - else if ((i = encode_arm_immediate(-i0)) != -1) \ - _SUBI(r0, r1, i); \ - else { \ - jit_gpr_t reg = r0 != r1 ? r0 : JIT_TMP; \ - jit_movi_i(reg, i0); \ - _ADD(r0, r1, reg); \ - } \ -} +#define jit_addi_i(r0, r1, i0) 0 #endif #ifdef USE_THUMB_CODE @@ -1172,18 +1155,18 @@ next: \ #define jit_jmpi(i0) \ (_jitl.thumb_tmp = _jit.x.pc, \ (_jitl.after_prolog) ? \ - ((_s20P((((long)i0 - (long)l) >> 1) - 2)) ? \ - T2_B(encode_thumb_jump((((long)i0 - (long)l) >> 1) - 2)) : \ + ((_s20P((((long)i0 - (long)_jitl.thumb_tmp) >> 1) - 2)) ? \ + T2_B(encode_thumb_jump((((long)i0 - (long)_jitl.thumb_tmp) >> 1) - 2)) : \ (jit_movi_p(JIT_TMP, i0), jit_jmpr(JIT_TMP))) : \ - (assert(_s24P((((long)i0 - (long)l) >> 2) - 2)), \ - _CC_B(ARM_CC_AL, ((((long)i0 - (long)l) >> 2) - 2) & 0x00ffffff)) \ + (assert(_s24P((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2)), \ + _CC_B(ARM_CC_AL, ((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2) & 0x00ffffff)) \ _jitl.thumb_tmp) #else #define jit_jmpi(i0) \ - (_jit.thumb_tmp = _jit.x.pc, \ - assert(_s24P((((long)i0 - (long)l) >> 2) - 2)), \ - _CC_B(ARM_CC_AL, ((((long)i0 - (long)l) >> 2) - 2) & 0x00ffffff), \ - _jit.thumb_tmp) + (_jitl.thumb_tmp = _jit.x.pc, \ + assert(_s24P((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2)), \ + _CC_B(ARM_CC_AL, ((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2) & 0x00ffffff), \ + _jitl.thumb_tmp) #endif #ifdef USE_THUMB_CODE @@ -1214,7 +1197,7 @@ next: \ (jit_movi_i(JIT_TMP, i1), T2_CMP(r0, JIT_TMP))))), \ /* use only thumb2 conditional as does not know if will be patched */ \ _jitl.thumb_tmp = _jit.x.pc, \ - assert(_s20P((((long)i0 - (long)l) >> 1) - 2)), \ + assert(_s20P((((long)i0 - (long)_jitl.thumb_tmp) >> 1) - 2)), \ T2_CC_B(cc, encode_thumb_cc_jump((((long)i0 - (long)l) >> 1) - 2)), \ _jitl.thumb_tmp) #else @@ -1225,8 +1208,8 @@ next: \ _CMNI(r0, encode_arm_immediate(-i1)) : \ (jit_movi_i(JIT_TMP, i1), _CMP(r0, JIT_TMP)))), \ _jitl.thumb_tmp = _jit.x.pc, \ - assert(_s24P((((long)i0 - (long)l) >> 2) - 2)), \ - _CC_B(cc, ((((long)i0 - (long)l) >> 2) - 2) & 0x00ffffff), \ + assert(_s24P((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2)), \ + _CC_B(cc, ((((long)i0 - (long)_jitl.thumb_tmp) >> 2) - 2) & 0x00ffffff), \ _jitl.thumb_tmp) #endif @@ -2190,6 +2173,12 @@ next: \ } #endif +#ifdef USE_THUMB_CODE +#define jit_bare_ret(IM) T2_POP(1< 0), \ _jitl.pop--, \ jit_ldxi_i(r0, JIT_FP, _jitl.push[_jitl.pop])) +#else +# define jit_pushr_i(r0) 0 +# define jit_popr_i(r0) 0 #endif #endif /* __lightning_core_arm_h */ diff --git a/src/runtime/c/pgf/lightning/arm/fp.h b/src/runtime/c/pgf/lightning/arm/fp.h index 78fa7577e..c51c7ea2c 100644 --- a/src/runtime/c/pgf/lightning/arm/fp.h +++ b/src/runtime/c/pgf/lightning/arm/fp.h @@ -1104,5 +1104,9 @@ arm_retval_d(jit_state_t _jit, jit_fpr_t r0) } /* else assume chaining call to jit_retval_d as done in tests/funcfp.c */ } +#else +#define jit_ldxi_d(r0, r1, i0) 0 +#define jit_movi_d(r0, i0) 0 +#define jit_bner_d(i0, r0, r1) 0 #endif #endif /* __lightning_fp_arm_h */ diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c index 3594f80ed..c65b8b057 100644 --- a/src/runtime/c/pgf/reader.c +++ b/src/runtime/c/pgf/reader.c @@ -1,6 +1,7 @@ #include "data.h" #include "expr.h" #include "literals.h" +#include "evaluator.h" #include "reader.h" #include