diff --git a/ChangeLog b/ChangeLog index 4fe45c707..82a0c0952 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-11-27 Paulo Andrade + + * configure.ac, lib/jit_arm-swf.c, lib/jit_arm.c: Add + changes that should at least allow building lightning + on Apple iOS7. + 2013-10-08 Paulo Andrade * lib/jit_ppc-cpu.c: Correct wrong shortcut for ldxi_l with diff --git a/configure.ac b/configure.ac index 830e53f66..9f5e1fe36 100644 --- a/configure.ac +++ b/configure.ac @@ -186,6 +186,8 @@ elif test $cpu = arm; then } } fclose(fp); + #elif defined(__thumb2__) + return 0; #endif return 1; } diff --git a/lib/jit_arm-swf.c b/lib/jit_arm-swf.c index 972c8ec5a..f07d65d1c 100644 --- a/lib/jit_arm-swf.c +++ b/lib/jit_arm-swf.c @@ -34,8 +34,8 @@ extern float __aeabi_i2f(int); extern double __aeabi_i2d(int); extern float __aeabi_d2f(double); extern double __aeabi_f2d(float); -extern int __aeabi_f2iz(double); -extern int __aeabi_d2iz(float); +extern int __aeabi_f2iz(float); +extern int __aeabi_d2iz(double); extern int __aeabi_fcmplt(float, float); extern int __aeabi_dcmplt(double, double); extern int __aeabi_fcmple(float, float); @@ -394,6 +394,163 @@ static void _swf_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); BICI(rt, rn, encode_arm_immediate(im)); \ } while (0) +#if !defined(__GNUC__) +float __addsf3(float u, float v) +{ + return (u + v); +} + +double +__adddf3(double u, double v) +{ + return (u + v); +} + +float +__aeabi_fsub(float u, float v) +{ + return (u - v); +} + +double +__aeabi_dsub(double u, double v) +{ + return (u - v); +} + +float +__aeabi_fmul(float u, float v) +{ + return (u * v); +} + +double +__aeabi_dmul(double u, double v) +{ + return (u * v); +} + +float +__aeabi_fdiv(float u, float v) +{ + return (u / v); +} + +double +__aeabi_ddiv(double u, double v) +{ + return (u / v); +} + +float +__aeabi_i2f(int u) +{ + return (u); +} + +double +__aeabi_i2d(int u) +{ + return (u); +} + +float +__aeabi_d2f(double u) +{ + return (u); +} + +double +__aeabi_f2d(float u) +{ + return (u); +} + +extern int +__aeabi_f2iz(float u) +{ + return (u); +} + +int +__aeabi_d2iz(double u) +{ + return (u); +} + +int +__aeabi_fcmplt(float u, float v) +{ + return (u < v); +} + +int +__aeabi_dcmplt(double u, double v) +{ + return (u < v); +} + +int +__aeabi_fcmple(float u, float v) +{ + return (u <= v); +} + +int +__aeabi_dcmple(double u, double v) +{ + return (u <= v); +} + +int +__aeabi_fcmpeq(float u, float v) +{ + return (u == v); +} + +int +__aeabi_dcmpeq(double u, double v) +{ + return (u == v); +} + +int +__aeabi_fcmpge(float u, float v) +{ + return (u >= v); +} + +int +__aeabi_dcmpge(double u, double v) +{ + return (u >= v); +} + +int +__aeabi_fcmpgt(float u, float v) +{ + return (u > v); +} + +int +__aeabi_dcmpgt(double u, double v) +{ + return (u > v); +} + +int +__aeabi_fcmpun(float u, float v) +{ + return ((u != u) || (v != v)); +} + +int +__aeabi_dcmpun(double u, double v) +{ + return ((u != u) || (v != v)); +} +#endif + static void _swf_ff(jit_state_t *_jit, float(*i0)(float), jit_int32_t r0, jit_int32_t r1) diff --git a/lib/jit_arm.c b/lib/jit_arm.c index 86435bc94..71c1a791d 100644 --- a/lib/jit_arm.c +++ b/lib/jit_arm.c @@ -64,8 +64,10 @@ static void _invalidate_consts(jit_state_t*); #define patch(instr, node) _patch(_jit, instr, node) static void _patch(jit_state_t*,jit_word_t,jit_node_t*); +#if defined(__GNUC__) /* libgcc */ extern void __clear_cache(void *, void *); +#endif #define PROTO 1 # include "jit_arm-cpu.c" @@ -176,6 +178,9 @@ jit_get_cpu(void) if (!jit_cpu.version) jit_cpu.version = 7; jit_cpu.abi = 1; +#endif +#if defined(__thumb2__) + jit_cpu.thumb = 1; #endif /* armv6t2 todo (software float and thumb2) */ if (!jit_cpu.vfp && jit_cpu.thumb) @@ -1564,8 +1569,10 @@ _emit_code(jit_state_t *_jit) patch_at(_jitc->patches.ptr[offset].kind & ~arm_patch_node, word, value); } +#if defined(__GNUC__) word = sysconf(_SC_PAGE_SIZE); __clear_cache(_jit->code.ptr, (void *)((_jit->pc.w + word) & -word)); +#endif return (_jit->code.ptr); }