]> git.lizzy.rs Git - rust.git/commitdiff
rt: fix some bugs for MIPS target
authorJyun-Yan You <jyyou@cs.nctu.edu.tw>
Wed, 30 Jan 2013 15:42:48 +0000 (23:42 +0800)
committerBrian Anderson <banderson@mozilla.com>
Mon, 4 Mar 2013 04:02:06 +0000 (20:02 -0800)
src/rt/arch/mips/_context.S
src/rt/arch/mips/ccall.S
src/rt/arch/mips/gpr.h
src/rt/arch/mips/record_sp.S

index a903557ba6cb110c6d083dbf14a6a3b954146ee9..614cf686817081f091069111ceb11da10eb30775 100644 (file)
@@ -78,4 +78,5 @@ swap_registers:
         lw $31, 31 * 4($5)
 
         jr $31
+        nop
 .end swap_registers
index 184c4cd7e45fecfa826beb8c1e3e2e9f6edaae23..522714a8807b42d64135dcf8de72c7f08a9482d4 100644 (file)
@@ -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
index a174146e6928df2cc3e888eb1a7b681e75b99cd2..4ff0729633a649972295b0f2548f20eb549be634 100644 (file)
@@ -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();
 };
index 6821b175c9ee5d25a3c8555c72a074b802283e87..6b782fc4629ecff1786f4af8e374c654692dd7c2 100644 (file)
@@ -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