Mercurial > ecos
comparison packages/hal/mips/arch/current/src/context.S @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | bf00f99aec69 |
| children | 02ea4320376c |
comparison
equal
deleted
inserted
replaced
| 75:41bf073c0c32 | 76:435cced73e2f |
|---|---|
| 91 # sgpr 26,sp # == K0 | 91 # sgpr 26,sp # == K0 |
| 92 # sgpr 27,sp # == K1 | 92 # sgpr 27,sp # == K1 |
| 93 # sgpr 29,sp # == SP | 93 # sgpr 29,sp # == SP |
| 94 sgpr 30,sp # == FP | 94 sgpr 30,sp # == FP |
| 95 sgpr 31,sp # == RA | 95 sgpr 31,sp # == RA |
| 96 sgpr 31,sp # == PC (to help with debugging) | 96 spc $31,sp # == PC (to help with debugging) |
| 97 .set at | 97 .set at |
| 98 | 98 |
| 99 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM | 99 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
| 100 | 100 |
| 101 mflo t0 # save LO and HI regs | 101 mflo t0 # save LO and HI regs |
| 219 #define CYGARC_JMP_BUF_R30 10 | 219 #define CYGARC_JMP_BUF_R30 10 |
| 220 #define CYGARC_JMP_BUF_R31 11 | 220 #define CYGARC_JMP_BUF_R31 11 |
| 221 | 221 |
| 222 #define CYGARC_JMP_BUF_SIZE 12 | 222 #define CYGARC_JMP_BUF_SIZE 12 |
| 223 | 223 |
| 224 // FIXME: The follwing restricts us to using only 32 bit registers | |
| 225 // in jump buffers. If/when we move to a full 64 bit architecture, | |
| 226 // this will need to change, as will the instructions that we use to | |
| 227 // save and restore them. | |
| 228 | |
| 229 #define jmpbuf_regsize 4 | |
| 230 | |
| 224 .globl hal_setjmp | 231 .globl hal_setjmp |
| 225 .ent hal_setjmp | 232 .ent hal_setjmp |
| 226 hal_setjmp: | 233 hal_setjmp: |
| 227 sw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) | 234 sw $31,CYGARC_JMP_BUF_R31*jmpbuf_regsize(a0) # ra (link) |
| 228 sw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) | 235 sw $30,CYGARC_JMP_BUF_R30*jmpbuf_regsize(a0) |
| 229 sw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? | 236 sw $28,CYGARC_JMP_BUF_R28*jmpbuf_regsize(a0) # gp, optimize out? |
| 230 sw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) | 237 sw $23,CYGARC_JMP_BUF_R23*jmpbuf_regsize(a0) |
| 231 sw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) | 238 sw $22,CYGARC_JMP_BUF_R22*jmpbuf_regsize(a0) |
| 232 sw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) | 239 sw $21,CYGARC_JMP_BUF_R21*jmpbuf_regsize(a0) |
| 233 sw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) | 240 sw $20,CYGARC_JMP_BUF_R20*jmpbuf_regsize(a0) |
| 234 sw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) | 241 sw $19,CYGARC_JMP_BUF_R19*jmpbuf_regsize(a0) |
| 235 sw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) | 242 sw $18,CYGARC_JMP_BUF_R18*jmpbuf_regsize(a0) |
| 236 sw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) | 243 sw $17,CYGARC_JMP_BUF_R17*jmpbuf_regsize(a0) |
| 237 sw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) | 244 sw $16,CYGARC_JMP_BUF_R16*jmpbuf_regsize(a0) |
| 238 sw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 | 245 sw sp,CYGARC_JMP_BUF_SP*jmpbuf_regsize(a0) # $29 |
| 239 li v0,0 | 246 li v0,0 |
| 240 jr ra | 247 jr ra |
| 241 nop # delay slot | 248 nop # delay slot |
| 242 .end hal_setjmp | 249 .end hal_setjmp |
| 243 | 250 |
| 244 .globl hal_longjmp | 251 .globl hal_longjmp |
| 245 .ent hal_longjmp | 252 .ent hal_longjmp |
| 246 hal_longjmp: | 253 hal_longjmp: |
| 247 lw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) | 254 lw $31,CYGARC_JMP_BUF_R31*jmpbuf_regsize(a0) # ra (link) |
| 248 lw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) | 255 lw $30,CYGARC_JMP_BUF_R30*jmpbuf_regsize(a0) |
| 249 lw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? | 256 lw $28,CYGARC_JMP_BUF_R28*jmpbuf_regsize(a0) # gp, optimize out? |
| 250 lw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) | 257 lw $23,CYGARC_JMP_BUF_R23*jmpbuf_regsize(a0) |
| 251 lw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) | 258 lw $22,CYGARC_JMP_BUF_R22*jmpbuf_regsize(a0) |
| 252 lw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) | 259 lw $21,CYGARC_JMP_BUF_R21*jmpbuf_regsize(a0) |
| 253 lw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) | 260 lw $20,CYGARC_JMP_BUF_R20*jmpbuf_regsize(a0) |
| 254 lw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) | 261 lw $19,CYGARC_JMP_BUF_R19*jmpbuf_regsize(a0) |
| 255 lw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) | 262 lw $18,CYGARC_JMP_BUF_R18*jmpbuf_regsize(a0) |
| 256 lw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) | 263 lw $17,CYGARC_JMP_BUF_R17*jmpbuf_regsize(a0) |
| 257 lw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) | 264 lw $16,CYGARC_JMP_BUF_R16*jmpbuf_regsize(a0) |
| 258 lw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 | 265 lw sp,CYGARC_JMP_BUF_SP*jmpbuf_regsize(a0) # $29 |
| 259 move v0,a1 | 266 move v0,a1 |
| 260 jr ra | 267 jr ra |
| 261 nop # delay slot | 268 nop # delay slot |
| 262 .end hal_longjmp | 269 .end hal_longjmp |
| 263 | 270 |
