X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fsparc-assem.S;h=ac6342dce8e29a2ad51480fbd77b08c11f10489f;hb=8a935232db803d74b2d79b5fb0fc3b3cd5d7beb3;hp=a6c03036f077250ab3d889e6951f5d72401a01cc;hpb=68fd2d2dd6f265669a8957accd8a33e62786a97e;p=sbcl.git diff --git a/src/runtime/sparc-assem.S b/src/runtime/sparc-assem.S index a6c0303..ac6342d 100644 --- a/src/runtime/sparc-assem.S +++ b/src/runtime/sparc-assem.S @@ -1,12 +1,16 @@ #define _ASM -#define FUNCDEF(x) .type x,@function +#include "sparc-funcdef.h" #define LANGUAGE_ASSEMBLY #include "lispregs.h" #include "globals.h" #include "sbcl.h" - +#include "genesis/closure.h" +#include "genesis/funcallable-instance.h" +#include "genesis/fdefn.h" +#include "genesis/static-symbols.h" +#include "genesis/simple-fun.h" #define load(sym, reg) \ sethi %hi(sym), reg; ld [reg+%lo(sym)], reg @@ -16,7 +20,6 @@ /* FIXME */ #define FRAMESIZE 0x48 #define ST_FLUSH_WINDOWS 0x03 -#define PSEUDO_ATOMIC_TRAP_NUMBER 64 .seg "text" .global call_into_lisp FUNCDEF(call_into_lisp) @@ -61,11 +64,7 @@ call_into_lisp: sub reg_ALLOC, 4, reg_ALLOC andcc reg_ALLOC, 3, reg_ZERO - /* OK, this is ridiculous. We badly urgently need this to be - centralized, because that's now _three_ places where this - number is used. CSR, 2002-02-09 */ - - tne 64 + tne PSEUDO_ATOMIC_TRAP /* Pass in the args. */ sll %i2, 2, reg_NARGS mov %i1, reg_CFP @@ -113,7 +112,7 @@ lra: /* Were we interrupted? */ sub reg_ALLOC, 4, reg_ALLOC andcc reg_ALLOC, 3, reg_ZERO - tne PSEUDO_ATOMIC_TRAP_NUMBER + tne PSEUDO_ATOMIC_TRAP /* Back to C we go. */ ld [%sp+FRAMESIZE-4], %i7 @@ -153,7 +152,7 @@ call_into_c: /* Were we interrupted? */ sub reg_ALLOC, 4, reg_ALLOC andcc reg_ALLOC, 3, reg_ZERO - tne PSEUDO_ATOMIC_TRAP_NUMBER + tne PSEUDO_ATOMIC_TRAP /* Into C we go. */ call reg_CFUNC @@ -191,7 +190,7 @@ call_into_c: /* No longer atomic. */ sub reg_ALLOC, 4, reg_ALLOC andcc reg_ALLOC, 3, reg_ZERO - tne PSEUDO_ATOMIC_TRAP_NUMBER + tne PSEUDO_ATOMIC_TRAP /* Reset the lisp stack. */ /* Note: OCFP is in one of the locals, it gets preserved across C. */ @@ -202,6 +201,8 @@ call_into_c: ret nop +/* Lisp calling convention. notice the first .byte line. + */ .global undefined_tramp FUNCDEF(undefined_tramp) .align 8 @@ -212,15 +213,12 @@ undefined_tramp = . + 1 .word NIL .word NIL .word NIL + .word NIL b 1f unimp trap_Cerror .byte 4 -#ifdef type_LongFloat - .byte 24 -#else - .byte 23 -#endif + .byte UNDEFINED_FUN_ERROR .byte 254, sc_DescriptorReg, 3 .align 4 1: @@ -228,6 +226,8 @@ undefined_tramp = . + 1 jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET nop +/* Lisp calling convention. Notice the first .byte line. + */ .global closure_tramp FUNCDEF(closure_tramp) .align 8 @@ -238,13 +238,29 @@ closure_tramp = . + 1 .word NIL .word NIL .word NIL + .word NIL ld [reg_FDEFN+FDEFN_FUN_OFFSET], reg_LEXENV ld [reg_LEXENV+CLOSURE_FUN_OFFSET], reg_CODE jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET nop - + .global funcallable_instance_tramp + FUNCDEF(funcallable_instance_tramp) + .align 8 + .word SIMPLE_FUN_HEADER_WIDETAG +funcallable_instance_tramp = . + 1 + .word funcallable_instance_tramp + .word NIL + .word NIL + .word NIL + .word NIL + .word NIL + + ld [reg_LEXENV+FUNCALLABLE_INSTANCE_FUNCTION_OFFSET], reg_LEXENV + ld [reg_LEXENV+CLOSURE_FUN_OFFSET], reg_CODE + jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET + nop /* * Function-end breakpoint magic. */ @@ -275,9 +291,9 @@ fun_end_breakpoint_trap: .global fun_end_breakpoint_end fun_end_breakpoint_end: - .global flush_icache - FUNCDEF(flush_icache) -flush_icache: + .global sparc_flush_icache + FUNCDEF(sparc_flush_icache) +sparc_flush_icache: add %o0,%o1,%o2 1: iflush %o0 ! flush instruction cache add %o0,8,%o0