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 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1259 | 1001 1101 000000000100 = Store2RegisterImm12OpRnNotRtOnWriteback | 1259 | 1001 1101 000000000100 = Store2RegisterImm12OpRnNotRtOnWriteback |
1260 Push_Rule_123_A2_P248 | 1260 Push_Rule_123_A2_P248 |
1261 cccc010100101101tttt000000000100 | 1261 cccc010100101101tttt000000000100 |
1262 | else: = Store2RegisterImm12Op | 1262 | else: = Store2RegisterImm12Op |
1263 => StoreBasedImmedMemory | 1263 => StoreBasedImmedMemory |
1264 Str_Rule_194_A1_P384 | 1264 Str_Rule_194_A1_P384 |
1265 cccc010pu0w0nnnnttttiiiiiiiiiiii | 1265 cccc010pu0w0nnnnttttiiiiiiiiiiii |
1266 & ~cccc010100101101tttt000000000100 | 1266 & ~cccc010100101101tttt000000000100 |
1267 +-- | 1267 +-- |
1268 | 1268 |
1269 # TODO(karl): Add uses to corresponding classes. | |
1270 +-- media_instructions (See Section A5.4) | 1269 +-- media_instructions (See Section A5.4) |
1270 *RdRnRm | |
1271 { cond(31:28), Rd(19:16), Rm(11:8), Rn(3:0) } | |
1272 baseline := Binary3RegisterOpAltA; | |
1273 defs := {Rd}; | |
1274 uses := {Rn, Rm}; | |
1275 safety := Pc in {Rd, Rn, Rm} => UNPREDICTABLE; | |
1276 *RdRnRmRa | |
1277 { cond(31:28), Rd(19:16), Ra(15:12), Rm(11:8), Rn(3:0) } | |
1278 baseline := Binary4RegisterDualOp; | |
1279 defs := {Rd}; | |
1280 uses := {Rn, Rm, Ra}; | |
1281 safety := Ra == Pc => DECODER_ERROR & | |
1282 Pc in {Rd, Rn, Rm} => UNPREDICTABLE; | |
1283 *RdRnLsbMsb | |
1284 { cond(31:28), msb(20:16), Rd(15:12), lsb(11:7), Rn(3:0) } | |
1285 baseline := Binary2RegisterBitRangeMsbGeLsb; | |
1286 defs := {Rd}; | |
1287 uses := {Rn}; | |
1288 safety := Rn == Pc => DECODER_ERROR & | |
1289 Rd == Pc => UNPREDICTABLE & | |
1290 msb < lsb => UNPREDICTABLE; | |
1291 *RdRnLsbWidth | |
1292 { cond(31:28), widthm1(20:16), Rd(15:12), lsb(11:7), Rn(3:0) } | |
1293 baseline := Binary2RegisterBitRangeNotRnIsPcBitfieldExtract; | |
1294 defs := {Rd}; | |
1295 uses := {Rn}; | |
1296 safety := Pc in {Rd, Rn} => UNPREDICTABLE & | |
1297 lsb + widthm1 > 31 => UNPREDICTABLE; | |
1298 *RdLsbWidth | |
1299 { cond(31:28), msb(20:16), Rd(15:12), lsb(11:7) } | |
1300 baseline := Unary1RegisterBitRangeMsbGeLsb; | |
1301 defs := {Rd}; | |
1302 safety := Rd == Pc => UNPREDICTABLE & | |
1303 msb < lsb => UNPREDICTABLE; | |
1304 +-- | |
1271 | op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) | 1305 | op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) |
1272 | 000xx - - - ->parallel_addition_and_subtraction_signed | 1306 | 000xx - - - ->parallel_addition_and_subtraction_signed |
1273 | 001xx - - - ->parallel_addition_and_subtraction_unsign ed | 1307 | 001xx - - - ->parallel_addition_and_subtraction_unsign ed |
1274 | 01xxx - - - ->packing_unpacking_saturation_and_reversa l | 1308 | 01xxx - - - ->packing_unpacking_saturation_and_reversa l |
1275 | 10xxx - - - ->signed_multiply_signed_and_unsigned_divi de | 1309 | 10xxx - - - ->signed_multiply_signed_and_unsigned_divi de |
1276 | 11000 000 1111 - = Binary3RegisterOpAltA | 1310 | 11000 000 1111 - |
1277 => Defs16To19CondsDontCareRdRmRnNotPc | 1311 = *RdRnRm |
1278 Usad8_Rule_253_A1_P500 | 1312 pattern := cccc01111000dddd1111mmmm0001nnnn; |
1279 cccc01111000dddd1111mmmm0001nnnn | 1313 rule := USAD8; arch := v6; |
1280 RegsNotPc (v6) | 1314 | " " ~1111 - |
1281 | " " ~1111 - = Binary4RegisterDualOp | 1315 = *RdRnRmRa |
1282 => Defs16To19CondsDontCareRdRaRmRnNotPc | 1316 pattern := cccc01111000ddddaaaammmm0001nnnn; |
1283 Usada8_Rule_254_A1_P502 | 1317 rule := USADA8; arch := v6; |
1284 cccc01111000ddddaaaammmm0001nnnn | 1318 | 1101x x10 - - |
1285 # Note: In baseline class, bits(15:12) | 1319 = *RdRnLsbWidth |
1286 # is Ra (not Rd as column name | 1320 pattern := cccc0111101wwwwwddddlllll101nnnn; |
1287 # suggests). | 1321 rule := SBFX; arch := v6T2; |
1288 RegsNotPc (v6) | 1322 | 1110x x00 - 1111 |
1289 | 1101x x10 - - = Binary2RegisterBitRangeNotRnIsPcBitfield Extract | 1323 = *RdLsbWidth |
1290 => Defs12To15CondsDontCareRdRnNotPcBitfi eldExtract | 1324 pattern := cccc0111110mmmmmddddlllll0011111; |
1291 Sbfx_Rule_154_A1_P308 | 1325 rule := BFC; arch := v6T2; |
1292 cccc0111101wwwwwddddlllll101nnnn | 1326 | " " - ~1111 |
1293 RegsNotPc (v6T2) | 1327 = *RdRnLsbMsb |
1294 | 1110x x00 - 1111 = Unary1RegisterBitRangeMsbGeLsb | 1328 pattern := cccc0111110mmmmmddddlllll001nnnn; |
1295 Bfc_17_A1_P46 | 1329 rule := BFI; arch := v6T2; |
1296 cccc0111110mmmmmddddlllll0011111 | 1330 | 1111x x10 - - |
1297 RegsNotPc (v6T2) | 1331 = *RdLsbWidth |
Karl
2012/12/14 20:14:19
Fixed to use *RdRnLsbWidth.
| |
1298 | " " - ~1111 = Binary2RegisterBitRangeMsbGeLsb | 1332 pattern := cccc0111111mmmmmddddlllll101nnnn; |
1299 => Defs12To15CondsDontCareMsbGeLsb | 1333 rule := UBFX; arch := v6T2; |
1300 Bfi_Rule_18_A1_P48 | 1334 | 11111 111 - - |
1301 cccc0111110mmmmmddddlllll001nnnn | 1335 = baseline := PermanentlyUndefined; |
1302 RegsNotPc (v6T2) | 1336 pattern := cccc01111111iiiiiiiiiiii1111iiii; |
1303 | 1111x x10 - - = Binary2RegisterBitRangeNotRnIsPcBitfield Extract | 1337 # Note: the UDF mnemonic only applies |
1304 => Defs12To15CondsDontCareRdRnNotPcBitfi eldExtract | 1338 # when cond == 0b1110, but all |
1305 Ubfx_Rule_236_A1_P466 | 1339 # encodings are permanently undefined. |
1306 cccc0111111mmmmmddddlllll101nnnn | 1340 rule := UDF; |
1307 RegsNotPc (v6T2) | 1341 | else: = Undefined # Note on table a5.4 |
1308 | 11111 111 - - = PermanentlyUndefined | |
1309 # Note: the UDF mnemonic only applies | |
1310 # when cond == 0b1110, but all | |
1311 # encodings are permanently undefined. | |
1312 Udf_Rule_A1 | |
1313 cccc01111111iiiiiiiiiiii1111iiii | |
1314 | else: = Undefined # Note on page A5-21 | |
1315 +-- | 1342 +-- |
1316 | 1343 |
1317 # TODO(karl): Add uses to corresponding classes. | 1344 # TODO(karl): Add uses to corresponding classes. |
1318 # None of the instructions in the following table set NZCV flags. | 1345 # None of the instructions in the following table set NZCV flags. |
1319 # Some do set the APSR's sticky Q bit (for saturation) or the GE bits, | 1346 # Some do set the APSR's sticky Q bit (for saturation) or the GE bits, |
1320 # but we don't model them. | 1347 # but we don't model them. |
1321 +-- parallel_addition_and_subtraction_signed (See Section A5.4.1) | 1348 +-- parallel_addition_and_subtraction_signed (See Section A5.4.1) |
1322 | op1(21:20) op2(7:5) | 1349 | op1(21:20) op2(7:5) |
1323 | 01 000 = Binary3RegisterOpAltBNoCondUpdates | 1350 | 01 000 = Binary3RegisterOpAltBNoCondUpdates |
1324 => Defs12To15CondsDontCareRnRdRmNotPc | 1351 => Defs12To15CondsDontCareRnRdRmNotPc |
(...skipping 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3159 rule := VLD3_single_3_element_structure_to_all_lanes; | 3186 rule := VLD3_single_3_element_structure_to_all_lanes; |
3160 | " " 0x11 = *VLSS4 | 3187 | " " 0x11 = *VLSS4 |
3161 pattern := 111101001d10nnnnddddss11aaaammmm; | 3188 pattern := 111101001d10nnnnddddss11aaaammmm; |
3162 rule := VLD4_single_4_element_structure_to_one_lane; | 3189 rule := VLD4_single_4_element_structure_to_one_lane; |
3163 | " " 1011 " | 3190 | " " 1011 " |
3164 | " " 1111 = *VLS4A | 3191 | " " 1111 = *VLS4A |
3165 pattern := 111101001d10nnnndddd1111sstammmm; | 3192 pattern := 111101001d10nnnndddd1111sstammmm; |
3166 rule := VLD4_single_4_element_structure_to_all_lanes; | 3193 rule := VLD4_single_4_element_structure_to_all_lanes; |
3167 | else: = Undefined | 3194 | else: = Undefined |
3168 +-- | 3195 +-- |
OLD | NEW |