Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Side by Side Diff: src/trusted/validator_arm/inst_classes_testers.cc

Issue 10879090: ARM validator: continue with extra_load_store_instructions. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: "Update test_sp_updates.S and related .nexe and .err files: they were relying on UNDEFINED behavior… Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 #ifndef NACL_TRUSTED_BUT_NOT_TCB 6 #ifndef NACL_TRUSTED_BUT_NOT_TCB
7 #error This file is not meant for use in the TCB 7 #error This file is not meant for use in the TCB
8 #endif 8 #endif
9 9
10 #include "native_client/src/trusted/validator_arm/inst_classes_testers.h" 10 #include "native_client/src/trusted/validator_arm/inst_classes_testers.h"
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 // Other ARM constraints about this instruction. 1044 // Other ARM constraints about this instruction.
1045 EXPECT_TRUE(expected_decoder_.t.IsEven(inst)); 1045 EXPECT_TRUE(expected_decoder_.t.IsEven(inst));
1046 EXPECT_FALSE(expected_decoder_.t2.reg(inst).Equals(kRegisterPc)) 1046 EXPECT_FALSE(expected_decoder_.t2.reg(inst).Equals(kRegisterPc))
1047 << "Expected UNPREDICTABLE for " << InstContents(); 1047 << "Expected UNPREDICTABLE for " << InstContents();
1048 1048
1049 return true; 1049 return true;
1050 } 1050 }
1051 1051
1052 // LoadStore2RegisterImm8OpTester 1052 // LoadStore2RegisterImm8OpTester
1053 LoadStore2RegisterImm8OpTester::LoadStore2RegisterImm8OpTester( 1053 LoadStore2RegisterImm8OpTester::LoadStore2RegisterImm8OpTester(
1054 const NamedClassDecoder& decoder) : CondDecoderTester(decoder) {} 1054 const NamedClassDecoder& decoder)
1055 : CondDecoderTester(decoder),
1056 // TODO(jfb) Assuming this is a load seems wrong.
1057 expected_decoder_(true) {}
1055 1058
1056 bool LoadStore2RegisterImm8OpTester:: 1059 bool LoadStore2RegisterImm8OpTester::
1057 PassesParsePreconditions(Instruction inst, 1060 PassesParsePreconditions(Instruction inst,
1058 const NamedClassDecoder& decoder) { 1061 const NamedClassDecoder& decoder) {
1059 // Should not parse if P=0 && W=1. 1062 // Should not parse if P=0 && W=1.
1060 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) && 1063 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) &&
1061 expected_decoder_.writes.IsDefined(inst))); 1064 expected_decoder_.writes.IsDefined(inst)));
1062 return CondDecoderTester::PassesParsePreconditions(inst, decoder); 1065 return CondDecoderTester::PassesParsePreconditions(inst, decoder);
1063 } 1066 }
1064 1067
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 // Check that we don't parse when Rn=15. 1127 // Check that we don't parse when Rn=15.
1125 if (expected_decoder_.n.reg(inst).Equals(kRegisterPc)) { 1128 if (expected_decoder_.n.reg(inst).Equals(kRegisterPc)) {
1126 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 1129 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
1127 } 1130 }
1128 return LoadStore2RegisterImm8OpTester::ApplySanityChecks(inst, decoder); 1131 return LoadStore2RegisterImm8OpTester::ApplySanityChecks(inst, decoder);
1129 } 1132 }
1130 1133
1131 // LoadStore2RegisterImm8DoubleOpTester 1134 // LoadStore2RegisterImm8DoubleOpTester
1132 LoadStore2RegisterImm8DoubleOpTester:: 1135 LoadStore2RegisterImm8DoubleOpTester::
1133 LoadStore2RegisterImm8DoubleOpTester(const NamedClassDecoder& decoder) 1136 LoadStore2RegisterImm8DoubleOpTester(const NamedClassDecoder& decoder)
1134 : LoadStore2RegisterImm8OpTester(decoder) {} 1137 : LoadStore2RegisterImm8OpTester(decoder),
1138 // TODO(jfb) Assuming this is a load seems wrong.
1139 expected_decoder_(true) {}
1135 1140
1136 bool LoadStore2RegisterImm8DoubleOpTester:: 1141 bool LoadStore2RegisterImm8DoubleOpTester::
1137 ApplySanityChecks(Instruction inst, 1142 ApplySanityChecks(Instruction inst,
1138 const NamedClassDecoder& decoder) { 1143 const NamedClassDecoder& decoder) {
1139 NC_PRECOND(LoadStore2RegisterImm8OpTester:: 1144 NC_PRECOND(LoadStore2RegisterImm8OpTester::
1140 ApplySanityChecks(inst, decoder)); 1145 ApplySanityChecks(inst, decoder));
1141 1146
1142 // Check Registers and flags used. 1147 // Check Registers and flags used.
1143 EXPECT_EQ(expected_decoder_.t.number(inst) + 1, 1148 EXPECT_EQ(expected_decoder_.t.number(inst) + 1,
1144 expected_decoder_.t2.number(inst)); 1149 expected_decoder_.t2.number(inst));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 if (expected_decoder_.n.reg(inst).Equals(kRegisterPc)) { 1188 if (expected_decoder_.n.reg(inst).Equals(kRegisterPc)) {
1184 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 1189 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
1185 } 1190 }
1186 1191
1187 return LoadStore2RegisterImm8DoubleOpTester:: 1192 return LoadStore2RegisterImm8DoubleOpTester::
1188 ApplySanityChecks(inst, decoder); 1193 ApplySanityChecks(inst, decoder);
1189 } 1194 }
1190 1195
1191 // LoadStore2RegisterImm12OpTester 1196 // LoadStore2RegisterImm12OpTester
1192 LoadStore2RegisterImm12OpTester::LoadStore2RegisterImm12OpTester( 1197 LoadStore2RegisterImm12OpTester::LoadStore2RegisterImm12OpTester(
1193 const NamedClassDecoder& decoder) : CondDecoderTester(decoder) {} 1198 const NamedClassDecoder& decoder)
1199 : CondDecoderTester(decoder),
1200 // TODO(jfb) Assuming this is a load seems wrong.
1201 expected_decoder_(true) {}
1194 1202
1195 bool LoadStore2RegisterImm12OpTester:: 1203 bool LoadStore2RegisterImm12OpTester::
1196 PassesParsePreconditions(Instruction inst, 1204 PassesParsePreconditions(Instruction inst,
1197 const NamedClassDecoder& decoder) { 1205 const NamedClassDecoder& decoder) {
1198 // Should not parse if P=0 && W=1. 1206 // Should not parse if P=0 && W=1.
1199 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) && 1207 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) &&
1200 expected_decoder_.writes.IsDefined(inst))); 1208 expected_decoder_.writes.IsDefined(inst)));
1201 return CondDecoderTester::PassesParsePreconditions(inst, decoder); 1209 return CondDecoderTester::PassesParsePreconditions(inst, decoder);
1202 } 1210 }
1203 1211
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1406 LoadStoreVectorOpTester::ApplySanityChecks(inst, decoder)); 1414 LoadStoreVectorOpTester::ApplySanityChecks(inst, decoder));
1407 1415
1408 // Other constraints about this instruction. 1416 // Other constraints about this instruction.
1409 EXPECT_FALSE(expected_decoder_.n.reg(inst).Equals(kRegisterPc)); 1417 EXPECT_FALSE(expected_decoder_.n.reg(inst).Equals(kRegisterPc));
1410 1418
1411 return true; 1419 return true;
1412 } 1420 }
1413 1421
1414 // LoadStore3RegisterOpTester 1422 // LoadStore3RegisterOpTester
1415 LoadStore3RegisterOpTester::LoadStore3RegisterOpTester( 1423 LoadStore3RegisterOpTester::LoadStore3RegisterOpTester(
1416 const NamedClassDecoder& decoder) : CondDecoderTester(decoder) {} 1424 const NamedClassDecoder& decoder)
1425 : CondDecoderTester(decoder),
1426 // TODO(jfb) Assuming this is a load seems wrong.
1427 expected_decoder_(true) {}
1417 1428
1418 bool LoadStore3RegisterOpTester:: 1429 bool LoadStore3RegisterOpTester::
1419 PassesParsePreconditions(Instruction inst, 1430 PassesParsePreconditions(Instruction inst,
1420 const NamedClassDecoder& decoder) { 1431 const NamedClassDecoder& decoder) {
1421 // Should not parse if P=0 && W=1. 1432 // Should not parse if P=0 && W=1.
1422 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) && 1433 NC_PRECOND(!(expected_decoder_.indexing.IsPostIndexing(inst) &&
1423 expected_decoder_.writes.IsDefined(inst))); 1434 expected_decoder_.writes.IsDefined(inst)));
1424 return CondDecoderTester::PassesParsePreconditions(inst, decoder); 1435 return CondDecoderTester::PassesParsePreconditions(inst, decoder);
1425 } 1436 }
1426 1437
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1467 1478
1468 EXPECT_FALSE(ExpectedDecoder().defs(inst).Contains(kRegisterPc)) 1479 EXPECT_FALSE(ExpectedDecoder().defs(inst).Contains(kRegisterPc))
1469 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 1480 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
1470 1481
1471 return true; 1482 return true;
1472 } 1483 }
1473 1484
1474 // LoadStore3RegisterDoubleOpTester 1485 // LoadStore3RegisterDoubleOpTester
1475 LoadStore3RegisterDoubleOpTester:: 1486 LoadStore3RegisterDoubleOpTester::
1476 LoadStore3RegisterDoubleOpTester(const NamedClassDecoder& decoder) 1487 LoadStore3RegisterDoubleOpTester(const NamedClassDecoder& decoder)
1477 : LoadStore3RegisterOpTester(decoder) { 1488 : LoadStore3RegisterOpTester(decoder),
1478 } 1489 // TODO(jfb) Assuming this is a load seems wrong.
1490 expected_decoder_(true) {}
1479 1491
1480 bool LoadStore3RegisterDoubleOpTester:: 1492 bool LoadStore3RegisterDoubleOpTester::
1481 ApplySanityChecks(Instruction inst, 1493 ApplySanityChecks(Instruction inst,
1482 const NamedClassDecoder& decoder) { 1494 const NamedClassDecoder& decoder) {
1483 NC_PRECOND(LoadStore3RegisterOpTester::ApplySanityChecks(inst, decoder)); 1495 NC_PRECOND(LoadStore3RegisterOpTester::ApplySanityChecks(inst, decoder));
1484 1496
1485 // Check Registers and flags used. 1497 // Check Registers and flags used.
1486 EXPECT_EQ(expected_decoder_.t.number(inst) + 1, 1498 EXPECT_EQ(expected_decoder_.t.number(inst) + 1,
1487 expected_decoder_.t2.number(inst)); 1499 expected_decoder_.t2.number(inst));
1488 1500
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1557 << "Expected UNPREDICTABLE for " << InstContents(); 1569 << "Expected UNPREDICTABLE for " << InstContents();
1558 EXPECT_FALSE(expected_decoder_.d.reg(inst). 1570 EXPECT_FALSE(expected_decoder_.d.reg(inst).
1559 Equals(expected_decoder_.t2.reg(inst))) 1571 Equals(expected_decoder_.t2.reg(inst)))
1560 << "Expected UNPREDICTABLE for " << InstContents(); 1572 << "Expected UNPREDICTABLE for " << InstContents();
1561 1573
1562 return true; 1574 return true;
1563 } 1575 }
1564 1576
1565 // LoadStore3RegisterImm5OpTester 1577 // LoadStore3RegisterImm5OpTester
1566 LoadStore3RegisterImm5OpTester::LoadStore3RegisterImm5OpTester( 1578 LoadStore3RegisterImm5OpTester::LoadStore3RegisterImm5OpTester(
1567 const NamedClassDecoder& decoder) : CondDecoderTester(decoder) {} 1579 const NamedClassDecoder& decoder)
1580 : CondDecoderTester(decoder),
1581 // TODO(jfb) Assuming this is a load seems wrong.
1582 expected_decoder_(true) {}
1568 1583
1569 bool LoadStore3RegisterImm5OpTester:: 1584 bool LoadStore3RegisterImm5OpTester::
1570 ApplySanityChecks(Instruction inst, 1585 ApplySanityChecks(Instruction inst,
1571 const NamedClassDecoder& decoder) { 1586 const NamedClassDecoder& decoder) {
1572 // Should not parse if P=0 && W=1. 1587 // Should not parse if P=0 && W=1.
1573 if (expected_decoder_.indexing.IsPostIndexing(inst) && 1588 if (expected_decoder_.indexing.IsPostIndexing(inst) &&
1574 expected_decoder_.writes.IsDefined(inst)) { 1589 expected_decoder_.writes.IsDefined(inst)) {
1575 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 1590 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
1576 } 1591 }
1577 1592
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
2209 << "Expected Unpredictable for " << InstContents(); 2224 << "Expected Unpredictable for " << InstContents();
2210 EXPECT_FALSE(expected_decoder_.is_two_regs.IsDefined(inst) 2225 EXPECT_FALSE(expected_decoder_.is_two_regs.IsDefined(inst)
2211 && !expected_decoder_.vd.IsEven(inst)); 2226 && !expected_decoder_.vd.IsEven(inst));
2212 EXPECT_NE(expected_decoder_.be_value(inst), 2227 EXPECT_NE(expected_decoder_.be_value(inst),
2213 static_cast<uint32_t>(0x3)); 2228 static_cast<uint32_t>(0x3));
2214 2229
2215 return true; 2230 return true;
2216 } 2231 }
2217 2232
2218 } // namespace nacl_arm_test 2233 } // namespace nacl_arm_test
OLDNEW
« no previous file with comments | « src/trusted/validator_arm/gen/arm32_decode_tests.cc ('k') | src/trusted/validator_arm/testdata/test_sp_updates.S » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698