X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Falpha-assem.S;h=ac79fa1dc60a1ba059e80fed18fb83e3355c12ea;hb=8a632c14b592472873cfb214239c9387bc1a1ced;hp=4741d36d41149bd608aa81e3cd6cf5c13774727d;hpb=59a2fe06955158192c66adae9c3415519468358a;p=sbcl.git diff --git a/src/runtime/alpha-assem.S b/src/runtime/alpha-assem.S index 4741d36..ac79fa1 100644 --- a/src/runtime/alpha-assem.S +++ b/src/runtime/alpha-assem.S @@ -20,6 +20,7 @@ #include "lispregs.h" #include "genesis/fdefn.h" #include "genesis/closure.h" +#include "genesis/funcallable-instance.h" #include "genesis/simple-fun.h" #include "genesis/static-symbols.h" @@ -257,9 +258,7 @@ start_of_tramps: */ .text .globl start_of_tramps - .globl closure_tramp .globl undefined_tramp - .globl closure_tramp_offset .globl undefined_tramp_offset .ent undefined_tramp_offset undefined_tramp_offset: @@ -284,9 +283,10 @@ undefined_tramp= call_into_lisp_LRA_page+0x140 /* The closure trampoline. */ .text .globl closure_tramp + .globl closure_tramp_offset .ent closure_tramp_offset -closure_tramp= call_into_lisp_LRA_page+0x150 closure_tramp_offset: +closure_tramp= call_into_lisp_LRA_page+0x150 ldl reg_LEXENV, FDEFN_FUN_OFFSET(reg_FDEFN) ldl reg_L0, CLOSURE_FUN_OFFSET(reg_LEXENV) addl reg_L0, SIMPLE_FUN_CODE_OFFSET, reg_LIP @@ -297,6 +297,23 @@ closure_tramp_offset: .globl end_of_tramps end_of_tramps: + .text + .globl funcallable_instance_tramp + .align 2 + .long SIMPLE_FUN_HEADER_WIDETAG +funcallable_instance_tramp = . + 1 + .long funcallable_instance_tramp + .long NIL + .long NIL + .long NIL + .long NIL + + ldl reg_LEXENV, FUNCALLABLE_INSTANCE_FUNCTION_OFFSET(reg_LEXENV) + /* I think we don't actually need to use reg_CODE here, because + $CODE is computed from $LIP in the function itself */ + ldl reg_CODE, CLOSURE_FUN_OFFSET(reg_LEXENV) + addl reg_CODE, SIMPLE_FUN_CODE_OFFSET, reg_LIP + jmp reg_ZERO, (reg_LIP) /* * fun-end breakpoint magic.