diff --git a/src/buildvm_asm.c b/src/buildvm_asm.c index 94e62ce7..6a860c9f 100644 --- a/src/buildvm_asm.c +++ b/src/buildvm_asm.c @@ -191,8 +191,7 @@ void emit_asm(BuildCtx *ctx) if (ctx->mode != BUILD_machasm) fprintf(ctx->fp, ".Lbegin:\n"); -#if LJ_TARGET_ARM && defined(__GNUC__) && !defined(__symbian__) && \ - !LJ_TARGET_OSX +#if LJ_TARGET_ARM && defined(__GNUC__) && !defined(LUAJIT_NO_UNWIND) /* This should really be moved into buildvm_arm.dasc. */ fprintf(ctx->fp, ".fnstart\n" @@ -228,8 +227,7 @@ void emit_asm(BuildCtx *ctx) #endif } -#if LJ_TARGET_ARM && defined(__GNUC__) && !defined(__symbian__) && \ - !LJ_TARGET_OSX +#if LJ_TARGET_ARM && defined(__GNUC__) && !defined(LUAJIT_NO_UNWIND) fprintf(ctx->fp, ".globl lj_err_unwind_arm\n" ".personality lj_err_unwind_arm\n" diff --git a/src/lj_arch.h b/src/lj_arch.h index 355474fb..80ab051e 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h @@ -279,4 +279,16 @@ #define LJ_64 1 #endif +/* Various workarounds for embedded operating systems. */ +#if defined(__ANDROID__) || defined(__symbian__) +#define LUAJIT_NO_LOG2 +#endif +#if defined(__symbian__) +#define LUAJIT_NO_EXP2 +#endif + +#if defined(__symbian__) || (LJ_TARGET_ARM && LJ_TARGET_OSX) +#define LUAJIT_NO_UNWIND +#endif + #endif diff --git a/src/lj_err.c b/src/lj_err.c index 63c5a22d..406c833d 100644 --- a/src/lj_err.c +++ b/src/lj_err.c @@ -178,8 +178,7 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode) /* -- External frame unwinding -------------------------------------------- */ -#if defined(__GNUC__) && !defined(__symbian__) && \ - !(LJ_TARGET_ARM && LJ_TARGET_OSX) +#if defined(__GNUC__) && !defined(LUAJIT_NO_UNWIND) #ifdef __clang__ /* http://llvm.org/bugs/show_bug.cgi?id=8703 */ diff --git a/src/lj_vm.h b/src/lj_vm.h index 3f6777ad..5a82dab0 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -66,12 +66,12 @@ LJ_ASMF void lj_vm_powi_sse(void); #else LJ_ASMF double lj_vm_trunc(double); LJ_ASMF double lj_vm_powi(double, int32_t); -#if defined(__ANDROID__) || defined(__symbian__) +#ifdef LUAJIT_NO_LOG2 LJ_ASMF double lj_vm_log2(double); #else #define lj_vm_log2 log2 #endif -#if defined(__symbian__) +#ifdef LUAJIT_NO_EXP2 LJ_ASMF double lj_vm_exp2(double); #else #define lj_vm_exp2 exp2 diff --git a/src/lj_vmmath.c b/src/lj_vmmath.c index 46f06504..ec3d98af 100644 --- a/src/lj_vmmath.c +++ b/src/lj_vmmath.c @@ -25,14 +25,14 @@ LJ_FUNCA double lj_vm_tanh(double x) { return tanh(x); } #if LJ_HASJIT -#if defined(__ANDROID__) || defined(__symbian__) +#ifdef LUAJIT_NO_LOG2 double lj_vm_log2(double a) { return log(a) * 1.4426950408889634074; } #endif -#if defined(__symbian__) +#ifdef LUAJIT_NO_EXP2 double lj_vm_exp2(double a) { return exp(a * 0.6931471805599453);