| Index: src/trusted/validator_mips/testdata/test_read_only_regs.S
|
| diff --git a/src/trusted/validator_mips/testdata/test_read_only_regs.S b/src/trusted/validator_mips/testdata/test_read_only_regs.S
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..a6314c8836a1ab7e5269a11288665f60be53f344
|
| --- /dev/null
|
| +++ b/src/trusted/validator_mips/testdata/test_read_only_regs.S
|
| @@ -0,0 +1,73 @@
|
| +# Copyright 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.
|
| +
|
| +#
|
| +# Tests alteration of value stored in read-only registers.
|
| +#
|
| +
|
| +.globl _start
|
| +_start:
|
| +.align 4
|
| +.set noreorder
|
| +.set STORE_MASK, $t7
|
| +.set JUMP_MASK, $t6
|
| +.set TLS_REG, $t8
|
| +
|
| + # Testing instructions that alter t6 (JUMP_MASK).
|
| +
|
| +bundle_altering_t6:
|
| + addiu JUMP_MASK, JUMP_MASK, 64 # Error, changing read-only register.
|
| + and JUMP_MASK, JUMP_MASK, $a2 # Error, changing read-only register.
|
| + lui JUMP_MASK, $f0 # Error, changing read-only register.
|
| + clo JUMP_MASK, $a2 # Error, changing read-only register.
|
| + ins JUMP_MASK, $s3, 2, 10 # Error, changing read-only register.
|
| + lui JUMP_MASK, 0x1f # Error, changing read-only register.
|
| + mfc1 JUMP_MASK, $f12 # Error, changing read-only register.
|
| + mfhc1 JUMP_MASK, $f10 # Error, changing read-only register.
|
| + mflo JUMP_MASK # Error, changing read-only register.
|
| + movn JUMP_MASK, $v0, $v1 # Error, changing read-only register.
|
| + movt JUMP_MASK, $s4, $fcc4 # Error, changing read-only register.
|
| + mul JUMP_MASK, $s0, $s1 # Error, changing read-only register.
|
| +
|
| + # Testing instructions that alter t7 (STORE_MASK).
|
| +
|
| +bundle_altering_t7:
|
| + addiu STORE_MASK, STORE_MASK, 64 # Error, changing read-only register.
|
| + and STORE_MASK, STORE_MASK, $a2 # Error, changing read-only register.
|
| + lui STORE_MASK, $f0 # Error, changing read-only register.
|
| + clo STORE_MASK, $a2 # Error, changing read-only register.
|
| +
|
| + # Testing instructions that alter t8 (TLS index).
|
| +
|
| +bundle_altering_t8:
|
| + lui TLS_REG, 0x1f # Error, changing read-only register.
|
| + mfc1 TLS_REG, $f12 # Error, changing read-only register.
|
| + mfhc1 TLS_REG, $f10 # Error, changing read-only register.
|
| + mflo TLS_REG # Error, changing read-only register.
|
| +
|
| +bundle_jalr_sp_t9:
|
| + nop
|
| + and $t9, $t9, JUMP_MASK
|
| + jalr STORE_MASK, $t9 # Error, changing read-only register.
|
| + nop # Instr in delay slot is indented.
|
| +
|
| + # Make sure $f14 is not interpreted
|
| + # as $t6 (14), when in fp instruction.
|
| +
|
| +bundle_fp_instr:
|
| + add.s $f14, $f4, $f2
|
| + mov.d $f14, $f0
|
| + neg.d $f14, $f4
|
| + lwc1 $f14,24($sp)
|
| +
|
| + # A few instructions where $t6/$t7
|
| + # is the first operand, but its value is not altered.
|
| +
|
| +bundle_t6_t7_not_altered:
|
| + mthi JUMP_MASK # OK
|
| + mult STORE_MASK, $t9 # OK
|
| + nop
|
| + nop
|
| +
|
| +end_of_code:
|
|
|