X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Falpha-assem.S;h=1a8928b1a722797c1281cb539897f1445964897a;hb=0f3a5f2e8886d18d0b4f6485c38a42be629422ae;hp=4741d36d41149bd608aa81e3cd6cf5c13774727d;hpb=59a2fe06955158192c66adae9c3415519468358a;p=sbcl.git diff --git a/src/runtime/alpha-assem.S b/src/runtime/alpha-assem.S index 4741d36..1a8928b 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" @@ -94,7 +95,7 @@ call_into_lisp: /* Indirect the closure */ ldl reg_CODE, CLOSURE_FUN_OFFSET(reg_LEXENV) - addl reg_CODE,6*4-FUN_POINTER_LOWTAG, reg_LIP + addl reg_CODE, SIMPLE_FUN_CODE_OFFSET, reg_LIP /* And into lisp we go. */ jsr reg_ZERO,(reg_LIP) @@ -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,17 +297,40 @@ 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 + .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. */ +/* + * For an explanation of the magic involved in function-end + * breakpoints, see the implementation in ppc-assem.S. + */ + .text .align 2 .set noreorder .globl fun_end_breakpoint_guts fun_end_breakpoint_guts: - .long RETURN_PC_HEADER_WIDETAG + .long RETURN_PC_HEADER_WIDETAG + 0x800 br zero, fun_end_breakpoint_trap nop mov reg_CSP, reg_OCFP