diff options
author | Mike Pall <mike> | 2011-04-10 16:57:09 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-04-10 16:58:22 +0200 |
commit | 89022b4c3e75fe06439c7edc8d61e330b6ede59c (patch) | |
tree | 90f5be2a50fca371a20351b23f0f88c8ab141b00 /src | |
parent | f089f3954c9be976faccc82661b4a7b00e70c3b0 (diff) | |
download | luajit-89022b4c3e75fe06439c7edc8d61e330b6ede59c.tar.gz luajit-89022b4c3e75fe06439c7edc8d61e330b6ede59c.tar.bz2 luajit-89022b4c3e75fe06439c7edc8d61e330b6ede59c.zip |
Use lj_vm_tobit() on targets without FPU.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_obj.h | 8 | ||||
-rw-r--r-- | src/lj_opt_fold.c | 4 | ||||
-rw-r--r-- | src/lj_vm.h | 3 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/lj_obj.h b/src/lj_obj.h index 19a2345f..43f3d6ad 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h | |||
@@ -786,11 +786,19 @@ static LJ_AINLINE void copyTV(lua_State *L, TValue *o1, const TValue *o2) | |||
786 | 786 | ||
787 | /* -- Number to integer conversion ---------------------------------------- */ | 787 | /* -- Number to integer conversion ---------------------------------------- */ |
788 | 788 | ||
789 | #if !LJ_ARCH_HASFPU | ||
790 | LJ_ASMF int32_t lj_vm_tobit(double x); | ||
791 | #endif | ||
792 | |||
789 | static LJ_AINLINE int32_t lj_num2bit(lua_Number n) | 793 | static LJ_AINLINE int32_t lj_num2bit(lua_Number n) |
790 | { | 794 | { |
795 | #if LJ_ARCH_HASFPU | ||
791 | TValue o; | 796 | TValue o; |
792 | o.n = n + 6755399441055744.0; /* 2^52 + 2^51 */ | 797 | o.n = n + 6755399441055744.0; /* 2^52 + 2^51 */ |
793 | return (int32_t)o.u32.lo; | 798 | return (int32_t)o.u32.lo; |
799 | #else | ||
800 | return lj_vm_tobit(n); | ||
801 | #endif | ||
794 | } | 802 | } |
795 | 803 | ||
796 | #if LJ_TARGET_X86 && !defined(__SSE2__) | 804 | #if LJ_TARGET_X86 && !defined(__SSE2__) |
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 44a55709..48f2c40d 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -541,9 +541,7 @@ LJFOLDF(kfold_add_kptr) | |||
541 | LJFOLD(TOBIT KNUM KNUM) | 541 | LJFOLD(TOBIT KNUM KNUM) |
542 | LJFOLDF(kfold_tobit) | 542 | LJFOLDF(kfold_tobit) |
543 | { | 543 | { |
544 | TValue tv; | 544 | return INTFOLD(lj_num2bit(knumleft)); |
545 | tv.n = knumleft + knumright; | ||
546 | return INTFOLD((int32_t)tv.u32.lo); | ||
547 | } | 545 | } |
548 | 546 | ||
549 | LJFOLD(CONV KINT IRCONV_NUM_INT) | 547 | LJFOLD(CONV KINT IRCONV_NUM_INT) |
diff --git a/src/lj_vm.h b/src/lj_vm.h index 036ada7d..55b92c83 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h | |||
@@ -31,6 +31,9 @@ LJ_ASMF double lj_vm_foldarith(double x, double y, int op); | |||
31 | #if LJ_HASJIT | 31 | #if LJ_HASJIT |
32 | LJ_ASMF double lj_vm_foldfpm(double x, int op); | 32 | LJ_ASMF double lj_vm_foldfpm(double x, int op); |
33 | #endif | 33 | #endif |
34 | #if !LJ_ARCH_HASFPU | ||
35 | /* Declared in lj_obj.h: LJ_ASMF int32_t lj_vm_tobit(double x); */ | ||
36 | #endif | ||
34 | 37 | ||
35 | /* Dispatch targets for recording and hooks. */ | 38 | /* Dispatch targets for recording and hooks. */ |
36 | LJ_ASMF void lj_vm_record(void); | 39 | LJ_ASMF void lj_vm_record(void); |