| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |