Previous 199869 Revisions Next

r34590 Saturday 24th January, 2015 at 17:53:01 UTC by Samuele Zannoli
i386: add disassembly of opcodes MOVHLPS and movLHPS (nw)

They differentiate from movlps and movhps by bits 7-6 of the modrm byte
[src/emu/cpu/i386]i386dasm.c

trunk/src/emu/cpu/i386/i386dasm.c
r243101r243102
9898#define ALWAYS64            0x400
9999#define SPECIAL64           0x800
100100#define SPECIAL64_ENT(x)    (SPECIAL64 | ((x) << 24))
101#define GROUP_MOD         0x1000
101102
102103struct I386_OPCODE {
103104   const char *mnemonic;
r243101r243102
425426      "movupd\0"
426427      "movsd\0"
427428      "movss",            MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },
429   {"group0F12",      GROUP|GROUP_MOD, 0,                  0,                  0                   },
428430   {"movlps\0"
429431      "movlpd\0"
430      "movddup\0"
431      "movsldup",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
432   {"movlps\0"
433      "movlpd\0"
434432      "???\0"
435433      "???",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },
436434   {"unpcklps\0"
r243101r243102
441439      "unpckhpd\0"
442440      "???\0"
443441      "???",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
442   { "group0F16",     GROUP|GROUP_MOD, 0,                  0,                  0                   },
444443   {"movhps\0"
445444      "movhpd\0"
446445      "???\0"
447      "movshdup",     MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },
448   {"movhps\0"
449      "movhpd\0"
450      "???\0"
451      "???",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
446      "???",              MODRM|VAR_NAME4,PARAM_XMMM,          PARAM_XMM,         0               },
452447   {"group0F18",       GROUP,          0,                  0,                  0               },
453448   {"nop_hint",        0,              PARAM_RMPTR8,               0,                  0               },
454449   {"nop_hint",        0,              PARAM_RMPTR8,               0,                  0               },
r243101r243102
18101805   {"???",             0,              0,                  0,                  0               }
18111806};
18121807
1808static const I386_OPCODE group0F12_table[4] =
1809{
1810   { "movlps\0"
1811      "movlpd\0"
1812      "movddup\0"
1813      "movsldup",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
1814   { "movlps\0"
1815      "movlpd\0"
1816      "movddup\0"
1817      "movsldup",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
1818   { "movlps\0"
1819      "movlpd\0"
1820      "movddup\0"
1821      "movsldup",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },
1822   { "movhlps\0"
1823      "???\0"
1824      "movddup\0"
1825      "movsldup",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               }
1826};
1827
1828static const I386_OPCODE group0F16_table[4] =
1829{
1830   { "movhps\0"
1831      "movhpd\0"
1832      "???\0"
1833      "movshdup",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },
1834   { "movhps\0"
1835      "movhpd\0"
1836      "???\0"
1837      "movshdup",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },
1838   { "movhps\0"
1839      "movhpd\0"
1840      "???\0"
1841      "movshdup",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },
1842   { "movlhps\0"
1843      "movhpd\0"
1844      "???\0"
1845      "movshdup",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               }
1846};
1847
18131848static const I386_OPCODE group0F18_table[8] =
18141849{
18151850   {"prefetchnta",     0,              PARAM_RM8,          0,                  0               },
r243101r243102
19161951   { "group0F00",          group0F00_table         },
19171952   { "group0F01",          group0F01_table         },
19181953   { "group0F0D",          group0F0D_table         },
1919   { "group0F18",          group0F18_table         },
1954   { "group0F12",          group0F12_table         },
1955   { "group0F16",          group0F16_table         },
1956   { "group0F18",           group0F18_table         },
19201957   { "group0F71",          group0F71_table         },
19211958   { "group0F72",          group0F72_table         },
19221959   { "group0F73",          group0F73_table         },
r243101r243102
19541991
19551992#define MODRM_REG1  ((modrm >> 3) & 0x7)
19561993#define MODRM_REG2  (modrm & 0x7)
1994#define MODRM_MOD   ((modrm >> 6) & 0x3)
19571995
19581996INLINE UINT8 FETCH(void)
19591997{
r243101r243102
29592997         handle_modrm( modrm_string );
29602998         for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) {
29612999            if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) {
2962               decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );
3000               if (op->flags & GROUP_MOD)
3001                  decode_opcode( s, &group_op_table[i].opcode[MODRM_MOD], op1 );
3002               else
3003                  decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );
29633004               return;
29643005            }
29653006         }


Previous 199869 Revisions Next


© 1997-2024 The MAME Team