| 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. |
| 11 # | 11 # |
| 12 # Each table consists of | 12 # Each table consists of |
| 13 # - A name, | 13 # - A name, |
| 14 # - A citation in the Architecture Reference Manual, | 14 # - A citation in the Architecture Reference Manual, |
| 15 # - One or more columns defining bitfields to match, and | 15 # - One or more columns defining bitfields to match, and |
| 16 # - One or more rows describing patterns in those bitfields. | 16 # - One or more rows describing patterns in those bitfields. |
| 17 # | 17 # |
| 18 # A leading tilde (~) negates a pattern. A hyphen (-) is short for a string of | 18 # A leading tilde (~) negates a pattern. A hyphen (-) is short for a string of |
| 19 # don't-care bits (x). A double-quote (") indicates that a pattern is the same | 19 # don't-care bits (x). A double-quote (") indicates that a pattern is the same |
| 20 # as the row above it. | 20 # as the row above it. |
| 21 # | 21 # |
| 22 # Each row may specify a terminal instruction class ("=InstClass"), or forward | 22 # Each row may specify a terminal instruction class ("=InstClass"), or forward |
| 23 # the reader to a different table ("->table_name"). | 23 # the reader to a different table ("->table_name"). |
| 24 # | 24 # |
| 25 # If an encoding is not valid in every ARM architecture rev, the instruction | 25 # If an encoding is not valid in every ARM architecture rev, the instruction |
| 26 # class may indicate the rev or feature that makes the encoding valid in | 26 # class may indicate the rev or feature that makes the encoding valid in |
| 27 # parentheses. | 27 # parentheses. |
| 28 | 28 # |
| 29 -- ARMv7 (See Section A5.1) | 29 # For documentation and testing, an "=InstClass" can be followed by up to 3 |
| 30 cond(31:28) op1(27:25) op(4) | 30 # additional identifiers, and has the form: |
| 31 ~1111 00x - ->dp_misc | 31 # =InstClass Rule Pattern Constraints |
| 32 " 010 - ->load_store_word_byte | 32 # where |
| 33 " 011 0 ->load_store_word_byte | 33 # InstClass - is the class decoder to return when matched. |
| 34 " " 1 ->media | 34 # Rule - is the Arm rule that applies to the match (see below). |
| 35 " 10x - ->branch_block_xfer | 35 # Pattern - is a bitpattern for testing instances of the rule. |
| 36 " 11x - ->super_cop | 36 # Constraints - identifies what additional constraints are assumed |
| 37 1111 - - ->unconditional | 37 # by the corresponding rule. |
| 38 | 38 # |
| 39 -- dp_misc (See Section A5.2) | 39 # The Rules are identified with an identifier of the form: |
| 40 op(25) op1(24:20) op2(7:4) | 40 # NNN_Rule_SS_AA_Pppp |
| 41 0 ~10xx0 xxx0 ->dp_reg | 41 # where |
| 42 " " 0xx1 ->dp_reg_shifted | 42 # NNN is the nmenonic of the instruction. |
| 43 " 10xx0 0xxx ->misc | 43 # SS is the section number in A8.6.SS that define the instruction. |
| 44 " " 1xx0 ->half_mult | 44 # AA is the instruction form on that page, |
| 45 " 0xxxx 1001 ->mult | 45 # pp is the page number in A8-pp that the instruction is on. |
| 46 " 1xxxx 1001 ->sync | 46 # |
| 47 " ~0xx1x 1011 ->extra_load_store | 47 # Patterns are sequences of 32 characters as follows: |
| 48 " " 11x1 " | 48 # '1' - Bit must be value 1. |
| 49 " 0xx1x 1011 =Forbidden # Load/Store Unprivileged, plus undef | 49 # '0' - Bit must be value 0. |
| 50 " " 11x1 " | 50 # 'aaa...aa' (for some sequence of m lower case letters) - |
| 51 1 ~10xx0 - ->dp_immed | 51 # Try all possible combinations of bits for the m bytes. |
| 52 " 10000 - =DataProc(v6T2) # MOV (immediate) 16-bit version | 52 # 'AAA...A' (for some sequence of m upper case letters) - |
| 53 " 10100 - =DataProc(v6T2) # MOVT | 53 # Try the following combinations: |
| 54 " 10x10 - ->msr_and_hints | 54 # (1) All m bits set to 1. |
| 55 | 55 # (2) All m bits set to 0. |
| 56 -- dp_reg (See Section A5.2.1) | 56 # (3) For each 4-bit subsequence, try all combinations, |
| 57 op1(24:20) op2(11:7) op3(6:5) | 57 # setting remaining bits to 1. |
| 58 0000x - - =DataProc # AND(register) A8-36 | 58 # (4) For each 4-bit subsequence, try all combinations, |
| 59 0001x - - =DataProc # EOR(register) A8-96 | 59 # setting remaining bits to 0. |
| 60 0010x - - =DataProc # SUB(register) A8-422 | 60 # |
| 61 0011x - - =DataProc # RSB(register) A8-286 | 61 # Constraints identifiers used are: |
| 62 0100x - - =DataProc # ADD(register) A8-24 | 62 # RegsNotPc - All register defined by instruction are not Pc (R15). |
| 63 0101x - - =DataProc # ADC(register) A8-16 | 63 |
| 64 0110x - - =DataProc # SBC(register) A8-304 | 64 +-- ARMv7 (See Section A5.1) |
| 65 0111x - - =DataProc # RSC(register) A8-292 | 65 | cond(31:28) op1(27:25) op(4) |
| 66 10001 - - =Test # TST(register) A8-456 | 66 | ~1111 00x - ->dp_misc |
| 67 10011 - - =Test # TEQ(register) A8-450 | 67 | " 010 - ->load_store_word_byte |
| 68 10101 - - =Test # CMP(register) A8-82 | 68 | " 011 0 ->load_store_word_byte |
| 69 10111 - - =Test # CMN(register) A8-76 | 69 | " " 1 ->media |
| 70 1100x - - =DataProc # ORR(register) A8-230 | 70 | " 10x - ->branch_block_xfer |
| 71 1101x 00000 00 =DataProc # MOV(register) A8-196 | 71 | " 11x - ->super_cop |
| 72 " ~00000 00 =DataProc # LSL(immediate) A8-178 | 72 | 1111 - - ->unconditional |
| 73 " - 01 =DataProc # LSR(immediate) A8-182 | 73 +-- |
| 74 " - 10 =DataProc # ASR(immediate) A8-40 | 74 |
| 75 " 00000 11 =DataProc # RRX A8-282 | 75 +-- dp_misc (See Section A5.2) |
| 76 " ~00000 11 =DataProc # ROR(immediate) A8-278 | 76 | op(25) op1(24:20) op2(7:4) |
| 77 1110x - - =DataProc # BIC(register) A8-52 | 77 | 0 ~10xx0 xxx0 ->dp_reg |
| 78 1111x - - =DataProc # MVN(register) A8-216 | 78 | " " 0xx1 ->dp_reg_shifted |
| 79 | 79 | " 10xx0 0xxx ->misc |
| 80 -- dp_reg_shifted (See Section A5.2.2) | 80 | " " 1xx0 ->half_mult |
| 81 op1(24:20) op2(6:5) | 81 | " 0xxxx 1001 ->mult |
| 82 0000x - =Binary4RegisterShiftedOp # AND(register-shifted) A1 A8-3
8 | 82 | " 1xxxx 1001 ->sync |
| 83 0001x - =Binary4RegisterShiftedOp # EOR(register-shifted) A1 A8-9
8 | 83 | " ~0xx1x 1011 ->extra_load_store |
| 84 0010x - =Binary4RegisterShiftedOp # SUB(register-shifted) A1 A8-4
24 | 84 | " " 11x1 " |
| 85 0011x - =Binary4RegisterShiftedOp # RSB(register-shifted) A1 A8-2
88 | 85 | " 0xx1x 1011 =Forbidden # Load/Store Unprivileged, plus undef |
| 86 0100x - =Binary4RegisterShiftedOp # ADD(register-shifted) A1 A8-2
6 | 86 | " " 11x1 " |
| 87 0101x - =Binary4RegisterShiftedOp # ADC(register-shifted) A1 A8-1
8 | 87 | 1 ~10xx0 - ->dp_immed |
| 88 0110x - =Binary4RegisterShiftedOp # SBC(register-shifted) A1 A8-3
06 | 88 | " 10000 - =DataProc(v6T2) # MOV (immediate) 16-bit version |
| 89 0111x - =Binary4RegisterShiftedOp # RSC(register-shifted) A1 A8-2
94 | 89 | " 10100 - =DataProc(v6T2) # MOVT |
| 90 10001 - =Binary3RegisterShiftedTest # TST(register-shifted) A1 A8-4
58 | 90 | " 10x10 - ->msr_and_hints |
| 91 10011 - =Binary3RegisterShiftedTest # TEQ(register-shifted) A1 A8-4
52 | 91 +-- |
| 92 10101 - =Binary3RegisterShiftedTest # CMP(register-shifted) A1 A8-8
4 | 92 |
| 93 10111 - =Binary3RegisterShiftedTest # CMN(register-shifted) A1 A8-7
8 | 93 +-- dp_reg (See Section A5.2.1) |
| 94 1100x - =Binary4RegisterShiftedOp # ORR(register-shifted) A1 A8-2
32 | 94 | op1(24:20) op2(11:7) op3(6:5) |
| 95 1101x 00 =DataProc # LSL(register) A8-180 | 95 | 0000x - - =DataProc # AND(register) A8-36 |
| 96 " 01 =DataProc # LSR(register) A8-184 | 96 | 0001x - - =DataProc # EOR(register) A8-96 |
| 97 " 10 =DataProc # ASR(register) A8-42 | 97 | 0010x - - =DataProc # SUB(register) A8-422 |
| 98 " 11 =DataProc # ROR(register) A8-280 | 98 | 0011x - - =DataProc # RSB(register) A8-286 |
| 99 1110x - =Binary4RegisterShiftedOp # BIC(register-shifted) A1 A8-5
4 | 99 | 0100x - - =DataProc # ADD(register) A8-24 |
| 100 1111x - =Unary3RegisterShiftedOp # MVN(register-shifted) A1 A8-2
18 | 100 | 0101x - - =DataProc # ADC(register) A8-16 |
| 101 | 101 | 0110x - - =DataProc # SBC(register) A8-304 |
| 102 -- dp_immed (See Section A5.2.3) | 102 | 0111x - - =DataProc # RSC(register) A8-292 |
| 103 | 10001 - - =Test # TST(register) A8-456 |
| 104 | 10011 - - =Test # TEQ(register) A8-450 |
| 105 | 10101 - - =Test # CMP(register) A8-82 |
| 106 | 10111 - - =Test # CMN(register) A8-76 |
| 107 | 1100x - - =DataProc # ORR(register) A8-230 |
| 108 | 1101x 00000 00 =DataProc # MOV(register) A8-196 |
| 109 | " ~00000 00 =DataProc # LSL(immediate) A8-178 |
| 110 | " - 01 =DataProc # LSR(immediate) A8-182 |
| 111 | " - 10 =DataProc # ASR(immediate) A8-40 |
| 112 | " 00000 11 =DataProc # RRX A8-282 |
| 113 | " ~00000 11 =DataProc # ROR(immediate) A8-278 |
| 114 | 1110x - - =DataProc # BIC(register) A8-52 |
| 115 | 1111x - - =DataProc # MVN(register) A8-216 |
| 116 +-- |
| 117 |
| 118 +-- dp_reg_shifted (See Section A5.2.2) |
| 119 | op1(24:20) op2(6:5) |
| 120 | 0000x - =Binary4RegisterShiftedOp # AND(register-shifted) A1 A8
-38 |
| 121 | 0001x - =Binary4RegisterShiftedOp # EOR(register-shifted) A1 A8
-98 |
| 122 | 0010x - =Binary4RegisterShiftedOp # SUB(register-shifted) A1 A8
-424 |
| 123 | 0011x - = Binary4RegisterShiftedOp Rsb_Rule_144_A1_P288 |
| 124 cccc0000011snnnnddddssss0tt1mmmm RegsNotPc |
| 125 | 0100x - = Binary4RegisterShiftedOp Add_Rule_7_A1_P26 |
| 126 cccc0000100snnnnddddssss0tt1mmmm RegsNotPc |
| 127 | 0101x - =Binary4RegisterShiftedOp # ADC(register-shifted) A1 A8
-18 |
| 128 | 0110x - =Binary4RegisterShiftedOp # SBC(register-shifted) A1 A8
-306 |
| 129 | 0111x - =Binary4RegisterShiftedOp # RSC(register-shifted) A1 A8
-294 |
| 130 | 10001 - =Binary3RegisterShiftedTest # TST(register-shifted) A1 A8
-458 |
| 131 | 10011 - =Binary3RegisterShiftedTest # TEQ(register-shifted) A1 A8
-452 |
| 132 | 10101 - =Binary3RegisterShiftedTest # CMP(register-shifted) A1 A8
-84 |
| 133 | 10111 - =Binary3RegisterShiftedTest # CMN(register-shifted) A1 A8
-78 |
| 134 | 1100x - =Binary4RegisterShiftedOp # ORR(register-shifted) A1 A8
-232 |
| 135 | 1101x 00 =DataProc # LSL(register) A8-180 |
| 136 | " 01 =DataProc # LSR(register) A8-184 |
| 137 | " 10 =DataProc # ASR(register) A8-42 |
| 138 | " 11 =DataProc # ROR(register) A8-280 |
| 139 | 1110x - =Binary4RegisterShiftedOp # BIC(register-shifted) A1 A8
-54 |
| 140 | 1111x - =Unary3RegisterShiftedOp # MVN(register-shifted) A1 A8
-218 |
| 141 +-- |
| 142 |
| 143 +-- dp_immed (See Section A5.2.3) |
| 103 # We model this separately so we can recognize our mask instructions. | 144 # We model this separately so we can recognize our mask instructions. |
| 104 # Side-effect-wise it's identical to dp_reg, above. | 145 # Side-effect-wise it's identical to dp_reg, above. |
| 105 op(24:20) Rn(19:16) | 146 | op(24:20) Rn(19:16) |
| 106 0000x - =DataProc # AND(immediate) | 147 | 0000x - =DataProc # AND(immediate) |
| 107 0001x - =DataProc # EOR(immediate) | 148 | 0001x - =DataProc # EOR(immediate) |
| 108 0010x ~1111 =DataProc # SUB(immediate) | 149 | 0010x ~1111 =DataProc # SUB(immediate) |
| 109 " 1111 =DataProc # ADR | 150 | " 1111 =DataProc # ADR |
| 110 0011x - =DataProc # RSB(immediate) | 151 | 0011x - =DataProc # RSB(immediate) |
| 111 0100x ~1111 =DataProc # ADD(immediate) | 152 | 0100x ~1111 =DataProc # ADD(immediate) |
| 112 " 1111 =DataProc # ADR | 153 | " 1111 =DataProc # ADR |
| 113 0101x - =DataProc # ADC(immediate) | 154 | 0101x - =DataProc # ADC(immediate) |
| 114 0110x - =DataProc # SBC(immediate) | 155 | 0110x - =DataProc # SBC(immediate) |
| 115 0111x - =DataProc # RSC(immediate) | 156 | 0111x - =DataProc # RSC(immediate) |
| 116 10001 - =TestImmediate # TST(immediate) | 157 | 10001 - =TestImmediate # TST(immediate) |
| 117 10011 - =Test # TEQ(immediate) | 158 | 10011 - =Test # TEQ(immediate) |
| 118 10101 - =Test # CMP(immediate) | 159 | 10101 - =Test # CMP(immediate) |
| 119 10111 - =Test # CMN(immediate) | 160 | 10111 - =Test # CMN(immediate) |
| 120 1100x - =DataProc # ORR(immediate) | 161 | 1100x - =DataProc # ORR(immediate) |
| 121 1101x - =DataProc # MOV(immediate) | 162 | 1101x - =DataProc # MOV(immediate) |
| 122 1110x - =ImmediateBic # BIC(immediate) | 163 | 1110x - =ImmediateBic # BIC(immediate) |
| 123 1111x - =DataProc # MVN(immediate) | 164 | 1111x - =DataProc # MVN(immediate) |
| 124 | 165 +-- |
| 125 -- mult (See Section A5.2.5) | 166 |
| 126 op(23:20) | 167 +-- mult (See Section A5.2.5) |
| 127 000x =Multiply # MUL | 168 | op(23:20) |
| 128 001x =Multiply # MLA | 169 | 000x =Multiply # MUL |
| 129 0100 =LongMultiply(v6) # UMAAL | 170 | 001x =Multiply # MLA |
| 130 0101 =Undefined | 171 | 0100 =LongMultiply(v6) # UMAAL |
| 131 0110 =Multiply(v6T2) # MLS | 172 | 0101 =Undefined |
| 132 0111 =Undefined | 173 | 0110 =Multiply(v6T2) # MLS |
| 133 100x =LongMultiply # UMULL | 174 | 0111 =Undefined |
| 134 101x =LongMultiply # UMLAL | 175 | 100x =LongMultiply # UMULL |
| 135 110x =LongMultiply # SMULL | 176 | 101x =LongMultiply # UMLAL |
| 136 111x =LongMultiply # SMLAL | 177 | 110x =LongMultiply # SMULL |
| 137 | 178 | 111x =LongMultiply # SMLAL |
| 138 -- sat_add_sub (See Section A5.2.6) | 179 +-- |
| 139 op(22:21) | 180 |
| 140 00 =SatAddSub(v5TE) # QADD | 181 +-- sat_add_sub (See Section A5.2.6) |
| 141 01 =SatAddSub(v5TE) # QSUB | 182 | op(22:21) |
| 142 10 =SatAddSub(v5TE) # QDADD | 183 | 00 =SatAddSub(v5TE) # QADD |
| 143 11 =SatAddSub(v5TE) # QDSUB | 184 | 01 =SatAddSub(v5TE) # QSUB |
| 144 | 185 | 10 =SatAddSub(v5TE) # QDADD |
| 145 -- half_mult (See Section A5.2.7) | 186 | 11 =SatAddSub(v5TE) # QDSUB |
| 146 op1(22:21) op(5) | 187 +-- |
| 147 00 - =Multiply(v5TE) # SMLABB et al. | 188 |
| 148 01 0 =Multiply(v5TE) # SMLAWB et al. | 189 +-- half_mult (See Section A5.2.7) |
| 149 01 1 =Multiply(v5TE) # SMULWB et al. | 190 | op1(22:21) op(5) |
| 150 10 - =LongMultiply(v5TE) # SMLALBB | 191 | 00 - =Multiply(v5TE) # SMLABB et al. |
| 151 11 - =Multiply(v5TE) # SMULBB et al. | 192 | 01 0 =Multiply(v5TE) # SMLAWB et al. |
| 152 | 193 | 01 1 =Multiply(v5TE) # SMULWB et al. |
| 153 -- extra_load_store (See Section A5.2.8) | 194 | 10 - =LongMultiply(v5TE) # SMLALBB |
| 154 op2(6:5) op1(24:20) Rn(19:16) | 195 | 11 - =Multiply(v5TE) # SMULBB et al. |
| 155 01 xx0x0 - =StoreRegister # STRH(register) | 196 +-- |
| 156 " xx0x1 - =LoadRegister # LDRH(register) | 197 |
| 157 " xx1x0 - =StoreImmediate # STRH(immediate) | 198 +-- extra_load_store (See Section A5.2.8) |
| 158 " xx1x1 ~1111 =LoadImmediate # LDRH(immediate) | 199 | op2(6:5) op1(24:20) Rn(19:16) |
| 159 " " 1111 =LoadImmediate # LDRH(literal) | 200 | 01 xx0x0 - =StoreRegister # STRH(register) |
| 160 10 xx0x0 - =LoadDoubleR(v5TE) # LDRD(register) | 201 | " xx0x1 - =LoadRegister # LDRH(register) |
| 161 " xx0x1 - =LoadRegister # LDRSB(register) | 202 | " xx1x0 - =StoreImmediate # STRH(immediate) |
| 162 " xx1x0 ~1111 =LoadDoubleI(v5TE) # LDRD(immediate) | 203 | " xx1x1 ~1111 =LoadImmediate # LDRH(immediate) |
| 163 " " 1111 =LoadDoubleI(v5TE) # LDRD(literal) | 204 | " " 1111 =LoadImmediate # LDRH(literal) |
| 164 " xx1x1 ~1111 =LoadImmediate # LDRSB(immediate) | 205 | 10 xx0x0 - =LoadDoubleR(v5TE) # LDRD(register) |
| 165 " " 1111 =LoadImmediate # LDRSB(literal) | 206 | " xx0x1 - =LoadRegister # LDRSB(register) |
| 166 11 xx0x0 - =StoreRegister # STRD(register) | 207 | " xx1x0 ~1111 =LoadDoubleI(v5TE) # LDRD(immediate) |
| 167 " xx0x1 - =LoadRegister # LDRSH(register) | 208 | " " 1111 =LoadDoubleI(v5TE) # LDRD(literal) |
| 168 " xx1x0 - =StoreImmediate # STRD(immediate) | 209 | " xx1x1 ~1111 =LoadImmediate # LDRSB(immediate) |
| 169 " xx1x1 ~1111 =LoadImmediate # LDRSH(immediate) | 210 | " " 1111 =LoadImmediate # LDRSB(literal) |
| 170 " " 1111 =LoadImmediate # LDRSH(literal) | 211 | 11 xx0x0 - =StoreRegister # STRD(register) |
| 212 | " xx0x1 - =LoadRegister # LDRSH(register) |
| 213 | " xx1x0 - =StoreImmediate # STRD(immediate) |
| 214 | " xx1x1 ~1111 =LoadImmediate # LDRSH(immediate) |
| 215 | " " 1111 =LoadImmediate # LDRSH(literal) |
| 216 +-- |
| 171 | 217 |
| 172 # Unprivileged load-store table omitted: modeled as Forbidden. | 218 # Unprivileged load-store table omitted: modeled as Forbidden. |
| 173 # They are not expected in user code. | 219 # They are not expected in user code. |
| 174 | 220 |
| 175 -- sync (See Section A5.2.10) | 221 +-- sync (See Section A5.2.10) |
| 176 op(23:20) | 222 | op(23:20) |
| 177 0x00 =Deprecated # SWP, SWPB TODO(cbiffle): model these? | 223 | 0x00 =Deprecated # SWP, SWPB TODO(cbiffle): model these? |
| 178 1000 =StoreExclusive(v6) # STREX | 224 | 1000 =StoreExclusive(v6) # STREX |
| 179 1001 =LoadExclusive(v6) # LDREX | 225 | 1001 =LoadExclusive(v6) # LDREX |
| 180 1010 =StoreExclusive(v6K) # STREXD | 226 | 1010 =StoreExclusive(v6K) # STREXD |
| 181 1011 =LoadDoubleExclusive(v6K) # LDREXD | 227 | 1011 =LoadDoubleExclusive(v6K) # LDREXD |
| 182 1100 =StoreExclusive(v6K) # STREXB | 228 | 1100 =StoreExclusive(v6K) # STREXB |
| 183 1101 =LoadExclusive(v6K) # LDREXB | 229 | 1101 =LoadExclusive(v6K) # LDREXB |
| 184 1110 =StoreExclusive(v6K) # STREXH | 230 | 1110 =StoreExclusive(v6K) # STREXH |
| 185 1111 =LoadExclusive(v6K) # LDREXH | 231 | 1111 =LoadExclusive(v6K) # LDREXH |
| 186 - =Undefined(v6K) # Note on page A5-16 | 232 | - =Undefined(v6K) # Note on page A5-16 |
| 187 | 233 +-- |
| 188 -- msr_and_hints (See Section A5.2.11) | 234 |
| 189 op(22) op1(19:16) op2(7:0) | 235 +-- msr_and_hints (See Section A5.2.11) |
| 190 0 0000 0000_0000 =EffectiveNoOp(v6K,v6T2) # NOP | 236 | op(22) op1(19:16) op2(7:0) |
| 191 " " 0000_0001 =EffectiveNoOp(v6K) # YIELD | 237 | 0 0000 0000_0000 =EffectiveNoOp(v6K,v6T2) # NOP |
| 192 " " 0000_0010 =EffectiveNoOp(v6K) # WFE | 238 | " " 0000_0001 =EffectiveNoOp(v6K) # YIELD |
| 193 " " 0000_0011 =EffectiveNoOp(v6K) # WFI | 239 | " " 0000_0010 =EffectiveNoOp(v6K) # WFE |
| 194 " " 0000_0100 =EffectiveNoOp(v6K) # SEV | 240 | " " 0000_0011 =EffectiveNoOp(v6K) # WFI |
| 195 " " 1111_xxxx =EffectiveNoOp(v7) # DBG | 241 | " " 0000_0100 =EffectiveNoOp(v6K) # SEV |
| 196 " 0100 - =MoveToStatusRegister # MSR(immediate) | 242 | " " 1111_xxxx =EffectiveNoOp(v7) # DBG |
| 197 " 1x00 - =MoveToStatusRegister # MSR(immediate) | 243 | " 0100 - =MoveToStatusRegister # MSR(immediate) |
| 198 " xx01 - =Forbidden # MSR(immediate), ring0 version | 244 | " 1x00 - =MoveToStatusRegister # MSR(immediate) |
| 199 " xx1x - =Forbidden # MSR(immediate), ring0 version | 245 | " xx01 - =Forbidden # MSR(immediate), ring0 version |
| 200 1 - - =Forbidden # MSR(immediate), ring0 version | 246 | " xx1x - =Forbidden # MSR(immediate), ring0 version |
| 201 - - - =Forbidden # Unallocated hints, page A5-17 | 247 | 1 - - =Forbidden # MSR(immediate), ring0 version |
| 202 | 248 | - - - =Forbidden # Unallocated hints, page A5-17 |
| 203 -- misc (See Section A5.2.12) | 249 +-- |
| 204 op2(6:4) op(22:21) op1(19:16) | 250 |
| 205 000 x0 xxxx =DataProc # MRS | 251 +-- misc (See Section A5.2.12) |
| 206 " 01 xx00 =MoveToStatusRegister # MSR(register) | 252 | op2(6:4) op(22:21) op1(19:16) |
| 207 " 01 xx01 =Forbidden # MSR(register), ring0 version | 253 | 000 x0 xxxx =DataProc # MRS |
| 208 " " xx1x =Forbidden # MSR(register), ring0 version | 254 | " 01 xx00 =MoveToStatusRegister # MSR(register) |
| 209 " 11 - =Forbidden # MSR(register), ring0 version | 255 | " 01 xx01 =Forbidden # MSR(register), ring0 version |
| 210 001 01 - =BxBlx(v4T) # BX | 256 | " " xx1x =Forbidden # MSR(register), ring0 version |
| 211 " 11 - =DataProc(v6) # CLZ | 257 | " 11 - =Forbidden # MSR(register), ring0 version |
| 212 010 01 - =Forbidden # BXJ | 258 | 001 01 - =BxBlx(v4T) # BX |
| 213 011 01 - =BxBlx(v5T) # BLX(register) | 259 | " 11 - =DataProc(v6) # CLZ |
| 214 101 - - ->sat_add_sub | 260 | 010 01 - =Forbidden # BXJ |
| 215 111 01 - =Breakpoint(v5T) # BKPT | 261 | 011 01 - =BxBlx(v5T) # BLX(register) |
| 216 111 11 - =Forbidden # SMC | 262 | 101 - - ->sat_add_sub |
| 217 - - - =Undefined # Note on page A5-18 | 263 | 111 01 - =Breakpoint(v5T) # BKPT |
| 218 | 264 | 111 11 - =Forbidden # SMC |
| 219 -- load_store_word_byte (See Section A5.3) | 265 | - - - =Undefined # Note on page A5-18 |
| 266 +-- |
| 267 |
| 268 +-- load_store_word_byte (See Section A5.3) |
| 220 # The source table's "x not y" rules are implicit in the decoder, since we | 269 # The source table's "x not y" rules are implicit in the decoder, since we |
| 221 # evaluate patterns in order of specificity, not table order. | 270 # evaluate patterns in order of specificity, not table order. |
| 222 A(25) op1(24:20) B(4) Rn(19:16) | 271 | A(25) op1(24:20) B(4) Rn(19:16) |
| 223 0 xx0x0 - - =StoreImmediate # STR(immediate) | 272 | 0 xx0x0 - - =StoreImmediate # STR(immediate) |
| 224 1 xx0x0 0 - =StoreRegister # STR(register) | 273 | 1 xx0x0 0 - =StoreRegister # STR(register) |
| 225 0 0x010 - - =Forbidden # STRT | 274 | 0 0x010 - - =Forbidden # STRT |
| 226 1 0x010 0 - " | 275 | 1 0x010 0 - " |
| 227 0 xx0x1 - ~1111 =LoadImmediate # LDR(immediate) | 276 | 0 xx0x1 - ~1111 =LoadImmediate # LDR(immediate) |
| 228 " " " 1111 =LoadImmediate # LDR(literal) | 277 | " " " 1111 =LoadImmediate # LDR(literal) |
| 229 1 xx0x1 0 - =LoadRegister # LDR(register) | 278 | 1 xx0x1 0 - =LoadRegister # LDR(register) |
| 230 0 0x011 - - =Forbidden # LDRT | 279 | 0 0x011 - - =Forbidden # LDRT |
| 231 1 0x011 0 - " | 280 | 1 0x011 0 - " |
| 232 0 xx1x0 - - =StoreImmediate # STRB(immediate) | 281 | 0 xx1x0 - - =StoreImmediate # STRB(immediate) |
| 233 1 xx1x0 0 - =StoreRegister # STRB(register) | 282 | 1 xx1x0 0 - =StoreRegister # STRB(register) |
| 234 0 0x110 - - =Forbidden # STRBT | 283 | 0 0x110 - - =Forbidden # STRBT |
| 235 1 0x110 0 - " | 284 | 1 0x110 0 - " |
| 236 0 xx1x1 - ~1111 =LoadImmediate # LDRB(immediate) | 285 | 0 xx1x1 - ~1111 =LoadImmediate # LDRB(immediate) |
| 237 " " " 1111 =LoadImmediate # LDRB(literal) | 286 | " " " 1111 =LoadImmediate # LDRB(literal) |
| 238 1 xx1x1 0 - =LoadRegister # LDRB(register) | 287 | 1 xx1x1 0 - =LoadRegister # LDRB(register) |
| 239 0 0x111 - - =Forbidden # LDRBT | 288 | 0 0x111 - - =Forbidden # LDRBT |
| 240 1 0x111 0 - " | 289 | 1 0x111 0 - " |
| 241 | 290 +-- |
| 242 -- media (See Section A5.4) | 291 |
| 243 op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) | 292 +-- media (See Section A5.4) |
| 244 000xx - - - ->parallel_add_sub # signed | 293 | op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) |
| 245 001xx - - - ->parallel_add_sub # unsigned | 294 | 000xx - - - ->parallel_add_sub # signed |
| 246 01xxx - - - ->pack_sat_rev | 295 | 001xx - - - ->parallel_add_sub # unsigned |
| 247 10xxx - - - ->signed_mult | 296 | 01xxx - - - ->pack_sat_rev |
| 248 11000 000 1111 - =Multiply(v6) # USAD8 | 297 | 10xxx - - - ->signed_mult |
| 249 " 000 ~1111 - =Multiply(v6) # USADA8 | 298 | 11000 000 1111 - =Multiply(v6) # USAD8 |
| 250 1101x x10 - - =DataProc(v6T2) # SBFX | 299 | " 000 ~1111 - =Multiply(v6) # USADA8 |
| 251 1110x x00 - 1111 =DataProc(v6T2) # BFC | 300 | 1101x x10 - - =DataProc(v6T2) # SBFX |
| 252 " x00 - ~1111 =DataProc(v6T2) # BFI | 301 | 1110x x00 - 1111 =DataProc(v6T2) # BFC |
| 253 1111x x10 - - =DataProc(v6T2) # UBFX | 302 | " x00 - ~1111 =DataProc(v6T2) # BFI |
| 254 11111 111 - - =Roadblock # Permanently Undefined | 303 | 1111x x10 - - =DataProc(v6T2) # UBFX |
| 255 - - - - =Undefined # Note on page A5-21 | 304 | 11111 111 - - =Roadblock # Permanently Undefined |
| 256 | 305 | - - - - =Undefined # Note on page A5-21 |
| 257 -- parallel_add_sub (See Sections A5.4.1, A5.4.2) | 306 +-- |
| 307 |
| 308 +-- parallel_add_sub (See Sections A5.4.1, A5.4.2) |
| 258 # N.B. These instructions are defined as UNPREDICTABLE when using r15 as any | 309 # N.B. These instructions are defined as UNPREDICTABLE when using r15 as any |
| 259 # operand. This "UNPREDICTABLE" means the result is not defined, and is very | 310 # operand. This "UNPREDICTABLE" means the result is not defined, and is very |
| 260 # different than UNDEFINED. Since we don't allow these ops to write r15, and | 311 # different than UNDEFINED. Since we don't allow these ops to write r15, and |
| 261 # don't consider them suitable for producing a sandboxed address, we don't need | 312 # don't consider them suitable for producing a sandboxed address, we don't need |
| 262 # the result to be defined, and we don't model this here. | 313 # the result to be defined, and we don't model this here. |
| 263 op1(21:20) op2(7:5) | 314 | op1(21:20) op2(7:5) |
| 264 01 000 =DataProc(v6) # UADD16 | 315 | 01 000 =DataProc(v6) # UADD16 |
| 265 01 001 =DataProc(v6) # UASX | 316 | 01 001 =DataProc(v6) # UASX |
| 266 01 010 =DataProc(v6) # USAX | 317 | 01 010 =DataProc(v6) # USAX |
| 267 01 011 =DataProc(v6) # USUB16 | 318 | 01 011 =DataProc(v6) # USUB16 |
| 268 01 100 =DataProc(v6) # UADD8 | 319 | 01 100 =DataProc(v6) # UADD8 |
| 269 01 111 =DataProc(v6) # USUB8 | 320 | 01 111 =DataProc(v6) # USUB8 |
| 270 10 000 =DataProc(v6) # UQADD16 | 321 | 10 000 =DataProc(v6) # UQADD16 |
| 271 10 001 =DataProc(v6) # UQASX | 322 | 10 001 =DataProc(v6) # UQASX |
| 272 10 010 =DataProc(v6) # UQSAX | 323 | 10 010 =DataProc(v6) # UQSAX |
| 273 10 011 =DataProc(v6) # UQSUB16 | 324 | 10 011 =DataProc(v6) # UQSUB16 |
| 274 10 100 =DataProc(v6) # UQADD8 | 325 | 10 100 =DataProc(v6) # UQADD8 |
| 275 10 111 =DataProc(v6) # UQSUB8 | 326 | 10 111 =DataProc(v6) # UQSUB8 |
| 276 11 000 =DataProc(v6) # UHADD16 | 327 | 11 000 =DataProc(v6) # UHADD16 |
| 277 11 001 =DataProc(v6) # UHASX | 328 | 11 001 =DataProc(v6) # UHASX |
| 278 11 010 =DataProc(v6) # UHSAX | 329 | 11 010 =DataProc(v6) # UHSAX |
| 279 11 011 =DataProc(v6) # UHSUB16 | 330 | 11 011 =DataProc(v6) # UHSUB16 |
| 280 11 100 =DataProc(v6) # UHADD8 | 331 | 11 100 =DataProc(v6) # UHADD8 |
| 281 11 111 =DataProc(v6) # UHSUB8 | 332 | 11 111 =DataProc(v6) # UHSUB8 |
| 282 - - =Undefined # Note on page A5-23 | 333 | - - =Undefined # Note on page A5-23 |
| 283 | 334 +-- |
| 284 -- pack_sat_rev (See Section A5.4.3) | 335 |
| 285 op1(22:20) op2(7:5) A(19:16) | 336 +-- pack_sat_rev (See Section A5.4.3) |
| 286 000 xx0 - =PackSatRev(v6) # PKH | 337 | op1(22:20) op2(7:5) A(19:16) |
| 287 01x xx0 - =PackSatRev(v6) # SSAT | 338 | 000 xx0 - =PackSatRev(v6) # PKH |
| 288 11x xx0 - =PackSatRev(v6) # USAT | 339 | 01x xx0 - =PackSatRev(v6) # SSAT |
| 289 000 011 ~1111 =PackSatRev(v6) # SXTAB16 | 340 | 11x xx0 - =PackSatRev(v6) # USAT |
| 290 " " 1111 =PackSatRev(v6) # SXTB16 | 341 | 000 011 ~1111 =PackSatRev(v6) # SXTAB16 |
| 291 " 101 - =PackSatRev(v6) # SEL | 342 | " " 1111 =PackSatRev(v6) # SXTB16 |
| 292 010 001 - =PackSatRev(v6) # SSAT16 | 343 | " 101 - =PackSatRev(v6) # SEL |
| 293 " 011 ~1111 =PackSatRev(v6) # SXTAB | 344 | 010 001 - =PackSatRev(v6) # SSAT16 |
| 294 " " 1111 =PackSatRev(v6) # SXTB | 345 | " 011 ~1111 =PackSatRev(v6) # SXTAB |
| 295 011 001 - =PackSatRev(v6) # REV | 346 | " " 1111 =PackSatRev(v6) # SXTB |
| 296 " 011 ~1111 =PackSatRev(v6) # SXTAH | 347 | 011 001 - =PackSatRev(v6) # REV |
| 297 " " 1111 =PackSatRev(v6) # SXTH | 348 | " 011 ~1111 =PackSatRev(v6) # SXTAH |
| 298 011 101 - =PackSatRev(v6) # REV16 | 349 | " " 1111 =PackSatRev(v6) # SXTH |
| 299 100 011 ~1111 =PackSatRev(v6) # UXTAB16 | 350 | 011 101 - =PackSatRev(v6) # REV16 |
| 300 " " 1111 =PackSatRev(v6) # UXTB16 | 351 | 100 011 ~1111 =PackSatRev(v6) # UXTAB16 |
| 301 110 001 - =PackSatRev(v6) # USAT16 | 352 | " " 1111 =PackSatRev(v6) # UXTB16 |
| 302 " 011 ~1111 =PackSatRev(v6) # UXTAB | 353 | 110 001 - =PackSatRev(v6) # USAT16 |
| 303 " " 1111 =PackSatRev(v6) # UXTB | 354 | " 011 ~1111 =PackSatRev(v6) # UXTAB |
| 304 111 001 - =PackSatRev(v6T2) # RBIT | 355 | " " 1111 =PackSatRev(v6) # UXTB |
| 305 " 011 ~1111 =PackSatRev(v6) # UXTAH | 356 | 111 001 - =PackSatRev(v6T2) # RBIT |
| 306 " " 1111 =PackSatRev(v6) # UXTH | 357 | " 011 ~1111 =PackSatRev(v6) # UXTAH |
| 307 " 101 - =PackSatRev(v6) # REVSH | 358 | " " 1111 =PackSatRev(v6) # UXTH |
| 308 - - - =Undefined # Note on page A5-24 | 359 | " 101 - =PackSatRev(v6) # REVSH |
| 309 | 360 | - - - =Undefined # Note on page A5-24 |
| 310 -- signed_mult (See Section A5.4.4) | 361 +-- |
| 311 op1(22:20) op2(7:5) A(15:12) | 362 |
| 312 000 00x ~1111 =Multiply(v6T2) # SMLAD | 363 +-- signed_mult (See Section A5.4.4) |
| 313 " " 1111 =Multiply(v6T2) # SMUAD | 364 | op1(22:20) op2(7:5) A(15:12) |
| 314 " 01x ~1111 =Multiply(v6T2) # SMLSD | 365 | 000 00x ~1111 =Multiply(v6T2) # SMLAD |
| 315 " " - =Multiply(v6T2) # SMUSD | 366 | " " 1111 =Multiply(v6T2) # SMUAD |
| 316 100 00x - =LongMultiply(v6T2) # SMLALD | 367 | " 01x ~1111 =Multiply(v6T2) # SMLSD |
| 317 " 01x - =LongMultiply(v6T2) # SMLSLD | 368 | " " - =Multiply(v6T2) # SMUSD |
| 318 101 00x ~1111 =Multiply(v6T2) # SMMLA | 369 | 100 00x - =LongMultiply(v6T2) # SMLALD |
| 319 " " 1111 =Multiply(v6T2) # SMMUL | 370 | " 01x - =LongMultiply(v6T2) # SMLSLD |
| 320 " 11x - =Multiply(v6T2) # SMMLS | 371 | 101 00x ~1111 =Multiply(v6T2) # SMMLA |
| 321 - - - =Undefined # Note on page A5-26 | 372 | " " 1111 =Multiply(v6T2) # SMMUL |
| 322 | 373 | " 11x - =Multiply(v6T2) # SMMLS |
| 323 -- branch_block_xfer (See Section A5.5) | 374 | - - - =Undefined # Note on page A5-26 |
| 324 op(25:20) R(15) | 375 +-- |
| 325 0000x0 - =StoreImmediate # STMDA / STMED | 376 |
| 326 0000x1 - =LoadMultiple # LDMDA / LDMFA | 377 +-- branch_block_xfer (See Section A5.5) |
| 327 0010x0 - =StoreImmediate # STM / STMIA / STMEA | 378 | op(25:20) R(15) |
| 328 0010x1 - =LoadMultiple # LDM / LDMIA / LDMFD | 379 | 0000x0 - =StoreImmediate # STMDA / STMED |
| 329 0100x0 - =StoreImmediate # STMDB / STMFD | 380 | 0000x1 - =LoadMultiple # LDMDA / LDMFA |
| 330 0100x1 - =LoadMultiple # LDMDB / LDMEA | 381 | 0010x0 - =StoreImmediate # STM / STMIA / STMEA |
| 331 0110x0 - =StoreImmediate # STMIB / STMFA | 382 | 0010x1 - =LoadMultiple # LDM / LDMIA / LDMFD |
| 332 0110x1 - =LoadMultiple # LDMIB / LDMED | 383 | 0100x0 - =StoreImmediate # STMDB / STMFD |
| 333 0xx1x0 - =Forbidden # STM, ring0 version | 384 | 0100x1 - =LoadMultiple # LDMDB / LDMEA |
| 334 0xx1x1 0 =Forbidden # LDM, ring0 version | 385 | 0110x0 - =StoreImmediate # STMIB / STMFA |
| 335 " 1 =Forbidden # LDM, exception return | 386 | 0110x1 - =LoadMultiple # LDMIB / LDMED |
| 336 10xxxx - =Branch # B | 387 | 0xx1x0 - =Forbidden # STM, ring0 version |
| 337 11xxxx - =Branch # BL | 388 | 0xx1x1 0 =Forbidden # LDM, ring0 version |
| 338 | 389 | " 1 =Forbidden # LDM, exception return |
| 339 -- super_cop (See Section A5.6) | 390 | 10xxxx - =Branch # B |
| 391 | 11xxxx - =Branch # BL |
| 392 +-- |
| 393 |
| 394 +-- super_cop (See Section A5.6) |
| 340 # N.B. The ISA spec models the "Advanced SIMD" operations separately from other | 395 # N.B. The ISA spec models the "Advanced SIMD" operations separately from other |
| 341 # coprocessor operations. We don't, so the coproc column is omitted. | 396 # coprocessor operations. We don't, so the coproc column is omitted. |
| 342 op1(25:20) op(4) Rn(19:16) | 397 | op1(25:20) op(4) Rn(19:16) |
| 343 0xxxx0 - - =StoreCoprocessor # STC | 398 | 0xxxx0 - - =StoreCoprocessor # STC |
| 344 0xxxx1 - ~1111 =LoadCoprocessor # LDC(immediate), LDC2(immediate) | 399 | 0xxxx1 - ~1111 =LoadCoprocessor # LDC(immediate), LDC2(immediate
) |
| 345 " " 1111 =LoadCoprocessor # LDC(literal), LDC2(literal) | 400 | " " 1111 =LoadCoprocessor # LDC(literal), LDC2(literal) |
| 346 00000x - - =Undefined | 401 | 00000x - - =Undefined |
| 347 000100 - - =CoprocessorOp(v5TE) # MCRR, MCRR2 | 402 | 000100 - - =CoprocessorOp(v5TE) # MCRR, MCRR2 |
| 348 000101 - - =MoveDoubleFromCoprocessor(v5TE) # MRRC, MRRC2 | 403 | 000101 - - =MoveDoubleFromCoprocessor(v5TE) # MRRC, MRRC2 |
| 349 10xxxx 0 - =CoprocessorOp # CDP, CDP2 | 404 | 10xxxx 0 - =CoprocessorOp # CDP, CDP2 |
| 350 10xxx0 1 - =CoprocessorOp # MCR, MCR2 | 405 | 10xxx0 1 - =CoprocessorOp # MCR, MCR2 |
| 351 10xxx1 1 - =MoveFromCoprocessor # MRC, MRC2 | 406 | 10xxx1 1 - =MoveFromCoprocessor # MRC, MRC2 |
| 352 11xxxx - - =Forbidden # SVC (nee SWI) | 407 | 11xxxx - - =Forbidden # SVC (nee SWI) |
| 353 | 408 +-- |
| 354 -- unconditional (See Section A5.7) | 409 |
| 355 op1(27:20) op(4) Rn(19:16) | 410 +-- unconditional (See Section A5.7) |
| 356 0xxx_xxxx - - ->misc_hints_simd | 411 | op1(27:20) op(4) Rn(19:16) |
| 357 100x_x1x0 - - =Forbidden # SRS | 412 | 0xxx_xxxx - - ->misc_hints_simd |
| 358 100x_x0x1 - - =Forbidden # RFE | 413 | 100x_x1x0 - - =Forbidden # SRS |
| 359 101x_xxxx - - =Forbidden # BLX(immediate) | 414 | 100x_x0x1 - - =Forbidden # RFE |
| 360 1100_0x11 - ~1111 =LoadCoprocessor(v5) # LDC(immed), LDC2(immed) | 415 | 101x_xxxx - - =Forbidden # BLX(immediate) |
| 361 1100_1xx1 - 1111 =LoadCoprocessor(v5) # LDC(literal), LDC2(literal) | 416 | 1100_0x11 - ~1111 =LoadCoprocessor(v5) # LDC(immed), LDC2(immed) |
| 362 1101_xxx1 - 1111 =LoadCoprocessor(v5) # LDC(literal), LDC2(literal) | 417 | 1100_1xx1 - 1111 =LoadCoprocessor(v5) # LDC(literal), LDC2(literal
) |
| 363 1100_0x10 - - =StoreCoprocessor(v5) # STC, STC2 | 418 | 1101_xxx1 - 1111 =LoadCoprocessor(v5) # LDC(literal), LDC2(literal
) |
| 364 1100_1xx0 - - " | 419 | 1100_0x10 - - =StoreCoprocessor(v5) # STC, STC2 |
| 365 1101_xxx0 - - " | 420 | 1100_1xx0 - - " |
| 366 1100_0100 - - =CoprocessorOp(v6) # MCRR, MCRR2 | 421 | 1101_xxx0 - - " |
| 367 1100_0101 - - =MoveDoubleFromCoprocessor(v6) # MRRC, MRRC2 | 422 | 1100_0100 - - =CoprocessorOp(v6) # MCRR, MCRR2 |
| 368 1110_xxxx 0 - =CoprocessorOp(v5) # CDP, CDP2 | 423 | 1100_0101 - - =MoveDoubleFromCoprocessor(v6) # MRRC, MRRC2 |
| 369 1110_xxx0 1 - =CoprocessorOp(v5) # MCR, MCR2 | 424 | 1110_xxxx 0 - =CoprocessorOp(v5) # CDP, CDP2 |
| 370 1110_xxx1 1 - =MoveFromCoprocessor(v5) # MRC, MRC2 | 425 | 1110_xxx0 1 - =CoprocessorOp(v5) # MCR, MCR2 |
| 371 - - - =Undefined # Note on page A5-30 | 426 | 1110_xxx1 1 - =MoveFromCoprocessor(v5) # MRC, MRC2 |
| 372 | 427 | - - - =Undefined # Note on page A5-30 |
| 373 -- misc_hints_simd (See Section A5.7.1) | 428 +-- |
| 374 op1(26:20) op2(7:4) Rn(19:16) | 429 |
| 375 001_0000 xx0x xxx0 =Forbidden # CPS | 430 +-- misc_hints_simd (See Section A5.7.1) |
| 376 001_0000 0000 xxx1 =Forbidden # SETEND | 431 | op1(26:20) op2(7:4) Rn(19:16) |
| 377 01x_xxxx - - ->simd_dp | 432 | 001_0000 xx0x xxx0 =Forbidden # CPS |
| 378 100_xxx0 - - ->simd_load_store | 433 | 001_0000 0000 xxx1 =Forbidden # SETEND |
| 379 100_x001 - - =EffectiveNoOp(MP) # Unallocated memory hint | 434 | 01x_xxxx - - ->simd_dp |
| 380 100_x101 - - =EffectiveNoOp(v7) # PLI(immediate, literal) | 435 | 100_xxx0 - - ->simd_load_store |
| 381 101_x001 - ~1111 =EffectiveNoOp(MP) # PLDW(immediate) | 436 | 100_x001 - - =EffectiveNoOp(MP) # Unallocated memory hint |
| 382 " - 1111 =Unpredictable | 437 | 100_x101 - - =EffectiveNoOp(v7) # PLI(immediate, literal) |
| 383 101_x101 - ~1111 =EffectiveNoOp(v5TE) # PLD(immediate) | 438 | 101_x001 - ~1111 =EffectiveNoOp(MP) # PLDW(immediate) |
| 384 101_x101 - 1111 =EffectiveNoOp(v5TE) # PLD(literal) | 439 | " - 1111 =Unpredictable |
| 385 101_0111 0001 - =EffectiveNoOp(v6K) # CLREX | 440 | 101_x101 - ~1111 =EffectiveNoOp(v5TE) # PLD(immediate) |
| 386 " 0100 - =EffectiveNoOp(v6T2) # DSB | 441 | 101_x101 - 1111 =EffectiveNoOp(v5TE) # PLD(literal) |
| 387 " 0101 - =EffectiveNoOp(v7) # DMB | 442 | 101_0111 0001 - =EffectiveNoOp(v6K) # CLREX |
| 388 " 0110 - =EffectiveNoOp(v6T2) # ISB | 443 | " 0100 - =EffectiveNoOp(v6T2) # DSB |
| 389 10x_xx11 - - =Unpredictable | 444 | " 0101 - =EffectiveNoOp(v7) # DMB |
| 390 110_x001 xxx0 - =EffectiveNoOp(MP) # Unallocated memory hint | 445 | " 0110 - =EffectiveNoOp(v6T2) # ISB |
| 391 110_x101 xxx0 - =EffectiveNoOp(v7) # PLI(register) | 446 | 10x_xx11 - - =Unpredictable |
| 392 111_x001 xxx0 - =EffectiveNoOp(MP) # PLDW(register) | 447 | 110_x001 xxx0 - =EffectiveNoOp(MP) # Unallocated memory hint |
| 393 111_x101 xxx0 - =EffectiveNoOp(v5TE) # PLD(register) | 448 | 110_x101 xxx0 - =EffectiveNoOp(v7) # PLI(register) |
| 394 11x_xx11 xxx0 - =Unpredictable | 449 | 111_x001 xxx0 - =EffectiveNoOp(MP) # PLDW(register) |
| 395 - - - =Undefined # Note on page A5-31 | 450 | 111_x101 xxx0 - =EffectiveNoOp(v5TE) # PLD(register) |
| 396 | 451 | 11x_xx11 xxx0 - =Unpredictable |
| 397 -- simd_dp (See Section A7.4) | 452 | - - - =Undefined # Note on page A5-31 |
| 398 U(24) A(23:19) B(11:8) C(7:4) | 453 +-- |
| 399 - 0xxxx - - ->simd_dp_3same | 454 |
| 400 " 1x000 - 0xx1 ->simd_dp_1imm | 455 +-- simd_dp (See Section A7.4) |
| 401 " 1x001 - 0xx1 ->simd_dp_2shift | 456 | U(24) A(23:19) B(11:8) C(7:4) |
| 402 " 1x01x - 0xx1 " | 457 | - 0xxxx - - ->simd_dp_3same |
| 403 " 1x1xx - 0xx1 " | 458 | " 1x000 - 0xx1 ->simd_dp_1imm |
| 404 " 1xxxx - 1xx1 " | 459 | " 1x001 - 0xx1 ->simd_dp_2shift |
| 405 " 1x0xx - x0x0 ->simd_dp_3diff | 460 | " 1x01x - 0xx1 " |
| 406 " 1x10x - x0x0 " | 461 | " 1x1xx - 0xx1 " |
| 407 " 1x0xx - x1x0 ->simd_dp_2scalar | 462 | " 1xxxx - 1xx1 " |
| 408 " 1x10x - x1x0 " | 463 | " 1x0xx - x0x0 ->simd_dp_3diff |
| 409 0 1x11x - xxx0 =EffectiveNoOp # VEXT | 464 | " 1x10x - x0x0 " |
| 410 1 1x11x 0xxx xxx0 ->simd_dp_2misc | 465 | " 1x0xx - x1x0 ->simd_dp_2scalar |
| 411 " " 10xx xxx0 =EffectiveNoOp # VTBL, VTBX | 466 | " 1x10x - x1x0 " |
| 412 " " 1100 0xx0 =EffectiveNoOp # VDUP(scalar) | 467 | 0 1x11x - xxx0 =EffectiveNoOp # VEXT |
| 413 - - - - =Undefined # Note on page A7-10 | 468 | 1 1x11x 0xxx xxx0 ->simd_dp_2misc |
| 414 | 469 | " " 10xx xxx0 =EffectiveNoOp # VTBL, VTBX |
| 415 -- simd_dp_3same (See Section A7.4.1) | 470 | " " 1100 0xx0 =EffectiveNoOp # VDUP(scalar) |
| 471 | - - - - =Undefined # Note on page A7-10 |
| 472 +-- |
| 473 |
| 474 +-- simd_dp_3same (See Section A7.4.1) |
| 416 # This table is much larger than it needs to be, since we don't model these | 475 # This table is much larger than it needs to be, since we don't model these |
| 417 # ops (they work entirely in a separate register set, and cannot access memory). | 476 # ops (they work entirely in a separate register set, and cannot access memory). |
| 418 # Unfortunately there are some UNDEFINED holes here, so we have to be precise. | 477 # Unfortunately there are some UNDEFINED holes here, so we have to be precise. |
| 419 A(11:8) B(4) U(24) C(21:20) | 478 | A(11:8) B(4) U(24) C(21:20) |
| 420 0000 0 - - =EffectiveNoOp # VHADD | 479 | 0000 0 - - =EffectiveNoOp # VHADD |
| 421 " 1 - - =EffectiveNoOp # VQADD | 480 | " 1 - - =EffectiveNoOp # VQADD |
| 422 0001 0 - - =EffectiveNoOp # VRHADD | 481 | 0001 0 - - =EffectiveNoOp # VRHADD |
| 423 " 1 0 00 =EffectiveNoOp # VAND(register) | 482 | " 1 0 00 =EffectiveNoOp # VAND(register) |
| 424 " " " 01 =EffectiveNoOp # VBIC(register) | 483 | " " " 01 =EffectiveNoOp # VBIC(register) |
| 425 " " " 10 =EffectiveNoOp # VORR(register) | 484 | " " " 10 =EffectiveNoOp # VORR(register) |
| 426 " " " 11 =EffectiveNoOp # VORN(register) | 485 | " " " 11 =EffectiveNoOp # VORN(register) |
| 427 " 1 1 00 =EffectiveNoOp # VEOR(register) | 486 | " 1 1 00 =EffectiveNoOp # VEOR(register) |
| 428 " " " 01 =EffectiveNoOp # VBSL | 487 | " " " 01 =EffectiveNoOp # VBSL |
| 429 " " " 10 =EffectiveNoOp # VBIT | 488 | " " " 10 =EffectiveNoOp # VBIT |
| 430 " " " 11 =EffectiveNoOp # VBIF | 489 | " " " 11 =EffectiveNoOp # VBIF |
| 431 0010 0 - - =EffectiveNoOp # VHSUB | 490 | 0010 0 - - =EffectiveNoOp # VHSUB |
| 432 " 1 - - =EffectiveNoOp # VQSUB | 491 | " 1 - - =EffectiveNoOp # VQSUB |
| 433 0011 0 - - =EffectiveNoOp # VCGT(register) | 492 | 0011 0 - - =EffectiveNoOp # VCGT(register) |
| 434 " 1 - - =EffectiveNoOp # VCGE(register) | 493 | " 1 - - =EffectiveNoOp # VCGE(register) |
| 435 0100 0 - - =EffectiveNoOp # VSHL(register) | 494 | 0100 0 - - =EffectiveNoOp # VSHL(register) |
| 436 " 1 - - =EffectiveNoOp # VQSHL(register) | 495 | " 1 - - =EffectiveNoOp # VQSHL(register) |
| 437 0101 0 - - =EffectiveNoOp # VRSHL(register) | 496 | 0101 0 - - =EffectiveNoOp # VRSHL(register) |
| 438 " 1 - - =EffectiveNoOp # VQRSHL(register) | 497 | " 1 - - =EffectiveNoOp # VQRSHL(register) |
| 439 0110 - - - =EffectiveNoOp # VMAX, VMIN (integer) | 498 | 0110 - - - =EffectiveNoOp # VMAX, VMIN (integer) |
| 440 0111 0 - - =EffectiveNoOp # VABD, VABDL (integer) | 499 | 0111 0 - - =EffectiveNoOp # VABD, VABDL (integer) |
| 441 " 1 - - =EffectiveNoOp # VABA, VABAL | 500 | " 1 - - =EffectiveNoOp # VABA, VABAL |
| 442 1000 0 0 - =EffectiveNoOp # VADD(integer) | 501 | 1000 0 0 - =EffectiveNoOp # VADD(integer) |
| 443 " " 1 - =EffectiveNoOp # VSUB(integer) | 502 | " " 1 - =EffectiveNoOp # VSUB(integer) |
| 444 " 1 0 - =EffectiveNoOp # VTST(integer) | 503 | " 1 0 - =EffectiveNoOp # VTST(integer) |
| 445 " " 1 - =EffectiveNoOp # VCEQ(integer) | 504 | " " 1 - =EffectiveNoOp # VCEQ(integer) |
| 446 1001 0 - - =EffectiveNoOp # VMLA, VMLAL, VMLS, VMLSL (integer) | 505 | 1001 0 - - =EffectiveNoOp # VMLA, VMLAL, VMLS, VMLSL (intege
r) |
| 447 " 1 - - =EffectiveNoOp # VMUL, VMULL(integer/poly) | 506 | " 1 - - =EffectiveNoOp # VMUL, VMULL(integer/poly) |
| 448 1010 - - - =EffectiveNoOp # VPMAX, VPMIN(integer) | 507 | 1010 - - - =EffectiveNoOp # VPMAX, VPMIN(integer) |
| 449 1011 0 0 - =EffectiveNoOp # VQDMULH | 508 | 1011 0 0 - =EffectiveNoOp # VQDMULH |
| 450 " " 1 - =EffectiveNoOp # VQRDMULH | 509 | " " 1 - =EffectiveNoOp # VQRDMULH |
| 451 " 1 0 - =EffectiveNoOp # VPADD(integer) | 510 | " 1 0 - =EffectiveNoOp # VPADD(integer) |
| 452 1101 0 0 0x =EffectiveNoOp # VADD(float) | 511 | 1101 0 0 0x =EffectiveNoOp # VADD(float) |
| 453 " " " 1x =EffectiveNoOp # VSUB(float) | 512 | " " " 1x =EffectiveNoOp # VSUB(float) |
| 454 " " 1 0x =EffectiveNoOp # VPADD(float) | 513 | " " 1 0x =EffectiveNoOp # VPADD(float) |
| 455 " " " 1x =EffectiveNoOp # VABD(float) | 514 | " " " 1x =EffectiveNoOp # VABD(float) |
| 456 " 1 0 - =EffectiveNoOp # VMLA, VMLS(float) | 515 | " 1 0 - =EffectiveNoOp # VMLA, VMLS(float) |
| 457 " " 1 0x =EffectiveNoOp # VMUL(float) | 516 | " " 1 0x =EffectiveNoOp # VMUL(float) |
| 458 1110 0 0 0x =EffectiveNoOp # VCEQ(register) | 517 | 1110 0 0 0x =EffectiveNoOp # VCEQ(register) |
| 459 " " 1 0x =EffectiveNoOp # VCGE(register) | 518 | " " 1 0x =EffectiveNoOp # VCGE(register) |
| 460 " " " 1x =EffectiveNoOp # VCGT(register) | 519 | " " " 1x =EffectiveNoOp # VCGT(register) |
| 461 " 1 1 - =EffectiveNoOp # VACGE, VACGT, VACLE, VACLT | 520 | " 1 1 - =EffectiveNoOp # VACGE, VACGT, VACLE, VACLT |
| 462 1111 0 0 - =EffectiveNoOp # VMAX, VMIN(float) | 521 | 1111 0 0 - =EffectiveNoOp # VMAX, VMIN(float) |
| 463 " " 1 - =EffectiveNoOp # VPMAX, VPMIN(float) | 522 | " " 1 - =EffectiveNoOp # VPMAX, VPMIN(float) |
| 464 " 1 0 0x =EffectiveNoOp # VRECPS | 523 | " 1 0 0x =EffectiveNoOp # VRECPS |
| 465 " " 0 1x =EffectiveNoOp # VRSQRTS | 524 | " " 0 1x =EffectiveNoOp # VRSQRTS |
| 466 - - - - =Undefined # Note on page A7-12 | 525 | - - - - =Undefined # Note on page A7-12 |
| 467 | 526 +-- |
| 468 -- simd_dp_3diff (See Section A7.4.2) | 527 |
| 469 A(11:8) U(24) | 528 +-- simd_dp_3diff (See Section A7.4.2) |
| 470 000x - =EffectiveNoOp # VADDL | 529 | A(11:8) U(24) |
| 471 001x - =EffectiveNoOp # VSUBL | 530 | 000x - =EffectiveNoOp # VADDL |
| 472 0100 0 =EffectiveNoOp # VADDHN | 531 | 001x - =EffectiveNoOp # VSUBL |
| 473 " 1 =EffectiveNoOp # VRADDHN | 532 | 0100 0 =EffectiveNoOp # VADDHN |
| 474 0101 - =EffectiveNoOp # VABA, VABAL | 533 | " 1 =EffectiveNoOp # VRADDHN |
| 475 0110 0 =EffectiveNoOp # VSUBHN | 534 | 0101 - =EffectiveNoOp # VABA, VABAL |
| 476 " 1 =EffectiveNoOp # VRSUBHN | 535 | 0110 0 =EffectiveNoOp # VSUBHN |
| 477 0111 - =EffectiveNoOp # VABD, VABDL(integer) | 536 | " 1 =EffectiveNoOp # VRSUBHN |
| 478 10x0 - =EffectiveNoOp # VMLA, VMLAL, VMLS, VMLSL (integer) | 537 | 0111 - =EffectiveNoOp # VABD, VABDL(integer) |
| 479 10x1 0 =EffectiveNoOp # VQDMLAL, VQDMLSL | 538 | 10x0 - =EffectiveNoOp # VMLA, VMLAL, VMLS, VMLSL (integer) |
| 480 1100 - =EffectiveNoOp # VMUL, VMULL (integer) | 539 | 10x1 0 =EffectiveNoOp # VQDMLAL, VQDMLSL |
| 481 1101 0 =EffectiveNoOp # VQDMULL | 540 | 1100 - =EffectiveNoOp # VMUL, VMULL (integer) |
| 482 1110 - =EffectiveNoOp # VMUL, VMULL (polynomial) | 541 | 1101 0 =EffectiveNoOp # VQDMULL |
| 483 - - =Undefined # Note on page A7-15 | 542 | 1110 - =EffectiveNoOp # VMUL, VMULL (polynomial) |
| 484 | 543 | - - =Undefined # Note on page A7-15 |
| 485 -- simd_dp_2scalar (See Section A7.4.3) | 544 +-- |
| 486 A(11:8) U(24) | 545 |
| 487 0x0x - =EffectiveNoOp # VMLA, VMLS (scalar) | 546 +-- simd_dp_2scalar (See Section A7.4.3) |
| 488 0x10 - =EffectiveNoOp # VMLAL, VMLSL (scalar) | 547 | A(11:8) U(24) |
| 489 0x11 0 =EffectiveNoOp # VQDMLAL, VMQDLSL | 548 | 0x0x - =EffectiveNoOp # VMLA, VMLS (scalar) |
| 490 100x - =EffectiveNoOp # VMUL(scalar) | 549 | 0x10 - =EffectiveNoOp # VMLAL, VMLSL (scalar) |
| 491 1010 - =EffectiveNoOp # VMULL(scalar) | 550 | 0x11 0 =EffectiveNoOp # VQDMLAL, VMQDLSL |
| 492 1011 0 =EffectiveNoOp # VQDMULL | 551 | 100x - =EffectiveNoOp # VMUL(scalar) |
| 493 1100 - =EffectiveNoOp # VQDMULH | 552 | 1010 - =EffectiveNoOp # VMULL(scalar) |
| 494 1101 - =EffectiveNoOp # VQRDMULH | 553 | 1011 0 =EffectiveNoOp # VQDMULL |
| 495 - - =Undefined # Note on page A7-16 | 554 | 1100 - =EffectiveNoOp # VQDMULH |
| 496 | 555 | 1101 - =EffectiveNoOp # VQRDMULH |
| 497 -- simd_dp_2shift (See Section A7.4.4) | 556 | - - =Undefined # Note on page A7-16 |
| 498 A(11:8) U(24) B(6) L(7) | 557 +-- |
| 499 0000 - - - =EffectiveNoOp # VSHR | 558 |
| 500 0001 - - - =EffectiveNoOp # VSRA | 559 +-- simd_dp_2shift (See Section A7.4.4) |
| 501 0010 - - - =EffectiveNoOp # VRSHR | 560 | A(11:8) U(24) B(6) L(7) |
| 502 0011 - - - =EffectiveNoOp # VRSRA | 561 | 0000 - - - =EffectiveNoOp # VSHR |
| 503 0100 1 - - =EffectiveNoOp # VSRI | 562 | 0001 - - - =EffectiveNoOp # VSRA |
| 504 0101 0 - - =EffectiveNoOp # VSHL(immediate) | 563 | 0010 - - - =EffectiveNoOp # VRSHR |
| 505 0101 1 - - =EffectiveNoOp # VSLI | 564 | 0011 - - - =EffectiveNoOp # VRSRA |
| 506 011x - - - =EffectiveNoOp # VQSHL, VQSHLU(immediate) | 565 | 0100 1 - - =EffectiveNoOp # VSRI |
| 507 1000 0 0 0 =EffectiveNoOp # VSHRN | 566 | 0101 0 - - =EffectiveNoOp # VSHL(immediate) |
| 508 " " 1 - =EffectiveNoOp # VRSHRN | 567 | 0101 1 - - =EffectiveNoOp # VSLI |
| 509 " 1 0 - =EffectiveNoOp # VQSHRUN | 568 | 011x - - - =EffectiveNoOp # VQSHL, VQSHLU(immediate) |
| 510 " " 1 - =EffectiveNoOp # VQRSHRUN | 569 | 1000 0 0 0 =EffectiveNoOp # VSHRN |
| 511 1001 - 0 - =EffectiveNoOp # VQSHRN | 570 | " " 1 - =EffectiveNoOp # VRSHRN |
| 512 " - 1 - =EffectiveNoOp # VQRSHRN | 571 | " 1 0 - =EffectiveNoOp # VQSHRUN |
| 513 1010 - 0 - =EffectiveNoOp # VSHLL, VMOVL | 572 | " " 1 - =EffectiveNoOp # VQRSHRUN |
| 514 111x - - - =EffectiveNoOp # VCVT (floating- and fixed-point) | 573 | 1001 - 0 - =EffectiveNoOp # VQSHRN |
| 515 - - - - =Undefined # Note on page A7-17 | 574 | " - 1 - =EffectiveNoOp # VQRSHRN |
| 516 | 575 | 1010 - 0 - =EffectiveNoOp # VSHLL, VMOVL |
| 517 -- simd_dp_2misc (See Section A7.4.5) | 576 | 111x - - - =EffectiveNoOp # VCVT (floating- and fixed-point) |
| 518 A(17:16) B(10:6) | 577 | - - - - =Undefined # Note on page A7-17 |
| 519 00 0000x =EffectiveNoOp # VREV64 | 578 +-- |
| 520 " 0001x =EffectiveNoOp # VREV32 | 579 |
| 521 " 0010x =EffectiveNoOp # VREV16 | 580 +-- simd_dp_2misc (See Section A7.4.5) |
| 522 " 010xx =EffectiveNoOp # VPADDL | 581 | A(17:16) B(10:6) |
| 523 " 1000x =EffectiveNoOp # VCLS | 582 | 00 0000x =EffectiveNoOp # VREV64 |
| 524 " 1001x =EffectiveNoOp # VCLZ | 583 | " 0001x =EffectiveNoOp # VREV32 |
| 525 " 1010x =EffectiveNoOp # VCNT | 584 | " 0010x =EffectiveNoOp # VREV16 |
| 526 " 1011x =EffectiveNoOp # VMVN(register) | 585 | " 010xx =EffectiveNoOp # VPADDL |
| 527 " 110xx =EffectiveNoOp # VPADAL | 586 | " 1000x =EffectiveNoOp # VCLS |
| 528 " 1110x =EffectiveNoOp # VQABS | 587 | " 1001x =EffectiveNoOp # VCLZ |
| 529 " 1111x =EffectiveNoOp # VQNEG | 588 | " 1010x =EffectiveNoOp # VCNT |
| 530 01 x000x =EffectiveNoOp # VCGT (immediate #0) | 589 | " 1011x =EffectiveNoOp # VMVN(register) |
| 531 " x001x =EffectiveNoOp # VCGE (immediate #0) | 590 | " 110xx =EffectiveNoOp # VPADAL |
| 532 " x010x =EffectiveNoOp # VCEQ (immediate #0) | 591 | " 1110x =EffectiveNoOp # VQABS |
| 533 " x011x =EffectiveNoOp # VCLE (immediate #0) | 592 | " 1111x =EffectiveNoOp # VQNEG |
| 534 " x100x =EffectiveNoOp # VCLT (immediate #0) | 593 | 01 x000x =EffectiveNoOp # VCGT (immediate #0) |
| 535 " x110x =EffectiveNoOp # VABS | 594 | " x001x =EffectiveNoOp # VCGE (immediate #0) |
| 536 " x111x =EffectiveNoOp # VNEG | 595 | " x010x =EffectiveNoOp # VCEQ (immediate #0) |
| 537 10 0000x =EffectiveNoOp # VSWP | 596 | " x011x =EffectiveNoOp # VCLE (immediate #0) |
| 538 " 0001x =EffectiveNoOp # VTRN | 597 | " x100x =EffectiveNoOp # VCLT (immediate #0) |
| 539 " 0010x =EffectiveNoOp # VUZP | 598 | " x110x =EffectiveNoOp # VABS |
| 540 " 0011x =EffectiveNoOp # VZIP | 599 | " x111x =EffectiveNoOp # VNEG |
| 541 " 01000 =EffectiveNoOp # VMOVN | 600 | 10 0000x =EffectiveNoOp # VSWP |
| 542 " 01001 =EffectiveNoOp # VQMOVUN | 601 | " 0001x =EffectiveNoOp # VTRN |
| 543 " 0101x =EffectiveNoOp # VQMOVN | 602 | " 0010x =EffectiveNoOp # VUZP |
| 544 " 01100 =EffectiveNoOp # VSHLL | 603 | " 0011x =EffectiveNoOp # VZIP |
| 545 " 11x00 =EffectiveNoOp # VCVT (half- and single-precision) | 604 | " 01000 =EffectiveNoOp # VMOVN |
| 546 11 10x0x =EffectiveNoOp # VRECPE | 605 | " 01001 =EffectiveNoOp # VQMOVUN |
| 547 " 10x1x =EffectiveNoOp # VRSQRTE | 606 | " 0101x =EffectiveNoOp # VQMOVN |
| 548 " 11xxx =EffectiveNoOp # VCVT (float and integer) | 607 | " 01100 =EffectiveNoOp # VSHLL |
| 549 - - =Undefined # Note on page A7-19 | 608 | " 11x00 =EffectiveNoOp # VCVT (half- and single-precision) |
| 550 | 609 | 11 10x0x =EffectiveNoOp # VRECPE |
| 551 -- simd_dp_1imm (See Section A7.4.6) | 610 | " 10x1x =EffectiveNoOp # VRSQRTE |
| 552 op(5) cmode(11:8) | 611 | " 11xxx =EffectiveNoOp # VCVT (float and integer) |
| 553 0 0xx0 =EffectiveNoOp # VMOV(immediate) | 612 | - - =Undefined # Note on page A7-19 |
| 554 " 0xx1 =EffectiveNoOp # VORR(immediate) | 613 +-- |
| 555 " 10x0 =EffectiveNoOp # VMOV(immediate) | 614 |
| 556 " 10x1 =EffectiveNoOp # VORR(immediate) | 615 +-- simd_dp_1imm (See Section A7.4.6) |
| 557 " 11xx =EffectiveNoOp # VMOV(immediate) | 616 | op(5) cmode(11:8) |
| 558 1 0xx0 =EffectiveNoOp # VMVN(immediate) | 617 | 0 0xx0 =EffectiveNoOp # VMOV(immediate) |
| 559 " 0xx1 =EffectiveNoOp # VBIC(immediate) | 618 | " 0xx1 =EffectiveNoOp # VORR(immediate) |
| 560 " 10x0 =EffectiveNoOp # VMVN(immediate) | 619 | " 10x0 =EffectiveNoOp # VMOV(immediate) |
| 561 " 10x1 =EffectiveNoOp # VBIC(immediate) | 620 | " 10x1 =EffectiveNoOp # VORR(immediate) |
| 562 " 110x =EffectiveNoOp # VMVN(immediate) | 621 | " 11xx =EffectiveNoOp # VMOV(immediate) |
| 563 " 1110 =EffectiveNoOp # VMOV(immediate) | 622 | 1 0xx0 =EffectiveNoOp # VMVN(immediate) |
| 564 " 1111 =Undefined | 623 | " 0xx1 =EffectiveNoOp # VBIC(immediate) |
| 565 | 624 | " 10x0 =EffectiveNoOp # VMVN(immediate) |
| 566 -- simd_load_store (See Section A7.7) | 625 | " 10x1 =EffectiveNoOp # VBIC(immediate) |
| 626 | " 110x =EffectiveNoOp # VMVN(immediate) |
| 627 | " 1110 =EffectiveNoOp # VMOV(immediate) |
| 628 | " 1111 =Undefined |
| 629 +-- |
| 630 |
| 631 +-- simd_load_store (See Section A7.7) |
| 567 # This "table" is the first paragraph in A7.7. | 632 # This "table" is the first paragraph in A7.7. |
| 568 L(21) | 633 | L(21) |
| 569 0 ->simd_load_store_l0 | 634 | 0 ->simd_load_store_l0 |
| 570 1 ->simd_load_store_l1 | 635 | 1 ->simd_load_store_l1 |
| 571 | 636 +-- |
| 572 -- simd_load_store_l0 (See Section A7.7, Table A7-20) | 637 |
| 573 A(23) B(11:8) | 638 +-- simd_load_store_l0 (See Section A7.7, Table A7-20) |
| 574 0 0010 =VectorStore # VST1(multiple) | 639 | A(23) B(11:8) |
| 575 " 011x " | 640 | 0 0010 =VectorStore # VST1(multiple) |
| 576 " 1010 " | 641 | " 011x " |
| 577 " 0011 =VectorStore # VST2(multiple) | 642 | " 1010 " |
| 578 " 100x " | 643 | " 0011 =VectorStore # VST2(multiple) |
| 579 " 010x =VectorStore # VST3(multiple) | 644 | " 100x " |
| 580 " 000x =VectorStore # VST4(multiple) | 645 | " 010x =VectorStore # VST3(multiple) |
| 581 1 0x00 =VectorStore # VST1(single) | 646 | " 000x =VectorStore # VST4(multiple) |
| 582 " 1000 " | 647 | 1 0x00 =VectorStore # VST1(single) |
| 583 " 0x01 =VectorStore # VST2(single) | 648 | " 1000 " |
| 584 " 1001 " | 649 | " 0x01 =VectorStore # VST2(single) |
| 585 " 0x10 =VectorStore # VST3(single) | 650 | " 1001 " |
| 586 " 1010 " | 651 | " 0x10 =VectorStore # VST3(single) |
| 587 " 0x11 =VectorStore # VST4(single) | 652 | " 1010 " |
| 588 " 1011 " | 653 | " 0x11 =VectorStore # VST4(single) |
| 589 - - =Undefined # Note on page A7-27 | 654 | " 1011 " |
| 590 | 655 | - - =Undefined # Note on page A7-27 |
| 591 -- simd_load_store_l1 (See Section A7.7, Table A7-21) | 656 +-- |
| 592 A(23) B(11:8) | 657 |
| 593 0 0010 =VectorLoad # VLD1(multiple) | 658 +-- simd_load_store_l1 (See Section A7.7, Table A7-21) |
| 594 " 011x " | 659 | A(23) B(11:8) |
| 595 " 1010 " | 660 | 0 0010 =VectorLoad # VLD1(multiple) |
| 596 " 0011 =VectorLoad # VLD2(multiple) | 661 | " 011x " |
| 597 " 100x " | 662 | " 1010 " |
| 598 " 010x =VectorLoad # VLD3(multiple) | 663 | " 0011 =VectorLoad # VLD2(multiple) |
| 599 " 000x =VectorLoad # VLD4(multiple) | 664 | " 100x " |
| 600 1 0x00 =VectorLoad # VLD1(single) | 665 | " 010x =VectorLoad # VLD3(multiple) |
| 601 " 1000 " | 666 | " 000x =VectorLoad # VLD4(multiple) |
| 602 " 1100 =VectorLoad # VLD1(single, all lanes) | 667 | 1 0x00 =VectorLoad # VLD1(single) |
| 603 " 0x01 =VectorLoad # VLD2(single) | 668 | " 1000 " |
| 604 " 1001 " | 669 | " 1100 =VectorLoad # VLD1(single, all lanes) |
| 605 " 1101 =VectorLoad # VLD2(single, all lanes) | 670 | " 0x01 =VectorLoad # VLD2(single) |
| 606 " 0x10 =VectorLoad # VLD3(single) | 671 | " 1001 " |
| 607 " 1010 " | 672 | " 1101 =VectorLoad # VLD2(single, all lanes) |
| 608 " 1110 =VectorLoad # VLD3(single, all lanes) | 673 | " 0x10 =VectorLoad # VLD3(single) |
| 609 " 0x11 =VectorLoad # VLD4(single) | 674 | " 1010 " |
| 610 " 1011 " | 675 | " 1110 =VectorLoad # VLD3(single, all lanes) |
| 611 " 1111 =VectorLoad # VLD4(single, all lanes) | 676 | " 0x11 =VectorLoad # VLD4(single) |
| 612 - - =Undefined # Note on page A7-27 | 677 | " 1011 " |
| 678 | " 1111 =VectorLoad # VLD4(single, all lanes) |
| 679 | - - =Undefined # Note on page A7-27 |
| 680 +-- |
| OLD | NEW |