aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2024-08-20 19:01:51 +0200
committerMike Pall <mike>2024-08-20 19:01:51 +0200
commitcdc2db3aeac442e139c3b1fda715fdfa78da8791 (patch)
tree7c8a812aafa593b2cd3ceb45ed5e1920ffade961 /src
parentf4fa5646a8149ee0298e14d40cf078ec609a4354 (diff)
downloadluajit-cdc2db3aeac442e139c3b1fda715fdfa78da8791.tar.gz
luajit-cdc2db3aeac442e139c3b1fda715fdfa78da8791.tar.bz2
luajit-cdc2db3aeac442e139c3b1fda715fdfa78da8791.zip
ARM64: Make tobit conversions match JIT backend behavior.
Thanks to Peter Cawley. #1253
Diffstat (limited to 'src')
-rw-r--r--src/vm_arm64.dasc20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc
index a6ce0507..4753df19 100644
--- a/src/vm_arm64.dasc
+++ b/src/vm_arm64.dasc
@@ -1658,22 +1658,14 @@ static void build_subroutines(BuildCtx *ctx)
1658 | 1658 |
1659 |//-- Bit library -------------------------------------------------------- 1659 |//-- Bit library --------------------------------------------------------
1660 | 1660 |
1661 |// FP number to bit conversion for soft-float. Clobbers CARG1-CARG3 1661 |// FP number to bit conversion. Clobbers CARG1-CARG2, FARG1-FARG2.
1662 |->vm_tobit_fb: 1662 |->vm_tobit_fb:
1663 | bls ->fff_fallback 1663 | bls ->fff_fallback
1664 | add CARG2, CARG1, CARG1 1664 | fmov FARG1, CARG1
1665 | mov CARG3, #1076 1665 | movz CARG2, #0x4338, lsl #48
1666 | sub CARG3, CARG3, CARG2, lsr #53 1666 | fmov FARG2, CARG2
1667 | cmp CARG3, #53 1667 | fadd FARG1, FARG1, FARG2
1668 | bhi >1 1668 | fmov CARG1w, s0
1669 | and CARG2, CARG2, #U64x(001fffff,ffffffff)
1670 | orr CARG2, CARG2, #U64x(00200000,00000000)
1671 | cmp CARG1, #0
1672 | lsr CARG2, CARG2, CARG3
1673 | cneg CARG1w, CARG2w, mi
1674 | br lr
1675 |1:
1676 | mov CARG1w, #0
1677 | br lr 1669 | br lr
1678 | 1670 |
1679 |.macro .ffunc_bit, name 1671 |.macro .ffunc_bit, name