Index: src/trusted/validator_mips/testdata/test_stores.S |
diff --git a/src/trusted/validator_mips/testdata/test_stores.S b/src/trusted/validator_mips/testdata/test_stores.S |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cb8705f80f49239713dbe4e0f41948ba8afc26c2 |
--- /dev/null |
+++ b/src/trusted/validator_mips/testdata/test_stores.S |
@@ -0,0 +1,85 @@ |
+# 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. |
+ |
+ |
+#test if all store instrs are recognized as such |
+#test if store from sp is allowed |
+#test if mask and instr are split w/ delay slot |
+#test if mask and inst are in the same bundle |
+ |
+ |
+.globl _start |
+_start: |
+.align 4 |
+.set noreorder |
+.set STORE_MASK,$t7 |
+ |
+#check store mask |
+bundle_store_mask: |
+ and $a3, $a3, STORE_MASK #good mask |
+ sw $s1, 128($a3) |
+ and $a3, $a3, $t8 #bad mask |
+ sw $s1, 128($a3) |
+ |
+bundle_store_list: |
+ sb $a0, 16($a1) #unsafe store, no mask |
+ sc $a0, 16($a1) #unsafe store, no mask |
+ sdc1 $0, 16($a1) #unsafe store, no mask |
+ sdc2 $8, 16($a1) #unsafe store, no mask |
+ |
+ sh $a0, 16($a1) #unsafe store, no mask |
+ sw $a0, 16($a1) #unsafe store, no mask |
+ swc1 $f2, 16($a1) #unsafe store, no mask |
+ swc2 $22, 16($a1) #unsafe store, no mask |
+ |
+ swl $a0, 16($a1) #unsafe store, no mask |
+ swr $a0, 16($a1) #unsafe store, no mask |
+ nop |
+ nop |
+ |
+bundle_indexed_store: |
+ sdxc1 $f6, $a2($a0) #forbidden instruction |
+ suxc1 $f4, $t8($a1) #forbidden instruction |
+ swxc1 $f4, $t8($a1) #forbidden instruction |
+ nop |
+ |
+bundle_store_from_sp: |
+ sw $a0, 16($sp) # ok - sw from sp doesn't need a mask |
+ nop |
+ nop |
+ nop |
+ |
+ |
+bundle_chk_delay_slot: |
+ b bundle_chk_bundle_cross_1 |
+ and $s0, $s0, STORE_MASK |
+ sw $v0, 16($s0) #ok |
+ nop |
+ |
+bundle_chk_bundle_cross_1: |
+ nop |
+ nop |
+ nop |
+ and $a3, $a3, STORE_MASK |
+ |
+bundle_chk_bundle_cross_2: |
+ sw $a3, 16($a3) #ERROR, cross bundle |
+ nop |
+ nop |
+ nop |
+ |
+bundle_indexed_store_index_not_zero: |
+ and $a0, $a0, STORE_MASK |
+ sdxc1 $f6, $a2($a0) #forbidden instruction |
+ nop |
+ nop |
+ |
+bundle_sp_1: |
+ sw $sp,0($t1) |
+ and $sp,$sp,STORE_MASK #ERROR, no mask for store for t1 |
+ nop |
+ nop |
+ |
+end_of_code: |