From 0b2199ffc78ecd6fbb8754fa975bebb8d5814a06 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Thu, 2 Apr 2009 12:47:45 +0000 Subject: 20090402-1346 --- emu/Linux/asm-mips.S | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 emu/Linux/asm-mips.S (limited to 'emu/Linux/asm-mips.S') diff --git a/emu/Linux/asm-mips.S b/emu/Linux/asm-mips.S new file mode 100644 index 00000000..087b8550 --- /dev/null +++ b/emu/Linux/asm-mips.S @@ -0,0 +1,58 @@ +#include "syscall.h" +#include +#include +#include + +/* + * executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) + */ + +LEAF(executeonnewstack) + and a0,a0,~7 + addu sp,a0,-16 + move a0,a2 + move t9,a1 + jalr t9 + + li v0,SYS_exit + li a0,0 + syscall + + END(executeonnewstack) + +/* + * unlockandexit(int *key) + */ + +LEAF(unlockandexit) + lw a1,0(a0) + li v0,SYS_exit + li a0,0 + sw a0,0(a1) + syscall + END(unlockandexit) + +LEAF(FPsave) + cfc1 t0, $31 + sw t0, 0(a0) /* a0 is argument */ + j $31 + END(FPsave) + +LEAF(FPrestore) + lw t0, 0(a0) /* a0 is argument */ + ctc1 t0, $31 + j $31 + END(FPrestore) + +LEAF(_tas) + .set noreorder +1: + ll v0,0(a0) /* a0 is argument */ + or t1, v0, 1 + sc t1,0(a0) + beq t1,zero,1b + nop + j $31 /* lock held */ + nop + .set reorder + END(_tas) -- cgit v1.2.3