From eec28aa9fdf5f733a4f7d2628fc060eac66ab713 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Fri, 3 Jun 2011 17:12:46 +0200 Subject: [PATCH] Move math helpers to lj_vmmath.c. Add missing log2/exp2 for Symbian. --- src/Makefile | 2 +- src/Makefile.dep | 26 +++++++------- src/buildvm_x64.h | 14 ++++---- src/buildvm_x64win.h | 14 ++++---- src/buildvm_x86.dasc | 16 ++++----- src/buildvm_x86.h | 14 ++++---- src/lib_math.c | 4 --- src/lj_asm_x86.h | 4 +-- src/lj_ir.c | 66 ----------------------------------- src/lj_ircall.h | 4 +-- src/lj_opt_split.c | 2 +- src/lj_vm.h | 15 ++++++-- src/lj_vmmath.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ljamalg.c | 1 + 14 files changed, 160 insertions(+), 119 deletions(-) create mode 100644 src/lj_vmmath.c diff --git a/src/Makefile b/src/Makefile index 03e45d2d..c99d8577 100644 --- a/src/Makefile +++ b/src/Makefile @@ -359,7 +359,7 @@ LJLIB_C= $(LJLIB_O:.o=.c) LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \ lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \ - lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \ + lj_state.o lj_dispatch.o lj_vmevent.o lj_vmmath.o lj_api.o \ lj_lex.o lj_parse.o \ lj_ir.o lj_opt_mem.o lj_opt_fold.o lj_opt_narrow.o \ lj_opt_dce.o lj_opt_loop.o lj_opt_split.o \ diff --git a/src/Makefile.dep b/src/Makefile.dep index 8e0d7a1c..8bc891ad 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep @@ -166,22 +166,24 @@ lj_udata.o: lj_udata.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ lj_vmevent.o: lj_vmevent.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ lj_str.h lj_tab.h lj_state.h lj_dispatch.h lj_bc.h lj_jit.h lj_ir.h \ lj_vm.h lj_vmevent.h +lj_vmmath.o: lj_vmmath.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ + lj_ir.h lj_vm.h ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \ lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h \ lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c \ lj_ff.h lj_ffdef.h lj_char.c lj_char.h lj_bc.c lj_bcdef.h lj_obj.c \ lj_str.c lj_tab.c lj_func.c lj_udata.c lj_meta.c lj_state.c lj_lex.h \ - lj_alloc.h lj_dispatch.c luajit.h lj_vmevent.c lj_vmevent.h lj_api.c \ - lj_parse.h lj_lex.c lualib.h lj_parse.c lj_ctype.c lj_cdata.c lj_cconv.h \ - lj_cconv.c lj_ccall.c lj_ccall.h lj_carith.c lj_carith.h lj_clib.c \ - lj_clib.h lj_cparse.c lj_cparse.h lj_lib.c lj_lib.h lj_ir.c lj_ircall.h \ - lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c \ - lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_opt_split.c lj_mcode.c \ - lj_mcode.h lj_snap.c lj_target.h lj_target_*.h lj_record.c lj_record.h \ - lj_ffrecord.h lj_crecord.c lj_crecord.h lj_ffrecord.c lj_recdef.h \ - lj_asm.c lj_asm.h lj_emit_*.h lj_asm_*.h lj_trace.c lj_gdbjit.h \ - lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c lj_libdef.h lib_math.c \ - lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c \ - lib_bit.c lib_jit.c lib_ffi.c lib_init.c + lj_alloc.h lj_dispatch.c luajit.h lj_vmevent.c lj_vmevent.h lj_vmmath.c \ + lj_api.c lj_parse.h lj_lex.c lualib.h lj_parse.c lj_ctype.c lj_cdata.c \ + lj_cconv.h lj_cconv.c lj_ccall.c lj_ccall.h lj_carith.c lj_carith.h \ + lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_lib.c lj_lib.h lj_ir.c \ + lj_ircall.h lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h \ + lj_opt_narrow.c lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_opt_split.c \ + lj_mcode.c lj_mcode.h lj_snap.c lj_target.h lj_target_*.h lj_record.c \ + lj_record.h lj_ffrecord.h lj_crecord.c lj_crecord.h lj_ffrecord.c \ + lj_recdef.h lj_asm.c lj_asm.h lj_emit_*.h lj_asm_*.h lj_trace.c \ + lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c lj_libdef.h \ + lib_math.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c \ + lib_debug.c lib_bit.c lib_jit.c lib_ffi.c lib_init.c luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h lj_arch.h diff --git a/src/buildvm_x64.h b/src/buildvm_x64.h index 918e514a..4a96493f 100644 --- a/src/buildvm_x64.h +++ b/src/buildvm_x64.h @@ -879,7 +879,7 @@ enum { GLOB_ff_math_log, GLOB_ff_math_log10, GLOB_ff_math_exp, - GLOB_vm_exp, + GLOB_vm_exp_x87, GLOB_ff_math_sin, GLOB_ff_math_cos, GLOB_ff_math_tan, @@ -939,7 +939,7 @@ enum { GLOB_vm_ceil_sse, GLOB_vm_trunc_sse, GLOB_vm_mod, - GLOB_vm_exp2, + GLOB_vm_exp2_x87, GLOB_vm_exp2raw, GLOB_vm_pow_sse, GLOB_vm_powi_sse, @@ -1040,7 +1040,7 @@ static const char *const globnames[] = { "ff_math_log", "ff_math_log10", "ff_math_exp", - "vm_exp", + "vm_exp_x87", "ff_math_sin", "ff_math_cos", "ff_math_tan", @@ -1100,7 +1100,7 @@ static const char *const globnames[] = { "vm_ceil_sse", "vm_trunc_sse", "vm_mod", - "vm_exp2", + "vm_exp2_x87", "vm_exp2raw", "vm_pow_sse", "vm_powi_sse", @@ -1132,9 +1132,9 @@ static const char *const extnames[] = { "lj_tab_next", "lj_tab_getinth@8", "lj_ffh_coroutine_wrap_err@8", - "lj_wrapper_sinh", - "lj_wrapper_cosh", - "lj_wrapper_tanh", + "lj_vm_sinh", + "lj_vm_cosh", + "lj_vm_tanh", "lj_str_new", "lj_tab_len@4", "lj_gc_step@4", diff --git a/src/buildvm_x64win.h b/src/buildvm_x64win.h index 59499a78..9dbad9a3 100644 --- a/src/buildvm_x64win.h +++ b/src/buildvm_x64win.h @@ -876,7 +876,7 @@ enum { GLOB_ff_math_log, GLOB_ff_math_log10, GLOB_ff_math_exp, - GLOB_vm_exp, + GLOB_vm_exp_x87, GLOB_ff_math_sin, GLOB_ff_math_cos, GLOB_ff_math_tan, @@ -936,7 +936,7 @@ enum { GLOB_vm_ceil_sse, GLOB_vm_trunc_sse, GLOB_vm_mod, - GLOB_vm_exp2, + GLOB_vm_exp2_x87, GLOB_vm_exp2raw, GLOB_vm_pow_sse, GLOB_vm_powi_sse, @@ -1037,7 +1037,7 @@ static const char *const globnames[] = { "ff_math_log", "ff_math_log10", "ff_math_exp", - "vm_exp", + "vm_exp_x87", "ff_math_sin", "ff_math_cos", "ff_math_tan", @@ -1097,7 +1097,7 @@ static const char *const globnames[] = { "vm_ceil_sse", "vm_trunc_sse", "vm_mod", - "vm_exp2", + "vm_exp2_x87", "vm_exp2raw", "vm_pow_sse", "vm_powi_sse", @@ -1128,9 +1128,9 @@ static const char *const extnames[] = { "lj_tab_next", "lj_tab_getinth@8", "lj_ffh_coroutine_wrap_err@8", - "lj_wrapper_sinh", - "lj_wrapper_cosh", - "lj_wrapper_tanh", + "lj_vm_sinh", + "lj_vm_cosh", + "lj_vm_tanh", "lj_str_new", "lj_tab_len@4", "lj_gc_step@4", diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index b8be39fb..6fde191d 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -2028,7 +2028,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) } |.ffunc_n math_log, fldln2; fyl2x; jmp ->fff_resn |.ffunc_n math_log10, fldlg2; fyl2x; jmp ->fff_resn - |.ffunc_n math_exp; call ->vm_exp; jmp ->fff_resn + |.ffunc_n math_exp; call ->vm_exp_x87; jmp ->fff_resn | |.ffunc_n math_sin; fsin; jmp ->fff_resn |.ffunc_n math_cos; fcos; jmp ->fff_resn @@ -2055,7 +2055,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | .endif ||} | mov RB, BASE - | call extern lj_wrapper_ .. func + | call extern lj_vm_ .. func | mov BASE, RB | .if X64 | jmp ->fff_resxmm0 @@ -3169,9 +3169,9 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) |// FP exponentiation e^x and 2^x. Called by math.exp fast function and |// from JIT code. Arg/ret on x87 stack. No int/xmm regs modified. |// Caveat: needs 3 slots on x87 stack! - |->vm_exp: + |->vm_exp_x87: | fldl2e; fmulp st1 // e^x ==> 2^(x*log2(e)) - |->vm_exp2: + |->vm_exp2_x87: | .if X64WIN | .define expscratch, dword [rsp+8] // Use scratch area. | .elif X64 @@ -3444,11 +3444,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | cmp fpmop, 5; ja >2 | .if X64WIN; pop rax; .endif | je >1 - | call ->vm_exp + | call ->vm_exp_x87 | .if X64WIN; push rax; .endif | jmp >7 |1: - | call ->vm_exp2 + | call ->vm_exp2_x87 | .if X64WIN; push rax; .endif | jmp >7 |2: ; cmp fpmop, 7; je >1; ja >2 @@ -3487,7 +3487,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | fld qword [esp+4] | ret |2: ; fld qword [esp+4] - | cmp fpmop, 5; jb ->vm_exp; je ->vm_exp2 + | cmp fpmop, 5; jb ->vm_exp_x87; je ->vm_exp2_x87 |2: ; cmp fpmop, 7; je >1; ja >2 | fldln2; fxch; fyl2x; ret |1: ; fld1; fxch; fyl2x; ret @@ -3505,7 +3505,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | cmp fpmop, 1; jb ->vm_floor; je ->vm_ceil | cmp fpmop, 3; jb ->vm_trunc; ja >2 | fsqrt; ret - |2: ; cmp fpmop, 5; jb ->vm_exp; je ->vm_exp2 + |2: ; cmp fpmop, 5; jb ->vm_exp_x87; je ->vm_exp2_x87 | cmp fpmop, 7; je >1; ja >2 | fldln2; fxch; fyl2x; ret |1: ; fld1; fxch; fyl2x; ret diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index 1493381b..44f47339 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -925,7 +925,7 @@ enum { GLOB_ff_math_log, GLOB_ff_math_log10, GLOB_ff_math_exp, - GLOB_vm_exp, + GLOB_vm_exp_x87, GLOB_ff_math_sin, GLOB_ff_math_cos, GLOB_ff_math_tan, @@ -985,7 +985,7 @@ enum { GLOB_vm_ceil_sse, GLOB_vm_trunc_sse, GLOB_vm_mod, - GLOB_vm_exp2, + GLOB_vm_exp2_x87, GLOB_vm_exp2raw, GLOB_vm_pow_sse, GLOB_vm_powi_sse, @@ -1086,7 +1086,7 @@ static const char *const globnames[] = { "ff_math_log", "ff_math_log10", "ff_math_exp", - "vm_exp", + "vm_exp_x87", "ff_math_sin", "ff_math_cos", "ff_math_tan", @@ -1146,7 +1146,7 @@ static const char *const globnames[] = { "vm_ceil_sse", "vm_trunc_sse", "vm_mod", - "vm_exp2", + "vm_exp2_x87", "vm_exp2raw", "vm_pow_sse", "vm_powi_sse", @@ -1177,9 +1177,9 @@ static const char *const extnames[] = { "lj_tab_next", "lj_tab_getinth@8", "lj_ffh_coroutine_wrap_err@8", - "lj_wrapper_sinh", - "lj_wrapper_cosh", - "lj_wrapper_tanh", + "lj_vm_sinh", + "lj_vm_cosh", + "lj_vm_tanh", "lj_str_new", "lj_tab_len@4", "lj_gc_step@4", diff --git a/src/lib_math.c b/src/lib_math.c index 24501139..917b5e7b 100644 --- a/src/lib_math.c +++ b/src/lib_math.c @@ -84,10 +84,6 @@ LJLIB_ASM_(math_max) LJLIB_REC(math_minmax IR_MAX) LJLIB_PUSH(3.14159265358979323846) LJLIB_SET(pi) LJLIB_PUSH(1e310) LJLIB_SET(huge) -LJ_FUNCA double lj_wrapper_sinh(double x) { return sinh(x); } -LJ_FUNCA double lj_wrapper_cosh(double x) { return cosh(x); } -LJ_FUNCA double lj_wrapper_tanh(double x) { return tanh(x); } - /* ------------------------------------------------------------------------ */ /* This implements a Tausworthe PRNG with period 2^223. Based on: diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index b7712b36..c89bc521 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@ -1591,8 +1591,8 @@ static void asm_fpmath(ASMState *as, IRIns *ir) } emit_rmro(as, XO_FSTPq, XOg_FSTPq, RID_ESP, ofs); switch (fpm) { /* st0 = lj_vm_*(st0) */ - case IRFPM_EXP: emit_call(as, lj_vm_exp); break; - case IRFPM_EXP2: emit_call(as, lj_vm_exp2); break; + case IRFPM_EXP: emit_call(as, lj_vm_exp_x87); break; + case IRFPM_EXP2: emit_call(as, lj_vm_exp2_x87); break; case IRFPM_SIN: emit_x87op(as, XI_FSIN); break; case IRFPM_COS: emit_x87op(as, XI_FCOS); break; case IRFPM_TAN: emit_x87op(as, XI_FPOP); emit_x87op(as, XI_FPTAN); break; diff --git a/src/lj_ir.c b/src/lj_ir.c index 749b7f12..8f22e085 100644 --- a/src/lj_ir.c +++ b/src/lj_ir.c @@ -37,72 +37,6 @@ /* Pass IR on to next optimization in chain (FOLD). */ #define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) -/* -- Helper functions for generated machine code ------------------------- */ - -#ifdef __ANDROID__ -/* Android doesn't have log2(). Oh well. */ -#define log2 lj_vm_log2 -static double lj_vm_log2(double a) -{ - return log(a) * 1.4426950408889634074; -} -#endif - -#if !LJ_TARGET_X86ORX64 -/* Unsigned x^k. */ -static double lj_vm_powui(double x, uint32_t k) -{ - double y; - lua_assert(k != 0); - for (; (k & 1) == 0; k >>= 1) x *= x; - y = x; - if ((k >>= 1) != 0) { - for (;;) { - x *= x; - if (k == 1) break; - if (k & 1) y *= x; - k >>= 1; - } - y *= x; - } - return y; -} - -/* Signed x^k. */ -static double lj_vm_powi(double x, int32_t k) -{ - if (k > 1) - return lj_vm_powui(x, (uint32_t)k); - else if (k == 1) - return x; - else if (k == 0) - return 1; - else - return 1.0 / lj_vm_powui(x, (uint32_t)-k); -} - -/* Computes fpm(x) for extended math functions. */ -double lj_vm_foldfpm(double x, int fpm) -{ - switch (fpm) { - case IRFPM_FLOOR: return lj_vm_floor(x); - case IRFPM_CEIL: return lj_vm_ceil(x); - case IRFPM_TRUNC: return lj_vm_trunc(x); - case IRFPM_SQRT: return sqrt(x); - case IRFPM_EXP: return exp(x); - case IRFPM_EXP2: return exp2(x); - case IRFPM_LOG: return log(x); - case IRFPM_LOG2: return log2(x); - case IRFPM_LOG10: return log10(x); - case IRFPM_SIN: return sin(x); - case IRFPM_COS: return cos(x); - case IRFPM_TAN: return tan(x); - default: lua_assert(0); - } - return 0; -} -#endif - /* -- IR tables ----------------------------------------------------------- */ /* IR instruction modes. */ diff --git a/src/lj_ircall.h b/src/lj_ircall.h index b83a0a81..1cbee91c 100644 --- a/src/lj_ircall.h +++ b/src/lj_ircall.h @@ -91,9 +91,9 @@ typedef struct CCallInfo { _(lj_vm_trunc, ARG1_FP, N, NUM, 0) \ _(sqrt, ARG1_FP, N, NUM, 0) \ _(exp, ARG1_FP, N, NUM, 0) \ - _(exp2, ARG1_FP, N, NUM, 0) \ + _(lj_vm_exp2, ARG1_FP, N, NUM, 0) \ _(log, ARG1_FP, N, NUM, 0) \ - _(log2, ARG1_FP, N, NUM, 0) \ + _(lj_vm_log2, ARG1_FP, N, NUM, 0) \ _(log10, ARG1_FP, N, NUM, 0) \ _(sin, ARG1_FP, N, NUM, 0) \ _(cos, ARG1_FP, N, NUM, 0) \ diff --git a/src/lj_opt_split.c b/src/lj_opt_split.c index ea9b6fe3..0a1d87cb 100644 --- a/src/lj_opt_split.c +++ b/src/lj_opt_split.c @@ -274,7 +274,7 @@ static void split_ir(jit_State *J) IRIns *irm12 = IR(irm3->op1); IRIns *irl1 = IR(irm12->op1); if (irm12->op1 > J->loopref && irl1->o == IR_CALLN && - irl1->op2 == IRCALL_log2) { + irl1->op2 == IRCALL_lj_vm_log2) { IRRef tmp = irl1->op1; /* Recycle first two args from LOG2. */ IRRef arg3 = irm3->op2, arg4 = irm4->op2; J->cur.nins--; diff --git a/src/lj_vm.h b/src/lj_vm.h index 649280d0..3941dad9 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -51,14 +51,25 @@ LJ_ASMF void lj_vm_exit_interp(void); LJ_ASMF void lj_vm_floor_sse(void); LJ_ASMF void lj_vm_ceil_sse(void); LJ_ASMF void lj_vm_trunc_sse(void); -LJ_ASMF void lj_vm_exp(void); -LJ_ASMF void lj_vm_exp2(void); +LJ_ASMF void lj_vm_exp_x87(void); +LJ_ASMF void lj_vm_exp2_x87(void); LJ_ASMF void lj_vm_pow_sse(void); LJ_ASMF void lj_vm_powi_sse(void); #else LJ_ASMF double lj_vm_floor(double); LJ_ASMF double lj_vm_ceil(double); LJ_ASMF double lj_vm_trunc(double); +LJ_ASMF double lj_vm_powi(double, int32_t); +#if defined(__ANDROID__) || defined(__symbian__) +LJ_ASMF double lj_vm_log2(double); +#else +#define lj_vm_log2 log2 +#endif +#if defined(__symbian__) +LJ_ASMF double lj_vm_exp2(double); +#else +#define lj_vm_exp2 exp2 +#endif #endif #endif diff --git a/src/lj_vmmath.c b/src/lj_vmmath.c new file mode 100644 index 00000000..d357b4e3 --- /dev/null +++ b/src/lj_vmmath.c @@ -0,0 +1,97 @@ +/* +** Math helper functions for assembler VM. +** Copyright (C) 2005-2011 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_vmmath_c +#define LUA_CORE + +#include + +#include "lj_obj.h" +#if LJ_HASJIT +#include "lj_ir.h" +#endif +#include "lj_vm.h" + +/* -- Helper functions for generated machine code ------------------------- */ + +#if LJ_TARGET_X86ORX64 +/* Wrapper functions to avoid linker issues on OSX. */ +LJ_FUNCA double lj_vm_sinh(double x) { return sinh(x); } +LJ_FUNCA double lj_vm_cosh(double x) { return cosh(x); } +LJ_FUNCA double lj_vm_tanh(double x) { return tanh(x); } +#endif + +#if LJ_HASJIT + +#if defined(__ANDROID__) || defined(__symbian__) +double lj_vm_log2(double a) +{ + return log(a) * 1.4426950408889634074; +} +#endif + +#if defined(__symbian__) +double lj_vm_exp2(double a) +{ + return exp(a * 0.6931471805599453); +} +#endif + +#if !LJ_TARGET_X86ORX64 +/* Unsigned x^k. */ +static double lj_vm_powui(double x, uint32_t k) +{ + double y; + lua_assert(k != 0); + for (; (k & 1) == 0; k >>= 1) x *= x; + y = x; + if ((k >>= 1) != 0) { + for (;;) { + x *= x; + if (k == 1) break; + if (k & 1) y *= x; + k >>= 1; + } + y *= x; + } + return y; +} + +/* Signed x^k. */ +double lj_vm_powi(double x, int32_t k) +{ + if (k > 1) + return lj_vm_powui(x, (uint32_t)k); + else if (k == 1) + return x; + else if (k == 0) + return 1; + else + return 1.0 / lj_vm_powui(x, (uint32_t)-k); +} + +/* Computes fpm(x) for extended math functions. */ +double lj_vm_foldfpm(double x, int fpm) +{ + switch (fpm) { + case IRFPM_FLOOR: return lj_vm_floor(x); + case IRFPM_CEIL: return lj_vm_ceil(x); + case IRFPM_TRUNC: return lj_vm_trunc(x); + case IRFPM_SQRT: return sqrt(x); + case IRFPM_EXP: return exp(x); + case IRFPM_EXP2: return lj_vm_exp2(x); + case IRFPM_LOG: return log(x); + case IRFPM_LOG2: return lj_vm_log2(x); + case IRFPM_LOG10: return log10(x); + case IRFPM_SIN: return sin(x); + case IRFPM_COS: return cos(x); + case IRFPM_TAN: return tan(x); + default: lua_assert(0); + } + return 0; +} +#endif + +#endif diff --git a/src/ljamalg.c b/src/ljamalg.c index 5d90c002..3d1f3938 100644 --- a/src/ljamalg.c +++ b/src/ljamalg.c @@ -41,6 +41,7 @@ #include "lj_state.c" #include "lj_dispatch.c" #include "lj_vmevent.c" +#include "lj_vmmath.c" #include "lj_api.c" #include "lj_lex.c" #include "lj_parse.c" -- 2.11.4.GIT