about summary refs log tree commit diff
path: root/src/thread/mips/syscall_cp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/mips/syscall_cp.s')
-rw-r--r--src/thread/mips/syscall_cp.s20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/thread/mips/syscall_cp.s b/src/thread/mips/syscall_cp.s
index b6f30ee8..d903794d 100644
--- a/src/thread/mips/syscall_cp.s
+++ b/src/thread/mips/syscall_cp.s
@@ -3,19 +3,19 @@
 .global __syscall_cp_asm
 .type   __syscall_cp_asm,@function
 __syscall_cp_asm:
+	subu    $sp, $sp, 32
 .global __cp_begin
 __cp_begin:
 	lw      $4, 0($4)
-	bne     $4, $0, 2f
+	bne     $4, $0, __cp_cancel
 	move    $2, $5
 	move    $4, $6
 	move    $5, $7
-	lw      $6, 16($sp)
-	lw      $7, 20($sp)
-	lw      $8, 24($sp)
-	lw      $9, 28($sp)
-	lw      $10,32($sp)
-	subu    $sp, $sp, 32
+	lw      $6, 48($sp)
+	lw      $7, 52($sp)
+	lw      $8, 56($sp)
+	lw      $9, 60($sp)
+	lw      $10,64($sp)
 	sw      $8, 16($sp)
 	sw      $9, 20($sp)
 	sw      $10,24($sp)
@@ -29,6 +29,10 @@ __cp_end:
 	subu    $2, $0, $2
 1:	jr      $ra
 	nop
-2:	lw      $25, %call16(__cancel)($gp)
+
+.global __cp_cancel
+__cp_cancel:
+	addu    $sp, $sp, 32
+	lw      $25, %call16(__cancel)($gp)
 	jr      $25
 	nop