Index: fusl/src/thread/mips/syscall_cp.s |
diff --git a/fusl/src/thread/mips/syscall_cp.s b/fusl/src/thread/mips/syscall_cp.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8f76d40e1ebf2976f4139caaf735f781e098e50a |
--- /dev/null |
+++ b/fusl/src/thread/mips/syscall_cp.s |
@@ -0,0 +1,46 @@ |
+.set noreorder |
+ |
+.global __cp_begin |
+.hidden __cp_begin |
+.type __cp_begin,@function |
+.global __cp_end |
+.hidden __cp_end |
+.type __cp_end,@function |
+.global __cp_cancel |
+.hidden __cp_cancel |
+.type __cp_cancel,@function |
+.hidden __cancel |
+.global __syscall_cp_asm |
+.hidden __syscall_cp_asm |
+.type __syscall_cp_asm,@function |
+__syscall_cp_asm: |
+ subu $sp, $sp, 32 |
+__cp_begin: |
+ lw $4, 0($4) |
+ bne $4, $0, __cp_cancel |
+ move $2, $5 |
+ move $4, $6 |
+ move $5, $7 |
+ 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) |
+ sw $2, 28($sp) |
+ lw $2, 28($sp) |
+ syscall |
+__cp_end: |
+ beq $7, $0, 1f |
+ addu $sp, $sp, 32 |
+ subu $2, $0, $2 |
+1: jr $ra |
+ nop |
+ |
+__cp_cancel: |
+ addu $sp, $sp, 32 |
+ lw $25, %call16(__cancel)($gp) |
+ jr $25 |
+ nop |