]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
ARM64: Make tobit conversions match JIT backend behavior.
authorMike Pall <mike>
Tue, 20 Aug 2024 17:01:51 +0000 (19:01 +0200)
committerMike Pall <mike>
Tue, 20 Aug 2024 17:01:51 +0000 (19:01 +0200)
Thanks to Peter Cawley. #1253

src/vm_arm64.dasc

index a6ce050789bc542f4fd1567ea1c388a4388377c4..4753df19624c49f11ee8f5c20c6115f863b3702e 100644 (file)
@@ -1658,22 +1658,14 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |//-- Bit library --------------------------------------------------------
   |
-  |// FP number to bit conversion for soft-float. Clobbers CARG1-CARG3
+  |// FP number to bit conversion. Clobbers CARG1-CARG2, FARG1-FARG2.
   |->vm_tobit_fb:
   |  bls ->fff_fallback
-  |  add CARG2, CARG1, CARG1
-  |  mov CARG3, #1076
-  |  sub CARG3, CARG3, CARG2, lsr #53
-  |  cmp CARG3, #53
-  |  bhi >1
-  |  and CARG2, CARG2, #U64x(001fffff,ffffffff)
-  |  orr CARG2, CARG2, #U64x(00200000,00000000)
-  |   cmp CARG1, #0
-  |  lsr CARG2, CARG2, CARG3
-  |   cneg CARG1w, CARG2w, mi
-  |  br lr
-  |1:
-  |  mov CARG1w, #0
+  |  fmov FARG1, CARG1
+  |  movz CARG2, #0x4338, lsl #48
+  |  fmov FARG2, CARG2
+  |  fadd FARG1, FARG1, FARG2
+  |  fmov CARG1w, s0
   |  br lr
   |
   |.macro .ffunc_bit, name