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

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

Issue 10356115: Clean up code to clarify we are only tracking the condition flags of APSR. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 8 years, 7 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
« no previous file with comments | « src/trusted/validator_arm/inst_classes.h ('k') | src/trusted/validator_arm/model.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 11
12 #include "gtest/gtest.h" 12 #include "gtest/gtest.h"
13 #include "native_client/src/trusted/validator_arm/decoder_tester.h" 13 #include "native_client/src/trusted/validator_arm/decoder_tester.h"
14 14
15 using nacl_arm_dec::kRegisterFlags; 15 using nacl_arm_dec::kConditions;
16 using nacl_arm_dec::kRegisterNone; 16 using nacl_arm_dec::kRegisterNone;
17 using nacl_arm_dec::kRegisterPc; 17 using nacl_arm_dec::kRegisterPc;
18 using nacl_arm_dec::kRegisterStack; 18 using nacl_arm_dec::kRegisterStack;
19 using nacl_arm_dec::Instruction; 19 using nacl_arm_dec::Instruction;
20 20
21 namespace nacl_arm_test { 21 namespace nacl_arm_test {
22 22
23 // Unary1RegisterImmediateOpTester 23 // Unary1RegisterImmediateOpTester
24 Unary1RegisterImmediateOpTester::Unary1RegisterImmediateOpTester( 24 Unary1RegisterImmediateOpTester::Unary1RegisterImmediateOpTester(
25 const NamedClassDecoder& decoder) 25 const NamedClassDecoder& decoder)
(...skipping 10 matching lines...) Expand all
36 // Didn't parse undefined conditional. 36 // Didn't parse undefined conditional.
37 if (expected_decoder.cond.undefined(inst)) { 37 if (expected_decoder.cond.undefined(inst)) {
38 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 38 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
39 } 39 }
40 40
41 // Check if expected class name found. 41 // Check if expected class name found.
42 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 42 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
43 43
44 // Check Registers and flags used in DataProc. 44 // Check Registers and flags used in DataProc.
45 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 45 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
46 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 46 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
47 if (expected_decoder.flags.is_updated(inst)) { 47 if (expected_decoder.conditions.is_updated(inst)) {
48 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 48 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
49 } else { 49 } else {
50 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 50 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
51 kRegisterNone);
51 } 52 }
52 53
53 // Check that immediate value is computed correctly. 54 // Check that immediate value is computed correctly.
54 EXPECT_EQ(expected_decoder.imm4.value(inst), inst.bits(19, 16)); 55 EXPECT_EQ(expected_decoder.imm4.value(inst), inst.bits(19, 16));
55 EXPECT_EQ(expected_decoder.imm12.value(inst), inst.bits(11, 0)); 56 EXPECT_EQ(expected_decoder.imm12.value(inst), inst.bits(11, 0));
56 EXPECT_EQ(expected_decoder.ImmediateValue(inst), 57 EXPECT_EQ(expected_decoder.ImmediateValue(inst),
57 (inst.bits(19, 16) << 12) | inst.bits(11, 0)); 58 (inst.bits(19, 16) << 12) | inst.bits(11, 0));
58 EXPECT_LT(expected_decoder.ImmediateValue(inst), (uint32_t) 0x10000); 59 EXPECT_LT(expected_decoder.ImmediateValue(inst), (uint32_t) 0x10000);
59 60
60 // Other NaCl constraints about this instruction. 61 // Other NaCl constraints about this instruction.
(...skipping 29 matching lines...) Expand all
90 const NamedClassDecoder& decoder) 91 const NamedClassDecoder& decoder)
91 : Unary1RegisterImmediateOpTester(decoder) {} 92 : Unary1RegisterImmediateOpTester(decoder) {}
92 93
93 bool Unary1RegisterImmediateOpTesterNotRdIsPcAndS:: 94 bool Unary1RegisterImmediateOpTesterNotRdIsPcAndS::
94 ApplySanityChecks(Instruction inst, 95 ApplySanityChecks(Instruction inst,
95 const NamedClassDecoder& decoder) { 96 const NamedClassDecoder& decoder) {
96 nacl_arm_dec::Unary1RegisterImmediateOp expected_decoder; 97 nacl_arm_dec::Unary1RegisterImmediateOp expected_decoder;
97 98
98 // Check that we don't parse when Rd=15 and S=1. 99 // Check that we don't parse when Rd=15 and S=1.
99 if ((expected_decoder.d.reg(inst) == kRegisterPc) && 100 if ((expected_decoder.d.reg(inst) == kRegisterPc) &&
100 expected_decoder.flags.is_updated(inst)) { 101 expected_decoder.conditions.is_updated(inst)) {
101 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 102 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
102 } 103 }
103 104
104 return Unary1RegisterImmediateOpTester::ApplySanityChecks(inst, decoder); 105 return Unary1RegisterImmediateOpTester::ApplySanityChecks(inst, decoder);
105 } 106 }
106 107
107 // Binary2RegisterImmediateOpTester 108 // Binary2RegisterImmediateOpTester
108 Binary2RegisterImmediateOpTester::Binary2RegisterImmediateOpTester( 109 Binary2RegisterImmediateOpTester::Binary2RegisterImmediateOpTester(
109 const NamedClassDecoder& decoder) 110 const NamedClassDecoder& decoder)
110 : Arm32DecoderTester(decoder), apply_rd_is_pc_check_(true) {} 111 : Arm32DecoderTester(decoder), apply_rd_is_pc_check_(true) {}
(...skipping 10 matching lines...) Expand all
121 if (expected_decoder.cond.undefined(inst)) { 122 if (expected_decoder.cond.undefined(inst)) {
122 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 123 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
123 } 124 }
124 125
125 // Check if expected class name found. 126 // Check if expected class name found.
126 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 127 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
127 128
128 // Check Registers and flags used in DataProc. 129 // Check Registers and flags used in DataProc.
129 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 130 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
130 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 131 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
131 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 132 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
132 if (expected_decoder.flags.is_updated(inst)) { 133 if (expected_decoder.conditions.is_updated(inst)) {
133 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 134 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
134 } else { 135 } else {
135 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 136 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
137 kRegisterNone);
136 } 138 }
137 139
138 // Check that immediate value is computed correctly. 140 // Check that immediate value is computed correctly.
139 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 0)); 141 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 0));
140 142
141 // Other NaCl constraints about this instruction. 143 // Other NaCl constraints about this instruction.
142 if (apply_rd_is_pc_check_) { 144 if (apply_rd_is_pc_check_) {
143 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 145 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
144 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 146 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
145 } 147 }
146 148
147 return true; 149 return true;
148 } 150 }
149 151
150 // Binary2RegisterImmediateOpTesterNotRdIsPcAndS 152 // Binary2RegisterImmediateOpTesterNotRdIsPcAndS
151 Binary2RegisterImmediateOpTesterNotRdIsPcAndS:: 153 Binary2RegisterImmediateOpTesterNotRdIsPcAndS::
152 Binary2RegisterImmediateOpTesterNotRdIsPcAndS( 154 Binary2RegisterImmediateOpTesterNotRdIsPcAndS(
153 const NamedClassDecoder& decoder) 155 const NamedClassDecoder& decoder)
154 : Binary2RegisterImmediateOpTester(decoder) {} 156 : Binary2RegisterImmediateOpTester(decoder) {}
155 157
156 bool Binary2RegisterImmediateOpTesterNotRdIsPcAndS:: 158 bool Binary2RegisterImmediateOpTesterNotRdIsPcAndS::
157 ApplySanityChecks(Instruction inst, 159 ApplySanityChecks(Instruction inst,
158 const NamedClassDecoder& decoder) { 160 const NamedClassDecoder& decoder) {
159 nacl_arm_dec::Binary2RegisterImmediateOp expected_decoder; 161 nacl_arm_dec::Binary2RegisterImmediateOp expected_decoder;
160 162
161 // Check that we don't parse when Rd=15 and S=1. 163 // Check that we don't parse when Rd=15 and S=1.
162 if ((expected_decoder.d.reg(inst) == kRegisterPc) && 164 if ((expected_decoder.d.reg(inst) == kRegisterPc) &&
163 expected_decoder.flags.is_updated(inst)) { 165 expected_decoder.conditions.is_updated(inst)) {
164 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 166 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
165 } 167 }
166 168
167 return Binary2RegisterImmediateOpTester::ApplySanityChecks(inst, decoder); 169 return Binary2RegisterImmediateOpTester::ApplySanityChecks(inst, decoder);
168 } 170 }
169 171
170 // Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS 172 // Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS
171 Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS:: 173 Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS::
172 Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS( 174 Binary2RegisterImmediateOpTesterRdCanBePcAndNotRdIsPcAndS(
173 const NamedClassDecoder& decoder) 175 const NamedClassDecoder& decoder)
(...skipping 17 matching lines...) Expand all
191 // Didn't parse undefined conditional. 193 // Didn't parse undefined conditional.
192 if (expected_decoder.cond.undefined(inst)) { 194 if (expected_decoder.cond.undefined(inst)) {
193 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 195 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
194 } 196 }
195 197
196 // Check if expected class name found. 198 // Check if expected class name found.
197 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 199 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
198 200
199 // Check Registers and flags used in DataProc. 201 // Check Registers and flags used in DataProc.
200 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 202 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
201 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 203 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
202 if (expected_decoder.flags.is_updated(inst)) { 204 if (expected_decoder.conditions.is_updated(inst)) {
203 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 205 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
204 } else { 206 } else {
205 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 207 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
208 kRegisterNone);
206 } 209 }
207 210
208 // Check that immediate value is computed correctly. 211 // Check that immediate value is computed correctly.
209 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 0)); 212 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 0));
210 213
211 return true; 214 return true;
212 } 215 }
213 216
214 // Unary2RegisterOpTester 217 // Unary2RegisterOpTester
215 Unary2RegisterOpTester::Unary2RegisterOpTester( 218 Unary2RegisterOpTester::Unary2RegisterOpTester(
(...skipping 12 matching lines...) Expand all
228 if (expected_decoder.cond.undefined(inst)) { 231 if (expected_decoder.cond.undefined(inst)) {
229 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 232 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
230 } 233 }
231 234
232 // Check if expected class name found. 235 // Check if expected class name found.
233 NC_PRECOND(!Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 236 NC_PRECOND(!Arm32DecoderTester::ApplySanityChecks(inst, decoder));
234 237
235 // Check Registers and flags used in DataProc. 238 // Check Registers and flags used in DataProc.
236 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 239 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
237 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 240 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
238 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 241 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
239 if (expected_decoder.flags.is_updated(inst)) { 242 if (expected_decoder.conditions.is_updated(inst)) {
240 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 243 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
241 } else { 244 } else {
242 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 245 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
246 kRegisterNone);
243 } 247 }
244 248
245 // Other NaCl constraints about this instruction. 249 // Other NaCl constraints about this instruction.
246 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 250 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
247 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 251 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
248 252
249 return true; 253 return true;
250 } 254 }
251 255
252 // Unary2RegisterOpTesterNotRdIsPcAndS 256 // Unary2RegisterOpTesterNotRdIsPcAndS
253 Unary2RegisterOpTesterNotRdIsPcAndS::Unary2RegisterOpTesterNotRdIsPcAndS( 257 Unary2RegisterOpTesterNotRdIsPcAndS::Unary2RegisterOpTesterNotRdIsPcAndS(
254 const NamedClassDecoder& decoder) 258 const NamedClassDecoder& decoder)
255 : Unary2RegisterOpTester(decoder) {} 259 : Unary2RegisterOpTester(decoder) {}
256 260
257 261
258 bool Unary2RegisterOpTesterNotRdIsPcAndS:: 262 bool Unary2RegisterOpTesterNotRdIsPcAndS::
259 ApplySanityChecks(Instruction inst, 263 ApplySanityChecks(Instruction inst,
260 const NamedClassDecoder& decoder) { 264 const NamedClassDecoder& decoder) {
261 nacl_arm_dec::Unary2RegisterOp expected_decoder; 265 nacl_arm_dec::Unary2RegisterOp expected_decoder;
262 266
263 // Check that we don't parse when Rd=15 and S=1. 267 // Check that we don't parse when Rd=15 and S=1.
264 if ((expected_decoder.d.reg(inst) == kRegisterPc) && 268 if ((expected_decoder.d.reg(inst) == kRegisterPc) &&
265 expected_decoder.flags.is_updated(inst)) { 269 expected_decoder.conditions.is_updated(inst)) {
266 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 270 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
267 } 271 }
268 272
269 return Unary2RegisterOpTester::ApplySanityChecks(inst, decoder); 273 return Unary2RegisterOpTester::ApplySanityChecks(inst, decoder);
270 } 274 }
271 275
272 // Binary3RegisterOpTester 276 // Binary3RegisterOpTester
273 Binary3RegisterOpTester::Binary3RegisterOpTester( 277 Binary3RegisterOpTester::Binary3RegisterOpTester(
274 const NamedClassDecoder& decoder) 278 const NamedClassDecoder& decoder)
275 : Arm32DecoderTester(decoder) {} 279 : Arm32DecoderTester(decoder) {}
(...skipping 11 matching lines...) Expand all
287 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 291 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
288 } 292 }
289 293
290 // Check if expected class name found. 294 // Check if expected class name found.
291 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 295 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
292 296
293 // Check Registers and flags used in DataProc. 297 // Check Registers and flags used in DataProc.
294 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 298 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
295 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(11, 8)); 299 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(11, 8));
296 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(3, 0)); 300 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(3, 0));
297 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 301 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
298 if (expected_decoder.flags.is_updated(inst)) { 302 if (expected_decoder.conditions.is_updated(inst)) {
299 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 303 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
300 } else { 304 } else {
301 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 305 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
306 kRegisterNone);
302 } 307 }
303 308
304 // Other NaCl constraints about this instruction. 309 // Other NaCl constraints about this instruction.
305 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 310 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
306 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 311 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
307 312
308 return true; 313 return true;
309 } 314 }
310 315
311 // Binary3RegisterOpTesterRegsNotPc 316 // Binary3RegisterOpTesterRegsNotPc
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 if (expected_decoder.cond.undefined(inst)) { 353 if (expected_decoder.cond.undefined(inst)) {
349 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 354 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
350 } 355 }
351 356
352 // Check if expected class name found. 357 // Check if expected class name found.
353 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 358 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
354 359
355 // Check Registers and flags used in DataProc. 360 // Check Registers and flags used in DataProc.
356 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 361 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
357 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 362 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
358 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 363 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
359 if (expected_decoder.flags.is_updated(inst)) { 364 if (expected_decoder.conditions.is_updated(inst)) {
360 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 365 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
361 } else { 366 } else {
362 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 367 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
368 kRegisterNone);
363 } 369 }
364 370
365 // Check that immediate value is computed correctly. 371 // Check that immediate value is computed correctly.
366 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7)); 372 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7));
367 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5)); 373 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5));
368 374
369 // Other NaCl constraints about this instruction. 375 // Other NaCl constraints about this instruction.
370 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 376 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
371 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 377 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
372 378
(...skipping 25 matching lines...) Expand all
398 const NamedClassDecoder& decoder) 404 const NamedClassDecoder& decoder)
399 : Unary2RegisterImmedShiftedOpTester(decoder) {} 405 : Unary2RegisterImmedShiftedOpTester(decoder) {}
400 406
401 bool Unary2RegisterImmedShiftedOpTesterNotRdIsPcAndS:: 407 bool Unary2RegisterImmedShiftedOpTesterNotRdIsPcAndS::
402 ApplySanityChecks(Instruction inst, 408 ApplySanityChecks(Instruction inst,
403 const NamedClassDecoder& decoder) { 409 const NamedClassDecoder& decoder) {
404 nacl_arm_dec::Unary2RegisterImmedShiftedOp expected_decoder; 410 nacl_arm_dec::Unary2RegisterImmedShiftedOp expected_decoder;
405 411
406 // Check that we don't parse when Rd=15 and S=1. 412 // Check that we don't parse when Rd=15 and S=1.
407 if ((expected_decoder.d.reg(inst) == kRegisterPc) && 413 if ((expected_decoder.d.reg(inst) == kRegisterPc) &&
408 expected_decoder.flags.is_updated(inst)) { 414 expected_decoder.conditions.is_updated(inst)) {
409 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 415 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
410 } 416 }
411 417
412 return Unary2RegisterImmedShiftedOpTester::ApplySanityChecks(inst, decoder); 418 return Unary2RegisterImmedShiftedOpTester::ApplySanityChecks(inst, decoder);
413 } 419 }
414 420
415 // Unary3RegisterShiftedOpTester 421 // Unary3RegisterShiftedOpTester
416 Unary3RegisterShiftedOpTester::Unary3RegisterShiftedOpTester( 422 Unary3RegisterShiftedOpTester::Unary3RegisterShiftedOpTester(
417 const NamedClassDecoder& decoder) 423 const NamedClassDecoder& decoder)
418 : Arm32DecoderTester(decoder) {} 424 : Arm32DecoderTester(decoder) {}
(...skipping 11 matching lines...) Expand all
430 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 436 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
431 } 437 }
432 438
433 // Check if expected class name found. 439 // Check if expected class name found.
434 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 440 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
435 441
436 // Check Registers and flags used in DataProc. 442 // Check Registers and flags used in DataProc.
437 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 443 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
438 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8)); 444 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8));
439 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 445 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
440 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 446 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
441 if (expected_decoder.flags.is_updated(inst)) { 447 if (expected_decoder.conditions.is_updated(inst)) {
442 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 448 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
443 } else { 449 } else {
444 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 450 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
451 kRegisterNone);
445 } 452 }
446 453
447 // Check the shift type. 454 // Check the shift type.
448 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5)); 455 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5));
449 456
450 // Other NaCl constraints about this instruction. 457 // Other NaCl constraints about this instruction.
451 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 458 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
452 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 459 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
453 460
454 return true; 461 return true;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 502 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
496 } 503 }
497 504
498 // Check if expected class name found. 505 // Check if expected class name found.
499 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 506 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
500 507
501 // Check Registers and flags used in DataProc. 508 // Check Registers and flags used in DataProc.
502 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 509 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
503 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 510 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
504 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 511 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
505 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 512 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
506 if (expected_decoder.flags.is_updated(inst)) { 513 if (expected_decoder.conditions.is_updated(inst)) {
507 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 514 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
508 } else { 515 } else {
509 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 516 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
517 kRegisterNone);
510 } 518 }
511 519
512 // Check that immediate value is computed correctly. 520 // Check that immediate value is computed correctly.
513 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7)); 521 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7));
514 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5)); 522 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5));
515 523
516 // Other NaCl constraints about this instruction. 524 // Other NaCl constraints about this instruction.
517 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 525 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
518 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 526 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
519 527
520 return true; 528 return true;
521 } 529 }
522 530
523 // Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS 531 // Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS
524 Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS:: 532 Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS::
525 Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS( 533 Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS(
526 const NamedClassDecoder& decoder) 534 const NamedClassDecoder& decoder)
527 : Binary3RegisterImmedShiftedOpTester(decoder) {} 535 : Binary3RegisterImmedShiftedOpTester(decoder) {}
528 536
529 bool Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS:: 537 bool Binary3RegisterImmedShiftedOpTesterNotRdIsPcAndS::
530 ApplySanityChecks(Instruction inst, 538 ApplySanityChecks(Instruction inst,
531 const NamedClassDecoder& decoder) { 539 const NamedClassDecoder& decoder) {
532 nacl_arm_dec::Binary3RegisterImmedShiftedOp expected_decoder; 540 nacl_arm_dec::Binary3RegisterImmedShiftedOp expected_decoder;
533 541
534 // Check that we don't parse when Rd=15 and S=1. 542 // Check that we don't parse when Rd=15 and S=1.
535 if ((expected_decoder.d.reg(inst) == kRegisterPc) && 543 if ((expected_decoder.d.reg(inst) == kRegisterPc) &&
536 expected_decoder.flags.is_updated(inst)) { 544 expected_decoder.conditions.is_updated(inst)) {
537 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 545 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
538 } 546 }
539 547
540 return Binary3RegisterImmedShiftedOpTester::ApplySanityChecks(inst, decoder); 548 return Binary3RegisterImmedShiftedOpTester::ApplySanityChecks(inst, decoder);
541 } 549 }
542 550
543 // Binary4RegisterShiftedOpTester 551 // Binary4RegisterShiftedOpTester
544 Binary4RegisterShiftedOpTester::Binary4RegisterShiftedOpTester( 552 Binary4RegisterShiftedOpTester::Binary4RegisterShiftedOpTester(
545 const NamedClassDecoder& decoder) 553 const NamedClassDecoder& decoder)
546 : Arm32DecoderTester(decoder) {} 554 : Arm32DecoderTester(decoder) {}
(...skipping 12 matching lines...) Expand all
559 } 567 }
560 568
561 // Check if expected class name found. 569 // Check if expected class name found.
562 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 570 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
563 571
564 // Check Registers and flags used in DataProc. 572 // Check Registers and flags used in DataProc.
565 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 573 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
566 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12)); 574 EXPECT_EQ(expected_decoder.d.number(inst), inst.bits(15, 12));
567 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8)); 575 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8));
568 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 576 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
569 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 577 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
570 if (expected_decoder.flags.is_updated(inst)) { 578 if (expected_decoder.conditions.is_updated(inst)) {
571 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 579 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
572 } else { 580 } else {
573 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 581 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
582 kRegisterNone);
574 } 583 }
575 584
576 // Other NaCl constraints about this instruction. 585 // Other NaCl constraints about this instruction.
577 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15) 586 EXPECT_NE(expected_decoder.d.number(inst), (uint32_t) 15)
578 << "Expected FORBIDDEN_OPERANDS for " << InstContents(); 587 << "Expected FORBIDDEN_OPERANDS for " << InstContents();
579 588
580 return true; 589 return true;
581 } 590 }
582 591
583 // Binary4RegisterShiftedOpTesterRegsNotPc 592 // Binary4RegisterShiftedOpTesterRegsNotPc
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 if (expected_decoder.cond.undefined(inst)) { 632 if (expected_decoder.cond.undefined(inst)) {
624 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 633 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
625 } 634 }
626 635
627 // Check if expected class name found. 636 // Check if expected class name found.
628 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 637 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
629 638
630 // Check Registers and flags used in DataProc. 639 // Check Registers and flags used in DataProc.
631 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 640 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
632 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 641 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
633 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 642 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
634 if (expected_decoder.flags.is_updated(inst)) { 643 if (expected_decoder.conditions.is_updated(inst)) {
635 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 644 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
636 } else { 645 } else {
637 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 646 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
647 kRegisterNone);
638 } 648 }
639 649
640 // Check that immediate value is computed correctly. 650 // Check that immediate value is computed correctly.
641 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7)); 651 EXPECT_EQ(expected_decoder.imm.value(inst), inst.bits(11, 7));
642 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5)); 652 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5));
643 653
644 return true; 654 return true;
645 } 655 }
646 656
647 // Binary3RegisterShiftedTestTester 657 // Binary3RegisterShiftedTestTester
(...skipping 14 matching lines...) Expand all
662 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder); 672 NC_EXPECT_NE_PRECOND(&ExpectedDecoder(), &decoder);
663 } 673 }
664 674
665 // Check if expected class name found. 675 // Check if expected class name found.
666 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder)); 676 NC_PRECOND(Arm32DecoderTester::ApplySanityChecks(inst, decoder));
667 677
668 // Check Registers and flags used in DataProc. 678 // Check Registers and flags used in DataProc.
669 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16)); 679 EXPECT_EQ(expected_decoder.n.number(inst), inst.bits(19, 16));
670 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8)); 680 EXPECT_EQ(expected_decoder.s.number(inst), inst.bits(11, 8));
671 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0)); 681 EXPECT_EQ(expected_decoder.m.number(inst), inst.bits(3, 0));
672 EXPECT_EQ(expected_decoder.flags.is_updated(inst), inst.bit(20)); 682 EXPECT_EQ(expected_decoder.conditions.is_updated(inst), inst.bit(20));
673 if (expected_decoder.flags.is_updated(inst)) { 683 if (expected_decoder.conditions.is_updated(inst)) {
674 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterFlags); 684 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst), kConditions);
675 } else { 685 } else {
676 EXPECT_EQ(expected_decoder.flags.reg_if_updated(inst), kRegisterNone); 686 EXPECT_EQ(expected_decoder.conditions.conds_if_updated(inst),
687 kRegisterNone);
677 } 688 }
678 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5)); 689 EXPECT_EQ(expected_decoder.shift_type.value(inst), inst.bits(6, 5));
679 690
680 return true; 691 return true;
681 } 692 }
682 693
683 // Binary3RegisterShiftedTestTesterRegsNotPc 694 // Binary3RegisterShiftedTestTesterRegsNotPc
684 Binary3RegisterShiftedTestTesterRegsNotPc:: 695 Binary3RegisterShiftedTestTesterRegsNotPc::
685 Binary3RegisterShiftedTestTesterRegsNotPc( 696 Binary3RegisterShiftedTestTesterRegsNotPc(
686 const NamedClassDecoder& decoder) 697 const NamedClassDecoder& decoder)
(...skipping 12 matching lines...) Expand all
699 << "Expected Unpredictable for " << InstContents(); 710 << "Expected Unpredictable for " << InstContents();
700 EXPECT_NE(expected_decoder.s.number(inst), (uint32_t) 15) 711 EXPECT_NE(expected_decoder.s.number(inst), (uint32_t) 15)
701 << "Expected Unpredictable for " << InstContents(); 712 << "Expected Unpredictable for " << InstContents();
702 EXPECT_NE(expected_decoder.m.number(inst), (uint32_t) 15) 713 EXPECT_NE(expected_decoder.m.number(inst), (uint32_t) 15)
703 << "Expected Unpredictable for " << InstContents(); 714 << "Expected Unpredictable for " << InstContents();
704 715
705 return true; 716 return true;
706 } 717 }
707 718
708 } // namespace 719 } // namespace
OLDNEW
« no previous file with comments | « src/trusted/validator_arm/inst_classes.h ('k') | src/trusted/validator_arm/model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698