summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/lightning/arm/funcs.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/c/pgf/lightning/arm/funcs.h')
-rw-r--r--src/runtime/c/pgf/lightning/arm/funcs.h202
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);