| Index: pnacl/support/setjmp_mips32.S
|
| diff --git a/pnacl/support/setjmp_mips32.S b/pnacl/support/setjmp_mips32.S
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3a906f47343a3fb4b115aefc7d818c9c30a1ceca
|
| --- /dev/null
|
| +++ b/pnacl/support/setjmp_mips32.S
|
| @@ -0,0 +1,175 @@
|
| +/*
|
| + * Copyright (c) 2012 The Native Client Authors. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#include "nacl_mips_defs.h"
|
| +
|
| + .text
|
| + .p2align 4
|
| + .align NACL_BLOCK_SHIFT
|
| + .globl setjmp
|
| + .ent setjmp
|
| + .frame $sp, 0, $31
|
| + .set noreorder
|
| +
|
| +/* int setjmp(jmp_buf env) */
|
| +setjmp:
|
| +
|
| + /* The code here is grouped by instruction bundle. */
|
| +
|
| + /* NACL_CALLEE_SAVE_LIST BEGIN */
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s0, 0($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s1, 4($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s2, 8($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s3, 12($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s4, 16($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s5, 20($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s6, 24($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + sw $s7, 28($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + sw $sp, 32($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + sw $fp, 36($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + sw $ra, 40($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f20, 44($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f21, 48($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f22, 52($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f23, 56($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f24, 60($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f25, 64($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f26, 68($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f27, 72($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f28, 76($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f29, 80($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f30, 84($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + swc1 $f31, 88($a0)
|
| + /* NACL_CALLEE_SAVE_LIST END */
|
| + move $v0, $zero
|
| + nop
|
| +
|
| + and $ra, $ra, JUMP_MASK
|
| + j $ra
|
| + nop
|
| + nop
|
| +
|
| + .end setjmp
|
| +
|
| + .text
|
| + .p2align 4
|
| + .align NACL_BLOCK_SHIFT
|
| + .globl longjmp
|
| + .ent longjmp
|
| + .set noreorder
|
| +
|
| +/* void longjmp(jmp_buf env, int val) */
|
| +longjmp:
|
| +
|
| + /* NACL_CALLEE_LOAD_LIST BEGIN */
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s0, 0($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s1, 4($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s2, 8($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s3, 12($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s4, 16($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s5, 20($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s6, 24($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lw $s7, 28($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lw $sp, 32($a0)
|
| + and $sp, $sp, STORE_MASK
|
| + nop
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lw $fp, 36($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lw $ra, 40($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f20, 44($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f21, 48($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f22, 52($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f23, 56($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f24, 60($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f25, 64($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f26, 68($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f27, 72($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f28, 76($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f29, 80($a0)
|
| +
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f30, 84($a0)
|
| + and $a0, $a0, STORE_MASK
|
| + lwc1 $f31, 88($a0)
|
| + /* NACL_CALLEE_LOAD_LIST END */
|
| +
|
| + bne $a1, $zero, 1f
|
| + nop
|
| + ori $a1, $zero, 1
|
| +1:
|
| + move $v0, $a1
|
| +
|
| + and $ra, $ra, JUMP_MASK
|
| + j $ra
|
| + nop
|
| + nop
|
| +
|
| + .end longjmp
|
| +
|
|
|