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