author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2013年11月27日 15:05:27 -0200 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2013年11月27日 15:05:27 -0200 |
commit | 6fa5123855b3312dcd22352f58897895fc7a4e3b (patch) | |
tree | bb844fbce6c5354ae7e791bee77f49fa24238786 | |
parent | 67d994cc5eb552ee6ea57093db74e4cb6f459025 (diff) | |
download | lightning-6fa5123855b3312dcd22352f58897895fc7a4e3b.tar.gz |
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | lib/jit_arm-swf.c | 161 | ||||
-rw-r--r-- | lib/jit_arm.c | 7 |
@@ -1,3 +1,9 @@ +2013年11月27日 Paulo Andrade <pcpa@gnu.org> + + * 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 <pcpa@gnu.org> * lib/jit_ppc-cpu.c: Correct wrong shortcut for ldxi_l with diff --git a/configure.ac b/configure.ac index 830e53f..9f5e1fe 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 972c8ec..f07d65d 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 86435bc..71c1a79 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" @@ -177,6 +179,9 @@ jit_get_cpu(void) 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) jit_cpu.thumb = 0; @@ -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); } |