X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Falpha-assem.S;h=c23e5467a56704e666b979524946b0cd4c398334;hb=1e4629723d19f96d752235ffde34fe58431431ae;hp=3fd27e64d2a6cb0eac7e0009a1d617c16e497315;hpb=90ca09b75fbc3b63b2f7d09c67b04b866dd783f6;p=sbcl.git diff --git a/src/runtime/alpha-assem.S b/src/runtime/alpha-assem.S index 3fd27e6..c23e546 100644 --- a/src/runtime/alpha-assem.S +++ b/src/runtime/alpha-assem.S @@ -11,8 +11,11 @@ #include "validate.h" #include +#ifdef linux #include - +#else +#include +#endif #include "sbcl.h" #include "lispregs.h" /* #include "globals.h" */ @@ -61,10 +64,10 @@ call_into_lisp: stl zero,foreign_function_call_active /* Load lisp state. */ - ldl reg_ALLOC,dynamic_space_free_pointer - ldl reg_BSP,current_binding_stack_pointer - ldl reg_CSP,current_control_stack_pointer - ldl reg_OCFP,current_control_frame_pointer + ldq reg_ALLOC,dynamic_space_free_pointer + ldq reg_BSP,current_binding_stack_pointer + ldq reg_CSP,current_control_stack_pointer + ldq reg_OCFP,current_control_frame_pointer mov a1,reg_CFP .set noat @@ -112,10 +115,10 @@ call_into_lisp_LRA: /* Turn on pseudo-atomic. */ /* Save LISP registers */ - stl reg_ALLOC, dynamic_space_free_pointer - stl reg_BSP,current_binding_stack_pointer - stl reg_CSP,current_control_stack_pointer - stl reg_CFP,current_control_frame_pointer + stq reg_ALLOC, dynamic_space_free_pointer + stq reg_BSP,current_binding_stack_pointer + stq reg_CSP,current_control_stack_pointer + stq reg_CFP,current_control_frame_pointer /* Back in C land. [CSP is just a handy non-zero value.] */ stl reg_CSP,foreign_function_call_active @@ -172,10 +175,11 @@ call_into_c: /* Save lisp state. */ subq reg_ALLOC,1,reg_L1 - stl reg_L1, dynamic_space_free_pointer - stl reg_BSP, current_binding_stack_pointer - stl reg_CSP, current_control_stack_pointer - stl reg_CFP, current_control_frame_pointer + stq reg_L1, dynamic_space_free_pointer + + stq reg_BSP, current_binding_stack_pointer + stq reg_CSP, current_control_stack_pointer + stq reg_CFP, current_control_frame_pointer /* Mark us as in C land. */ stl reg_CSP, foreign_function_call_active @@ -186,13 +190,7 @@ call_into_c: /* Into C land we go. */ - /* L1 is pv (procedure variable). The following line is */ - /* apparently a jump hint and not mysterious at all */ - - /* so, you have perfectly good code with comments written by */ - /* people who don't understand the Alpha :) */ - - mov reg_CFUNC, reg_L1 /* ### This line is a mystery */ + mov reg_CFUNC, reg_L1 /* L1=pv: this is a hint to the cache */ jsr ra, (reg_CFUNC) ldgp $29,0(ra) @@ -220,7 +218,7 @@ call_into_c: stl reg_ZERO, foreign_function_call_active /* Restore ALLOC, preserving pseudo-atomic-atomic */ - ldl reg_NL0,dynamic_space_free_pointer + ldq reg_NL0,dynamic_space_free_pointer addq reg_ALLOC,reg_NL0,reg_ALLOC /* Check for interrupt */ @@ -253,34 +251,42 @@ start_of_tramps: * INTERNAL-ERROR function */ .text - .globl undefined_tramp + .globl start_of_tramps + .globl closure_tramp + .globl undefined_tramp + .globl closure_tramp_offset + .globl undefined_tramp_offset .ent undefined_tramp_offset -undefined_tramp = /* ### undefined_tramp_offset-call_into_lisp_LRA*/ 0x140+call_into_lisp_LRA_page undefined_tramp_offset: + /* an explanation is called for here. 0x140 is the difference + * between undefined_tramp_offset and call_into_lisp_LRA, but + * the assembler is too dumb to allow that as an expression. + * So, change this number whenever you add or remove any code + * in this file */ + +undefined_tramp= call_into_lisp_LRA_page+0x140 call_pal PAL_bugchk .long trap_Error .byte 4 /* what are these numbers? */ - .byte 23 + .byte UNDEFINED_FUN_ERROR .byte 254 .byte (0xe0 + sc_DescriptorReg) .byte 2 .align 2 - .end undefined_tramp + .end undefined_tramp_offset -/* - * The closure trampoline. - */ +/* The closure trampoline. */ .text .globl closure_tramp .ent closure_tramp_offset -closure_tramp = /* ### */ 0x150 + call_into_lisp_LRA_page +closure_tramp= call_into_lisp_LRA_page+0x150 closure_tramp_offset: 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 jmp reg_ZERO,(reg_LIP) - .end closure_tramp + .end closure_tramp_offset .text .globl end_of_tramps @@ -318,4 +324,3 @@ fun_end_breakpoint_trap: .globl fun_end_breakpoint_end fun_end_breakpoint_end: -