x64/LJ_GC64/Windows: Fix math.frexp and math.modf

Previously, BASE was saved too late, and so didn't get restored properly,
and things went down hill from there.

Also dropped a seemingly superfluous `mov PC, [BASE-8]` from modf.
This commit is contained in:
Peter Cawley 2016-03-30 23:35:07 +01:00
parent 892887e584
commit 0d16fbe308

View File

@ -1804,12 +1804,12 @@ static void build_subroutines(BuildCtx *ctx)
| jmp ->fff_res1 | jmp ->fff_res1
| |
|.ffunc_n math_frexp |.ffunc_n math_frexp
| mov RB, BASE
|.if X64WIN |.if X64WIN
| lea CARG2, TMP1 | lea CARG2, TMP1 // Caveat: CARG2 == BASE
|.else |.else
| lea CARG1, TMP1 | lea CARG1, TMP1
|.endif |.endif
| mov RB, BASE
| call extern frexp | call extern frexp
| mov BASE, RB | mov BASE, RB
| mov RBd, TMP1d | mov RBd, TMP1d
@ -1826,13 +1826,12 @@ static void build_subroutines(BuildCtx *ctx)
| jmp ->fff_res | jmp ->fff_res
| |
|.ffunc_n math_modf |.ffunc_n math_modf
| mov RB, BASE
|.if X64WIN |.if X64WIN
| lea CARG2, [BASE-16] | lea CARG2, [BASE-16] // Caveat: CARG2 == BASE
|.else |.else
| lea CARG1, [BASE-16] | lea CARG1, [BASE-16]
|.endif |.endif
| mov PC, [BASE-8]
| mov RB, BASE
| call extern modf | call extern modf
| mov BASE, RB | mov BASE, RB
| mov PC, [BASE-8] | mov PC, [BASE-8]