]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
ARM: Make hard-float tobit conversions match JIT backend behavior.
authorMike Pall <mike>
Tue, 20 Aug 2024 17:00:47 +0000 (19:00 +0200)
committerMike Pall <mike>
Tue, 20 Aug 2024 17:00:47 +0000 (19:00 +0200)
Reported by Peter Cawley. #1253

src/vm_arm.dasc

index 872de45a91c29917d302310fd8f2abc0a76620d2..d23e57c1902478774becc8ae108ce77e5126d3dd 100644 (file)
@@ -1863,9 +1863,19 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |//-- Bit library --------------------------------------------------------
   |
-  |// FP number to bit conversion for soft-float. Clobbers r0-r3.
   |->vm_tobit_fb:
   |  bhi ->fff_fallback
+  |.if FPU
+  |// FP number to bit conversion for hard-float. Clobbers r0, d0-d1.
+  |  vldr d1, >9
+  |  vmov d0, CARG1, CARG2
+  |  vadd.f64 d0, d0, d1
+  |  vmov CARG1, s0
+  |  bx lr
+  |9:
+  |  .long 0, 0x43380000               // (double)(2^52 + 2^51).
+  |.else
+  |// FP number to bit conversion for soft-float. Clobbers r0-r3.
   |->vm_tobit:
   |  lsl RB, CARG2, #1
   |  adds RB, RB, #0x00200000
@@ -1890,6 +1900,7 @@ static void build_subroutines(BuildCtx *ctx)
   |  orr CARG1, CARG4, CARG1, lsl RB
   |   rsblt CARG1, CARG1, #0
   |  bx lr
+  |.endif
   |
   |.macro .ffunc_bit, name
   |  .ffunc_1 bit_..name