VirtualBox

Changeset 105790 in vbox


Ignore:
Timestamp:
Aug 21, 2024 6:09:33 PM (6 months ago)
Author:
vboxsync
Message:

Disassembler/ARMv8: Updates, decode add/adds/sub/subs shifted registers variant instructions, add them to the testcase, bugref:10394

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

Legend:

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

    r105789 r105790  
    8686
    8787
    88 /* ADD/ADDS/SUB/SUBS */
     88/* ADD/ADDS/SUB/SUBS - shifted immediate variant */
    8989DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(g_ArmV8A64AddSubImm)
    9090    DIS_ARMV8_OP(0x11000000, "add" ,            OP_ARMV8_A64_ADD,       DISOPTYPE_HARMLESS),
     
    100100    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseSh12, 22,  1, 2 /*idxParam*/),
    101101    DIS_ARMV8_INSN_PARAM_NONE
     102DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END;
     103
     104
     105/* ADD/ADDS/SUB/SUBS - shifted register variant */
     106DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(g_aArmV8A64InsnAddSubShiftReg)
     107    DIS_ARMV8_OP(0x0b000000, "add" ,            OP_ARMV8_A64_ADD,       DISOPTYPE_HARMLESS),
     108    DIS_ARMV8_OP(0x2b000000, "adds" ,           OP_ARMV8_A64_ADDS,      DISOPTYPE_HARMLESS),
     109    DIS_ARMV8_OP(0x4b000000, "sub" ,            OP_ARMV8_A64_SUB,       DISOPTYPE_HARMLESS),
     110    DIS_ARMV8_OP(0x6b000000, "subs" ,           OP_ARMV8_A64_SUBS,      DISOPTYPE_HARMLESS),
     111DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_PARAMS_3(g_aArmV8A64InsnAddSubShiftReg, 0x7f200000 /*fFixedInsn*/, DISARMV8INSNCLASS_F_SF,
     112                                            kDisArmV8OpcDecodeNop, RT_BIT_32(29) | RT_BIT_32(30), 29,
     113                                            kDisArmv8OpParmGpr, kDisArmv8OpParmGpr, kDisArmv8OpParmGpr)
     114    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseReg,            0,  5, 0 /*idxParam*/),
     115    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseReg,            5,  5, 1 /*idxParam*/),
     116    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseReg,           16,  5, 2 /*idxParam*/),
     117    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseShift,         22,  2, 2 /*idxParam*/),
     118    DIS_ARMV8_INSN_PARAM_CREATE(kDisParmParseShiftAmount,   10,  6, 2 /*idxParam*/)
    102119DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END;
    103120
     
    505522
    506523
     524
     525DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(g_aArmV8A64InsnAddSubExtReg)
     526    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,
     527DIS_ARMV8_DECODE_MAP_DEFINE_END(g_aArmV8A64InsnAddSubExtReg, RT_BIT_32(24), 24);
     528
     529
     530DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(g_aArmV8A64InsnAddSubShiftExtReg)
     531    DIS_ARMV8_DECODE_MAP_ENTRY(g_aArmV8A64InsnAddSubShiftReg),      /* Add/Subtract (shifted register) */
     532    DIS_ARMV8_DECODE_MAP_ENTRY(g_aArmV8A64InsnAddSubExtReg),        /* Add/Subtract (extended register) */
     533DIS_ARMV8_DECODE_MAP_DEFINE_END(g_aArmV8A64InsnAddSubShiftExtReg, RT_BIT_32(21), 21);
     534
     535
    507536DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(g_ArmV8A64LogicalAddSubReg)
    508537    DIS_ARMV8_DECODE_MAP_ENTRY(g_aArmV8A64InsnLogShiftRegN),        /* Logical (shifted register) */
    509     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,                             /* Add/subtract (shifted/extended register) */
     538    DIS_ARMV8_DECODE_MAP_ENTRY(g_aArmV8A64InsnAddSubShiftExtReg),   /* Add/subtract (shifted/extended register) */
    510539DIS_ARMV8_DECODE_MAP_DEFINE_END(g_ArmV8A64LogicalAddSubReg, RT_BIT_32(24), 24);
    511540
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r105785 r105790  
    7575
    7676        ; Arithmetic instructions
    77         add x0, x0, #0x0
    78         add w0, w1, #0x10000
    79         add w0, w1, #65536
     77        add  x0, x0, #0x0
     78        add  x0, x1, #0x10000
     79        add  x0, x1, #65536
     80        add  x0, x0, x0
     81        add  x0, x1, x29
     82        add  x0, x1, x28, LSL #1
     83        add  x0, x1, x28, LSL #63
     84        add  x0, x1, x28, LSR #1
     85        add  x0, x1, x28, LSR #63
     86        add  x0, x1, x28, ASR #1
     87        add  x0, x1, x28, ASR #63
     88        ; ROR is reserved
     89
     90        add  w0, w1, #0x0
     91        add  w0, w1, #0x10000
     92        add  w0, w1, #65536
     93        add  w0, w1, w29
     94        add  w0, w1, w28, LSL #1
     95        add  w0, w1, w28, LSL #31
     96        add  w0, w1, w28, LSR #1
     97        add  w0, w1, w28, LSR #31
     98        add  w0, w1, w28, ASR #1
     99        add  w0, w1, w28, ASR #31
     100        ; ROR is reserved
    80101
    81102        adds x0, x0, #0x0
     103        adds x0, x1, #0x10000
     104        adds x0, x1, #65536
     105        adds x0, x0, x0
     106        adds x0, x1, x29
     107        adds x0, x1, x28, LSL #1
     108        adds x0, x1, x28, LSL #63
     109        adds x0, x1, x28, LSR #1
     110        adds x0, x1, x28, LSR #63
     111        adds x0, x1, x28, ASR #1
     112        adds x0, x1, x28, ASR #63
     113        ; ROR is reserved
     114
     115        adds w0, w1, #0x0
    82116        adds w0, w1, #0x10000
    83117        adds w0, w1, #65536
    84 
    85         sub x0, x0, #0x0
    86         sub w0, w1, #0x10000
    87         sub w0, w1, #65536
     118        adds w0, w1, w29
     119        adds w0, w1, w28, LSL #1
     120        adds w0, w1, w28, LSL #31
     121        adds w0, w1, w28, LSR #1
     122        adds w0, w1, w28, LSR #31
     123        adds w0, w1, w28, ASR #1
     124        adds w0, w1, w28, ASR #31
     125        ; ROR is reserved
     126
     127        sub  x0, x0, #0x0
     128        sub  x0, x1, #0x10000
     129        sub  x0, x1, #65536
     130        sub  x0, x0, x0
     131        sub  x0, x1, x29
     132        sub  x0, x1, x28, LSL #1
     133        sub  x0, x1, x28, LSL #63
     134        sub  x0, x1, x28, LSR #1
     135        sub  x0, x1, x28, LSR #63
     136        sub  x0, x1, x28, ASR #1
     137        sub  x0, x1, x28, ASR #63
     138        ; ROR is reserved
     139
     140        sub  w0, w1, #0x0
     141        sub  w0, w1, #0x10000
     142        sub  w0, w1, #65536
     143        sub  w0, w1, w29
     144        sub  w0, w1, w28, LSL #1
     145        sub  w0, w1, w28, LSL #31
     146        sub  w0, w1, w28, LSR #1
     147        sub  w0, w1, w28, LSR #31
     148        sub  w0, w1, w28, ASR #1
     149        sub  w0, w1, w28, ASR #31
     150        ; ROR is reserved
    88151
    89152        subs x0, x0, #0x0
     153        subs x0, x1, #0x10000
     154        subs x0, x1, #65536
     155        subs x0, x0, x0
     156        subs x0, x1, x29
     157        subs x0, x1, x28, LSL #1
     158        subs x0, x1, x28, LSL #63
     159        subs x0, x1, x28, LSR #1
     160        subs x0, x1, x28, LSR #63
     161        subs x0, x1, x28, ASR #1
     162        subs x0, x1, x28, ASR #63
     163        ; ROR is reserved
     164
     165        subs w0, w1, #0x0
    90166        subs w0, w1, #0x10000
    91167        subs w0, w1, #65536
     168        subs w0, w1, w29
     169        subs w0, w1, w28, LSL #1
     170        subs w0, w1, w28, LSL #31
     171        subs w0, w1, w28, LSR #1
     172        subs w0, w1, w28, LSR #31
     173        subs w0, w1, w28, ASR #1
     174        subs w0, w1, w28, ASR #31
     175        ; ROR is reserved
    92176
    93177;       mov x0, x1 @todo Aliases are not supported right now.
Note: See TracChangeset for help on using the changeset viewer.

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