diff options
Diffstat (limited to 'src/runtime/c/pgf/lightning/arm/funcs.h')
| -rw-r--r-- | src/runtime/c/pgf/lightning/arm/funcs.h | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/src/runtime/c/pgf/lightning/arm/funcs.h b/src/runtime/c/pgf/lightning/arm/funcs.h index dd0e4bc0c..27b2185b1 100644 --- a/src/runtime/c/pgf/lightning/arm/funcs.h +++ b/src/runtime/c/pgf/lightning/arm/funcs.h @@ -117,208 +117,6 @@ jit_get_cpu(void) jit_cpu.thumb = 0; } -static void -arm_patch_arguments(struct jit_local_state* jitl) -{ - int reg; - int ioff; - int foff; - int size; - int index; - jit_thumb_t thumb; - int offset; - union { - _ui *i; - _us *s; - } u; - - ioff = foff = 0; - for (index = jitl->nextarg_put - 1, offset = 0; index >= 0; index--) { - if (jitl->types[index >> 5] & (1 << (index & 31))) - size = sizeof(double); - else - size = sizeof(int); - u.i = jitl->arguments[index]; -#ifdef USE_THUMB_CODE - code2thumb(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - switch (thumb.i & 0xfff00f00) { - case ARM_CC_AL|ARM_VSTR|ARM_P: - if (jit_hardfp_p()) { - if (foff < 16) { - reg = (thumb.i >> 12) & 0xf; - thumb.i = (ARM_CC_AL|ARM_VMOV_F | - ((foff >> 1) << 12) | reg); - if (foff & 1) - thumb.i |= ARM_V_D; - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - ++foff; - continue; - } - } - else { - if (ioff < 4) { - thumb.i = ((thumb.i & 0xfff0ff00) | - (JIT_FP << 16) | ioff); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - ++ioff; - continue; - } - } - thumb.i = (thumb.i & 0xffffff00) | (offset >> 2); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - break; - case ARM_CC_AL|ARM_VSTR|ARM_V_F64|ARM_P: - if (jit_hardfp_p()) { - if (foff & 1) - ++foff; - if (foff < 16) { - reg = (thumb.i >> 12) & 0xf; - thumb.i = (ARM_CC_AL|ARM_VMOV_F|ARM_V_F64 | - ((foff >> 1) << 12) | reg); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - foff += 2; - continue; - } - } - else { - if (ioff & 1) - ++ioff; - if (ioff < 4) { - thumb.i = ((thumb.i & 0xfff0ff00) | - (JIT_FP << 16) | ioff); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - ioff += 2; - continue; - } - } - if (offset & 7) - offset += sizeof(int); - thumb.i = (thumb.i & 0xffffff00) | (offset >> 2); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - break; - case THUMB2_STRWI: - thumb_stri: - if (size == 8 && (ioff & 1)) - ++ioff; - if (ioff < 4) { - thumb.i = ((thumb.i & 0xfff0f000) | - (JIT_FP << 16) | (ioff << 2)); - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - ++ioff; - if (size == 8) { - code2thumb(thumb.s[0], thumb.s[1], u.s[2], u.s[3]); - thumb.i = ((thumb.i & 0xfff0f000) | - (JIT_FP << 16) | (ioff << 2)); - thumb2code(thumb.s[0], thumb.s[1], u.s[2], u.s[3]); - ++ioff; - } - continue; - } - if (size == 8 && (offset & 7)) - offset += sizeof(int); - thumb.i = (thumb.i & 0xfffff000) | offset; - thumb2code(thumb.s[0], thumb.s[1], u.s[0], u.s[1]); - if (size == 8) { - code2thumb(thumb.s[0], thumb.s[1], u.s[2], u.s[3]); - thumb.i = (thumb.i & 0xfffff000) | (offset + 4); - thumb2code(thumb.s[0], thumb.s[1], u.s[2], u.s[3]); - } - break; - default: - /* offset too large */ - if ((thumb.i & 0xfff00000) == THUMB2_STRWI) - goto thumb_stri; - abort(); - } -#else - switch (u.i[0] & 0xfff00f00) { - case ARM_CC_AL|ARM_VSTR|ARM_P: - if (jit_hardfp_p()) { - if (foff < 16) { - reg = (u.i[0] >> 12) & 0xf; - u.i[0] = (ARM_CC_AL|ARM_VMOV_F | - ((foff >> 1) << 12) | reg); - if (foff & 1) - u.i[0] |= ARM_V_D; - ++foff; - continue; - } - } - else { - if (ioff < 4) { - u.i[0] = ((u.i[0] & 0xfff0ff00) | - (JIT_FP << 16) | ioff); - ++ioff; - continue; - } - } - u.i[0] = (u.i[0] & 0xffffff00) | (offset >> 2); - break; - case ARM_CC_AL|ARM_VSTR|ARM_V_F64|ARM_P: - if (jit_hardfp_p()) { - if (foff & 1) - ++foff; - if (foff < 16) { - reg = (u.i[0] >> 12) & 0xf; - u.i[0] = (ARM_CC_AL|ARM_VMOV_F|ARM_V_F64 | - ((foff >> 1) << 12) | reg); - foff += 2; - continue; - } - } - else { - if (ioff & 1) - ++ioff; - if (ioff < 4) { - u.i[0] = ((u.i[0] & 0xfff0ff00) | - (JIT_FP << 16) | ioff); - ioff += 2; - continue; - } - } - if (offset & 7) - offset += sizeof(int); - u.i[0] = (u.i[0] & 0xffffff00) | (offset >> 2); - break; - case ARM_CC_AL|ARM_STRI|ARM_P: - arm_stri: - if (size == 8 && (ioff & 1)) - ++ioff; - if (ioff < 4) { - u.i[0] = ((u.i[0] & 0xfff0f000) | - (JIT_FP << 16) | (ioff << 2)); - ++ioff; - if (size == 8) { - u.i[1] = ((u.i[1] & 0xfff0f000) | - (JIT_FP << 16) | (ioff << 2)); - ++ioff; - } - continue; - } - if (size == 8 && (offset & 7)) - offset += sizeof(int); - u.i[0] = (u.i[0] & 0xfffff000) | offset; - if (size == 8) - u.i[1] = (u.i[1] & 0xfffff000) | (offset + 4); - break; - default: - /* offset too large */ - if ((u.i[0] & 0xfff00000) == (ARM_CC_AL|ARM_STRI|ARM_P)) - goto arm_stri; - abort(); - } -#endif - offset += size; - } - - jitl->reglist = ((1 << ioff) - 1) & 0xf; - if (jitl->stack_length < offset) { - jitl->stack_length = offset; - jit_patch_movi(jitl->stack, (void *) - ((jitl->alloca_offset + jitl->stack_length + 7) & -8)); - } -} - extern int __aeabi_idivmod(int, int); extern unsigned __aeabi_uidivmod(unsigned, unsigned); |
