Mercurial > ecos
diff packages/hal/mips/arch/current/src/context.S @ 6:d376b777e2ce ecos-sw-1999-05-14
Merge from eCos master repository on 1999-05-14-19:27:43-BST
| author | jlarmour |
|---|---|
| date | Fri, 14 May 1999 12:20:00 +0000 |
| parents | 443894e2e912 |
| children | ece80412419a |
line wrap: on
line diff
--- a/packages/hal/mips/arch/current/src/context.S +++ b/packages/hal/mips/arch/current/src/context.S @@ -42,7 +42,7 @@ #include <pkgconf/hal.h> -#include <cyg/hal/mips.inc> +#include <cyg/hal/arch.inc> .set noat @@ -59,39 +59,39 @@ hal_thread_switch_context: # store GPRs #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM - sw $0,(mipsreg_regs+0*4)(sp) - sw $1,(mipsreg_regs+1*4)(sp) - sw $2,(mipsreg_regs+2*4)(sp) - sw $3,(mipsreg_regs+3*4)(sp) - sw $4,(mipsreg_regs+4*4)(sp) - sw $5,(mipsreg_regs+5*4)(sp) - sw $6,(mipsreg_regs+6*4)(sp) - sw $7,(mipsreg_regs+7*4)(sp) - sw $8,(mipsreg_regs+8*4)(sp) - sw $9,(mipsreg_regs+9*4)(sp) - sw $10,(mipsreg_regs+10*4)(sp) - sw $11,(mipsreg_regs+11*4)(sp) - sw $12,(mipsreg_regs+12*4)(sp) - sw $13,(mipsreg_regs+13*4)(sp) - sw $14,(mipsreg_regs+14*4)(sp) - sw $15,(mipsreg_regs+15*4)(sp) - sw $24,(mipsreg_regs+24*4)(sp) - sw $25,(mipsreg_regs+25*4)(sp) - sw $28,(mipsreg_regs+28*4)(sp) # == GP + sw $0,(mipsreg_regs+0*mips_regsize)(sp) + sw $1,(mipsreg_regs+1*mips_regsize)(sp) + sw $2,(mipsreg_regs+2*mips_regsize)(sp) + sw $3,(mipsreg_regs+3*mips_regsize)(sp) + sw $4,(mipsreg_regs+4*mips_regsize)(sp) + sw $5,(mipsreg_regs+5*mips_regsize)(sp) + sw $6,(mipsreg_regs+6*mips_regsize)(sp) + sw $7,(mipsreg_regs+7*mips_regsize)(sp) + sw $8,(mipsreg_regs+8*mips_regsize)(sp) + sw $9,(mipsreg_regs+9*mips_regsize)(sp) + sw $10,(mipsreg_regs+10*mips_regsize)(sp) + sw $11,(mipsreg_regs+11*mips_regsize)(sp) + sw $12,(mipsreg_regs+12*mips_regsize)(sp) + sw $13,(mipsreg_regs+13*mips_regsize)(sp) + sw $14,(mipsreg_regs+14*mips_regsize)(sp) + sw $15,(mipsreg_regs+15*mips_regsize)(sp) + sw $24,(mipsreg_regs+24*mips_regsize)(sp) + sw $25,(mipsreg_regs+25*mips_regsize)(sp) + sw $28,(mipsreg_regs+28*mips_regsize)(sp) # == GP #endif - sw $16,(mipsreg_regs+16*4)(sp) - sw $17,(mipsreg_regs+17*4)(sp) - sw $18,(mipsreg_regs+18*4)(sp) - sw $19,(mipsreg_regs+19*4)(sp) - sw $20,(mipsreg_regs+20*4)(sp) - sw $21,(mipsreg_regs+21*4)(sp) - sw $22,(mipsreg_regs+22*4)(sp) - sw $23,(mipsreg_regs+23*4)(sp) -# sw $26,(mipsreg_regs+26*4)(sp) # == K0 -# sw $27,(mipsreg_regs+27*4)(sp) # == K1 -# sw $29,(mipsreg_regs+29*4)(sp) # == SP - sw $30,(mipsreg_regs+30*4)(sp) # == FP - sw $31,(mipsreg_regs+31*4)(sp) # == RA + sw $16,(mipsreg_regs+16*mips_regsize)(sp) + sw $17,(mipsreg_regs+17*mips_regsize)(sp) + sw $18,(mipsreg_regs+18*mips_regsize)(sp) + sw $19,(mipsreg_regs+19*mips_regsize)(sp) + sw $20,(mipsreg_regs+20*mips_regsize)(sp) + sw $21,(mipsreg_regs+21*mips_regsize)(sp) + sw $22,(mipsreg_regs+22*mips_regsize)(sp) + sw $23,(mipsreg_regs+23*mips_regsize)(sp) +# sw $26,(mipsreg_regs+26*mips_regsize)(sp) # == K0 +# sw $27,(mipsreg_regs+27*mips_regsize)(sp) # == K1 +# sw $29,(mipsreg_regs+29*mips_regsize)(sp) # == SP + sw $30,(mipsreg_regs+30*mips_regsize)(sp) # == FP + sw $31,(mipsreg_regs+31*mips_regsize)(sp) # == RA sw $31,(mipsreg_pc)(sp) # == PC (to help with debugging) #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM @@ -103,9 +103,20 @@ hal_thread_switch_context: #endif + hal_fpu_save_callee sp + +#ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + + hal_fpu_save_caller sp + +#endif + addi t0,sp,mipsreg_size # save SP in reg dump - sw t0,(mipsreg_regs+29*4)(sp) + sw t0,(mipsreg_regs+29*mips_regsize)(sp) + mfc0 t1,status # Save status register + sw t1,mipsreg_sr(sp) + sw sp,0(a1) # save sp in save loc # Now load the destination thread by dropping through @@ -124,6 +135,14 @@ hal_thread_load_context: lw sp,0(a0) # load new SP directly #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + + hal_fpu_load_caller sp + +#endif + + hal_fpu_load_callee sp + +#ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM lw t0,mipsreg_hi(sp) # load HI and LO regs lw t1,mipsreg_lo(sp) @@ -131,47 +150,48 @@ hal_thread_load_context: mtlo t1 #endif - + # load GPRs -# lw $0,(mipsreg_regs+0*4)(sp) - lw $4,(mipsreg_regs+4*4)(sp) # A0, must load for thread startup +# lw $0,(mipsreg_regs+0*mips_regsize)(sp) + lw $4,(mipsreg_regs+4*mips_regsize)(sp) # A0, must load for thread startup #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM - lw $1,(mipsreg_regs+1*4)(sp) - lw $2,(mipsreg_regs+2*4)(sp) - lw $3,(mipsreg_regs+3*4)(sp) - lw $5,(mipsreg_regs+5*4)(sp) - lw $6,(mipsreg_regs+6*4)(sp) - lw $7,(mipsreg_regs+7*4)(sp) - lw $8,(mipsreg_regs+8*4)(sp) - lw $9,(mipsreg_regs+9*4)(sp) - lw $10,(mipsreg_regs+10*4)(sp) - lw $11,(mipsreg_regs+11*4)(sp) - lw $12,(mipsreg_regs+12*4)(sp) - lw $13,(mipsreg_regs+13*4)(sp) - lw $14,(mipsreg_regs+14*4)(sp) - lw $15,(mipsreg_regs+15*4)(sp) - lw $24,(mipsreg_regs+24*4)(sp) - lw $25,(mipsreg_regs+25*4)(sp) + lw $1,(mipsreg_regs+1*mips_regsize)(sp) + lw $2,(mipsreg_regs+2*mips_regsize)(sp) + lw $3,(mipsreg_regs+3*mips_regsize)(sp) + lw $5,(mipsreg_regs+5*mips_regsize)(sp) + lw $6,(mipsreg_regs+6*mips_regsize)(sp) + lw $7,(mipsreg_regs+7*mips_regsize)(sp) + lw $8,(mipsreg_regs+8*mips_regsize)(sp) + lw $9,(mipsreg_regs+9*mips_regsize)(sp) + lw $10,(mipsreg_regs+10*mips_regsize)(sp) + lw $11,(mipsreg_regs+11*mips_regsize)(sp) + lw $12,(mipsreg_regs+12*mips_regsize)(sp) + lw $13,(mipsreg_regs+13*mips_regsize)(sp) + lw $14,(mipsreg_regs+14*mips_regsize)(sp) + lw $15,(mipsreg_regs+15*mips_regsize)(sp) + lw $24,(mipsreg_regs+24*mips_regsize)(sp) + lw $25,(mipsreg_regs+25*mips_regsize)(sp) #endif - lw $16,(mipsreg_regs+16*4)(sp) - lw $17,(mipsreg_regs+17*4)(sp) - lw $18,(mipsreg_regs+18*4)(sp) - lw $19,(mipsreg_regs+19*4)(sp) - lw $20,(mipsreg_regs+20*4)(sp) - lw $21,(mipsreg_regs+21*4)(sp) - lw $22,(mipsreg_regs+22*4)(sp) - lw $23,(mipsreg_regs+23*4)(sp) -# lw $26,(mipsreg_regs+26*4)(sp) # == K0 -# lw $27,(mipsreg_regs+27*4)(sp) # == K1 -# lw $28,(mipsreg_regs+28*4)(sp) # == GP -# lw $29,(mipsreg_regs+29*4)(sp) # == SP - lw $30,(mipsreg_regs+30*4)(sp) # == FP - lw $31,(mipsreg_regs+31*4)(sp) # == RA + lw $16,(mipsreg_regs+16*mips_regsize)(sp) + lw $17,(mipsreg_regs+17*mips_regsize)(sp) + lw $18,(mipsreg_regs+18*mips_regsize)(sp) + lw $19,(mipsreg_regs+19*mips_regsize)(sp) + lw $20,(mipsreg_regs+20*mips_regsize)(sp) + lw $21,(mipsreg_regs+21*mips_regsize)(sp) + lw $22,(mipsreg_regs+22*mips_regsize)(sp) + lw $23,(mipsreg_regs+23*mips_regsize)(sp) +# lw $26,(mipsreg_regs+26*mips_regsize)(sp) # == K0 +# lw $27,(mipsreg_regs+27*mips_regsize)(sp) # == K1 +# lw $28,(mipsreg_regs+28*mips_regsize)(sp) # == GP +# lw $29,(mipsreg_regs+29*mips_regsize)(sp) # == SP + lw $30,(mipsreg_regs+30*mips_regsize)(sp) # == FP + lw $31,(mipsreg_regs+31*mips_regsize)(sp) # == RA - # Note that the following lw must go here and not - # in the jr delay slot, since it has a delay slot - # of its own. - lw sp,(mipsreg_regs+29*4)(sp) # load SP + lw a2,mipsreg_sr(sp) # A2 = saved SR + lw sp,(mipsreg_regs+29*mips_regsize)(sp) # SP = saved SP + + hal_cpu_int_merge a2 # Merge with current SR + jr ra # return via ra nop # delay slot - must be nop @@ -200,18 +220,18 @@ hal_thread_load_context: .globl hal_setjmp .ent hal_setjmp hal_setjmp: - sw $31,CYGARC_JMP_BUF_R31*4(a0) # ra (link) - sw $30,CYGARC_JMP_BUF_R30*4(a0) - sw $28,CYGARC_JMP_BUF_R28*4(a0) # gp, optimize out? - sw $23,CYGARC_JMP_BUF_R23*4(a0) - sw $22,CYGARC_JMP_BUF_R22*4(a0) - sw $21,CYGARC_JMP_BUF_R21*4(a0) - sw $20,CYGARC_JMP_BUF_R20*4(a0) - sw $19,CYGARC_JMP_BUF_R19*4(a0) - sw $18,CYGARC_JMP_BUF_R18*4(a0) - sw $17,CYGARC_JMP_BUF_R17*4(a0) - sw $16,CYGARC_JMP_BUF_R16*4(a0) - sw sp,CYGARC_JMP_BUF_SP*4(a0) # $29 + sw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) + sw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) + sw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? + sw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) + sw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) + sw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) + sw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) + sw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) + sw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) + sw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) + sw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) + sw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 li v0,0 jr ra nop # delay slot @@ -220,18 +240,18 @@ hal_setjmp: .globl hal_longjmp .ent hal_longjmp hal_longjmp: - lw $31,CYGARC_JMP_BUF_R31*4(a0) # ra (link) - lw $30,CYGARC_JMP_BUF_R30*4(a0) - lw $28,CYGARC_JMP_BUF_R28*4(a0) # gp, optimize out? - lw $23,CYGARC_JMP_BUF_R23*4(a0) - lw $22,CYGARC_JMP_BUF_R22*4(a0) - lw $21,CYGARC_JMP_BUF_R21*4(a0) - lw $20,CYGARC_JMP_BUF_R20*4(a0) - lw $19,CYGARC_JMP_BUF_R19*4(a0) - lw $18,CYGARC_JMP_BUF_R18*4(a0) - lw $17,CYGARC_JMP_BUF_R17*4(a0) - lw $16,CYGARC_JMP_BUF_R16*4(a0) - lw sp,CYGARC_JMP_BUF_SP*4(a0) # $29 + lw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) + lw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) + lw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? + lw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) + lw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) + lw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) + lw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) + lw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) + lw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) + lw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) + lw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) + lw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 move v0,a1 jr ra nop # delay slot
