rt: fix some bugs for MIPS target
This commit is contained in:
parent
c2a61d7df3
commit
314605f948
@ -78,4 +78,5 @@ swap_registers:
|
||||
lw $31, 31 * 4($5)
|
||||
|
||||
jr $31
|
||||
nop
|
||||
.end swap_registers
|
||||
|
@ -8,5 +8,22 @@
|
||||
__morestack:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
move $7, $29
|
||||
move $29, $6
|
||||
|
||||
sw $7, 0($29)
|
||||
sw $31, -4($29)
|
||||
|
||||
addiu $29, $29, -24
|
||||
move $25, $5
|
||||
jalr $25
|
||||
nop
|
||||
addiu $29, $29, 24
|
||||
|
||||
lw $31, -4($29)
|
||||
lw $7, 0($29)
|
||||
|
||||
move $29, $7
|
||||
jr $31
|
||||
nop
|
||||
.end __morestack
|
||||
|
@ -21,10 +21,10 @@ public:
|
||||
uintptr_t r24, r25, r26, r27, r28, r29, r30, r31;
|
||||
|
||||
inline uintptr_t get_fp() { return r30; }
|
||||
inline uintptr_t get_ip() { return r0; }
|
||||
inline uintptr_t get_ip() { return r31; }
|
||||
|
||||
inline void set_fp(uintptr_t new_fp) { r30 = new_fp; }
|
||||
inline void set_ip(uintptr_t new_ip) { r0 = new_ip; }
|
||||
inline void set_ip(uintptr_t new_ip) { r31 = new_ip; }
|
||||
|
||||
void load();
|
||||
};
|
||||
|
@ -14,6 +14,7 @@ record_sp_limit:
|
||||
addiu $3, $3, -0x7008
|
||||
sw $4, 4($3)
|
||||
jr $31
|
||||
nop
|
||||
.end record_sp_limit
|
||||
|
||||
.globl get_sp_limit
|
||||
@ -30,6 +31,7 @@ get_sp_limit:
|
||||
addiu $3, $3, -0x7008
|
||||
lw $2, 4($3)
|
||||
jr $31
|
||||
nop
|
||||
.end get_sp_limit
|
||||
|
||||
.globl get_sp
|
||||
@ -41,4 +43,5 @@ get_sp:
|
||||
.set nomacro
|
||||
move $2, $29
|
||||
jr $31
|
||||
nop
|
||||
.end get_sp
|
||||
|
Loading…
x
Reference in New Issue
Block a user