WARNING: This changes the amd64 compiled code interface so that new
compiled code requires a new microcode. (However, a new microcode
should handle old compiled code without trouble, since old compiled
code treats rax as garbage at this point, and LEA does not affect
flags.)
(else
(LAP (MOV Q (R ,rdx) (&U ,frame-size))
,@(invoke-hook/subroutine entry:compiler-apply-setup))))
- (JNE (@PCR ,generic))
- (JMP (R ,rax))
- (LABEL ,generic)
- ,@(invoke-hook entry:compiler-shortcircuit-apply))))
+ (JMP (R ,rax)))))
(define-rule statement
(INVOCATION:JUMP (? frame-size) (? continuation) (? label))
ret
asm_apply_setup_fail:
+ # Load the fallback address into rax, where compiled code will
+ # jump.
+ OP(lea,q) TW(ABS(EVR(asm_sc_apply_generic)),REG(rax))
ret
define(define_apply_setup_fixed_size,
ret
asm_apply_setup_size_$1_fail:
+ OP(lea,q) TW(ABS(EVR(asm_sc_apply_generic)),REG(rax))
OP(mov,q) TW(IMM(HEX($1)),REG(rdx))
ret')