| 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 100644
|
| index 0000000000000000000000000000000000000000..e1640212412335f1bfbe14f8063f9011b5c6ee66
|
| --- /dev/null
|
| +++ b/src/trusted/validator_mips/testdata/test_read_only_regs.S
|
| @@ -0,0 +1,69 @@
|
| +# 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.
|
| +# Copyright 2012 MIPS Technologies / RT-RK.
|
| +
|
| +#
|
| +# Tests altering the 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
|
| +
|
| +# checking instructions that alter t6
|
| +bundle_altering_t6:
|
| + addiu JUMP_MASK, JUMP_MASK, 64 # kProblemReadOnlyRegister
|
| + and JUMP_MASK, JUMP_MASK, $a2 # kProblemReadOnlyRegister
|
| + lui JUMP_MASK, $f0 # kProblemReadOnlyRegister
|
| + clo JUMP_MASK, $a2 # kProblemReadOnlyRegister
|
| + ins JUMP_MASK, $s3, 2, 10 # kProblemReadOnlyRegister
|
| + lui JUMP_MASK, 0x1f # kProblemReadOnlyRegister
|
| + mfc1 JUMP_MASK, $f12 # kProblemReadOnlyRegister
|
| + mfhc1 JUMP_MASK, $f10 # kProblemReadOnlyRegister
|
| + mflo JUMP_MASK # kProblemReadOnlyRegister
|
| + movn JUMP_MASK, $v0, $v1 # kProblemReadOnlyRegister
|
| + movt JUMP_MASK, $s4, $fcc4 # kProblemReadOnlyRegister
|
| + mul JUMP_MASK, $s0, $s1 # kProblemReadOnlyRegister
|
| +
|
| +bundle_altering_t7:
|
| + addiu STORE_MASK, STORE_MASK, 64 # kProblemReadOnlyRegister
|
| + and STORE_MASK, STORE_MASK, $a2 # kProblemReadOnlyRegister
|
| + cfc1 STORE_MASK, $f0 # kProblemReadOnlyRegister
|
| + clo STORE_MASK, $a2 # kProblemReadOnlyRegister
|
| +
|
| +bundle_altering_t8:
|
| + lui TLS_REG, 0x1f # kProblemReadOnlyRegister
|
| + mfc1 TLS_REG, $f12 # kProblemReadOnlyRegister
|
| + mfhc1 TLS_REG, $f10 # kProblemReadOnlyRegister
|
| + mflo TLS_REG # kProblemReadOnlyRegister
|
| +
|
| +bundle_jalr_sp_t9:
|
| + nop
|
| + and $t9, $t9, JUMP_MASK
|
| + jalr STORE_MASK, $t9 # kProblemReadOnlyRegister
|
| + nop
|
| +
|
| +# make sure $14 is not interpreted
|
| +# as $t6, 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 1st operand, but don't alter it
|
| +
|
| +bundle_t6_t7_not_altered:
|
| + mthi JUMP_MASK #ok
|
| + mult STORE_MASK, $t9 #ok
|
| + nop
|
| + nop
|
| +
|
| +end_of_code:
|
|
|