Chromium Code Reviews| 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 98 # are not Pc (R15). | 98 # are not Pc (R15). |
| 99 # NotRnIsPcAndRegsNotPc - Parse precondition Rn!=pc and safety | 99 # NotRnIsPcAndRegsNotPc - Parse precondition Rn!=pc and safety |
| 100 # constraint that all registers defined by the instruction | 100 # constraint that all registers defined by the instruction |
| 101 # are not Pc (R15). | 101 # are not Pc (R15). |
| 102 | 102 |
| 103 ############################################################## | 103 ############################################################## |
| 104 # The following define common entries for each (action) row. | 104 # The following define common entries for each (action) row. |
| 105 # | 105 # |
| 106 # base: The register used as the base for the effective address | 106 # base: The register used as the base for the effective address |
| 107 # for reads and writes. | 107 # for reads and writes. |
| 108 # target: The register use to compute an indirect branch, | 108 # clear_bits: True implies that the masked bits are cleared. |
| 109 # if defined (defaults to None). | 109 # (defaults to false). Corresponds to virtual clear_bits. |
| 110 # defs: The set of registers defined. (missing implies {}). | 110 # defs: The set of registers defined. (missing implies {}). |
| 111 # imm_defs: The set of registers that are set through | 111 # imm_defs: The set of registers that are set through |
| 112 # immediate indexed addressing writeback, where the | 112 # immediate indexed addressing writeback, where the |
| 113 # immediate value is "small". (missing implies {}). | 113 # immediate value is "small". (missing implies {}). |
| 114 # immediate: True if the instruction does a read/write | 114 # immediate: True if the instruction does a read/write |
| 115 # as "base + immediate". (missing implies false). | 115 # as "base + immediate". (missing implies false). |
| 116 # pool_head: Defines instruction to start a literal pool. | 116 # pool_head: Defines instruction to start a literal pool. |
| 117 # (missing implies false). | 117 # (missing implies false). |
| 118 # relative: Defines if the instruction is a direct relative | 118 # relative: Defines if the instruction is a direct relative |
| 119 # branch (R15 + constant offset). (missing implies false.) | 119 # branch (R15 + constant offset). (missing implies false.) |
| 120 # relative_offset: Defines the constant offset used in a direct | 120 # relative_offset: Defines the constant offset used in a direct |
| 121 # relative branch. | 121 # relative branch. |
| 122 # safety: How safety is defined for the class (missing implies true). | 122 # safety: How safety is defined for the class (missing implies true). |
| 123 # sets_Z_if_clear_bits: True implies that it sets the Z (condition) | |
| 124 # bit if mask bits are cleared. (defaults to false). | |
| 125 # Corresponds to defining virtual sets_Z_if_clear_bits. | |
| 126 # target: The register use to compute an indirect branch, | |
| 127 # if defined (defaults to None). | |
| 123 # uses: The set of registers used. (missing imlies {}) | 128 # uses: The set of registers used. (missing imlies {}) |
| 124 # | |
| 125 # TODO(karl): How do we model class decoder virtuals clear_bits | |
| 126 # and sets_Z_if_bits_clear. | |
| 127 ############################################################## | 129 ############################################################## |
| 128 | 130 |
| 129 ############################################################## | 131 ############################################################## |
| 130 # It should be noted that one can define a local dictionary at | 132 # It should be noted that one can define a local dictionary at |
| 131 # the top of each table. The dictionary enties are prefixed by | 133 # the top of each table. The dictionary enties are prefixed by |
| 132 # "*n" which defines entry n. Each entry can be an action template. | 134 # "*n" which defines entry n. Each entry can be an action template. |
| 133 # These templates can then be referred to in actual rows by using | 135 # These templates can then be referred to in actual rows by using |
| 134 # a "*n" in place of the action. When this is done, the action | 136 # a "*n" in place of the action. When this is done, the action |
| 135 # inherits the corresponding action from the table's local dictionary. | 137 # inherits the corresponding action from the table's local dictionary. |
| 136 # Following the "*n" in the row, you can define additional fields. | 138 # Following the "*n" in the row, you can define additional fields. |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 382 rule := BIC_register_shifted_register_A1; | 384 rule := BIC_register_shifted_register_A1; |
| 383 | 1111x - = *4 pattern := cccc0001111s0000ddddssss0tt1mmmm; | 385 | 1111x - = *4 pattern := cccc0001111s0000ddddssss0tt1mmmm; |
| 384 rule := MVN_register_shifted_register_A1; | 386 rule := MVN_register_shifted_register_A1; |
| 385 +-- | 387 +-- |
| 386 | 388 |
| 387 +-- data_processing_immediate (See Section A5.2.3) | 389 +-- data_processing_immediate (See Section A5.2.3) |
| 388 # Note: The two interesting instructions in this set are | 390 # Note: The two interesting instructions in this set are |
| 389 # TestIfAddressMasked and MaskAddress. These two instructions are the | 391 # TestIfAddressMasked and MaskAddress. These two instructions are the |
| 390 # ones that we allow testing/setting of bits to mask data addresses | 392 # ones that we allow testing/setting of bits to mask data addresses |
| 391 # appropriately. | 393 # appropriately. |
| 394 *1 Binary2RegisterImmediateOp => Defs12To15 | |
| 395 { cond(31:28), S(20), Rn(19:16), Rd(15:12), imm12(11:0) } | |
| 396 setflags := S=1; imm32 := ARMExpandImm(imm12); | |
|
JF
2012/09/19 01:14:23
ARMExpandImm_C
Karl
2012/09/20 19:47:42
Done.
| |
| 397 defs := {Rd, NZCV if setflags else None}; | |
| 398 safety := (Rd=1111 & S=1) => UNDEFINED & # ARM | |
|
JF
2012/09/19 01:14:23
Rd=1111 & S=1 is actually the SUB PC, LR instructi
Karl
2012/09/20 19:47:42
The real problem is that we don't have a value tha
Karl
2012/09/20 19:47:42
Changed to DECODER_ERROR.
| |
| 399 Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 400 uses := {Rn}; | |
| 401 *2 Binary2RegisterImmediateOp => Defs12To15 | |
|
JF
2012/09/19 01:14:23
Why make this different from *1? The only differen
Karl
2012/09/20 19:47:42
Like above, made a DECODER_ERROR entry.
| |
| 402 { cond(31:28), S(20), Rn(19:16), Rd(15:12), imm12(11:0) } | |
| 403 setflags := S=1; imm32 := ARMExpandImm(imm12); | |
| 404 defs := {Rd, NZCV if setflags else None}; | |
| 405 safety := (Rd=1111 & S=1) => UNDEFINED & # ARM | |
| 406 (Rn=1111 & S=0) => UNDEFINED & | |
| 407 Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 408 uses := {Rn}; | |
| 409 *3 Unary1RegisterImmediateOp => Defs12To15 | |
| 410 { cond(31:28), Rd(15:12), imm12(11:0) } | |
| 411 imm32 := ARMExpandImm(imm12); add := false; | |
| 412 defs := {Rd}; | |
| 413 safety := Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 414 uses := {Pc}; | |
| 415 *4 Unary1RegisterImmediateOp => Defs12To15 | |
|
JF
2012/09/19 01:14:23
*4 is only different from *3 in the add variable.
Karl
2012/09/20 19:47:42
Merged.
| |
| 416 { cond(31:28), Rd(15:12), imm12(11:0) } | |
| 417 imm32 := ARMExpandImm(imm12); add := true; | |
| 418 defs := {Rd}; | |
| 419 safety := Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 420 uses := {Pc}; | |
| 421 *5 BinaryRegisterImmediateTest => DontCareInst | |
| 422 { cond(31:28), Rn(19:15), imm12(11:0) } | |
|
JF
2012/09/19 01:14:23
Rn(19:16)
Karl
2012/09/20 19:47:42
Done.
| |
| 423 imm32 := AMRExpandImm(imm12); | |
|
JF
2012/09/19 01:14:23
ARMExpandImm_C
Karl
2012/09/20 19:47:42
Done.
| |
| 424 defs := {NZCV}; | |
|
JF
2012/09/19 01:14:23
uses := {Rn};
Karl
2012/09/20 19:47:42
Done.
| |
| 425 *6 MaskedBinaryRegisterImmediateTest => TestIfAddressMasked | |
| 426 # Note: This instruction is used to test if the immediate value | |
| 427 # appropriately (data address) masks the value in Rn. Otherwise, | |
| 428 # it would be the same as *5 above. | |
| 429 { cond(31:28), Rn(19:15), imm12(11:0) } | |
|
JF
2012/09/19 01:14:23
Rn(19:16)
Karl
2012/09/20 19:47:42
Done.
| |
| 430 imm32 := AMRExpandImm(imm12); | |
|
JF
2012/09/19 01:14:23
ARMExpandImm_C
Karl
2012/09/20 19:47:42
Done.
| |
| 431 defs := {NZCV}; | |
| 432 sets_Z_if_bits_clear := true; | |
|
JF
2012/09/19 01:14:23
uses := {Rn};
Karl
2012/09/20 19:47:42
Done.
| |
| 433 *7 Unary1RegisterImmediateOp => Defs12To15 | |
|
JF
2012/09/19 01:14:23
*7 is wrong and encodes encoding A2, not A1. It sh
Karl
2012/09/20 19:47:42
Fixed.
| |
| 434 { cond(31:28), imm4(19:16), Rd(15:12), imm12(11:0) } | |
| 435 setflags := false; imm32 := ZeroExtend(imm4:imm12, 32); | |
| 436 defs := {Rd}; | |
| 437 safety := Rd=1111 => UNPREDICTABLE; # ARM and NaCl | |
| 438 *8 MaskedBinary2RegisterImmediateOp => MaskAddress | |
| 439 # Note: This instruction is used to mask memory addresses. Otherwise, | |
| 440 # it would be the same as *1. | |
| 441 { cond(31:28), S(20), Rn(19:16), Rd(15:12), imm12(11:0) } | |
| 442 setflags := S=1; imm32 := ARMExpandImm(imm12); | |
|
JF
2012/09/19 01:14:23
ARMExpandImm_C
Karl
2012/09/20 19:47:42
Done.
| |
| 443 defs := {Rd, NZCV if setflags else None}; | |
| 444 safety := (Rd=1111 & S=1) => UNDEFINED & # ARM | |
|
JF
2012/09/19 01:14:23
FORBIDDEN_OPERANDS, as above.
Karl
2012/09/20 19:47:42
Changed to DECODER_ERROR.
| |
| 445 Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 446 uses := {Rn}; | |
| 447 clears_bits := true; | |
| 448 *9 Unary1RegisterImmediateOp => Defs12To15 | |
|
JF
2012/09/19 01:14:23
This is the same as *7 that I've defined above (ex
Karl
2012/09/20 19:47:42
Merged.
| |
| 449 { cond(31:28), S(20), Rd(15:12), imm12(11:0) } | |
| 450 setflags := S=1; imm32 := ARMExpandImm(imm12); | |
| 451 defs := {Rd, NZCV if setflags else None}; | |
| 452 safety := (Rd=1111 & S=1) => UNDEFINED & # ARM | |
| 453 Rd=1111 => FORBIDDEN_OPERANDS; # NaCl | |
| 454 +-- | |
| 392 | op(24:20) Rn(19:16) | 455 | op(24:20) Rn(19:16) |
| 393 | 0000x - = Binary2RegisterImmediateOp | 456 | 0000x - = *1 pattern := cccc0010000snnnnddddiiiiiiiiiiii |
| 394 => Defs12To15 | 457 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Why this restriction? Won't the safety make this c
Karl
2012/09/20 19:47:42
This is a testing infrastructure issue. It is need
| |
| 395 And_Rule_11_A1_P34 | 458 rule := AND_immediate_A1; |
| 396 cccc0010000snnnnddddiiiiiiiiiiii NotRdIsPcAndS | 459 | 0001x - = *1 pattern := cccc0010001snnnnddddiiiiiiiiiiii |
| 397 | 0001x - = Binary2RegisterImmediateOp | 460 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 398 => Defs12To15 | 461 rule := EOR_immediate_A1; |
| 399 Eor_Rule_44_A1_P94 | 462 | 0010x ~1111 = *2 pattern := cccc0010010snnnnddddiiiiiiiiiiii |
|
JF
2012/09/19 01:14:23
As noted above, change *2 to *1.
Karl
2012/09/20 19:47:42
Done.
| |
| 400 cccc0010001snnnnddddiiiiiiiiiiii NotRdIsPcAndS | 463 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 401 | 0010x ~1111 = Binary2RegisterImmediateOp | 464 # Note: For arm, the case where Rn=SP is not a special case (only in thumb2). |
| 402 => Defs12To15 | 465 # Hence, parse restriction does not apply (See SUB (SP minus immediate)). |
|
JF
2012/09/19 01:14:23
Why this note? It confuses me.
Karl
2012/09/20 19:47:42
removed
| |
| 403 Sub_Rule_212_A1_P420 | 466 rule := SUB_immediate_A1; |
| 404 cccc0010010snnnnddddiiiiiiiiiiii | 467 | 0010x 1111 = *3 pattern := cccc001001001111ddddiiiiiiiiiiii; |
| 405 NeitherRdIsPcAndSNorRnIsPcAndNotS | 468 rule := ADR_A2; |
| 406 # Note: Table says that op=0010x for ADR, but | 469 | 0011x - = *1 pattern := cccc0010011snnnnddddiiiiiiiiiiii |
| 407 # patterns for ADR do not match (page A8-32). | 470 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 408 # Causes parsing conflicts with SUB (previous | 471 rule := RSB_immediate_A1; |
| 409 # row). Added restriction to ADR that bit 20 | 472 | 0100x ~1111 = *2 pattern := cccc0010100snnnnddddiiiiiiiiiiii |
|
JF
2012/09/19 01:14:23
As noted above, change *2 to *1.
Karl
2012/09/20 19:47:42
Done.
| |
| 410 # (updates flags register) must be 0 (rather than | 473 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 411 # x), to match what is on A8.6.10 (page A8-32). | 474 # Note: For arm, the case where Rn=SP is not a special case (only in thumb2). |
| 412 # Note that this also matches restrictions of | 475 # Hence, parse restriction does not apply (See ADD (SP plus immediate)). |
|
JF
2012/09/19 01:14:23
Ditto on my confusion.
Karl
2012/09/20 19:47:42
removed
| |
| 413 # A8.6.212 (page A8-420). | 476 rule := ADD_immediate_A1; |
| 414 | 00100 1111 = Unary1RegisterImmediateOp | 477 | 0100x 1111 = *4 pattern := cccc001010001111ddddiiiiiiiiiiii; |
|
JF
2012/09/19 01:14:23
As noted above, change to *3.
Karl
2012/09/20 19:47:42
Done.
| |
| 415 => Defs12To15 | 478 rule := ADR_A1; |
| 416 Adr_Rule_10_A2_P32 | 479 | 0101x - = *1 pattern := cccc0010101snnnnddddiiiiiiiiiiii |
| 417 cccc001001001111ddddiiiiiiiiiiii | 480 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 418 | 00101 1111 = ForbiddenCondDecoder => Forbidden | 481 rule := ADC_immediate_A1; |
| 419 Subs_Pc_Lr_and_related_instructions_Rule_A1a | 482 | 0110x - = *1 pattern := cccc0010110snnnnddddiiiiiiiiiiii |
| 420 cccc00100101nnnn1111iiiiiiiiiiii | 483 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 421 | 0011x - = Binary2RegisterImmediateOp | 484 rule := SBC_immediate_A1; |
| 422 => Defs12To15 | 485 | 0111x - = *1 pattern := cccc0010111snnnnddddiiiiiiiiiiii |
| 423 Rsb_Rule_142_A1_P284 | 486 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 424 cccc0010011snnnnddddiiiiiiiiiiii NotRdIsPcAndS | 487 rule := RSC_immediate_A1; |
| 425 | 0100x ~1111 = Binary2RegisterImmediateOp | |
| 426 => Defs12To15 | |
| 427 Add_Rule_5_A1_P22 | |
| 428 cccc0010100snnnnddddiiiiiiiiiiii | |
| 429 NeitherRdIsPcAndSNorRnIsPcAndNotS | |
| 430 # Note: Table says that op=0100x for ADR, but | |
| 431 # patterns for ADR do not match (page A8-32). | |
| 432 # Causes parsing conflicts with ADD (previous | |
| 433 # row). Added restriction to ADR that bit 20 | |
| 434 # (updates flags register) must be 0 (rather than | |
| 435 # x), to match what is on A8.6.10 (page A8-32). | |
| 436 # Note that this also matches restrictions of | |
| 437 # A8.6.5 (page A8-22). | |
| 438 | 01000 1111 = Unary1RegisterImmediateOp | |
| 439 => Defs12To15 | |
| 440 Adr_Rule_10_A1_P32 | |
| 441 cccc001010001111ddddiiiiiiiiiiii | |
| 442 | 01001 1111 = ForbiddenCondDecoder => Forbidden | |
| 443 Subs_Pc_Lr_and_related_instructions_Rule_A1b | |
| 444 cccc00101001nnnn1111iiiiiiiiiiii | |
| 445 | 0101x - = Binary2RegisterImmediateOp | |
| 446 => Defs12To15 | |
| 447 Adc_Rule_6_A1_P14 | |
| 448 cccc0010101snnnnddddiiiiiiiiiiii NotRdIsPcAndS | |
| 449 | 0110x - = Binary2RegisterImmediateOp | |
| 450 => Defs12To15 | |
| 451 Sbc_Rule_151_A1_P302 | |
| 452 cccc0010110snnnnddddiiiiiiiiiiii NotRdIsPcAndS | |
| 453 | 0111x - = Binary2RegisterImmediateOp | |
| 454 => Defs12To15 | |
| 455 Rsc_Rule_145_A1_P290 | |
| 456 cccc0010111snnnnddddiiiiiiiiiiii NotRdIsPcAndS | |
| 457 # TODO(jfb) op==10xx0 should be unreachable from here: | 488 # TODO(jfb) op==10xx0 should be unreachable from here: |
| 458 # the previous table should handle it. | 489 # the previous table should handle it. |
| 459 # Note: Following instruction is used to test | 490 | 10001 - = *6 pattern := cccc00110001nnnn0000iiiiiiiiiiii; |
| 460 # if the immediate value appropriately (data address) | 491 rule := TST_immediate_A1; |
| 461 # masks the value in Rn. | 492 | 10011 - = *5 pattern := cccc00110011nnnn0000iiiiiiiiiiii; |
| 462 | 10001 - = MaskedBinaryRegisterImmediateTest | 493 rule := TEQ_immediate_A1; |
| 463 => TestIfAddressMasked | 494 | 10101 - = *5 pattern := cccc00110101nnnn0000iiiiiiiiiiii; |
| 464 Tst_Rule_230_A1_P454 | 495 rule := CMP_immediate_A1; |
| 465 cccc00110001nnnn0000iiiiiiiiiiii | 496 | 10111 - = *5 pattern := cccc00110111nnnn0000iiiiiiiiiiii; |
| 466 | 10011 - = BinaryRegisterImmediateTest | 497 rule := CMN_immediate_A1; |
| 467 => DontCareInst | 498 | 1100x - = *1 pattern := cccc0011100snnnnddddiiiiiiiiiiii |
| 468 Teq_Rule_227_A1_P448 | 499 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 469 cccc00110011nnnn0000iiiiiiiiiiii | 500 rule := ORR_immediate_A1; |
| 470 | 10101 - = BinaryRegisterImmediateTest | 501 | 1101x - = *7 pattern := cccc0011101s0000ddddiiiiiiiiiiii; |
| 471 => DontCareInst | 502 rule := MOV_immediate_A1; |
| 472 Cmp_Rule_35_A1_P80 | 503 | 1110x - = *8 pattern := cccc0011110snnnnddddiiiiiiiiiiii |
| 473 cccc00110101nnnn0000iiiiiiiiiiii | 504 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 474 | 10111 - = BinaryRegisterImmediateTest | 505 rule := BIC_immediate_A1; |
| 475 => DontCareInst | 506 | 1111x - = *9 pattern := cccc0011111s0000ddddiiiiiiiiiiii |
|
JF
2012/09/19 01:14:23
Change to *7.
Karl
2012/09/20 19:47:42
Done.
| |
| 476 Cmn_Rule_32_A1_P74 | 507 & not (Rd=1111 & S=1); |
|
JF
2012/09/19 01:14:23
Ditto on UNDEFINED restriction.
Karl
2012/09/20 19:47:42
removed
| |
| 477 cccc00110111nnnn0000iiiiiiiiiiii | 508 rule := MVN_immediate_A1; |
| 478 | 1100x - = Binary2RegisterImmediateOp | |
| 479 => Defs12To15 | |
| 480 Orr_Rule_113_A1_P228 | |
| 481 cccc0011100snnnnddddiiiiiiiiiiii NotRdIsPcAndS | |
| 482 | 1101x - = Unary1RegisterImmediateOp | |
| 483 => Defs12To15 | |
| 484 Mov_Rule_96_A1_P194 | |
| 485 cccc0011101s0000ddddiiiiiiiiiiii NotRdIsPcAndS | |
| 486 # Note: The following instruction is used to mask | |
| 487 # memory addresses. | |
| 488 | 1110x - = MaskedBinary2RegisterImmediateOp | |
| 489 => MaskAddress | |
| 490 Bic_Rule_19_A1_P50 | |
| 491 cccc0011110snnnnddddiiiiiiiiiiii NotRdIsPcAndS | |
| 492 | 1111x - = Unary1RegisterImmediateOp | |
| 493 => Defs12To15 | |
| 494 Mvn_Rule_106_A1_P214 | |
| 495 cccc0011111s0000ddddiiiiiiiiiiii NotRdIsPcAndS | |
| 496 +-- | 509 +-- |
| 497 | 510 |
| 498 # Note: in all of these cases there's a currently unhandled restriction: | 511 # Note: in all of these cases there's a currently unhandled restriction: |
| 499 # if ArchVersion() < 6 && d == n then Unpredictable. | 512 # if ArchVersion() < 6 && d == n then Unpredictable. |
| 500 # And for long versions: | 513 # And for long versions: |
| 501 # if ArchVersion() < 6 && ((dhi == n) || (dlo == n)) then Unpredictable. | 514 # if ArchVersion() < 6 && ((dhi == n) || (dlo == n)) then Unpredictable. |
| 502 # Revisit if we want to support chips before v6. | 515 # Revisit if we want to support chips before v6. |
| 503 +-- multiply_and_multiply_accumulate (See Section A5.2.5) | 516 +-- multiply_and_multiply_accumulate (See Section A5.2.5) |
| 504 | op(23:20) | 517 | op(23:20) |
| 505 | 000x = Binary3RegisterOpAltA | 518 | 000x = Binary3RegisterOpAltA |
| (...skipping 1426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1932 | " 1001 " | 1945 | " 1001 " |
| 1933 | " 1101 =VectorLoad # VLD2(single, all lanes) | 1946 | " 1101 =VectorLoad # VLD2(single, all lanes) |
| 1934 | " 0x10 =VectorLoad # VLD3(single) | 1947 | " 0x10 =VectorLoad # VLD3(single) |
| 1935 | " 1010 " | 1948 | " 1010 " |
| 1936 | " 1110 =VectorLoad # VLD3(single, all lanes) | 1949 | " 1110 =VectorLoad # VLD3(single, all lanes) |
| 1937 | " 0x11 =VectorLoad # VLD4(single) | 1950 | " 0x11 =VectorLoad # VLD4(single) |
| 1938 | " 1011 " | 1951 | " 1011 " |
| 1939 | " 1111 =VectorLoad # VLD4(single, all lanes) | 1952 | " 1111 =VectorLoad # VLD4(single, all lanes) |
| 1940 | else: =Undefined # Note on page A7-27 | 1953 | else: =Undefined # Note on page A7-27 |
| 1941 +-- | 1954 +-- |
| OLD | NEW |