VirtualBox

Changeset 106751 in vbox for trunk/src/VBox/Disassembler


Ignore:
Timestamp:
Oct 28, 2024 2:00:52 PM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165635
Message:

Disassembler: Decode SIMD ldr/str (register offset) instructions, bugref:10394

Location:
trunk/src/VBox/Disassembler
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmCore-armv8.cpp

    r106746 r106751  
    750750    Assert(   pParam->armv8.enmExtend != kDisArmv8OpParmExtendNone
    751751           && pDis->armv8.cbOperand > 0
    752            && pDis->armv8.cbOperand <= 8);
     752           && pDis->armv8.cbOperand <= 16);
    753753    if (fS)
    754754    {
     
    759759            case sizeof(uint32_t): pParam->armv8.u.cExtend = 2; break;
    760760            case sizeof(uint64_t): pParam->armv8.u.cExtend = 3; break;
     761            case 16:               pParam->armv8.u.cExtend = 4; break;
    761762            default:
    762763                AssertReleaseFailed();
  • trunk/src/VBox/Disassembler/DisasmTables-armv8-a64-ld-st.cpp.h

    r106746 r106751  
    129129
    130130
     131/* SIMD LDR/STR */
     132DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegOffSimd)
     133    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize,   30,  2, DIS_ARMV8_INSN_PARAM_UNSET),
     134    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,  0,  5, 0 /*idxParam*/),
     135    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     136    DIS_ARMV8_INSN_DECODE(kDisParmParseGprOff,        16,  5, 1 /*idxParam*/),
     137    DIS_ARMV8_INSN_DECODE(kDisParmParseOption,        13,  3, 1 /*idxParam*/),
     138    DIS_ARMV8_INSN_DECODE(kDisParmParseS,             12,  1, 1 /*idxParam*/),
     139DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStRegOffSimd128)
     140    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize128, 0,  0, DIS_ARMV8_INSN_PARAM_UNSET),
     141    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,  0,  5, 0 /*idxParam*/),
     142    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     143    DIS_ARMV8_INSN_DECODE(kDisParmParseGprOff,        16,  5, 1 /*idxParam*/),
     144    DIS_ARMV8_INSN_DECODE(kDisParmParseOption,        13,  3, 1 /*idxParam*/),
     145    DIS_ARMV8_INSN_DECODE(kDisParmParseS,             12,  1, 1 /*idxParam*/),
     146DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegOffSimd)
     147    DIS_ARMV8_OP(           0x3c200800, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
     148    DIS_ARMV8_OP(           0x3c600800, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS),
     149    DIS_ARMV8_OP_ALT_DECODE(0x3ca00800, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS, LdStRegOffSimd128), /** @todo size == 0. */
     150    DIS_ARMV8_OP_ALT_DECODE(0x3ce00800, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS, LdStRegOffSimd128), /** @todo size == 0. */
     151DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegOffSimd, 0x3fe00c00 /*fFixedInsn*/,
     152                                       kDisArmV8OpcDecodeNop,
     153                                       RT_BIT_32(22) | RT_BIT_32(23), 22);
     154
     155
    131156/*
    132157 * C4.1.94 - Loads and Stores - Load/Store register (register offset) variants
     
    141166DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegOff)
    142167    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegOffGpr),
    143     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     168    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegOffSimd),
    144169DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegOff, RT_BIT_32(26), 26);
    145170
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106746 r106751  
    14031403
    14041404
     1405        ldr  b0,  [x1, x2]
     1406        ldr  b31, [x1, x2]
     1407        ldr  b0,  [x1, x2, SXTX #0]
     1408        ldr  b0,  [x1, x2, LSL  #0]  ; UXTX
     1409        ldr  b0,  [x1, x2, SXTX #0]
     1410        ldr  b31, [x1, w2, UXTW #0]
     1411        ldr  b31, [x1, w2, SXTW #0]
     1412        ldr  b31, [x1, w2, UXTW #0]
     1413        ldr  b31, [x1, w2, SXTW #0]
     1414
     1415        ldr  b0,  [sp, x2]
     1416        ldr  b31, [sp, x2]
     1417        ldr  b0,  [sp, x2, SXTX #0]
     1418        ldr  b0,  [sp, x2, LSL  #0]  ; UXTX
     1419        ldr  b0,  [sp, x2, SXTX #0]
     1420        ldr  b31, [sp, w2, UXTW #0]
     1421        ldr  b31, [sp, w2, SXTW #0]
     1422        ldr  b31, [sp, w2, UXTW #0]
     1423        ldr  b31, [sp, w2, SXTW #0]
     1424
     1425
     1426        ldr  h0,  [x1, x2]
     1427        ldr  h31, [x1, x2]
     1428        ldr  h0,  [x1, x2, SXTX #1]
     1429        ldr  h0,  [x1, x2, LSL  #1]  ; UXTX
     1430        ldr  h0,  [x1, x2, SXTX #1]
     1431        ldr  h31, [x1, w2, UXTW #0]
     1432        ldr  h31, [x1, w2, SXTW #0]
     1433        ldr  h31, [x1, w2, UXTW #1]
     1434        ldr  h31, [x1, w2, SXTW #1]
     1435
     1436        ldr  h0,  [sp, x2]
     1437        ldr  h31, [sp, x2]
     1438        ldr  h0,  [sp, x2, SXTX #1]
     1439        ldr  h0,  [sp, x2, LSL  #1]  ; UXTX
     1440        ldr  h0,  [sp, x2, SXTX #1]
     1441        ldr  h31, [sp, w2, UXTW #0]
     1442        ldr  h31, [sp, w2, SXTW #0]
     1443        ldr  h31, [sp, w2, UXTW #1]
     1444        ldr  h31, [sp, w2, SXTW #1]
     1445
     1446
     1447        ldr  s0,  [x1, x2]
     1448        ldr  s31, [x1, x2]
     1449        ldr  s0,  [x1, x2, SXTX #2]
     1450        ldr  s0,  [x1, x2, LSL  #2]  ; UXTX
     1451        ldr  s0,  [x1, x2, SXTX #2]
     1452        ldr  s31, [x1, w2, UXTW #0]
     1453        ldr  s31, [x1, w2, SXTW #0]
     1454        ldr  s31, [x1, w2, UXTW #2]
     1455        ldr  s31, [x1, w2, SXTW #2]
     1456
     1457        ldr  s0,  [sp, x2]
     1458        ldr  s31, [sp, x2]
     1459        ldr  s0,  [sp, x2, SXTX #2]
     1460        ldr  s0,  [sp, x2, LSL  #2]  ; UXTX
     1461        ldr  s0,  [sp, x2, SXTX #2]
     1462        ldr  s31, [sp, w2, UXTW #0]
     1463        ldr  s31, [sp, w2, SXTW #0]
     1464        ldr  s31, [sp, w2, UXTW #2]
     1465        ldr  s31, [sp, w2, SXTW #2]
     1466
     1467
     1468        ldr  d0,  [x1, x2]
     1469        ldr  d31, [x1, x2]
     1470        ldr  d0,  [x1, x2, SXTX #3]
     1471        ldr  d0,  [x1, x2, LSL  #3]  ; UXTX
     1472        ldr  d0,  [x1, x2, SXTX #3]
     1473        ldr  d31, [x1, w2, UXTW #0]
     1474        ldr  d31, [x1, w2, SXTW #0]
     1475        ldr  d31, [x1, w2, UXTW #3]
     1476        ldr  d31, [x1, w2, SXTW #3]
     1477
     1478        ldr  d0,  [sp, x2]
     1479        ldr  d31, [sp, x2]
     1480        ldr  d0,  [sp, x2, SXTX #3]
     1481        ldr  d0,  [sp, x2, LSL  #3]  ; UXTX
     1482        ldr  d0,  [sp, x2, SXTX #3]
     1483        ldr  d31, [sp, w2, UXTW #0]
     1484        ldr  d31, [sp, w2, SXTW #0]
     1485        ldr  d31, [sp, w2, UXTW #3]
     1486        ldr  d31, [sp, w2, SXTW #3]
     1487
     1488
     1489        ldr  q0,  [x1, x2]
     1490        ldr  q31, [x1, x2]
     1491        ldr  q0,  [x1, x2, SXTX #4]
     1492        ldr  q0,  [x1, x2, LSL  #4]  ; UXTX
     1493        ldr  q0,  [x1, x2, SXTX #4]
     1494        ldr  q31, [x1, w2, UXTW #0]
     1495        ldr  q31, [x1, w2, SXTW #0]
     1496        ldr  q31, [x1, w2, UXTW #4]
     1497        ldr  q31, [x1, w2, SXTW #4]
     1498
     1499        ldr  q0,  [sp, x2]
     1500        ldr  q31, [sp, x2]
     1501        ldr  q0,  [sp, x2, SXTX #4]
     1502        ldr  q0,  [sp, x2, LSL  #4]  ; UXTX
     1503        ldr  q0,  [sp, x2, SXTX #4]
     1504        ldr  q31, [sp, w2, UXTW #0]
     1505        ldr  q31, [sp, w2, SXTW #0]
     1506        ldr  q31, [sp, w2, UXTW #4]
     1507        ldr  q31, [sp, w2, SXTW #4]
     1508
     1509
    14051510        ; SIMD memory stores
    14061511        str b0, [x0]
     
    14331538        str q31, [sp]
    14341539        str q31, [sp, #65520]
     1540
     1541
     1542        str  b0,  [x1, x2]
     1543        str  b31, [x1, x2]
     1544        str  b0,  [x1, x2, SXTX #0]
     1545        str  b0,  [x1, x2, LSL  #0]  ; UXTX
     1546        str  b0,  [x1, x2, SXTX #0]
     1547        str  b31, [x1, w2, UXTW #0]
     1548        str  b31, [x1, w2, SXTW #0]
     1549        str  b31, [x1, w2, UXTW #0]
     1550        str  b31, [x1, w2, SXTW #0]
     1551
     1552        str  b0,  [sp, x2]
     1553        str  b31, [sp, x2]
     1554        str  b0,  [sp, x2, SXTX #0]
     1555        str  b0,  [sp, x2, LSL  #0]  ; UXTX
     1556        str  b0,  [sp, x2, SXTX #0]
     1557        str  b31, [sp, w2, UXTW #0]
     1558        str  b31, [sp, w2, SXTW #0]
     1559        str  b31, [sp, w2, UXTW #0]
     1560        str  b31, [sp, w2, SXTW #0]
     1561
     1562
     1563        str  h0,  [x1, x2]
     1564        str  h31, [x1, x2]
     1565        str  h0,  [x1, x2, SXTX #1]
     1566        str  h0,  [x1, x2, LSL  #1]  ; UXTX
     1567        str  h0,  [x1, x2, SXTX #1]
     1568        str  h31, [x1, w2, UXTW #0]
     1569        str  h31, [x1, w2, SXTW #0]
     1570        str  h31, [x1, w2, UXTW #1]
     1571        str  h31, [x1, w2, SXTW #1]
     1572
     1573        str  h0,  [sp, x2]
     1574        str  h31, [sp, x2]
     1575        str  h0,  [sp, x2, SXTX #1]
     1576        str  h0,  [sp, x2, LSL  #1]  ; UXTX
     1577        str  h0,  [sp, x2, SXTX #1]
     1578        str  h31, [sp, w2, UXTW #0]
     1579        str  h31, [sp, w2, SXTW #0]
     1580        str  h31, [sp, w2, UXTW #1]
     1581        str  h31, [sp, w2, SXTW #1]
     1582
     1583
     1584        str  s0,  [x1, x2]
     1585        str  s31, [x1, x2]
     1586        str  s0,  [x1, x2, SXTX #2]
     1587        str  s0,  [x1, x2, LSL  #2]  ; UXTX
     1588        str  s0,  [x1, x2, SXTX #2]
     1589        str  s31, [x1, w2, UXTW #0]
     1590        str  s31, [x1, w2, SXTW #0]
     1591        str  s31, [x1, w2, UXTW #2]
     1592        str  s31, [x1, w2, SXTW #2]
     1593
     1594        str  s0,  [sp, x2]
     1595        str  s31, [sp, x2]
     1596        str  s0,  [sp, x2, SXTX #2]
     1597        str  s0,  [sp, x2, LSL  #2]  ; UXTX
     1598        str  s0,  [sp, x2, SXTX #2]
     1599        str  s31, [sp, w2, UXTW #0]
     1600        str  s31, [sp, w2, SXTW #0]
     1601        str  s31, [sp, w2, UXTW #2]
     1602        str  s31, [sp, w2, SXTW #2]
     1603
     1604
     1605        str  d0,  [x1, x2]
     1606        str  d31, [x1, x2]
     1607        str  d0,  [x1, x2, SXTX #3]
     1608        str  d0,  [x1, x2, LSL  #3]  ; UXTX
     1609        str  d0,  [x1, x2, SXTX #3]
     1610        str  d31, [x1, w2, UXTW #0]
     1611        str  d31, [x1, w2, SXTW #0]
     1612        str  d31, [x1, w2, UXTW #3]
     1613        str  d31, [x1, w2, SXTW #3]
     1614
     1615        str  d0,  [sp, x2]
     1616        str  d31, [sp, x2]
     1617        str  d0,  [sp, x2, SXTX #3]
     1618        str  d0,  [sp, x2, LSL  #3]  ; UXTX
     1619        str  d0,  [sp, x2, SXTX #3]
     1620        str  d31, [sp, w2, UXTW #0]
     1621        str  d31, [sp, w2, SXTW #0]
     1622        str  d31, [sp, w2, UXTW #3]
     1623        str  d31, [sp, w2, SXTW #3]
     1624
     1625
     1626        str  q0,  [x1, x2]
     1627        str  q31, [x1, x2]
     1628        str  q0,  [x1, x2, SXTX #4]
     1629        str  q0,  [x1, x2, LSL  #4]  ; UXTX
     1630        str  q0,  [x1, x2, SXTX #4]
     1631        str  q31, [x1, w2, UXTW #0]
     1632        str  q31, [x1, w2, SXTW #0]
     1633        str  q31, [x1, w2, UXTW #4]
     1634        str  q31, [x1, w2, SXTW #4]
     1635
     1636        str  q0,  [sp, x2]
     1637        str  q31, [sp, x2]
     1638        str  q0,  [sp, x2, SXTX #4]
     1639        str  q0,  [sp, x2, LSL  #4]  ; UXTX
     1640        str  q0,  [sp, x2, SXTX #4]
     1641        str  q31, [sp, w2, UXTW #0]
     1642        str  q31, [sp, w2, SXTW #0]
     1643        str  q31, [sp, w2, UXTW #4]
     1644        str  q31, [sp, w2, SXTW #4]
    14351645
    14361646
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette