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 1311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 | 0 0x111 - - - | 1322 | 0 0x111 - - - |
1323 = baseline := ForbiddenCondDecoder; | 1323 = baseline := ForbiddenCondDecoder; |
1324 pattern := cccc0100u111nnnnttttiiiiiiiiiiii; rule := LDRBT_A1; | 1324 pattern := cccc0100u111nnnnttttiiiiiiiiiiii; rule := LDRBT_A1; |
1325 | 1 0x111 0 - - | 1325 | 1 0x111 0 - - |
1326 = baseline := ForbiddenCondDecoder; | 1326 = baseline := ForbiddenCondDecoder; |
1327 pattern := cccc0110u111nnnnttttiiiiitt0mmmm; rule := LDRBT_A2; | 1327 pattern := cccc0110u111nnnnttttiiiiitt0mmmm; rule := LDRBT_A2; |
1328 # Instructions with A==1 and B==1 are in media_instructions. | 1328 # Instructions with A==1 and B==1 are in media_instructions. |
1329 # TODO(jfb) Should we mark them as unreachable? | 1329 # TODO(jfb) Should we mark them as unreachable? |
1330 +-- | 1330 +-- |
1331 | 1331 |
1332 # TODO(karl): Add uses to corresponding classes. | |
1333 +-- media_instructions (See Section A5.4) | 1332 +-- media_instructions (See Section A5.4) |
| 1333 *RdRnRm |
| 1334 { cond(31:28), Rd(19:16), Rm(11:8), Rn(3:0) } |
| 1335 baseline := Binary3RegisterOpAltA; |
| 1336 defs := {Rd}; |
| 1337 uses := {Rn, Rm}; |
| 1338 safety := Pc in {Rd, Rn, Rm} => UNPREDICTABLE; |
| 1339 *RdRnRmRa |
| 1340 { cond(31:28), Rd(19:16), Ra(15:12), Rm(11:8), Rn(3:0) } |
| 1341 baseline := Binary4RegisterDualOp; |
| 1342 defs := {Rd}; |
| 1343 uses := {Rn, Rm, Ra}; |
| 1344 safety := Ra == Pc => DECODER_ERROR & |
| 1345 Pc in {Rd, Rn, Rm} => UNPREDICTABLE; |
| 1346 *RdRnLsbMsb |
| 1347 { cond(31:28), msb(20:16), Rd(15:12), lsb(11:7), Rn(3:0) } |
| 1348 baseline := Binary2RegisterBitRangeMsbGeLsb; |
| 1349 defs := {Rd}; |
| 1350 uses := {Rn, Rd}; |
| 1351 safety := Rn == Pc => DECODER_ERROR & |
| 1352 Rd == Pc => UNPREDICTABLE & |
| 1353 msb < lsb => UNPREDICTABLE; |
| 1354 *RdRnLsbWidth |
| 1355 { cond(31:28), widthm1(20:16), Rd(15:12), lsb(11:7), Rn(3:0) } |
| 1356 baseline := Binary2RegisterBitRangeNotRnIsPcBitfieldExtract; |
| 1357 defs := {Rd}; |
| 1358 uses := {Rn}; |
| 1359 safety := Pc in {Rd, Rn} => UNPREDICTABLE & |
| 1360 lsb + widthm1 > 31 => UNPREDICTABLE; |
| 1361 *RdLsbWidth |
| 1362 { cond(31:28), msb(20:16), Rd(15:12), lsb(11:7) } |
| 1363 baseline := Unary1RegisterBitRangeMsbGeLsb; |
| 1364 defs := {Rd}; |
| 1365 uses := {Rd}; |
| 1366 safety := Rd == Pc => UNPREDICTABLE & |
| 1367 msb < lsb => UNPREDICTABLE; |
| 1368 +-- |
1334 | op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) | 1369 | op1(24:20) op2(7:5) Rd(15:12) Rn(3:0) |
1335 | 000xx - - - ->parallel_addition_and_subtraction_signed | 1370 | 000xx - - - ->parallel_addition_and_subtraction_signed |
1336 | 001xx - - - ->parallel_addition_and_subtraction_unsign
ed | 1371 | 001xx - - - ->parallel_addition_and_subtraction_unsign
ed |
1337 | 01xxx - - - ->packing_unpacking_saturation_and_reversa
l | 1372 | 01xxx - - - ->packing_unpacking_saturation_and_reversa
l |
1338 | 10xxx - - - ->signed_multiply_signed_and_unsigned_divi
de | 1373 | 10xxx - - - ->signed_multiply_signed_and_unsigned_divi
de |
1339 | 11000 000 1111 - = Binary3RegisterOpAltA | 1374 | 11000 000 1111 - |
1340 => Defs16To19CondsDontCareRdRmRnNotPc | 1375 = *RdRnRm |
1341 Usad8_Rule_253_A1_P500 | 1376 pattern := cccc01111000dddd1111mmmm0001nnnn; |
1342 cccc01111000dddd1111mmmm0001nnnn | 1377 rule := USAD8; arch := v6; |
1343 RegsNotPc (v6) | 1378 | " " ~1111 - |
1344 | " " ~1111 - = Binary4RegisterDualOp | 1379 = *RdRnRmRa |
1345 => Defs16To19CondsDontCareRdRaRmRnNotPc | 1380 pattern := cccc01111000ddddaaaammmm0001nnnn; |
1346 Usada8_Rule_254_A1_P502 | 1381 rule := USADA8; arch := v6; |
1347 cccc01111000ddddaaaammmm0001nnnn | 1382 | 1101x x10 - - |
1348 # Note: In baseline class, bits(15:12) | 1383 = *RdRnLsbWidth |
1349 # is Ra (not Rd as column name | 1384 pattern := cccc0111101wwwwwddddlllll101nnnn; |
1350 # suggests). | 1385 rule := SBFX; arch := v6T2; |
1351 RegsNotPc (v6) | 1386 | 1110x x00 - 1111 |
1352 | 1101x x10 - - = Binary2RegisterBitRangeNotRnIsPcBitfield
Extract | 1387 = *RdLsbWidth |
1353 => Defs12To15CondsDontCareRdRnNotPcBitfi
eldExtract | 1388 pattern := cccc0111110mmmmmddddlllll0011111; |
1354 Sbfx_Rule_154_A1_P308 | 1389 rule := BFC; arch := v6T2; |
1355 cccc0111101wwwwwddddlllll101nnnn | 1390 | " " - ~1111 |
1356 RegsNotPc (v6T2) | 1391 = *RdRnLsbMsb |
1357 | 1110x x00 - 1111 = Unary1RegisterBitRangeMsbGeLsb | 1392 pattern := cccc0111110mmmmmddddlllll001nnnn; |
1358 Bfc_17_A1_P46 | 1393 rule := BFI; arch := v6T2; |
1359 cccc0111110mmmmmddddlllll0011111 | 1394 | 1111x x10 - - |
1360 RegsNotPc (v6T2) | 1395 = *RdRnLsbWidth |
1361 | " " - ~1111 = Binary2RegisterBitRangeMsbGeLsb | 1396 pattern := cccc0111111mmmmmddddlllll101nnnn; |
1362 => Defs12To15CondsDontCareMsbGeLsb | 1397 rule := UBFX; arch := v6T2; |
1363 Bfi_Rule_18_A1_P48 | 1398 | 11111 111 - - |
1364 cccc0111110mmmmmddddlllll001nnnn | 1399 = baseline := PermanentlyUndefined; |
1365 RegsNotPc (v6T2) | 1400 pattern := cccc01111111iiiiiiiiiiii1111iiii; |
1366 | 1111x x10 - - = Binary2RegisterBitRangeNotRnIsPcBitfield
Extract | 1401 # Note: the UDF mnemonic only applies |
1367 => Defs12To15CondsDontCareRdRnNotPcBitfi
eldExtract | 1402 # when cond == 0b1110, but all |
1368 Ubfx_Rule_236_A1_P466 | 1403 # encodings are permanently undefined. |
1369 cccc0111111mmmmmddddlllll101nnnn | 1404 rule := UDF; |
1370 RegsNotPc (v6T2) | 1405 | else: = Undefined # Note on table a5.4 |
1371 | 11111 111 - - = PermanentlyUndefined | |
1372 # Note: the UDF mnemonic only applies | |
1373 # when cond == 0b1110, but all | |
1374 # encodings are permanently undefined. | |
1375 Udf_Rule_A1 | |
1376 cccc01111111iiiiiiiiiiii1111iiii | |
1377 | else: = Undefined # Note on page A5-21 | |
1378 +-- | 1406 +-- |
1379 | 1407 |
1380 # TODO(karl): Add uses to corresponding classes. | 1408 # TODO(karl): Add uses to corresponding classes. |
1381 # None of the instructions in the following table set NZCV flags. | 1409 # None of the instructions in the following table set NZCV flags. |
1382 # Some do set the APSR's sticky Q bit (for saturation) or the GE bits, | 1410 # Some do set the APSR's sticky Q bit (for saturation) or the GE bits, |
1383 # but we don't model them. | 1411 # but we don't model them. |
1384 +-- parallel_addition_and_subtraction_signed (See Section A5.4.1) | 1412 +-- parallel_addition_and_subtraction_signed (See Section A5.4.1) |
1385 | op1(21:20) op2(7:5) | 1413 | op1(21:20) op2(7:5) |
1386 | 01 000 = Binary3RegisterOpAltBNoCondUpdates | 1414 | 01 000 = Binary3RegisterOpAltBNoCondUpdates |
1387 => Defs12To15CondsDontCareRnRdRmNotPc | 1415 => Defs12To15CondsDontCareRnRdRmNotPc |
(...skipping 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3222 rule := VLD3_single_3_element_structure_to_all_lanes; | 3250 rule := VLD3_single_3_element_structure_to_all_lanes; |
3223 | " " 0x11 = *VLSS4 | 3251 | " " 0x11 = *VLSS4 |
3224 pattern := 111101001d10nnnnddddss11aaaammmm; | 3252 pattern := 111101001d10nnnnddddss11aaaammmm; |
3225 rule := VLD4_single_4_element_structure_to_one_lane; | 3253 rule := VLD4_single_4_element_structure_to_one_lane; |
3226 | " " 1011 " | 3254 | " " 1011 " |
3227 | " " 1111 = *VLS4A | 3255 | " " 1111 = *VLS4A |
3228 pattern := 111101001d10nnnndddd1111sstammmm; | 3256 pattern := 111101001d10nnnndddd1111sstammmm; |
3229 rule := VLD4_single_4_element_structure_to_all_lanes; | 3257 rule := VLD4_single_4_element_structure_to_all_lanes; |
3230 | else: = Undefined | 3258 | else: = Undefined |
3231 +-- | 3259 +-- |
OLD | NEW |