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

Side by Side Diff: src/trusted/validator_arm/armv7.table

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 # ARMv7 Instruction Encodings 1 # ARMv7 Instruction Encodings
2 # 2 #
3 # This table is derived from the "ARM Architecture Reference Manual, ARMv7-A 3 # This table is derived from the "ARM Architecture Reference Manual, ARMv7-A
4 # and ARMv7-R edition" and is used here with the permission of ARM Limited. 4 # and ARMv7-R edition" and is used here with the permission of ARM Limited.
5 # Reproduction for purposes other than the development and distribution of 5 # Reproduction for purposes other than the development and distribution of
6 # Native Client may require the explicit permission of ARM Limited. 6 # Native Client may require the explicit permission of ARM Limited.
7 7
8 # This file defines the Native Client "instruction classes" assigned to every 8 # This file defines the Native Client "instruction classes" assigned to every
9 # possible ARMv7 instruction encoding. It is organized into a series of tables, 9 # possible ARMv7 instruction encoding. It is organized into a series of tables,
10 # and directly parallels the ARM Architecture Reference Manual cited above. 10 # and directly parallels the ARM Architecture Reference Manual cited above.
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 # appropriate tester. We want to add class hierarchy information for 105 # appropriate tester. We want to add class hierarchy information for
106 # classes that want their tester to be defined on a superclass. 106 # classes that want their tester to be defined on a superclass.
107 # By providing this information, the generator can pick out 107 # By providing this information, the generator can pick out
108 # the corresponding baseline class tester to use, and does 108 # the corresponding baseline class tester to use, and does
109 # not need to define separate testers for derived classes of 109 # not need to define separate testers for derived classes of
110 # the baseline class tester. 110 # the baseline class tester.
111 # ############################################################# 111 # #############################################################
112 112
113 class BreakPointAndConstantPoolHead : Immediate16Use 113 class BreakPointAndConstantPoolHead : Immediate16Use
114 class Binary3RegisterImmedShiftedOpRegsNotPc : Binary3RegisterImmedShiftedOp 114 class Binary3RegisterImmedShiftedOpRegsNotPc : Binary3RegisterImmedShiftedOp
115 class Deprecated : UnsafeCondNop
115 class ForbiddenCondNop : UnsafeCondNop 116 class ForbiddenCondNop : UnsafeCondNop
116 class ForbiddenUncondNop : UnsafeUncondNop 117 class ForbiddenUncondNop : UnsafeUncondNop
117 class LoadRegisterList : LoadStoreRegisterList 118 class LoadRegisterList : LoadStoreRegisterList
118 class LoadStoreVectorRegister : LoadStoreVectorOp 119 class LoadStoreVectorRegister : LoadStoreVectorOp
119 class LoadVectorRegister : LoadStoreVectorRegister 120 class LoadVectorRegister : LoadStoreVectorRegister
120 class LoadVectorRegisterList : LoadStoreVectorRegisterList 121 class LoadVectorRegisterList : LoadStoreVectorRegisterList
121 class Load3RegisterDoubleOp : LoadStore3RegisterDoubleOp 122 class Load3RegisterDoubleOp : LoadStore3RegisterDoubleOp
122 class Load2RegisterImm8DoubleOp : LoadStore2RegisterImm8DoubleOp 123 class Load2RegisterImm8DoubleOp : LoadStore2RegisterImm8DoubleOp
123 class Load2RegisterImm8Op : LoadStore2RegisterImm8Op 124 class Load2RegisterImm8Op : LoadStore2RegisterImm8Op
124 class Load2RegisterImm12Op : LoadStore2RegisterImm12Op 125 class Load2RegisterImm12Op : LoadStore2RegisterImm12Op
125 class Load3RegisterImm5Op : LoadStore3RegisterImm5Op 126 class Load3RegisterImm5Op : LoadStore3RegisterImm5Op
126 class Load3RegisterOp : LoadStore3RegisterOp 127 class Load3RegisterOp : LoadStore3RegisterOp
127 class MaskedBinary2RegisterImmediateOp : Binary2RegisterImmediateOp 128 class MaskedBinary2RegisterImmediateOp : Binary2RegisterImmediateOp
(...skipping 26 matching lines...) Expand all
154 +-- data_processing_and_miscellaneous_instructions (See Section A5.2) 155 +-- data_processing_and_miscellaneous_instructions (See Section A5.2)
155 | op(25) op1(24:20) op2(7:4) 156 | op(25) op1(24:20) op2(7:4)
156 | 0 ~10xx0 xxx0 ->data_processing_register 157 | 0 ~10xx0 xxx0 ->data_processing_register
157 | " " 0xx1 ->data_processing_register_shifted_register 158 | " " 0xx1 ->data_processing_register_shifted_register
158 | " 10xx0 0xxx ->miscellaneous_instructions 159 | " 10xx0 0xxx ->miscellaneous_instructions
159 | " " 1xx0 ->halfword_multiply_and_multiply_accumulate 160 | " " 1xx0 ->halfword_multiply_and_multiply_accumulate
160 | " 0xxxx 1001 ->multiply_and_multiply_accumulate 161 | " 0xxxx 1001 ->multiply_and_multiply_accumulate
161 | " 1xxxx 1001 ->synchronization_primitives 162 | " 1xxxx 1001 ->synchronization_primitives
162 | " ~0xx1x 1011 ->extra_load_store_instructions 163 | " ~0xx1x 1011 ->extra_load_store_instructions
163 | " " 11x1 " 164 | " " 11x1 "
164 | " 0xx1x 1011 =Forbidden # Load/Store Unprivileged, plus undef 165 | " 0xx1x 1011 =ForbiddenCondNop => Forbidden
165 | " " 11x1 " 166 extra_load_store_instructions_unpriviledged
167 cccc0000xx1xxxxxxxxxxxxx1011xxxx
168 | " " 11x1 =ForbiddenCondNop => Forbidden
169 # TODO(jfb) Same as above, but different pattern.
170 extra_load_store_instructions_unpriviledged
171 cccc0000xx1xxxxxxxxxxxxx11x1xxxx
166 | 1 ~10xx0 - ->data_processing_immediate 172 | 1 ~10xx0 - ->data_processing_immediate
167 | " 10000 - = Unary1RegisterImmediateOp => Defs12To15 # MOVW A8 -194 173 | " 10000 - = Unary1RegisterImmediateOp => Defs12To15 # MOVW A8 -194
168 Mov_Rule_96_A2_P194 174 Mov_Rule_96_A2_P194
169 cccc00110000iiiiddddIIIIIIIIIIII 175 cccc00110000iiiiddddIIIIIIIIIIII
170 RegsNotPc 176 RegsNotPc
171 (v6T2) 177 (v6T2)
172 | " 10100 - = Unary1RegisterImmediateOp => Defs12To15 # MOVT A8 -200 178 | " 10100 - = Unary1RegisterImmediateOp => Defs12To15 # MOVT A8 -200
173 Mov_Rule_99_A1_P200 179 Mov_Rule_99_A1_P200
174 cccc00110100iiiiddddIIIIIIIIIIII 180 cccc00110100iiiiddddIIIIIIIIIIII
175 RegsNotPc 181 RegsNotPc
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 cccc0000110unnnnddddiiiiitt0mmmm 228 cccc0000110unnnnddddiiiiitt0mmmm
223 NotRdIsPcAndS 229 NotRdIsPcAndS
224 | 0111x - - = Binary3RegisterImmedShiftedOp 230 | 0111x - - = Binary3RegisterImmedShiftedOp
225 => Defs12To15 231 => Defs12To15
226 Rsc_Rule_146_A1_P292 232 Rsc_Rule_146_A1_P292
227 cccc0000111unnnnddddiiiiitt0mmmm 233 cccc0000111unnnnddddiiiiitt0mmmm
228 NotRdIsPcAndS 234 NotRdIsPcAndS
229 | 10001 - - = Binary2RegisterImmedShiftedTest 235 | 10001 - - = Binary2RegisterImmedShiftedTest
230 => DontCareInst 236 => DontCareInst
231 Tst_Rule_231_A1_P456 237 Tst_Rule_231_A1_P456
232 cccc00010001nnnn0000iiiiitt0mmmm 238 cccc00010001nnnn0000iiiiitt0mmmm
233 | 10011 - - = Binary2RegisterImmedShiftedTest 239 | 10011 - - = Binary2RegisterImmedShiftedTest
234 => DontCareInst 240 => DontCareInst
235 Teq_Rule_228_A1_P450 241 Teq_Rule_228_A1_P450
236 cccc00010011nnnn0000iiiiitt0mmmm 242 cccc00010011nnnn0000iiiiitt0mmmm
237 | 10101 - - = Binary2RegisterImmedShiftedTest 243 | 10101 - - = Binary2RegisterImmedShiftedTest
238 => DontCareInst 244 => DontCareInst
239 Cmp_Rule_36_A1_P82 245 Cmp_Rule_36_A1_P82
240 cccc00010101nnnn0000iiiiitt0mmmm 246 cccc00010101nnnn0000iiiiitt0mmmm
241 | 10111 - - = Binary2RegisterImmedShiftedTest 247 | 10111 - - = Binary2RegisterImmedShiftedTest
242 => DontCareInst 248 => DontCareInst
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 | 0010x - = Binary4RegisterShiftedOp 310 | 0010x - = Binary4RegisterShiftedOp
305 => Defs12To15RdRnRsRmNotPc 311 => Defs12To15RdRnRsRmNotPc
306 Sub_Rule_214_A1_P424 312 Sub_Rule_214_A1_P424
307 cccc0000010snnnnddddssss0tt1mmmm RegsNotPc 313 cccc0000010snnnnddddssss0tt1mmmm RegsNotPc
308 | 0011x - = Binary4RegisterShiftedOp 314 | 0011x - = Binary4RegisterShiftedOp
309 => Defs12To15RdRnRsRmNotPc 315 => Defs12To15RdRnRsRmNotPc
310 Rsb_Rule_144_A1_P288 316 Rsb_Rule_144_A1_P288
311 cccc0000011snnnnddddssss0tt1mmmm RegsNotPc 317 cccc0000011snnnnddddssss0tt1mmmm RegsNotPc
312 | 0100x - = Binary4RegisterShiftedOp 318 | 0100x - = Binary4RegisterShiftedOp
313 => Defs12To15RdRnRsRmNotPc 319 => Defs12To15RdRnRsRmNotPc
314 Add_Rule_7_A1_P26 320 Add_Rule_7_A1_P26
315 cccc0000100snnnnddddssss0tt1mmmm RegsNotPc 321 cccc0000100snnnnddddssss0tt1mmmm RegsNotPc
316 | 0101x - = Binary4RegisterShiftedOp 322 | 0101x - = Binary4RegisterShiftedOp
317 => Defs12To15RdRnRsRmNotPc 323 => Defs12To15RdRnRsRmNotPc
318 Adc_Rule_3_A1_P18 324 Adc_Rule_3_A1_P18
319 cccc0000101snnnnddddssss0tt1mmmm RegsNotPc 325 cccc0000101snnnnddddssss0tt1mmmm RegsNotPc
320 | 0110x - = Binary4RegisterShiftedOp 326 | 0110x - = Binary4RegisterShiftedOp
321 => Defs12To15RdRnRsRmNotPc 327 => Defs12To15RdRnRsRmNotPc
322 Sbc_Rule_153_A1_P306 328 Sbc_Rule_153_A1_P306
323 cccc0000110snnnnddddssss0tt1mmmm RegsNotPc 329 cccc0000110snnnnddddssss0tt1mmmm RegsNotPc
324 | 0111x - = Binary4RegisterShiftedOp 330 | 0111x - = Binary4RegisterShiftedOp
325 => Defs12To15RdRnRsRmNotPc 331 => Defs12To15RdRnRsRmNotPc
326 Rsc_Rule_147_A1_P294 332 Rsc_Rule_147_A1_P294
327 cccc0000111snnnnddddssss0tt1mmmm RegsNotPc 333 cccc0000111snnnnddddssss0tt1mmmm RegsNotPc
328 # TODO(jfb) op==10xx0 should be unreachable from here: 334 # TODO(jfb) op==10xx0 should be unreachable from here:
329 # the previous table should handle it. 335 # the previous table should handle it.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 # Causes parsing conflicts with SUB (previous 403 # Causes parsing conflicts with SUB (previous
398 # row). Added restriction to ADR that bit 20 404 # row). Added restriction to ADR that bit 20
399 # (updates flags register) must be 0 (rather than 405 # (updates flags register) must be 0 (rather than
400 # x), to match what is on A8.6.10 (page A8-32). 406 # x), to match what is on A8.6.10 (page A8-32).
401 # Note that this also matches restrictions of 407 # Note that this also matches restrictions of
402 # A8.6.212 (page A8-420). 408 # A8.6.212 (page A8-420).
403 | 00100 1111 = Unary1RegisterImmediateOp 409 | 00100 1111 = Unary1RegisterImmediateOp
404 => Defs12To15 410 => Defs12To15
405 Adr_Rule_10_A2_P32 411 Adr_Rule_10_A2_P32
406 cccc001001001111ddddiiiiiiiiiiii 412 cccc001001001111ddddiiiiiiiiiiii
407 | 00101 1111 = Forbidden # SUBS PC, LR and related instructions 413 | 00101 1111 = ForbiddenCondNop => Forbidden
414 Subs_Pc_Lr_and_related_instructions_Rule_A1a
415 cccc00100101nnnn1111iiiiiiiiiiii
408 | 0011x - = Binary2RegisterImmediateOp 416 | 0011x - = Binary2RegisterImmediateOp
409 => Defs12To15 417 => Defs12To15
410 Rsb_Rule_142_A1_P284 418 Rsb_Rule_142_A1_P284
411 cccc0010011snnnnddddiiiiiiiiiiii NotRdIsPcAndS 419 cccc0010011snnnnddddiiiiiiiiiiii NotRdIsPcAndS
412 | 0100x ~1111 = Binary2RegisterImmediateOp 420 | 0100x ~1111 = Binary2RegisterImmediateOp
413 => Defs12To15 421 => Defs12To15
414 Add_Rule_5_A1_P22 422 Add_Rule_5_A1_P22
415 cccc0010100snnnnddddiiiiiiiiiiii 423 cccc0010100snnnnddddiiiiiiiiiiii
416 NeitherRdIsPcAndSNorRnIsPcAndNotS 424 NeitherRdIsPcAndSNorRnIsPcAndNotS
417 # Note: Table says that op=0100x for ADR, but 425 # Note: Table says that op=0100x for ADR, but
418 # patterns for ADR do not match (page A8-32). 426 # patterns for ADR do not match (page A8-32).
419 # Causes parsing conflicts with ADD (previous 427 # Causes parsing conflicts with ADD (previous
420 # row). Added restriction to ADR that bit 20 428 # row). Added restriction to ADR that bit 20
421 # (updates flags register) must be 0 (rather than 429 # (updates flags register) must be 0 (rather than
422 # x), to match what is on A8.6.10 (page A8-32). 430 # x), to match what is on A8.6.10 (page A8-32).
423 # Note that this also matches restrictions of 431 # Note that this also matches restrictions of
424 # A8.6.5 (page A8-22). 432 # A8.6.5 (page A8-22).
425 | 01000 1111 = Unary1RegisterImmediateOp 433 | 01000 1111 = Unary1RegisterImmediateOp
426 => Defs12To15 434 => Defs12To15
427 Adr_Rule_10_A1_P32 435 Adr_Rule_10_A1_P32
428 cccc001010001111ddddiiiiiiiiiiii 436 cccc001010001111ddddiiiiiiiiiiii
429 | 01001 1111 = Forbidden # SUBS PC, LR and related instructions 437 | 01001 1111 = ForbiddenCondNop => Forbidden
438 Subs_Pc_Lr_and_related_instructions_Rule_A1b
439 cccc00101001nnnn1111iiiiiiiiiiii
430 | 0101x - = Binary2RegisterImmediateOp 440 | 0101x - = Binary2RegisterImmediateOp
431 => Defs12To15 441 => Defs12To15
432 Adc_Rule_6_A1_P14 442 Adc_Rule_6_A1_P14
433 cccc0010101snnnnddddiiiiiiiiiiii NotRdIsPcAndS 443 cccc0010101snnnnddddiiiiiiiiiiii NotRdIsPcAndS
434 | 0110x - = Binary2RegisterImmediateOp 444 | 0110x - = Binary2RegisterImmediateOp
435 => Defs12To15 445 => Defs12To15
436 Sbc_Rule_151_A1_P302 446 Sbc_Rule_151_A1_P302
437 cccc0010110snnnnddddiiiiiiiiiiii NotRdIsPcAndS 447 cccc0010110snnnnddddiiiiiiiiiiii NotRdIsPcAndS
438 | 0111x - = Binary2RegisterImmediateOp 448 | 0111x - = Binary2RegisterImmediateOp
439 => Defs12To15 449 => Defs12To15
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 cccc00000100hhhhllllmmmm1001nnnn RegsNotPc (v6) 511 cccc00000100hhhhllllmmmm1001nnnn RegsNotPc (v6)
502 | 0101 = Undefined 512 | 0101 = Undefined
503 | 0110 = Binary4RegisterDualOp 513 | 0110 = Binary4RegisterDualOp
504 => Defs16To19CondsDontCareRdRaRmRnNotPc 514 => Defs16To19CondsDontCareRdRaRmRnNotPc
505 Mls_Rule_95_A1_P192 515 Mls_Rule_95_A1_P192
506 cccc00000110ddddaaaammmm1001nnnn RegsNotPc (v6T2) 516 cccc00000110ddddaaaammmm1001nnnn RegsNotPc (v6T2)
507 | 0111 = Undefined 517 | 0111 = Undefined
508 | 100x = Binary4RegisterDualResult 518 | 100x = Binary4RegisterDualResult
509 => Defs12To19CondsDontCareRdRmRnNotPc 519 => Defs12To19CondsDontCareRdRmRnNotPc
510 Umull_Rule_246_A1_P486 520 Umull_Rule_246_A1_P486
511 cccc0000100shhhhllllmmmm1001nnnn RegsNotPc 521 cccc0000100shhhhllllmmmm1001nnnn RegsNotPc
512 | 101x = Binary4RegisterDualResult 522 | 101x = Binary4RegisterDualResult
513 => Defs12To19CondsDontCareRdRmRnNotPc 523 => Defs12To19CondsDontCareRdRmRnNotPc
514 Umlal_Rule_245_A1_P484 524 Umlal_Rule_245_A1_P484
515 cccc0000101shhhhllllmmmm1001nnnn RegsNotPc 525 cccc0000101shhhhllllmmmm1001nnnn RegsNotPc
516 | 110x = Binary4RegisterDualResult 526 | 110x = Binary4RegisterDualResult
517 => Defs12To19CondsDontCareRdRmRnNotPc 527 => Defs12To19CondsDontCareRdRmRnNotPc
518 Smull_Rule_179_A1_P356 528 Smull_Rule_179_A1_P356
519 cccc0000110shhhhllllmmmm1001nnnn RegsNotPc 529 cccc0000110shhhhllllmmmm1001nnnn RegsNotPc
520 | 111x = Binary4RegisterDualResult 530 | 111x = Binary4RegisterDualResult
521 => Defs12To19CondsDontCareRdRmRnNotPc 531 => Defs12To19CondsDontCareRdRmRnNotPc
522 Smlal_Rule_168_A1_P334 532 Smlal_Rule_168_A1_P334
523 cccc0000111shhhhllllmmmm1001nnnn RegsNotPc 533 cccc0000111shhhhllllmmmm1001nnnn RegsNotPc
524 +-- 534 +--
525 535
526 +-- saturating_addition_and_subtraction (See Section A5.2.6) 536 +-- saturating_addition_and_subtraction (See Section A5.2.6)
527 | op(22:21) 537 | op(22:21)
528 | 00 = Binary3RegisterOpAltB 538 | 00 = Binary3RegisterOpAltB
529 => Defs12To15CondsDontCareRnRdRmNotPc 539 => Defs12To15CondsDontCareRnRdRmNotPc
(...skipping 25 matching lines...) Expand all
555 # bit is in bit 6. 565 # bit is in bit 6.
556 | 01 0 = Binary4RegisterDualOp 566 | 01 0 = Binary4RegisterDualOp
557 => Defs16To19CondsDontCareRdRaRmRnNotPc 567 => Defs16To19CondsDontCareRdRaRmRnNotPc
558 Smlawx_Rule_171_A1_340 568 Smlawx_Rule_171_A1_340
559 cccc00010010ddddaaaammmm1x00nnnn RegsNotPc (v5TE) 569 cccc00010010ddddaaaammmm1x00nnnn RegsNotPc (v5TE)
560 # Implements Smulwb and Smulwt where the t/b (x) 570 # Implements Smulwb and Smulwt where the t/b (x)
561 # bit is in bit 6. 571 # bit is in bit 6.
562 | 01 1 = Binary3RegisterOpAltA 572 | 01 1 = Binary3RegisterOpAltA
563 => Defs16To19CondsDontCareRdRmRnNotPc 573 => Defs16To19CondsDontCareRdRmRnNotPc
564 Smulwx_Rule_180_A1_P358 574 Smulwx_Rule_180_A1_P358
565 cccc00010010dddd0000mmmm1x10nnnn RegsNotPc (v5TE) 575 cccc00010010dddd0000mmmm1x10nnnn RegsNotPc (v5TE)
566 # Implements Smlalbb, Smlalbt, Smlaltb, and Smlaltt 576 # Implements Smlalbb, Smlalbt, Smlaltb, and Smlaltt
567 # where the t/b bits (xx) are in bits 5:6. 577 # where the t/b bits (xx) are in bits 5:6.
568 | 10 - = Binary4RegisterDualResult 578 | 10 - = Binary4RegisterDualResult
569 => Defs12To19CondsDontCareRdRmRnNotPc 579 => Defs12To19CondsDontCareRdRmRnNotPc
570 Smlalxx_Rule_169_A1_P336 580 Smlalxx_Rule_169_A1_P336
571 cccc00010100hhhhllllmmmm1xx0nnnn RegsNotPc (v5TE) 581 cccc00010100hhhhllllmmmm1xx0nnnn RegsNotPc (v5TE)
572 # Implements Smulbb, Smulbt, Smultb, and Smultt 582 # Implements Smulbb, Smulbt, Smultb, and Smultt
573 # where the t/b bits (xx) are in bits 5:6. 583 # where the t/b bits (xx) are in bits 5:6.
574 | 11 - = Binary3RegisterOpAltA 584 | 11 - = Binary3RegisterOpAltA
575 => Defs16To19CondsDontCareRdRmRnNotPc 585 => Defs16To19CondsDontCareRdRmRnNotPc
576 Smulxx_Rule_178_P354 586 Smulxx_Rule_178_P354
577 cccc00010110dddd0000mmmm1xx0nnnn RegsNotPc (v5TE) 587 cccc00010110dddd0000mmmm1xx0nnnn RegsNotPc (v5TE)
578 +-- 588 +--
579 589
580 +-- extra_load_store_instructions (See Section A5.2.8) 590 +-- extra_load_store_instructions (See Section A5.2.8)
581 | op2(6:5) op1(24:20) Rn(19:16) 591 | op2(6:5) op1(24:20) Rn(19:16)
582 # Note the following encodings which lead to a different table and aren't 592 # Note the following encodings which lead to a different table and aren't
583 # handled in this table. 593 # handled in this table.
584 # TODO(jfb) Should we make them Forbidden? 594 # TODO(jfb) Should we mark them as unreachable?
585 # 00 - - ->data_processing_and_miscellaneous_instructions 595 # 00 - - ->data_processing_and_miscellaneous_instructions
586 # - 0xx11 - " 596 # - 0xx11 - "
587 # 0x 0xx10 - " 597 # 0x 0xx10 - "
588 # 598 #
589 | 01 xx0x0 - = Store3RegisterOp => StoreBasedOffsetMemory 599 | 01 xx0x0 - = Store3RegisterOp => StoreBasedOffsetMemory
590 Strh_Rule_208_A1_P412 600 Strh_Rule_208_A1_P412
591 cccc000pu0w0nnnntttt00001011mmmm 601 cccc000pu0w0nnnntttt00001011mmmm
592 | " xx0x1 - = Load3RegisterOp => LoadBasedOffsetMemory 602 | " xx0x1 - = Load3RegisterOp => LoadBasedOffsetMemory
593 Ldrh_Rule_76_A1_P156 603 Ldrh_Rule_76_A1_P156
594 cccc000pu0w1nnnntttt00001011mmmm 604 cccc000pu0w1nnnntttt00001011mmmm
595 | " xx1x0 - = Store2RegisterImm8Op 605 | " xx1x0 - = Store2RegisterImm8Op
596 => StoreBasedImmedMemory 606 => StoreBasedImmedMemory
597 Strh_Rule_207_A1_P410 607 Strh_Rule_207_A1_P410
598 cccc000pu1w0nnnnttttiiii1011iiii 608 cccc000pu1w0nnnnttttiiii1011iiii
599 | " xx1x1 ~1111 = Load2RegisterImm8Op 609 | " xx1x1 ~1111 = Load2RegisterImm8Op
600 => LoadBasedImmedMemory 610 => LoadBasedImmedMemory
601 Ldrh_Rule_74_A1_P152 611 Ldrh_Rule_74_A1_P152
602 cccc000pu1w1nnnnttttiiii1011iiii 612 cccc000pu1w1nnnnttttiiii1011iiii
603 | " " 1111 = Load2RegisterImm8Op 613 | " " 1111 = Load2RegisterImm8Op
604 => LoadBasedImmedMemory 614 => LoadBasedImmedMemory
605 Ldrh_Rule_75_A1_P154 615 Ldrh_Rule_75_A1_P154
606 cccc0001u1011111ttttiiii1011iiii 616 cccc0001u1011111ttttiiii1011iiii
607 | 10 xx0x0 - = Load3RegisterDoubleOp 617 | 10 xx0x0 - = Load3RegisterDoubleOp
608 => LoadBasedOffsetMemoryDouble 618 => LoadBasedOffsetMemoryDouble
609 Ldrd_Rule_68_A1_P140 619 Ldrd_Rule_68_A1_P140
610 cccc000pu0w0nnnntttt00001101mmmm (v5TE) 620 cccc000pu0w0nnnntttt00001101mmmm (v5TE)
611 | " xx0x1 - = Load3RegisterOp => LoadBasedOffsetMemory 621 | " xx0x1 - = Load3RegisterOp => LoadBasedOffsetMemory
612 Ldrsb_Rule_80_A1_P164 622 Ldrsb_Rule_80_A1_P164
613 cccc000pu0w1nnnntttt00001101mmmm 623 cccc000pu0w1nnnntttt00001101mmmm
614 | " xx1x0 ~1111 = Load2RegisterImm8DoubleOp 624 | " xx1x0 ~1111 = Load2RegisterImm8DoubleOp
615 => LoadBasedImmedMemoryDouble 625 => LoadBasedImmedMemoryDouble
616 Ldrd_Rule_66_A1_P136 626 Ldrd_Rule_66_A1_P136
617 cccc000pu1w0nnnnttttiiii1101iiii (v5TE) 627 cccc000pu1w0nnnnttttiiii1101iiii (v5TE)
618 | " " 1111 = Load2RegisterImm8DoubleOp 628 | " " 1111 = Load2RegisterImm8DoubleOp
619 => LoadBasedImmedMemoryDouble 629 => LoadBasedImmedMemoryDouble
620 Ldrd_Rule_67_A1_P138 630 Ldrd_Rule_67_A1_P138
621 cccc0001u1001111ttttiiii1101iiii (v5TE) 631 cccc0001u1001111ttttiiii1101iiii (v5TE)
622 | " xx1x1 ~1111 = Load2RegisterImm8Op 632 | " xx1x1 ~1111 = Load2RegisterImm8Op
623 => LoadBasedImmedMemory 633 => LoadBasedImmedMemory
624 Ldrsb_Rule_78_A1_P160 634 Ldrsb_Rule_78_A1_P160
625 cccc000pu1w1nnnnttttiiii1101iiii 635 cccc000pu1w1nnnnttttiiii1101iiii
626 | " " 1111 = Load2RegisterImm8Op 636 | " " 1111 = Load2RegisterImm8Op
627 => LoadBasedImmedMemory 637 => LoadBasedImmedMemory
628 ldrsb_Rule_79_A1_162 638 ldrsb_Rule_79_A1_162
629 cccc0001u1011111ttttiiii1101iiii 639 cccc0001u1011111ttttiiii1101iiii
(...skipping 17 matching lines...) Expand all
647 Ldrsh_Rule_83_A1_P170 657 Ldrsh_Rule_83_A1_P170
648 cccc0001u1011111ttttiiii1111iiii 658 cccc0001u1011111ttttiiii1111iiii
649 +-- 659 +--
650 660
651 # extra_load_store_instructions_unpriviledged (See section A5.2.9) 661 # extra_load_store_instructions_unpriviledged (See section A5.2.9)
652 # Table omitted: modeled as Forbidden. 662 # Table omitted: modeled as Forbidden.
653 # They are not expected in user code. 663 # They are not expected in user code.
654 664
655 +-- synchronization_primitives (See Section A5.2.10) 665 +-- synchronization_primitives (See Section A5.2.10)
656 | op(23:20) 666 | op(23:20)
657 | 0x00 = Deprecated # SWP, SWPB TODO(karl): model these? a8-432 667 # SWP/SWPB are OPTIONAL+deprecated in v7 with the Virtualization
668 # Extension, and OBSOLETE+UNDEFINED in v8 aarch32.
669 | 0x00 = Deprecated
670 Swp_Swpb_Rule_A1
671 cccc00010b00nnnntttt00001001tttt
658 | 1000 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3 672 | 1000 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3
659 Strex_Rule_202_A1_P400 673 Strex_Rule_202_A1_P400
660 cccc00011000nnnndddd11111001tttt (v6) 674 cccc00011000nnnndddd11111001tttt (v6)
661 | 1001 = LoadExclusive2RegisterOp => LoadBasedMemory 675 | 1001 = LoadExclusive2RegisterOp => LoadBasedMemory
662 Ldrex_Rule_69_A1_P142 676 Ldrex_Rule_69_A1_P142
663 cccc00011001nnnntttt111110011111 (v6) 677 cccc00011001nnnntttt111110011111 (v6)
664 | 1010 = StoreExclusive3RegisterDoubleOp 678 | 1010 = StoreExclusive3RegisterDoubleOp
665 => StoreBasedMemoryDoubleRtBits0To3 679 => StoreBasedMemoryDoubleRtBits0To3
666 Strexd_Rule_204_A1_P404 680 Strexd_Rule_204_A1_P404
667 cccc00011010nnnndddd11111001tttt (v6K) 681 cccc00011010nnnndddd11111001tttt (v6K)
668 | 1011 = LoadExclusive2RegisterDoubleOp => LoadBasedMemoryDouble 682 | 1011 = LoadExclusive2RegisterDoubleOp => LoadBasedMemoryDouble
669 Ldrexd_Rule_71_A1_P146 683 Ldrexd_Rule_71_A1_P146
670 cccc00011011nnnntttt111110011111 (v6K) 684 cccc00011011nnnntttt111110011111 (v6K)
671 | 1100 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3 685 | 1100 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3
672 Strexb_Rule_203_A1_P402 686 Strexb_Rule_203_A1_P402
673 cccc00011100nnnndddd11111001tttt (v6K) 687 cccc00011100nnnndddd11111001tttt (v6K)
674 | 1101 = LoadExclusive2RegisterOp => LoadBasedMemory 688 | 1101 = LoadExclusive2RegisterOp => LoadBasedMemory
675 Ldrexb_Rule_70_A1_P144 689 Ldrexb_Rule_70_A1_P144
676 cccc00011101nnnndddd111110011111 (v6K) 690 cccc00011101nnnntttt111110011111 (v6K)
677 | 1110 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3 691 | 1110 = StoreExclusive3RegisterOp => StoreBasedMemoryRtBits0To3
678 Strexh_Rule_205_A1_P406 692 Strexh_Rule_205_A1_P406
679 cccc00011110nnnndddd11111001tttt (v6K) 693 cccc00011110nnnndddd11111001tttt (v6K)
680 | 1111 = LoadExclusive2RegisterOp => LoadBasedMemory 694 | 1111 = LoadExclusive2RegisterOp => LoadBasedMemory
681 Ldrexh_Rule_72_A1_P148 695 Ldrexh_Rule_72_A1_P148
682 cccc00011111nnnntttt111110011111 (v6K) 696 cccc00011111nnnntttt111110011111 (v6K)
683 | else: = Undefined (v6K) # Note on page A5-16 697 | else: = Undefined # Note on page A5-16
684 +-- 698 +--
685 699
686 +-- msr_immediate_and_hints (See Section A5.2.11) 700 +-- msr_immediate_and_hints (See Section A5.2.11)
687 | op(22) op1(19:16) op2(7:0) 701 | op(22) op1(19:16) op2(7:0)
688 | 0 0000 0000_0000 = CondNop => DontCareInst 702 | 0 0000 0000_0000 = CondNop => DontCareInst
689 Nop_Rule_110_A1_P222 703 Nop_Rule_110_A1_P222
690 cccc0011001000001111000000000000 (v6K,v6T2) 704 cccc0011001000001111000000000000 (v6K,v6T2)
691 | " " 0000_0001 = CondNop => DontCareInst 705 | " " 0000_0001 = CondNop => DontCareInst
692 Yield_Rule_413_A1_P812 706 Yield_Rule_413_A1_P812
693 cccc0011001000001111000000000001 (v6K) 707 cccc0011001000001111000000000001 (v6K)
(...skipping 14 matching lines...) Expand all
708 Sev_Rule_158_A1_P316 722 Sev_Rule_158_A1_P316
709 cccc0011001000001111000000000100 (v6K) 723 cccc0011001000001111000000000100 (v6K)
710 | " " 1111_xxxx = CondNop => DontCareInst 724 | " " 1111_xxxx = CondNop => DontCareInst
711 Dbg_Rule_40_A1_P88 725 Dbg_Rule_40_A1_P88
712 cccc001100100000111100001111iiii (v7) 726 cccc001100100000111100001111iiii (v7)
713 | " 0100 - = MoveImmediate12ToApsr => DontCareInst 727 | " 0100 - = MoveImmediate12ToApsr => DontCareInst
714 # Note: DontCareInst will act like the 728 # Note: DontCareInst will act like the
715 # conditions flag is always changed, which 729 # conditions flag is always changed, which
716 # is a safe presumption. 730 # is a safe presumption.
717 Msr_Rule_103_A1_P208 731 Msr_Rule_103_A1_P208
718 | " 1x00 " " 732 cccc0011001001001111iiiiiiiiiiii
733 | " 1x00 " = MoveImmediate12ToApsr => DontCareInst
734 # TODO(jfb) This and the above are the same
735 # except for the pattern: 0b00 mask
736 # isn't allowed.
737 Msr_Rule_103_A1_P208
738 cccc001100101x001111iiiiiiiiiiii
719 | " xx01 - = ForbiddenCondNop => Forbidden 739 | " xx01 - = ForbiddenCondNop => Forbidden
720 Msr_Rule_B6_1_6_A1_PB6_12 740 Msr_Rule_B6_1_6_A1_PB6_12
721 cccc00110010ii011111iiiiiiiiiiii 741 cccc00110010ii011111iiiiiiiiiiii
722 # MSR(immediate), ring0 version 742 # MSR(immediate), ring0 version
723 | " xx1x - = ForbiddenCondNop => Forbidden 743 | " xx1x - = ForbiddenCondNop => Forbidden
724 Msr_Rule_B6_1_6_A1_PB6_12 744 Msr_Rule_B6_1_6_A1_PB6_12
725 cccc00110010ii1i1111iiiiiiiiiiii 745 cccc00110010ii1i1111iiiiiiiiiiii
726 # MSR(immediate), ring0 version 746 # MSR(immediate), ring0 version
727 | 1 - - = ForbiddenCondNop => Forbidden 747 | 1 - - = ForbiddenCondNop => Forbidden
728 Msr_Rule_B6_1_6_A1_PB6_12 748 Msr_Rule_B6_1_6_A1_PB6_12
729 cccc00110110iiii1111iiiiiiiiiiii 749 cccc00110110iiii1111iiiiiiiiiiii
730 # MSR(immediate), ring0 version 750 # MSR(immediate), ring0 version
731 | else: = Forbidden # Unallocated hints, page A5-17 751 | else: = Forbidden # Unallocated hints, page A5-17
732 +-- 752 +--
733 753
734 +-- miscellaneous_instructions (See Section A5.2.12) 754 +-- miscellaneous_instructions (See Section A5.2.12)
735 | op2(6:4) op(22:21) op1(19:16) 755 | op2(6:4) B(9) op(22:21) op1(19:16)
736 | 000 x0 xxxx = Unary1RegisterSet 756 | 000 1 x0 xxxx = ForbiddenCondNop => Forbidden
737 Mrs_Rule_102_A1_P206_Or_B6_10 757 Msr_Rule_Banked_register_A1_B9_1990
738 cccc00010r001111dddd000000000000 758 cccc00010r00mmmmdddd001m00000000 (v7VE)
739 | " 01 xx00 = Unary1RegisterUse 759 | " " x1 " = ForbiddenCondNop => Forbidden
740 Msr_Rule_104_A1_P210 760 Msr_Rule_Banked_register_A1_B9_1992
741 cccc00010010mm00111100000000nnnn 761 cccc00010r10mmmm1111001m0000nnnn (v7VE)
742 | " 01 xx01 = ForbiddenCondNop => Forbidden 762 | " 0 x0 xxxx = Unary1RegisterSet
743 Msr_Rule_B6_1_7_P14 763 Mrs_Rule_102_A1_P206_Or_B6_10
744 cccc00010010mm01111100000000nnnn 764 cccc00010r001111dddd000000000000
745 | " " xx1x = ForbiddenCondNop => Forbidden 765 | " " 01 xx00 = Unary1RegisterUse
746 Msr_Rule_B6_1_7_P14 766 Msr_Rule_104_A1_P210
747 cccc00010010mm1m111100000000nnnn 767 cccc00010010mm00111100000000nnnn
748 | " 11 - = ForbiddenCondNop => Forbidden 768 | " " 01 xx01 = ForbiddenCondNop => Forbidden
749 Msr_Rule_B6_1_7_P14 769 Msr_Rule_B6_1_7_P14
750 cccc00010110mmmm111100000000nnnn 770 cccc00010010mm01111100000000nnnn
751 | 001 01 - = BranchToRegister => BxBlx 771 | " " " xx1x = ForbiddenCondNop => Forbidden
752 Bx_Rule_25_A1_P62 772 Msr_Rule_B6_1_7_P14
753 cccc000100101111111111110001mmmm (v4T) 773 cccc00010010mm1m111100000000nnnn
754 | " 11 - = Unary2RegisterOpNotRmIsPc 774 | " " 11 - = ForbiddenCondNop => Forbidden
755 => Defs12To15RdRnNotPc 775 Msr_Rule_B6_1_7_P14
756 Clz_Rule_31_A1_P72 776 cccc00010110mmmm111100000000nnnn
757 cccc000101101111dddd11110001mmmm (v6) 777 | 001 - 01 - = BranchToRegister => BxBlx
758 | 010 01 - = ForbiddenCondNop => Forbidden 778 Bx_Rule_25_A1_P62
759 Bxj_Rule_26_A1_P64 779 cccc000100101111111111110001mmmm (v4T)
760 cccc000100101111111111110010mmmm 780 | " - 11 - = Unary2RegisterOpNotRmIsPc
761 | 011 01 - = BranchToRegister => BxBlx 781 => Defs12To15RdRnNotPc
762 Blx_Rule_24_A1_P60 782 Clz_Rule_31_A1_P72
763 cccc000100101111111111110011mmmm 783 cccc000101101111dddd11110001mmmm (v5T)
764 RegsNotPc (v5T) 784 | 010 - 01 - = ForbiddenCondNop => Forbidden
765 | 101 - - ->saturating_addition_and_subtraction 785 Bxj_Rule_26_A1_P64
766 | 111 01 - = BreakPointAndConstantPoolHead 786 cccc000100101111111111110010mmmm (v5TEJ)
767 => Breakpoint 787 | 011 - 01 - = BranchToRegister => BxBlx
768 Bkpt_Rule_22_A1_P56 788 Blx_Rule_24_A1_P60
769 cccc00010010iiiiiiiiiiii0111iiii (v5T) 789 cccc000100101111111111110011mmmm
770 | 111 11 - = ForbiddenCondNop => Forbidden 790 RegsNotPc (v5T)
771 Smc_Rule_B6_1_9_P18 791 | 101 - - - ->saturating_addition_and_subtraction
772 cccc000101100000000000000111mmmm 792 | 110 - 11 - = ForbiddenCondNop => Forbidden
773 | else: = Undefined # Note on page A5-18 793 Eret_Rule_A1
794 cccc0001011000000000000001101110 (v7VE)
795 | 111 - 01 - = BreakPointAndConstantPoolHead
796 => Breakpoint
797 Bkpt_Rule_22_A1_P56
798 cccc00010010iiiiiiiiiiii0111iiii (v5T)
799 | " - 10 - = ForbiddenCondNop => Forbidden
800 Hvc_Rule_A1
801 cccc00010100iiiiiiiiiiii0111iiii (v7VE)
802 | " - 11 - = ForbiddenCondNop => Forbidden
803 Smc_Rule_B6_1_9_P18
804 cccc000101100000000000000111iiii (SE)
805 | else: = Undefined # Note on page A5-18
774 +-- 806 +--
775 807
776 +-- load_store_word_and_unsigned_byte (See Section A5.3) 808 +-- load_store_word_and_unsigned_byte (See Section A5.3)
777 # Note: Column op1 is repeated so that several rows can define 809 # Note: Column op1 is repeated so that several rows can define
778 # (anded) multiple test conditions for this row. 810 # (anded) multiple test conditions for this row.
779 | A(25) op1(24:20) B(4) Rn(19:16) op1_repeated(24:20) 811 | A(25) op1(24:20) B(4) Rn(19:16) op1_repeated(24:20)
780 | 0 xx0x0 - - ~0x010 -> load_store_word_and_unsigned_byte_s tr_or_push 812 | 0 xx0x0 - - ~0x010 -> load_store_word_and_unsigned_byte_s tr_or_push
781 | 1 xx0x0 0 - ~0x010 813 | 1 xx0x0 0 - ~0x010 = Store3RegisterImm5Op
782 = Store3RegisterImm5Op 814 => StoreBasedOffsetMemory
783 => StoreBasedOffsetMemory 815 Str_Rule_195_A1_P386
784 Str_Rule_195_A1_P386 816 cccc011pd0w0nnnnttttiiiiitt0mmmm
785 cccc011pd0w0nnnnttttiiiiitt0mmmm 817 | 0 0x010 - - - = ForbiddenCondNop => Forbidden
786 # STRT (rule 210, A1 and A2, page 416) define unprivledge stores, which 818 Strt_Rule_A1
787 # NaCl doesn't allow. 819 cccc0100u010nnnnttttiiiiiiiiiiii
788 | 0 0x010 - - - = Forbidden 820 | 1 0x010 0 - - = ForbiddenCondNop => Forbidden
789 | 1 0x010 0 - - = Forbidden 821 Strt_Rule_A2
822 cccc0110u010nnnnttttiiiiitt0mmmm
790 | 0 xx0x1 - ~1111 ~0x011 823 | 0 xx0x1 - ~1111 ~0x011
791 = Load2RegisterImm12Op 824 = Load2RegisterImm12Op
792 => LoadBasedImmedMemory 825 => LoadBasedImmedMemory
793 Ldr_Rule_58_A1_P120 826 Ldr_Rule_58_A1_P120
794 cccc010pd0w1nnnnttttiiiiiiiiiiii NotRnIsPc 827 cccc010pu0w1nnnnttttiiiiiiiiiiii NotRnIsPc
795 | " xx0x1 " 1111 ~0x011 828 | " xx0x1 " 1111 ~0x011
796 = Load2RegisterImm12Op 829 = Load2RegisterImm12Op
797 => LoadBasedImmedMemory 830 => LoadBasedImmedMemory
798 Ldr_Rule_59_A1_P122 831 Ldr_Rule_59_A1_P122
799 cccc0101d0011111ttttiiiiiiiiiiii 832 cccc0101u0011111ttttiiiiiiiiiiii
800 | 1 xx0x1 0 - ~0x011 833 | 1 xx0x1 0 - ~0x011
801 = Load3RegisterImm5Op => LoadBasedOffsetMemor y 834 = Load3RegisterImm5Op => LoadBasedOffsetMemor y
802 Ldr_Rule_60_A1_P124 835 Ldr_Rule_60_A1_P124
803 cccc011pd0w1nnnnttttiiiiitt0mmmm 836 cccc011pu0w1nnnnttttiiiiitt0mmmm
804 # LDRT (rule 86, A1 and A2, page 176) define unprivledge loads, which 837 | 0 0x011 - - - = ForbiddenCondNop => Forbidden
805 # NaCl doesn't allow. 838 Ldrt_Rule_A1
806 | 0 0x011 - - - = Forbidden 839 cccc0100u011nnnnttttiiiiiiiiiiii
807 | 1 0x011 0 - - = Forbidden 840 | 1 0x011 0 - - = ForbiddenCondNop => Forbidden
841 Ldrt_Rule_A2
842 cccc0110u011nnnnttttiiiiitt0mmmm
808 | 0 xx1x0 - - ~0x110 843 | 0 xx1x0 - - ~0x110
809 = Store2RegisterImm12Op 844 = Store2RegisterImm12Op
810 => StoreBasedImmedMemory 845 => StoreBasedImmedMemory
811 Strb_Rule_197_A1_P390 846 Strb_Rule_197_A1_P390
812 cccc010pd1w0nnnnttttiiiiiiiiiiii 847 cccc010pu1w0nnnnttttiiiiiiiiiiii
813 | 1 xx1x0 0 - ~0x110 848 | 1 xx1x0 0 - ~0x110
814 = Store3RegisterImm5Op 849 = Store3RegisterImm5Op
815 => StoreBasedOffsetMemory 850 => StoreBasedOffsetMemory
816 Strb_Rule_198_A1_P392 851 Strb_Rule_198_A1_P392
817 cccc011pd1w0nnnnttttiiiiitt0mmmm 852 cccc011pu1w0nnnnttttiiiiitt0mmmm
818 # Strbt (rule 199, A1 and A2, page 394) define unprivledged stores, which 853 | 0 0x110 - - - = ForbiddenCondNop => Forbidden
819 # NaCl doesn't allow. 854 Strtb_Rule_A1
820 | 0 0x110 - - - = Forbidden # STRBT A8-394 855 cccc0100u110nnnnttttiiiiiiiiiiii
821 | 1 0x110 0 - - " 856 | 1 0x110 0 - - = ForbiddenCondNop => Forbidden
857 Strtb_Rule_A2
858 cccc0110u110nnnnttttiiiiitt0mmmm
822 | 0 xx1x1 - ~1111 ~0x111 859 | 0 xx1x1 - ~1111 ~0x111
823 = Load2RegisterImm12Op 860 = Load2RegisterImm12Op
824 => LoadBasedImmedMemory 861 => LoadBasedImmedMemory
825 Ldrb_Rule_62_A1_P128 862 Ldrb_Rule_62_A1_P128
826 cccc010pd1w1nnnnttttiiiiiiiiiiii NotRnIsPc 863 cccc010pu1w1nnnnttttiiiiiiiiiiii NotRnIsPc
827 | " xx1x1 " 1111 ~0x111 864 | " xx1x1 " 1111 ~0x111
828 = Load2RegisterImm12Op 865 = Load2RegisterImm12Op
829 => LoadBasedImmedMemory 866 => LoadBasedImmedMemory
830 Ldrb_Rule_63_A1_P130 867 Ldrb_Rule_63_A1_P130
831 cccc0101d1011111ttttiiiiiiiiiiii 868 cccc0101u1011111ttttiiiiiiiiiiii
832 | 1 xx1x1 0 - ~0x111 869 | 1 xx1x1 0 - ~0x111
833 = Load3RegisterImm5Op => LoadBasedOffsetMemor y 870 = Load3RegisterImm5Op => LoadBasedOffsetMemor y
834 Ldrb_Rule_64_A1_P132 871 Ldrb_Rule_64_A1_P132
835 cccc011pd1w1nnnnttttiiiiitt0mmmm 872 cccc011pu1w1nnnnttttiiiiitt0mmmm
836 # Ldrbt (rule 65, A1 and A2, page 134) define unprivledged loads, which 873 | 0 0x111 - - - = ForbiddenCondNop => Forbidden
837 # NaCl doesn't allow. 874 Ldrtb_Rule_A1
838 | 0 0x111 - - - = Forbidden 875 cccc0100u111nnnnttttiiiiiiiiiiii
839 | 1 0x111 0 - - " 876 | 1 0x111 0 - - = ForbiddenCondNop => Forbidden
877 Ldrtb_Rule_A2
878 cccc0110u111nnnnttttiiiiitt0mmmm
879 # Instructions with A==1 and B==1 are in media_instructions.
880 # TODO(jfb) Should we mark them as unreachable?
840 +-- 881 +--
841 882
842 +-- load_store_word_and_unsigned_byte_str_or_push (See Section A5.3) 883 +-- load_store_word_and_unsigned_byte_str_or_push (See Section A5.3)
843 # This table is written to handle special variant of Str that also 884 # This table is written to handle special variant of Str that also
844 # corresponds to a push, in table load_store_word_and_unsigned_byte. 885 # corresponds to a push, in table load_store_word_and_unsigned_byte.
845 | Flags(24:21) Rn(19:16) Imm12(11:0) 886 | Flags(24:21) Rn(19:16) Imm12(11:0)
846 # Note: The baseline class Store2RegisterImm12OpRnNotRtOnWriteback guarantees 887 # Note: The baseline class Store2RegisterImm12OpRnNotRtOnWriteback guarantees
847 # that we don't allow Rt(15:12) to be PC or SP. 888 # that we don't allow Rt(15:12) to be PC or SP.
848 | 1001 1101 000000000100 = Store2RegisterImm12OpRnNotRtOnWriteback 889 | 1001 1101 000000000100 = Store2RegisterImm12OpRnNotRtOnWriteback
849 Push_Rule_123_A2_P248 890 Push_Rule_123_A2_P248
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 cccc100pu1w1nnnn1rrrrrrrrrrrrrrr 1325 cccc100pu1w1nnnn1rrrrrrrrrrrrrrr
1285 | 10xxxx - = BranchImmediate24 => Branch 1326 | 10xxxx - = BranchImmediate24 => Branch
1286 B_Rule_16_A1_P44 1327 B_Rule_16_A1_P44
1287 cccc1010iiiiiiiiiiiiiiiiiiiiiiii 1328 cccc1010iiiiiiiiiiiiiiiiiiiiiiii
1288 | 11xxxx - = BranchImmediate24 => Branch 1329 | 11xxxx - = BranchImmediate24 => Branch
1289 Bl_Blx_Rule_23_A1_P58 1330 Bl_Blx_Rule_23_A1_P58
1290 cccc1011iiiiiiiiiiiiiiiiiiiiiiii 1331 cccc1011iiiiiiiiiiiiiiiiiiiiiiii
1291 +-- 1332 +--
1292 1333
1293 +-- coprocessor_instructions_and_supervisor_call (See Section A5.6) 1334 +-- coprocessor_instructions_and_supervisor_call (See Section A5.6)
1294 # Note: We currently only allow floating point (and advanced SIMD) 1335 # Note: We currently only allow floating point (and advanced SIMD)
1295 # coprocessor operations (coproc=101x). 1336 # coprocessor operations (coproc=101x).
1296 # Note: Column op1 is repeated so that the first three rows can define 1337 # Note: Column op1 is repeated so that the first three rows can define
1297 # (anded) multiple test conditions for this row. 1338 # (anded) multiple test conditions for this row.
1298 | op1(25:20) op(4) coproc(11:8) Rn(19:16) op1_repeated(25:20) 1339 | op1(25:20) op(4) coproc(11:8) Rn(19:16) op1_repeated(25:20)
1299 | 0xxxxx - 101x - ~000x0x 1340 | 0xxxxx - 101x - ~000x0x
1300 -> extension_register_load_store_instructions 1341 -> extension_register_load_store_instructions
1301 | 0xxxx0 - ~101x - ~000x0x 1342 | 0xxxx0 - ~101x - ~000x0x
1302 # Note: Never safe since coproc!=101x 1343 # Note: Never safe since coproc!=101x
1303 = Forbidden # STC A8-372 1344 = Forbidden # STC A8-372
1304 | 0xxxx1 - ~101x ~1111 ~000x0x 1345 | 0xxxx1 - ~101x ~1111 ~000x0x
1305 # Note: Never safe since coproc!=101x 1346 # Note: Never safe since coproc!=101x
1306 = Forbidden # LDC(immediate), LDC2(immediate) A8-106 1347 = Forbidden # LDC(immediate), LDC2(immediate) A8-106
1307 | " " " 1111 - 1348 | " " " 1111 -
1308 # Note: Never safe since coproc!=101x 1349 # Note: Never safe since coproc!=101x
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 | " x1 = CondVfpOp => VfpOp 1397 | " x1 = CondVfpOp => VfpOp
1357 Vsub_Rule_402_A2_P790 1398 Vsub_Rule_402_A2_P790
1358 cccc11100d11nnnndddd101sn1m0mmmm 1399 cccc11100d11nnnndddd101sn1m0mmmm
1359 | 1x00 x0 = CondVfpOp => VfpOp 1400 | 1x00 x0 = CondVfpOp => VfpOp
1360 Vdiv_Rule_301_A1_P590 1401 Vdiv_Rule_301_A1_P590
1361 cccc11101d00nnnndddd101sn0m0mmmm 1402 cccc11101d00nnnndddd101sn0m0mmmm
1362 | 1x11 - -> other_floating_point_data_processing_instructions 1403 | 1x11 - -> other_floating_point_data_processing_instructions
1363 +-- 1404 +--
1364 1405
1365 +-- other_floating_point_data_processing_instructions (A7.5 Table A7-17, page 17 -25) 1406 +-- other_floating_point_data_processing_instructions (A7.5 Table A7-17, page 17 -25)
1366 # Other VPD data-processing, CDP instructions for coprocessors 10/11. 1407 # Other VPD data-processing, CDP instructions for coprocessors 10/11.
1367 # 1408 #
1368 # Note: Currently, all instructions use class CoprocessorOp 1409 # Note: Currently, all instructions use class CoprocessorOp
1369 # to follow what the previous version of the ARM validator did. 1410 # to follow what the previous version of the ARM validator did.
1370 # 1411 #
1371 # TODO(karl): Fix the class decoders to do the right thing. 1412 # TODO(karl): Fix the class decoders to do the right thing.
1372 | opc2(19:16) opc3(7:6) 1413 | opc2(19:16) opc3(7:6)
1373 | - x0 = CondVfpOp => VfpOp 1414 | - x0 = CondVfpOp => VfpOp
1374 Vmov_Rule_326_A2_P640 1415 Vmov_Rule_326_A2_P640
1375 cccc11101d11iiiidddd101s0000iiii 1416 cccc11101d11iiiidddd101s0000iiii
1376 | 0000 01 = CondVfpOp => VfpOp 1417 | 0000 01 = CondVfpOp => VfpOp
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 | C(8) op(7:4) 1542 | C(8) op(7:4)
1502 | 0 00x1 # TODO(karl): Fix this to do the right thing. 1543 | 0 00x1 # TODO(karl): Fix this to do the right thing.
1503 # VMOV A8-650 1544 # VMOV A8-650
1504 = MoveDoubleFromCoprocessor 1545 = MoveDoubleFromCoprocessor
1505 | 1 00x1 # TODO(karl): Fix this to do the right thing. 1546 | 1 00x1 # TODO(karl): Fix this to do the right thing.
1506 # VMOV A8-652 1547 # VMOV A8-652
1507 = MoveDoubleFromCoprocessor 1548 = MoveDoubleFromCoprocessor
1508 +-- 1549 +--
1509 1550
1510 +-- unconditional_instructions (See Section A5.7) 1551 +-- unconditional_instructions (See Section A5.7)
1511 # Note: We currently only allow floating point (and advanced SIMD) 1552 # Note: We currently only allow floating point (and advanced SIMD)
1512 # coprocessor operations (coproc=101x). 1553 # coprocessor operations (coproc=101x).
1513 # 1554 #
1514 # Note: Most instructions in this table are forbidden because they 1555 # Note: Most instructions in this table are forbidden because they
1515 # aren't specific to the Vfp coprocessors (10, 11). 1556 # aren't specific to the Vfp coprocessors (10, 11).
1516 | op1(27:20) op(4) Rn(19:16) 1557 | op1(27:20) op(4) Rn(19:16)
1517 | 0xxx_xxxx - - ->memory_hints_andvanced_simd_instructions_and_misc ellaneous_instructions 1558 | 0xxx_xxxx - - ->memory_hints_andvanced_simd_instructions_and_misc ellaneous_instructions
1518 # Note: These instructions are not allowed for any coprocessor. 1559 # Note: These instructions are not allowed for any coprocessor.
1519 | 100x_x1x0 - - = ForbiddenUncondNop # SRS B6-20 1560 | 100x_x1x0 - - = ForbiddenUncondNop # SRS B6-20
1520 => Forbidden (v6) 1561 => Forbidden (v6)
1521 | 100x_x0x1 - - = ForbiddenUncondNop # RFE B6-16 1562 | 100x_x0x1 - - = ForbiddenUncondNop # RFE B6-16
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 | " 1001 " 1846 | " 1001 "
1806 | " 1101 =VectorLoad # VLD2(single, all lanes) 1847 | " 1101 =VectorLoad # VLD2(single, all lanes)
1807 | " 0x10 =VectorLoad # VLD3(single) 1848 | " 0x10 =VectorLoad # VLD3(single)
1808 | " 1010 " 1849 | " 1010 "
1809 | " 1110 =VectorLoad # VLD3(single, all lanes) 1850 | " 1110 =VectorLoad # VLD3(single, all lanes)
1810 | " 0x11 =VectorLoad # VLD4(single) 1851 | " 0x11 =VectorLoad # VLD4(single)
1811 | " 1011 " 1852 | " 1011 "
1812 | " 1111 =VectorLoad # VLD4(single, all lanes) 1853 | " 1111 =VectorLoad # VLD4(single, all lanes)
1813 | else: =Undefined # Note on page A7-27 1854 | else: =Undefined # Note on page A7-27
1814 +-- 1855 +--
OLDNEW
« no previous file with comments | « src/trusted/validator_arm/actual_classes.cc ('k') | src/trusted/validator_arm/baseline_classes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698