diff --git a/src/vm_s390x.dasc b/src/vm_s390x.dasc index f6f1adb1..3758ee31 100644 --- a/src/vm_s390x.dasc +++ b/src/vm_s390x.dasc @@ -180,21 +180,16 @@ |// Call decode and dispatch. |.macro ins_callt | // BASE = new base, RB = LFUNC, RD = nargs+1, [BASE-4] = PC -| mov PC, LFUNC:RB->pc -| mov RA, [PC] -| movzx OP, RAL -| movzx RA, RAH +| mvcle PC, LFUNC:RB->pc +| mvcle RA, [PC] +| movcl OP, RAL +| movcl RA, RAH | add PC, 4 -|.if X64 -| jmp aword [DISPATCH+OP*8] -|.else -| jmp aword [DISPATCH+OP*4] -|.endif |.endmacro | |.macro ins_call | // BASE = new base, RB = LFUNC, RD = nargs+1 -| mov [BASE-4], PC +| mvcle [BASE-4], PC | ins_callt |.endmacro |