VirtualBox

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


Ignore:
Timestamp:
Oct 29, 2024 9:48:34 AM (3 months ago)
Author:
vboxsync
Message:

Disassembler: Decode atomic memory operation instructions (FEAT_LSE, FEAT_LRCPC, FEAT_THE), bugref:10394

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

Legend:

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

    r106758 r106767  
    184184
    185185
     186/* Atomic memory operations - Byte size variants */
     187DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(AtomicMemoryByte)
     188    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,       16,  5, 0 /*idxParam*/),
     189    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 1 /*idxParam*/),
     190    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     191DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryByteThe)
     192    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,       16,  5, 0 /*idxParam*/),
     193    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,        0,  5, 1 /*idxParam*/),
     194    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     195DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryByteLrcpc)
     196    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 0 /*idxParam*/),
     197    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     198DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(AtomicMemoryByte)
     199    DIS_ARMV8_OP(           0x38200000, "ldaddb",          OP_ARMV8_A64_LDADDB,    DISOPTYPE_HARMLESS),
     200    DIS_ARMV8_OP(           0x38201000, "ldclrb",          OP_ARMV8_A64_LDCLRB,    DISOPTYPE_HARMLESS),
     201    DIS_ARMV8_OP(           0x38202000, "ldeorb",          OP_ARMV8_A64_LDEORB,    DISOPTYPE_HARMLESS),
     202    DIS_ARMV8_OP(           0x38203000, "ldsetb",          OP_ARMV8_A64_LDSETB,    DISOPTYPE_HARMLESS),
     203    DIS_ARMV8_OP(           0x38204000, "ldsmaxb",         OP_ARMV8_A64_LDSMAXB,   DISOPTYPE_HARMLESS),
     204    DIS_ARMV8_OP(           0x38205000, "ldsminb",         OP_ARMV8_A64_LDSMINB,   DISOPTYPE_HARMLESS),
     205    DIS_ARMV8_OP(           0x38206000, "ldumaxb",         OP_ARMV8_A64_LDUMAXB,   DISOPTYPE_HARMLESS),
     206    DIS_ARMV8_OP(           0x38207000, "lduminb",         OP_ARMV8_A64_LDUMINB,   DISOPTYPE_HARMLESS),
     207    DIS_ARMV8_OP(           0x38208000, "swpb",            OP_ARMV8_A64_SWPB,      DISOPTYPE_HARMLESS),
     208    DIS_ARMV8_OP_ALT_DECODE(0x38209000, "rcwclr",          OP_ARMV8_A64_RCWCLR,    DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     209    DIS_ARMV8_OP_ALT_DECODE(0x3820a000, "rcwswp",          OP_ARMV8_A64_RCWSWP,    DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     210    DIS_ARMV8_OP_ALT_DECODE(0x3820b000, "rcwset",          OP_ARMV8_A64_RCWSET,    DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     211    INVALID_OPCODE,
     212    INVALID_OPCODE,
     213    INVALID_OPCODE,
     214    INVALID_OPCODE,
     215    DIS_ARMV8_OP(           0x38600000, "ldaddlb",         OP_ARMV8_A64_LDADDLB,   DISOPTYPE_HARMLESS),
     216    DIS_ARMV8_OP(           0x38601000, "ldclrlb",         OP_ARMV8_A64_LDCLRLB,   DISOPTYPE_HARMLESS),
     217    DIS_ARMV8_OP(           0x38602000, "ldeorlb",         OP_ARMV8_A64_LDEORLB,   DISOPTYPE_HARMLESS),
     218    DIS_ARMV8_OP(           0x38603000, "ldsetlb",         OP_ARMV8_A64_LDSETLB,   DISOPTYPE_HARMLESS),
     219    DIS_ARMV8_OP(           0x38604000, "ldsmaxlb",        OP_ARMV8_A64_LDSMAXLB,  DISOPTYPE_HARMLESS),
     220    DIS_ARMV8_OP(           0x38605000, "ldsminlb",        OP_ARMV8_A64_LDSMINLB,  DISOPTYPE_HARMLESS),
     221    DIS_ARMV8_OP(           0x38606000, "ldumaxlb",        OP_ARMV8_A64_LDUMAXLB,  DISOPTYPE_HARMLESS),
     222    DIS_ARMV8_OP(           0x38607000, "lduminlb",        OP_ARMV8_A64_LDUMINLB,  DISOPTYPE_HARMLESS),
     223    DIS_ARMV8_OP(           0x38608000, "swplb",           OP_ARMV8_A64_SWPLB,     DISOPTYPE_HARMLESS),
     224    DIS_ARMV8_OP_ALT_DECODE(0x38609000, "rcwclrl",         OP_ARMV8_A64_RCWCLRL,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     225    DIS_ARMV8_OP_ALT_DECODE(0x3860a000, "rcwswpl",         OP_ARMV8_A64_RCWSWPL,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     226    DIS_ARMV8_OP_ALT_DECODE(0x3860b000, "rcwsetl",         OP_ARMV8_A64_RCWSETL,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     227    INVALID_OPCODE,
     228    INVALID_OPCODE,
     229    INVALID_OPCODE,
     230    INVALID_OPCODE,
     231    DIS_ARMV8_OP(           0x38a00000, "ldaddab",         OP_ARMV8_A64_LDADDAB,   DISOPTYPE_HARMLESS),
     232    DIS_ARMV8_OP(           0x38a01000, "ldclrab",         OP_ARMV8_A64_LDCLRAB,   DISOPTYPE_HARMLESS),
     233    DIS_ARMV8_OP(           0x38a02000, "ldeorab",         OP_ARMV8_A64_LDEORAB,   DISOPTYPE_HARMLESS),
     234    DIS_ARMV8_OP(           0x38a03000, "ldsetab",         OP_ARMV8_A64_LDSETAB,   DISOPTYPE_HARMLESS),
     235    DIS_ARMV8_OP(           0x38a04000, "ldsmaxab",        OP_ARMV8_A64_LDSMAXAB,  DISOPTYPE_HARMLESS),
     236    DIS_ARMV8_OP(           0x38a05000, "ldsminab",        OP_ARMV8_A64_LDSMINAB,  DISOPTYPE_HARMLESS),
     237    DIS_ARMV8_OP(           0x38a06000, "ldumaxab",        OP_ARMV8_A64_LDUMAXAB,  DISOPTYPE_HARMLESS),
     238    DIS_ARMV8_OP(           0x38a07000, "lduminab",        OP_ARMV8_A64_LDUMINAB,  DISOPTYPE_HARMLESS),
     239    DIS_ARMV8_OP(           0x38a08000, "swpab",           OP_ARMV8_A64_SWPAB,     DISOPTYPE_HARMLESS),
     240    DIS_ARMV8_OP_ALT_DECODE(0x38a09000, "rcwclra",         OP_ARMV8_A64_RCWCLRA,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     241    DIS_ARMV8_OP_ALT_DECODE(0x38a0a000, "rcwswpa",         OP_ARMV8_A64_RCWSWPA,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     242    DIS_ARMV8_OP_ALT_DECODE(0x38a0b000, "rcwseta",         OP_ARMV8_A64_RCWSETA,   DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     243    DIS_ARMV8_OP_ALT_DECODE(0x38a0c000, "ldaprb",          OP_ARMV8_A64_LDAPRB,    DISOPTYPE_HARMLESS, AtomicMemoryByteLrcpc), /* FEAT_LRCPC */ /** @todo Rs == 11111 */
     244    INVALID_OPCODE,
     245    INVALID_OPCODE,
     246    INVALID_OPCODE,
     247    DIS_ARMV8_OP(           0x38e00000, "ldaddalb",        OP_ARMV8_A64_LDADDALB,  DISOPTYPE_HARMLESS),
     248    DIS_ARMV8_OP(           0x38e01000, "ldclralb",        OP_ARMV8_A64_LDCLRALB,  DISOPTYPE_HARMLESS),
     249    DIS_ARMV8_OP(           0x38e02000, "ldeoralb",        OP_ARMV8_A64_LDEORALB,  DISOPTYPE_HARMLESS),
     250    DIS_ARMV8_OP(           0x38e03000, "ldsetalb",        OP_ARMV8_A64_LDSETALB,  DISOPTYPE_HARMLESS),
     251    DIS_ARMV8_OP(           0x38e04000, "ldsmaxalb",       OP_ARMV8_A64_LDSMAXALB, DISOPTYPE_HARMLESS),
     252    DIS_ARMV8_OP(           0x38e05000, "ldsminalb",       OP_ARMV8_A64_LDSMINALB, DISOPTYPE_HARMLESS),
     253    DIS_ARMV8_OP(           0x38e06000, "ldumaxalb",       OP_ARMV8_A64_LDUMAXALB, DISOPTYPE_HARMLESS),
     254    DIS_ARMV8_OP(           0x38e07000, "lduminalb",       OP_ARMV8_A64_LDUMINALB, DISOPTYPE_HARMLESS),
     255    DIS_ARMV8_OP(           0x38e08000, "swpalb",          OP_ARMV8_A64_SWPALB,    DISOPTYPE_HARMLESS),
     256    DIS_ARMV8_OP_ALT_DECODE(0x38e09000, "rcwclral",        OP_ARMV8_A64_RCWCLRAL,  DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     257    DIS_ARMV8_OP_ALT_DECODE(0x38e0a000, "rcwswpal",        OP_ARMV8_A64_RCWSWPAL,  DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     258    DIS_ARMV8_OP_ALT_DECODE(0x38e0b000, "rcwsetal",        OP_ARMV8_A64_RCWSETAL,  DISOPTYPE_HARMLESS, AtomicMemoryByteThe), /* FEAT_THE */
     259    /* Rest of the encodings is invalid. */
     260DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(AtomicMemoryByte, 0xffe0fc00 /*fFixedInsn*/,
     261                                       kDisArmV8OpcDecodeCollate,
     262                            /* opc */    RT_BIT_32(12) | RT_BIT_32(13) | RT_BIT_32(14)
     263                            /* o3  */  | RT_BIT_32(15)
     264                            /* R   */  | RT_BIT_32(22)
     265                            /* A   */  | RT_BIT_32(23), 12);
     266
     267
     268/* Atomic memory operations - Halfword size variants */
     269DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(AtomicMemoryHalfword)
     270    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,       16,  5, 0 /*idxParam*/),
     271    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 1 /*idxParam*/),
     272    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     273DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryHalfwordThe)
     274    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,       16,  5, 0 /*idxParam*/),
     275    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,        0,  5, 1 /*idxParam*/),
     276    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     277DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryHalfwordLrcpc)
     278    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 0 /*idxParam*/),
     279    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     280DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(AtomicMemoryHalfword)
     281    DIS_ARMV8_OP(           0x78200000, "ldaddh",          OP_ARMV8_A64_LDADDH,    DISOPTYPE_HARMLESS),
     282    DIS_ARMV8_OP(           0x78201000, "ldclrh",          OP_ARMV8_A64_LDCLRH,    DISOPTYPE_HARMLESS),
     283    DIS_ARMV8_OP(           0x78202000, "ldeorh",          OP_ARMV8_A64_LDEORH,    DISOPTYPE_HARMLESS),
     284    DIS_ARMV8_OP(           0x78203000, "ldseth",          OP_ARMV8_A64_LDSETH,    DISOPTYPE_HARMLESS),
     285    DIS_ARMV8_OP(           0x78204000, "ldsmaxh",         OP_ARMV8_A64_LDSMAXH,   DISOPTYPE_HARMLESS),
     286    DIS_ARMV8_OP(           0x78205000, "ldsminh",         OP_ARMV8_A64_LDSMINH,   DISOPTYPE_HARMLESS),
     287    DIS_ARMV8_OP(           0x78206000, "ldumaxh",         OP_ARMV8_A64_LDUMAXH,   DISOPTYPE_HARMLESS),
     288    DIS_ARMV8_OP(           0x78207000, "lduminh",         OP_ARMV8_A64_LDUMINH,   DISOPTYPE_HARMLESS),
     289    DIS_ARMV8_OP(           0x78208000, "swph",            OP_ARMV8_A64_SWPH,      DISOPTYPE_HARMLESS),
     290    DIS_ARMV8_OP_ALT_DECODE(0x78209000, "rcwsclr",         OP_ARMV8_A64_RCWSCLR,   DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     291    DIS_ARMV8_OP_ALT_DECODE(0x7820a000, "rcwsswp",         OP_ARMV8_A64_RCWSSWP,   DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     292    DIS_ARMV8_OP_ALT_DECODE(0x7820b000, "rcwsset",         OP_ARMV8_A64_RCWSSET,   DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     293    INVALID_OPCODE,
     294    INVALID_OPCODE,
     295    INVALID_OPCODE,
     296    INVALID_OPCODE,
     297    DIS_ARMV8_OP(           0x78600000, "ldaddlh",         OP_ARMV8_A64_LDADDLH,   DISOPTYPE_HARMLESS),
     298    DIS_ARMV8_OP(           0x78601000, "ldclrlh",         OP_ARMV8_A64_LDCLRLH,   DISOPTYPE_HARMLESS),
     299    DIS_ARMV8_OP(           0x78602000, "ldeorlh",         OP_ARMV8_A64_LDEORLH,   DISOPTYPE_HARMLESS),
     300    DIS_ARMV8_OP(           0x78603000, "ldsetlh",         OP_ARMV8_A64_LDSETLH,   DISOPTYPE_HARMLESS),
     301    DIS_ARMV8_OP(           0x78604000, "ldsmaxlh",        OP_ARMV8_A64_LDSMAXLH,  DISOPTYPE_HARMLESS),
     302    DIS_ARMV8_OP(           0x78605000, "ldsminlh",        OP_ARMV8_A64_LDSMINLH,  DISOPTYPE_HARMLESS),
     303    DIS_ARMV8_OP(           0x78606000, "ldumaxlh",        OP_ARMV8_A64_LDUMAXLH,  DISOPTYPE_HARMLESS),
     304    DIS_ARMV8_OP(           0x78607000, "lduminlh",        OP_ARMV8_A64_LDUMINLH,  DISOPTYPE_HARMLESS),
     305    DIS_ARMV8_OP(           0x78608000, "swplh",           OP_ARMV8_A64_SWPLH,     DISOPTYPE_HARMLESS),
     306    DIS_ARMV8_OP_ALT_DECODE(0x78609000, "rcwsclrl",        OP_ARMV8_A64_RCWSCLRL,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     307    DIS_ARMV8_OP_ALT_DECODE(0x7860a000, "rcwsswpl",        OP_ARMV8_A64_RCWSSWPL,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     308    DIS_ARMV8_OP_ALT_DECODE(0x7860b000, "rcwssetl",        OP_ARMV8_A64_RCWSSETL,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     309    INVALID_OPCODE,
     310    INVALID_OPCODE,
     311    INVALID_OPCODE,
     312    INVALID_OPCODE,
     313    DIS_ARMV8_OP(           0x78a00000, "ldaddah",         OP_ARMV8_A64_LDADDAH,   DISOPTYPE_HARMLESS),
     314    DIS_ARMV8_OP(           0x78a01000, "ldclrah",         OP_ARMV8_A64_LDCLRAH,   DISOPTYPE_HARMLESS),
     315    DIS_ARMV8_OP(           0x78a02000, "ldeorah",         OP_ARMV8_A64_LDEORAH,   DISOPTYPE_HARMLESS),
     316    DIS_ARMV8_OP(           0x78a03000, "ldsetah",         OP_ARMV8_A64_LDSETAH,   DISOPTYPE_HARMLESS),
     317    DIS_ARMV8_OP(           0x78a04000, "ldsmaxah",        OP_ARMV8_A64_LDSMAXAH,  DISOPTYPE_HARMLESS),
     318    DIS_ARMV8_OP(           0x78a05000, "ldsminah",        OP_ARMV8_A64_LDSMINAH,  DISOPTYPE_HARMLESS),
     319    DIS_ARMV8_OP(           0x78a06000, "ldumaxah",        OP_ARMV8_A64_LDUMAXAH,  DISOPTYPE_HARMLESS),
     320    DIS_ARMV8_OP(           0x78a07000, "lduminah",        OP_ARMV8_A64_LDUMINAH,  DISOPTYPE_HARMLESS),
     321    DIS_ARMV8_OP(           0x78a08000, "swpah",           OP_ARMV8_A64_SWPAH,     DISOPTYPE_HARMLESS),
     322    DIS_ARMV8_OP_ALT_DECODE(0x78a09000, "rcwsclra",        OP_ARMV8_A64_RCWSCLRA,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     323    DIS_ARMV8_OP_ALT_DECODE(0x78a0a000, "rcwsswpa",        OP_ARMV8_A64_RCWSSWPA,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     324    DIS_ARMV8_OP_ALT_DECODE(0x78a0b000, "rcwsseta",        OP_ARMV8_A64_RCWSSETA,  DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     325    DIS_ARMV8_OP_ALT_DECODE(0x78a0c000, "ldaprh",          OP_ARMV8_A64_LDAPRH,    DISOPTYPE_HARMLESS, AtomicMemoryHalfwordLrcpc), /* FEAT_LRCPC */ /** @todo Rs == 11111 */
     326    INVALID_OPCODE,
     327    INVALID_OPCODE,
     328    INVALID_OPCODE,
     329    DIS_ARMV8_OP(           0x78e00000, "ldaddalh",        OP_ARMV8_A64_LDADDALH,  DISOPTYPE_HARMLESS),
     330    DIS_ARMV8_OP(           0x78e01000, "ldclralh",        OP_ARMV8_A64_LDCLRALH,  DISOPTYPE_HARMLESS),
     331    DIS_ARMV8_OP(           0x78e02000, "ldeoralh",        OP_ARMV8_A64_LDEORALH,  DISOPTYPE_HARMLESS),
     332    DIS_ARMV8_OP(           0x78e03000, "ldsetalh",        OP_ARMV8_A64_LDSETALH,  DISOPTYPE_HARMLESS),
     333    DIS_ARMV8_OP(           0x78e04000, "ldsmaxalh",       OP_ARMV8_A64_LDSMAXALH, DISOPTYPE_HARMLESS),
     334    DIS_ARMV8_OP(           0x78e05000, "ldsminalh",       OP_ARMV8_A64_LDSMINALH, DISOPTYPE_HARMLESS),
     335    DIS_ARMV8_OP(           0x78e06000, "ldumaxalh",       OP_ARMV8_A64_LDUMAXALH, DISOPTYPE_HARMLESS),
     336    DIS_ARMV8_OP(           0x78e07000, "lduminalh",       OP_ARMV8_A64_LDUMINALH, DISOPTYPE_HARMLESS),
     337    DIS_ARMV8_OP(           0x78e08000, "swpalh",          OP_ARMV8_A64_SWPALH,    DISOPTYPE_HARMLESS),
     338    DIS_ARMV8_OP_ALT_DECODE(0x78e09000, "rcwsclral",       OP_ARMV8_A64_RCWSCLRAL, DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     339    DIS_ARMV8_OP_ALT_DECODE(0x78e0a000, "rcwsswpal",       OP_ARMV8_A64_RCWSSWPAL, DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     340    DIS_ARMV8_OP_ALT_DECODE(0x78e0b000, "rcwssetal",       OP_ARMV8_A64_RCWSSETAL, DISOPTYPE_HARMLESS, AtomicMemoryHalfwordThe), /* FEAT_THE */
     341    /* Rest of the encodings is invalid. */
     342DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(AtomicMemoryHalfword, 0xffe0fc00 /*fFixedInsn*/,
     343                                       kDisArmV8OpcDecodeCollate,
     344                            /* opc */    RT_BIT_32(12) | RT_BIT_32(13) | RT_BIT_32(14)
     345                            /* o3  */  | RT_BIT_32(15)
     346                            /* R   */  | RT_BIT_32(22)
     347                            /* A   */  | RT_BIT_32(23), 12);
     348
     349
     350/* Atomic memory operations - Word size variants */
     351DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(AtomicMemoryWord)
     352    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,       16,  5, 0 /*idxParam*/),
     353    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 1 /*idxParam*/),
     354    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     355DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryWordLrcpc)
     356    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32,        0,  5, 0 /*idxParam*/),
     357    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     358DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(AtomicMemoryWord)
     359    DIS_ARMV8_OP(           0xb8200000, "ldadd",           OP_ARMV8_A64_LDADD,     DISOPTYPE_HARMLESS),
     360    DIS_ARMV8_OP(           0xb8201000, "ldclr",           OP_ARMV8_A64_LDCLR,     DISOPTYPE_HARMLESS),
     361    DIS_ARMV8_OP(           0xb8202000, "ldeor",           OP_ARMV8_A64_LDEOR,     DISOPTYPE_HARMLESS),
     362    DIS_ARMV8_OP(           0xb8203000, "ldset",           OP_ARMV8_A64_LDSET,     DISOPTYPE_HARMLESS),
     363    DIS_ARMV8_OP(           0xb8204000, "ldsmax",          OP_ARMV8_A64_LDSMAX,    DISOPTYPE_HARMLESS),
     364    DIS_ARMV8_OP(           0xb8205000, "ldsmin",          OP_ARMV8_A64_LDSMIN,    DISOPTYPE_HARMLESS),
     365    DIS_ARMV8_OP(           0xb8206000, "ldumax",          OP_ARMV8_A64_LDUMAX,    DISOPTYPE_HARMLESS),
     366    DIS_ARMV8_OP(           0xb8207000, "ldumin",          OP_ARMV8_A64_LDUMIN,    DISOPTYPE_HARMLESS),
     367    DIS_ARMV8_OP(           0xb8208000, "swp",             OP_ARMV8_A64_SWP,       DISOPTYPE_HARMLESS),
     368    INVALID_OPCODE,
     369    INVALID_OPCODE,
     370    INVALID_OPCODE,
     371    INVALID_OPCODE,
     372    INVALID_OPCODE,
     373    INVALID_OPCODE,
     374    INVALID_OPCODE,
     375    DIS_ARMV8_OP(           0xb8600000, "ldaddl",          OP_ARMV8_A64_LDADDL,    DISOPTYPE_HARMLESS),
     376    DIS_ARMV8_OP(           0xb8601000, "ldclrl",          OP_ARMV8_A64_LDCLRL,    DISOPTYPE_HARMLESS),
     377    DIS_ARMV8_OP(           0xb8602000, "ldeorl",          OP_ARMV8_A64_LDEORL,    DISOPTYPE_HARMLESS),
     378    DIS_ARMV8_OP(           0xb8603000, "ldsetl",          OP_ARMV8_A64_LDSETL,    DISOPTYPE_HARMLESS),
     379    DIS_ARMV8_OP(           0xb8604000, "ldsmaxl",         OP_ARMV8_A64_LDSMAXL,   DISOPTYPE_HARMLESS),
     380    DIS_ARMV8_OP(           0xb8605000, "ldsminl",         OP_ARMV8_A64_LDSMINL,   DISOPTYPE_HARMLESS),
     381    DIS_ARMV8_OP(           0xb8606000, "ldumaxl",         OP_ARMV8_A64_LDUMAXL,   DISOPTYPE_HARMLESS),
     382    DIS_ARMV8_OP(           0xb8607000, "lduminl",         OP_ARMV8_A64_LDUMINL,   DISOPTYPE_HARMLESS),
     383    DIS_ARMV8_OP(           0xb8608000, "swpl",            OP_ARMV8_A64_SWPL,      DISOPTYPE_HARMLESS),
     384    INVALID_OPCODE,
     385    INVALID_OPCODE,
     386    INVALID_OPCODE,
     387    INVALID_OPCODE,
     388    INVALID_OPCODE,
     389    INVALID_OPCODE,
     390    INVALID_OPCODE,
     391    DIS_ARMV8_OP(           0xb8a00000, "ldadda",          OP_ARMV8_A64_LDADDA,    DISOPTYPE_HARMLESS),
     392    DIS_ARMV8_OP(           0xb8a01000, "ldclra",          OP_ARMV8_A64_LDCLRA,    DISOPTYPE_HARMLESS),
     393    DIS_ARMV8_OP(           0xb8a02000, "ldeora",          OP_ARMV8_A64_LDEORA,    DISOPTYPE_HARMLESS),
     394    DIS_ARMV8_OP(           0xb8a03000, "ldseta",          OP_ARMV8_A64_LDSETA,    DISOPTYPE_HARMLESS),
     395    DIS_ARMV8_OP(           0xb8a04000, "ldsmaxa",         OP_ARMV8_A64_LDSMAXA,   DISOPTYPE_HARMLESS),
     396    DIS_ARMV8_OP(           0xb8a05000, "ldsmina",         OP_ARMV8_A64_LDSMINA,   DISOPTYPE_HARMLESS),
     397    DIS_ARMV8_OP(           0xb8a06000, "ldumaxa",         OP_ARMV8_A64_LDUMAXA,   DISOPTYPE_HARMLESS),
     398    DIS_ARMV8_OP(           0xb8a07000, "ldumina",         OP_ARMV8_A64_LDUMINA,   DISOPTYPE_HARMLESS),
     399    DIS_ARMV8_OP(           0xb8a08000, "swpa",            OP_ARMV8_A64_SWPA,      DISOPTYPE_HARMLESS),
     400    INVALID_OPCODE,
     401    INVALID_OPCODE,
     402    INVALID_OPCODE,
     403    DIS_ARMV8_OP_ALT_DECODE(0xb8a0c000, "ldapr",           OP_ARMV8_A64_LDAPR,     DISOPTYPE_HARMLESS, AtomicMemoryWordLrcpc), /* FEAT_LRCPC */ /** @todo Rs == 11111 */
     404    INVALID_OPCODE,
     405    INVALID_OPCODE,
     406    INVALID_OPCODE,
     407    DIS_ARMV8_OP(           0xb8e00000, "ldaddal",         OP_ARMV8_A64_LDADDAL,   DISOPTYPE_HARMLESS),
     408    DIS_ARMV8_OP(           0xb8e01000, "ldclral",         OP_ARMV8_A64_LDCLRAL,   DISOPTYPE_HARMLESS),
     409    DIS_ARMV8_OP(           0xb8e02000, "ldeoral",         OP_ARMV8_A64_LDEORAL,   DISOPTYPE_HARMLESS),
     410    DIS_ARMV8_OP(           0xb8e03000, "ldsetal",         OP_ARMV8_A64_LDSETAL,   DISOPTYPE_HARMLESS),
     411    DIS_ARMV8_OP(           0xb8e04000, "ldsmaxal",        OP_ARMV8_A64_LDSMAXAL,  DISOPTYPE_HARMLESS),
     412    DIS_ARMV8_OP(           0xb8e05000, "ldsminal",        OP_ARMV8_A64_LDSMINAL,  DISOPTYPE_HARMLESS),
     413    DIS_ARMV8_OP(           0xb8e06000, "ldumaxal",        OP_ARMV8_A64_LDUMAXAL,  DISOPTYPE_HARMLESS),
     414    DIS_ARMV8_OP(           0xb8e07000, "lduminal",        OP_ARMV8_A64_LDUMINAL,  DISOPTYPE_HARMLESS),
     415    DIS_ARMV8_OP(           0xb8e08000, "swpal",           OP_ARMV8_A64_SWPAL,     DISOPTYPE_HARMLESS),
     416    /* Rest of the encodings is invalid. */
     417DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(AtomicMemoryWord, 0xffe0fc00 /*fFixedInsn*/,
     418                                       kDisArmV8OpcDecodeCollate,
     419                            /* opc */    RT_BIT_32(12) | RT_BIT_32(13) | RT_BIT_32(14)
     420                            /* o3  */  | RT_BIT_32(15)
     421                            /* R   */  | RT_BIT_32(22)
     422                            /* A   */  | RT_BIT_32(23), 12);
     423
     424
     425/* Atomic memory operations - Word size variants */
     426DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(AtomicMemoryDWord)
     427    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,       16,  5, 0 /*idxParam*/),
     428    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,        0,  5, 1 /*idxParam*/),
     429    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 2 /*idxParam*/),
     430DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(AtomicMemoryDWordLrcpc)
     431    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64,        0,  5, 0 /*idxParam*/),
     432    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,      5,  5, 1 /*idxParam*/),
     433DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(AtomicMemoryDWord)
     434    DIS_ARMV8_OP(           0xf8200000, "ldadd",           OP_ARMV8_A64_LDADD,     DISOPTYPE_HARMLESS),
     435    DIS_ARMV8_OP(           0xf8201000, "ldclr",           OP_ARMV8_A64_LDCLR,     DISOPTYPE_HARMLESS),
     436    DIS_ARMV8_OP(           0xf8202000, "ldeor",           OP_ARMV8_A64_LDEOR,     DISOPTYPE_HARMLESS),
     437    DIS_ARMV8_OP(           0xf8203000, "ldset",           OP_ARMV8_A64_LDSET,     DISOPTYPE_HARMLESS),
     438    DIS_ARMV8_OP(           0xf8204000, "ldsmax",          OP_ARMV8_A64_LDSMAX,    DISOPTYPE_HARMLESS),
     439    DIS_ARMV8_OP(           0xf8205000, "ldsmin",          OP_ARMV8_A64_LDSMIN,    DISOPTYPE_HARMLESS),
     440    DIS_ARMV8_OP(           0xf8206000, "ldumax",          OP_ARMV8_A64_LDUMAX,    DISOPTYPE_HARMLESS),
     441    DIS_ARMV8_OP(           0xf8207000, "ldumin",          OP_ARMV8_A64_LDUMIN,    DISOPTYPE_HARMLESS),
     442    DIS_ARMV8_OP(           0xf8208000, "swp",             OP_ARMV8_A64_SWP,       DISOPTYPE_HARMLESS),
     443    INVALID_OPCODE,
     444    INVALID_OPCODE,
     445    INVALID_OPCODE,
     446    INVALID_OPCODE,
     447    INVALID_OPCODE,
     448    INVALID_OPCODE,
     449    INVALID_OPCODE,
     450    DIS_ARMV8_OP(           0xf8600000, "ldaddl",          OP_ARMV8_A64_LDADDL,    DISOPTYPE_HARMLESS),
     451    DIS_ARMV8_OP(           0xf8601000, "ldclrl",          OP_ARMV8_A64_LDCLRL,    DISOPTYPE_HARMLESS),
     452    DIS_ARMV8_OP(           0xf8602000, "ldeorl",          OP_ARMV8_A64_LDEORL,    DISOPTYPE_HARMLESS),
     453    DIS_ARMV8_OP(           0xf8603000, "ldsetl",          OP_ARMV8_A64_LDSETL,    DISOPTYPE_HARMLESS),
     454    DIS_ARMV8_OP(           0xf8604000, "ldsmaxl",         OP_ARMV8_A64_LDSMAXL,   DISOPTYPE_HARMLESS),
     455    DIS_ARMV8_OP(           0xf8605000, "ldsminl",         OP_ARMV8_A64_LDSMINL,   DISOPTYPE_HARMLESS),
     456    DIS_ARMV8_OP(           0xf8606000, "ldumaxl",         OP_ARMV8_A64_LDUMAXL,   DISOPTYPE_HARMLESS),
     457    DIS_ARMV8_OP(           0xf8607000, "lduminl",         OP_ARMV8_A64_LDUMINL,   DISOPTYPE_HARMLESS),
     458    DIS_ARMV8_OP(           0xf8608000, "swpl",            OP_ARMV8_A64_SWPL,      DISOPTYPE_HARMLESS),
     459    INVALID_OPCODE, /** @todo ST64B   - FEAT_LS64 */
     460    INVALID_OPCODE, /** @todo ST64BV0 - FEAT_LS64_ACCDATA */
     461    INVALID_OPCODE, /** @todo ST64BV  - FEAT_LS64_V */
     462    INVALID_OPCODE,
     463    INVALID_OPCODE, /** @todo LD64B   - FEAT_LS64 */
     464    INVALID_OPCODE,
     465    INVALID_OPCODE,
     466    DIS_ARMV8_OP(           0xf8a00000, "ldadda",          OP_ARMV8_A64_LDADDA,    DISOPTYPE_HARMLESS),
     467    DIS_ARMV8_OP(           0xf8a01000, "ldclra",          OP_ARMV8_A64_LDCLRA,    DISOPTYPE_HARMLESS),
     468    DIS_ARMV8_OP(           0xf8a02000, "ldeora",          OP_ARMV8_A64_LDEORA,    DISOPTYPE_HARMLESS),
     469    DIS_ARMV8_OP(           0xf8a03000, "ldseta",          OP_ARMV8_A64_LDSETA,    DISOPTYPE_HARMLESS),
     470    DIS_ARMV8_OP(           0xf8a04000, "ldsmaxa",         OP_ARMV8_A64_LDSMAXA,   DISOPTYPE_HARMLESS),
     471    DIS_ARMV8_OP(           0xf8a05000, "ldsmina",         OP_ARMV8_A64_LDSMINA,   DISOPTYPE_HARMLESS),
     472    DIS_ARMV8_OP(           0xf8a06000, "ldumaxa",         OP_ARMV8_A64_LDUMAXA,   DISOPTYPE_HARMLESS),
     473    DIS_ARMV8_OP(           0xf8a07000, "ldumina",         OP_ARMV8_A64_LDUMINA,   DISOPTYPE_HARMLESS),
     474    DIS_ARMV8_OP(           0xf8a08000, "swpa",            OP_ARMV8_A64_SWPA,      DISOPTYPE_HARMLESS),
     475    INVALID_OPCODE,
     476    INVALID_OPCODE,
     477    INVALID_OPCODE,
     478    DIS_ARMV8_OP_ALT_DECODE(0xf8a0c000, "ldapr",           OP_ARMV8_A64_LDAPR,     DISOPTYPE_HARMLESS, AtomicMemoryDWordLrcpc), /* FEAT_LRCPC */ /** @todo Rs == 11111 */
     479    INVALID_OPCODE,
     480    INVALID_OPCODE,
     481    INVALID_OPCODE,
     482    DIS_ARMV8_OP(           0xf8e00000, "ldaddal",         OP_ARMV8_A64_LDADDAL,   DISOPTYPE_HARMLESS),
     483    DIS_ARMV8_OP(           0xf8e01000, "ldclral",         OP_ARMV8_A64_LDCLRAL,   DISOPTYPE_HARMLESS),
     484    DIS_ARMV8_OP(           0xf8e02000, "ldeoral",         OP_ARMV8_A64_LDEORAL,   DISOPTYPE_HARMLESS),
     485    DIS_ARMV8_OP(           0xf8e03000, "ldsetal",         OP_ARMV8_A64_LDSETAL,   DISOPTYPE_HARMLESS),
     486    DIS_ARMV8_OP(           0xf8e04000, "ldsmaxal",        OP_ARMV8_A64_LDSMAXAL,  DISOPTYPE_HARMLESS),
     487    DIS_ARMV8_OP(           0xf8e05000, "ldsminal",        OP_ARMV8_A64_LDSMINAL,  DISOPTYPE_HARMLESS),
     488    DIS_ARMV8_OP(           0xf8e06000, "ldumaxal",        OP_ARMV8_A64_LDUMAXAL,  DISOPTYPE_HARMLESS),
     489    DIS_ARMV8_OP(           0xf8e07000, "lduminal",        OP_ARMV8_A64_LDUMINAL,  DISOPTYPE_HARMLESS),
     490    DIS_ARMV8_OP(           0xf8e08000, "swpal",           OP_ARMV8_A64_SWPAL,     DISOPTYPE_HARMLESS),
     491    /* Rest of the encodings is invalid. */
     492DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(AtomicMemoryDWord, 0xffe0fc00 /*fFixedInsn*/,
     493                                       kDisArmV8OpcDecodeCollate,
     494                            /* opc */    RT_BIT_32(12) | RT_BIT_32(13) | RT_BIT_32(14)
     495                            /* o3  */  | RT_BIT_32(15)
     496                            /* R   */  | RT_BIT_32(22)
     497                            /* A   */  | RT_BIT_32(23), 12);
     498
     499
     500/*
     501 * C4.1.94.29 - Loads and Stores - Atomic memory oeprations
     502 *
     503 * Differentiate further based on the size field.
     504 */
     505DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(AtomicMemory)
     506    DIS_ARMV8_DECODE_MAP_ENTRY(AtomicMemoryByte),
     507    DIS_ARMV8_DECODE_MAP_ENTRY(AtomicMemoryHalfword),
     508    DIS_ARMV8_DECODE_MAP_ENTRY(AtomicMemoryWord),
     509    DIS_ARMV8_DECODE_MAP_ENTRY(AtomicMemoryDWord),
     510DIS_ARMV8_DECODE_MAP_DEFINE_END(AtomicMemory, RT_BIT_32(30) | RT_BIT_32(31), 30);
     511
     512
    186513/*
    187514 * C4.1.94 - Loads and Stores - Load/Store register variants
     
    197524 */
    198525DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegOp2_11_1)
    199     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,         /** @todo */
     526    DIS_ARMV8_DECODE_MAP_ENTRY(AtomicMemory),
    200527    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPac),
    201528    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegOff),
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106760 r106767  
    30903090        ;cnt   x0, x1  - Requires FEAT_CSSC
    30913091
     3092
     3093        ; Atomic memory operations
     3094
     3095        ldaddb w1,  w2,  [x0]
     3096        ldaddb wzr, wzr, [sp]
     3097
     3098        ldclrb w1,  w2,  [x0]
     3099        ldclrb wzr, wzr, [sp]
     3100
     3101        ldeorb w1,  w2,  [x0]
     3102        ldeorb wzr, wzr, [sp]
     3103
     3104        ldsetb w1,  w2,  [x0]
     3105        ldsetb wzr, wzr, [sp]
     3106
     3107        ldsmaxb w1,  w2,  [x0]
     3108        ldsmaxb wzr, wzr, [sp]
     3109
     3110        ldsminb w1,  w2,  [x0]
     3111        ldsminb wzr, wzr, [sp]
     3112
     3113        ldumaxb w1,  w2,  [x0]
     3114        ldumaxb wzr, wzr, [sp]
     3115
     3116        lduminb w1,  w2,  [x0]
     3117        lduminb wzr, wzr, [sp]
     3118
     3119        swpb w1,  w2,  [x0]
     3120        swpb wzr, wzr, [sp]
     3121
     3122        ;rcwclr x1,  x2,  [x0] - Requires FEAT_THE
     3123        ;rcwclr xzr, xzr, [sp] - Requires FEAT_THE
     3124
     3125        ;rcwswp x1,  x2,  [x0] - Requires FEAT_THE
     3126        ;rcwswp xzr, xzr, [sp] - Requires FEAT_THE
     3127
     3128        ;rcwset x1,  x2,  [x0] - Requires FEAT_THE
     3129        ;rcwset xzr, xzr, [sp] - Requires FEAT_THE
     3130
     3131        ldaddlb w1,  w2,  [x0]
     3132        ldaddlb wzr, wzr, [sp]
     3133
     3134        ldclrlb w1,  w2,  [x0]
     3135        ldclrlb wzr, wzr, [sp]
     3136
     3137        ldeorlb w1,  w2,  [x0]
     3138        ldeorlb wzr, wzr, [sp]
     3139
     3140        ldsetlb w1,  w2,  [x0]
     3141        ldsetlb wzr, wzr, [sp]
     3142
     3143        ldsmaxlb w1,  w2,  [x0]
     3144        ldsmaxlb wzr, wzr, [sp]
     3145
     3146        ldsminlb w1,  w2,  [x0]
     3147        ldsminlb wzr, wzr, [sp]
     3148
     3149        ldumaxlb w1,  w2,  [x0]
     3150        ldumaxlb wzr, wzr, [sp]
     3151
     3152        lduminlb w1,  w2,  [x0]
     3153        lduminlb wzr, wzr, [sp]
     3154
     3155        swplb w1,  w2,  [x0]
     3156        swplb wzr, wzr, [sp]
     3157
     3158        ;rcwclrl x1,  x2,  [x0] - Requires FEAT_THE
     3159        ;rcwclrl xzr, xzr, [sp] - Requires FEAT_THE
     3160
     3161        ;rcwswpl x1,  x2,  [x0] - Requires FEAT_THE
     3162        ;rcwswpl xzr, xzr, [sp] - Requires FEAT_THE
     3163
     3164        ;rcwsetl x1,  x2,  [x0] - Requires FEAT_THE
     3165        ;rcwsetl xzr, xzr, [sp] - Requires FEAT_THE
     3166
     3167        ldaddab w1,  w2,  [x0]
     3168        ldaddab wzr, wzr, [sp]
     3169
     3170        ldclrab w1,  w2,  [x0]
     3171        ldclrab wzr, wzr, [sp]
     3172
     3173        ldeorab w1,  w2,  [x0]
     3174        ldeorab wzr, wzr, [sp]
     3175
     3176        ldsetab w1,  w2,  [x0]
     3177        ldsetab wzr, wzr, [sp]
     3178
     3179        ldsmaxab w1,  w2,  [x0]
     3180        ldsmaxab wzr, wzr, [sp]
     3181
     3182        ldsminab w1,  w2,  [x0]
     3183        ldsminab wzr, wzr, [sp]
     3184
     3185        ldumaxab w1,  w2,  [x0]
     3186        ldumaxab wzr, wzr, [sp]
     3187
     3188        lduminab w1,  w2,  [x0]
     3189        lduminab wzr, wzr, [sp]
     3190
     3191        swpab w1,  w2,  [x0]
     3192        swpab wzr, wzr, [sp]
     3193
     3194        ;rcwclra x1,  x2,  [x0] - Requires FEAT_THE
     3195        ;rcwclra xzr, xzr, [sp] - Requires FEAT_THE
     3196
     3197        ;rcwswpa x1,  x2,  [x0] - Requires FEAT_THE
     3198        ;rcwswpa xzr, xzr, [sp] - Requires FEAT_THE
     3199
     3200        ;rcwseta x1,  x2,  [x0] - Requires FEAT_THE
     3201        ;rcwseta xzr, xzr, [sp] - Requires FEAT_THE
     3202
     3203        ldaprb w0, [x1]
     3204        ldaprb wzr, [sp]
     3205
     3206        ldaddalb w1,  w2,  [x0]
     3207        ldaddalb wzr, wzr, [sp]
     3208
     3209        ldclralb w1,  w2,  [x0]
     3210        ldclralb wzr, wzr, [sp]
     3211
     3212        ldeoralb w1,  w2,  [x0]
     3213        ldeoralb wzr, wzr, [sp]
     3214
     3215        ldsetalb w1,  w2,  [x0]
     3216        ldsetalb wzr, wzr, [sp]
     3217
     3218        ldsmaxalb w1,  w2,  [x0]
     3219        ldsmaxalb wzr, wzr, [sp]
     3220
     3221        ldsminalb w1,  w2,  [x0]
     3222        ldsminalb wzr, wzr, [sp]
     3223
     3224        ldumaxalb w1,  w2,  [x0]
     3225        ldumaxalb wzr, wzr, [sp]
     3226
     3227        lduminalb w1,  w2,  [x0]
     3228        lduminalb wzr, wzr, [sp]
     3229
     3230        swpalb w1,  w2,  [x0]
     3231        swpalb wzr, wzr, [sp]
     3232
     3233        ;rcwclral x1,  x2,  [x0] - Requires FEAT_THE
     3234        ;rcwclral xzr, xzr, [sp] - Requires FEAT_THE
     3235
     3236        ;rcwswpal x1,  x2,  [x0] - Requires FEAT_THE
     3237        ;rcwswpal xzr, xzr, [sp] - Requires FEAT_THE
     3238
     3239        ;rcwsetal x1,  x2,  [x0] - Requires FEAT_THE
     3240        ;rcwsetal xzr, xzr, [sp] - Requires FEAT_THE
     3241
     3242        ldaddh w1,  w2,  [x0]
     3243        ldaddh wzr, wzr, [sp]
     3244
     3245        ldclrh w1,  w2,  [x0]
     3246        ldclrh wzr, wzr, [sp]
     3247
     3248        ldeorh w1,  w2,  [x0]
     3249        ldeorh wzr, wzr, [sp]
     3250
     3251        ldseth w1,  w2,  [x0]
     3252        ldseth wzr, wzr, [sp]
     3253
     3254        ldsmaxh w1,  w2,  [x0]
     3255        ldsmaxh wzr, wzr, [sp]
     3256
     3257        ldsminh w1,  w2,  [x0]
     3258        ldsminh wzr, wzr, [sp]
     3259
     3260        ldumaxh w1,  w2,  [x0]
     3261        ldumaxh wzr, wzr, [sp]
     3262
     3263        lduminh w1,  w2,  [x0]
     3264        lduminh wzr, wzr, [sp]
     3265
     3266        swph w1,  w2,  [x0]
     3267        swph wzr, wzr, [sp]
     3268
     3269        ;rcwsclr x1,  x2,  [x0] - Requires FEAT_THE
     3270        ;rcwsclr xzr, xzr, [sp] - Requires FEAT_THE
     3271
     3272        ;rcwsswp x1,  x2,  [x0] - Requires FEAT_THE
     3273        ;rcwsswp xzr, xzr, [sp] - Requires FEAT_THE
     3274
     3275        ;rcwsset x1,  x2,  [x0] - Requires FEAT_THE
     3276        ;rcwsset xzr, xzr, [sp] - Requires FEAT_THE
     3277
     3278        ldaddlh w1,  w2,  [x0]
     3279        ldaddlh wzr, wzr, [sp]
     3280
     3281        ldclrlh w1,  w2,  [x0]
     3282        ldclrlh wzr, wzr, [sp]
     3283
     3284        ldeorlh w1,  w2,  [x0]
     3285        ldeorlh wzr, wzr, [sp]
     3286
     3287        ldsetlh w1,  w2,  [x0]
     3288        ldsetlh wzr, wzr, [sp]
     3289
     3290        ldsmaxlh w1,  w2,  [x0]
     3291        ldsmaxlh wzr, wzr, [sp]
     3292
     3293        ldsminlh w1,  w2,  [x0]
     3294        ldsminlh wzr, wzr, [sp]
     3295
     3296        ldumaxlh w1,  w2,  [x0]
     3297        ldumaxlh wzr, wzr, [sp]
     3298
     3299        lduminlh w1,  w2,  [x0]
     3300        lduminlh wzr, wzr, [sp]
     3301
     3302        swplh w1,  w2,  [x0]
     3303        swplh wzr, wzr, [sp]
     3304
     3305        ;rcwsclrl x1,  x2,  [x0] - Requires FEAT_THE
     3306        ;rcwsclrl xzr, xzr, [sp] - Requires FEAT_THE
     3307
     3308        ;rcwsswpl x1,  x2,  [x0] - Requires FEAT_THE
     3309        ;rcwsswpl xzr, xzr, [sp] - Requires FEAT_THE
     3310
     3311        ;rcwssetl x1,  x2,  [x0] - Requires FEAT_THE
     3312        ;rcwssetl xzr, xzr, [sp] - Requires FEAT_THE
     3313
     3314        ldaddah w1,  w2,  [x0]
     3315        ldaddah wzr, wzr, [sp]
     3316
     3317        ldclrah w1,  w2,  [x0]
     3318        ldclrah wzr, wzr, [sp]
     3319
     3320        ldeorah w1,  w2,  [x0]
     3321        ldeorah wzr, wzr, [sp]
     3322
     3323        ldsetah w1,  w2,  [x0]
     3324        ldsetah wzr, wzr, [sp]
     3325
     3326        ldsmaxah w1,  w2,  [x0]
     3327        ldsmaxah wzr, wzr, [sp]
     3328
     3329        ldsminah w1,  w2,  [x0]
     3330        ldsminah wzr, wzr, [sp]
     3331
     3332        ldumaxah w1,  w2,  [x0]
     3333        ldumaxah wzr, wzr, [sp]
     3334
     3335        lduminah w1,  w2,  [x0]
     3336        lduminah wzr, wzr, [sp]
     3337
     3338        swpah w1,  w2,  [x0]
     3339        swpah wzr, wzr, [sp]
     3340
     3341        ;rcwsclra x1,  x2,  [x0] - Requires FEAT_THE
     3342        ;rcwsclra xzr, xzr, [sp] - Requires FEAT_THE
     3343
     3344        ;rcwsswpa x1,  x2,  [x0] - Requires FEAT_THE
     3345        ;rcwsswpa xzr, xzr, [sp] - Requires FEAT_THE
     3346
     3347        ;rcwsseta x1,  x2,  [x0] - Requires FEAT_THE
     3348        ;rcwsseta xzr, xzr, [sp] - Requires FEAT_THE
     3349
     3350        ldaprh w0, [x1]
     3351        ldaprh wzr, [sp]
     3352
     3353        ldaddalh w1,  w2,  [x0]
     3354        ldaddalh wzr, wzr, [sp]
     3355
     3356        ldclralh w1,  w2,  [x0]
     3357        ldclralh wzr, wzr, [sp]
     3358
     3359        ldeoralh w1,  w2,  [x0]
     3360        ldeoralh wzr, wzr, [sp]
     3361
     3362        ldsetalh w1,  w2,  [x0]
     3363        ldsetalh wzr, wzr, [sp]
     3364
     3365        ldsmaxalh w1,  w2,  [x0]
     3366        ldsmaxalh wzr, wzr, [sp]
     3367
     3368        ldsminalh w1,  w2,  [x0]
     3369        ldsminalh wzr, wzr, [sp]
     3370
     3371        ldumaxalh w1,  w2,  [x0]
     3372        ldumaxalh wzr, wzr, [sp]
     3373
     3374        lduminalh w1,  w2,  [x0]
     3375        lduminalh wzr, wzr, [sp]
     3376
     3377        swpalh w1,  w2,  [x0]
     3378        swpalh wzr, wzr, [sp]
     3379
     3380        ;rcwsclral x1,  x2,  [x0] - Requires FEAT_THE
     3381        ;rcwsclral xzr, xzr, [sp] - Requires FEAT_THE
     3382
     3383        ;rcwsswpal x1,  x2,  [x0] - Requires FEAT_THE
     3384        ;rcwsswpal xzr, xzr, [sp] - Requires FEAT_THE
     3385
     3386        ;rcwssetal x1,  x2,  [x0] - Requires FEAT_THE
     3387        ;rcwssetal xzr, xzr, [sp] - Requires FEAT_THE
     3388
     3389        ldadd w1,  w2,  [x0]
     3390        ldadd wzr, wzr, [sp]
     3391        ldadd x1,  x2,  [x0]
     3392        ldadd xzr, xzr, [sp]
     3393
     3394        ldclr w1,  w2,  [x0]
     3395        ldclr wzr, wzr, [sp]
     3396        ldclr x1,  x2,  [x0]
     3397        ldclr xzr, xzr, [sp]
     3398
     3399        ldeor w1,  w2,  [x0]
     3400        ldeor wzr, wzr, [sp]
     3401        ldeor x1,  x2,  [x0]
     3402        ldeor xzr, xzr, [sp]
     3403
     3404        ldset w1,  w2,  [x0]
     3405        ldset wzr, wzr, [sp]
     3406        ldset x1,  x2,  [x0]
     3407        ldset xzr, xzr, [sp]
     3408
     3409        ldsmax w1,  w2,  [x0]
     3410        ldsmax wzr, wzr, [sp]
     3411        ldsmax x1,  x2,  [x0]
     3412        ldsmax xzr, xzr, [sp]
     3413
     3414        ldsmin w1,  w2,  [x0]
     3415        ldsmin wzr, wzr, [sp]
     3416        ldsmin x1,  x2,  [x0]
     3417        ldsmin xzr, xzr, [sp]
     3418
     3419        ldumax w1,  w2,  [x0]
     3420        ldumax wzr, wzr, [sp]
     3421        ldumax x1,  x2,  [x0]
     3422        ldumax xzr, xzr, [sp]
     3423
     3424        ldumin w1,  w2,  [x0]
     3425        ldumin wzr, wzr, [sp]
     3426        ldumin x1,  x2,  [x0]
     3427        ldumin xzr, xzr, [sp]
     3428
     3429        swp w1,  w2,  [x0]
     3430        swp wzr, wzr, [sp]
     3431        swp x1,  x2,  [x0]
     3432        swp xzr, xzr, [sp]
     3433
     3434        ldaddl w1,  w2,  [x0]
     3435        ldaddl wzr, wzr, [sp]
     3436        ldaddl x1,  x2,  [x0]
     3437        ldaddl xzr, xzr, [sp]
     3438
     3439        ldclrl w1,  w2,  [x0]
     3440        ldclrl wzr, wzr, [sp]
     3441        ldclrl x1,  x2,  [x0]
     3442        ldclrl xzr, xzr, [sp]
     3443
     3444        ldeorl w1,  w2,  [x0]
     3445        ldeorl wzr, wzr, [sp]
     3446        ldeorl x1,  x2,  [x0]
     3447        ldeorl xzr, xzr, [sp]
     3448
     3449        ldsetl w1,  w2,  [x0]
     3450        ldsetl wzr, wzr, [sp]
     3451        ldsetl x1,  x2,  [x0]
     3452        ldsetl xzr, xzr, [sp]
     3453
     3454        ldsmaxl w1,  w2,  [x0]
     3455        ldsmaxl wzr, wzr, [sp]
     3456        ldsmaxl x1,  x2,  [x0]
     3457        ldsmaxl xzr, xzr, [sp]
     3458
     3459        ldsminl w1,  w2,  [x0]
     3460        ldsminl wzr, wzr, [sp]
     3461        ldsminl x1,  x2,  [x0]
     3462        ldsminl xzr, xzr, [sp]
     3463
     3464        ldumaxl w1,  w2,  [x0]
     3465        ldumaxl wzr, wzr, [sp]
     3466        ldumaxl x1,  x2,  [x0]
     3467        ldumaxl xzr, xzr, [sp]
     3468
     3469        lduminl w1,  w2,  [x0]
     3470        lduminl wzr, wzr, [sp]
     3471        lduminl x1,  x2,  [x0]
     3472        lduminl xzr, xzr, [sp]
     3473
     3474        swpl w1,  w2,  [x0]
     3475        swpl wzr, wzr, [sp]
     3476        swpl x1,  x2,  [x0]
     3477        swpl xzr, xzr, [sp]
     3478
     3479        ldadda w1,  w2,  [x0]
     3480        ldadda wzr, wzr, [sp]
     3481        ldadda x1,  x2,  [x0]
     3482        ldadda xzr, xzr, [sp]
     3483
     3484        ldclra w1,  w2,  [x0]
     3485        ldclra wzr, wzr, [sp]
     3486        ldclra x1,  x2,  [x0]
     3487        ldclra xzr, xzr, [sp]
     3488
     3489        ldeora w1,  w2,  [x0]
     3490        ldeora wzr, wzr, [sp]
     3491        ldeora x1,  x2,  [x0]
     3492        ldeora xzr, xzr, [sp]
     3493
     3494        ldseta w1,  w2,  [x0]
     3495        ldseta wzr, wzr, [sp]
     3496        ldseta x1,  x2,  [x0]
     3497        ldseta xzr, xzr, [sp]
     3498
     3499        ldsmaxa w1,  w2,  [x0]
     3500        ldsmaxa wzr, wzr, [sp]
     3501        ldsmaxa x1,  x2,  [x0]
     3502        ldsmaxa xzr, xzr, [sp]
     3503
     3504        ldsmina w1,  w2,  [x0]
     3505        ldsmina wzr, wzr, [sp]
     3506        ldsmina x1,  x2,  [x0]
     3507        ldsmina xzr, xzr, [sp]
     3508
     3509        ldumaxa w1,  w2,  [x0]
     3510        ldumaxa wzr, wzr, [sp]
     3511        ldumaxa x1,  x2,  [x0]
     3512        ldumaxa xzr, xzr, [sp]
     3513
     3514        ldumina w1,  w2,  [x0]
     3515        ldumina wzr, wzr, [sp]
     3516        ldumina x1,  x2,  [x0]
     3517        ldumina xzr, xzr, [sp]
     3518
     3519        swpa w1,  w2,  [x0]
     3520        swpa wzr, wzr, [sp]
     3521        swpa x1,  x2,  [x0]
     3522        swpa xzr, xzr, [sp]
     3523
     3524        ldapr w0, [x1]
     3525        ldapr wzr, [sp]
     3526        ldapr x0, [x1]
     3527        ldapr xzr, [sp]
     3528
     3529        ldaddal w1,  w2,  [x0]
     3530        ldaddal wzr, wzr, [sp]
     3531        ldaddal x1,  x2,  [x0]
     3532        ldaddal xzr, xzr, [sp]
     3533
     3534        ldclral w1,  w2,  [x0]
     3535        ldclral wzr, wzr, [sp]
     3536        ldclral x1,  x2,  [x0]
     3537        ldclral xzr, xzr, [sp]
     3538
     3539        ldeoral w1,  w2,  [x0]
     3540        ldeoral wzr, wzr, [sp]
     3541        ldeoral x1,  x2,  [x0]
     3542        ldeoral xzr, xzr, [sp]
     3543
     3544        ldsetal w1,  w2,  [x0]
     3545        ldsetal wzr, wzr, [sp]
     3546        ldsetal x1,  x2,  [x0]
     3547        ldsetal xzr, xzr, [sp]
     3548
     3549        ldsmaxal w1,  w2,  [x0]
     3550        ldsmaxal wzr, wzr, [sp]
     3551        ldsmaxal x1,  x2,  [x0]
     3552        ldsmaxal xzr, xzr, [sp]
     3553
     3554        ldsminal w1,  w2,  [x0]
     3555        ldsminal wzr, wzr, [sp]
     3556        ldsminal x1,  x2,  [x0]
     3557        ldsminal xzr, xzr, [sp]
     3558
     3559        ldumaxal w1,  w2,  [x0]
     3560        ldumaxal wzr, wzr, [sp]
     3561        ldumaxal x1,  x2,  [x0]
     3562        ldumaxal xzr, xzr, [sp]
     3563
     3564        lduminal w1,  w2,  [x0]
     3565        lduminal wzr, wzr, [sp]
     3566        lduminal x1,  x2,  [x0]
     3567        lduminal xzr, xzr, [sp]
     3568
     3569        swpal w1,  w2,  [x0]
     3570        swpal wzr, wzr, [sp]
     3571        swpal x1,  x2,  [x0]
     3572        swpal xzr, xzr, [sp]
     3573
    30923574        ;
    30933575        ; Keep last so the testcase can catch errors in
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