mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
VS2015 fixes in SPARC, disassemble VIS II SIAM (nw)
This commit is contained in:
parent
c19d656617
commit
2d01c1abdc
@ -1778,7 +1778,7 @@ void mb86901_device::execute_store(UINT32 op)
|
||||
//byte_mask = 15;
|
||||
data0 = REG(RD);
|
||||
}
|
||||
else if (STH or STHA)
|
||||
else if (STH || STHA)
|
||||
{
|
||||
if ((address & 3) == 0)
|
||||
{
|
||||
@ -1791,7 +1791,7 @@ void mb86901_device::execute_store(UINT32 op)
|
||||
data0 = REG(RD);
|
||||
}
|
||||
}
|
||||
else if (STB or STBA)
|
||||
else if (STB || STBA)
|
||||
{
|
||||
if ((address & 3) == 0)
|
||||
{
|
||||
@ -2029,7 +2029,7 @@ void mb86901_device::execute_load(UINT32 op)
|
||||
}
|
||||
}
|
||||
|
||||
UINT32 word0;
|
||||
UINT32 word0(0);
|
||||
if (!m_trap)
|
||||
{
|
||||
UINT32 data = read_sized_word(addr_space, address, (LD || LDD || LDA || LDDA) ? 4 : ((LDUH || LDSH || LDUHA || LDSHA) ? 2 : 1));
|
||||
@ -2193,7 +2193,7 @@ void mb86901_device::execute_ldstub(UINT32 op)
|
||||
}
|
||||
}
|
||||
|
||||
UINT32 data;
|
||||
UINT32 data(0);
|
||||
if (!m_trap)
|
||||
{
|
||||
while (m_pb_block_ldst_byte || m_pb_block_ldst_word)
|
||||
@ -2257,7 +2257,7 @@ void mb86901_device::execute_ldstub(UINT32 op)
|
||||
{
|
||||
word = (data >> 8) & 0xff;
|
||||
}
|
||||
else if ((address & 3) == 3)
|
||||
else // if ((address & 3) == 3)
|
||||
{
|
||||
word = data & 0xff;
|
||||
}
|
||||
|
@ -479,6 +479,7 @@ inline void sparc_disassembler::print(char *&output, const char *fmt, ...)
|
||||
|
||||
sparc_disassembler::sparc_disassembler(unsigned version)
|
||||
: m_version(version)
|
||||
, m_vis_level(0)
|
||||
, m_op_field_width(9)
|
||||
, m_branch_desc{
|
||||
EMPTY_BRANCH_DESC,
|
||||
@ -537,6 +538,7 @@ sparc_disassembler::sparc_disassembler(unsigned version)
|
||||
|
||||
void sparc_disassembler::enable_vis1()
|
||||
{
|
||||
m_vis_level = std::max(m_vis_level, 1U);
|
||||
m_op_field_width = std::max(m_op_field_width, 12);
|
||||
add_vis_op_desc(VIS1_OP_DESC);
|
||||
add_state_reg_desc(VIS1_STATE_REG_DESC);
|
||||
@ -547,6 +549,7 @@ void sparc_disassembler::enable_vis1()
|
||||
void sparc_disassembler::enable_vis2()
|
||||
{
|
||||
enable_vis1();
|
||||
m_vis_level = std::max(m_vis_level, 2U);
|
||||
add_vis_op_desc(VIS2_OP_DESC);
|
||||
}
|
||||
|
||||
@ -1052,7 +1055,7 @@ offs_t sparc_disassembler::dasm_fpop2(char *buf, offs_t pc, UINT32 op) const
|
||||
case 1: mnemonic = "fmovs"; shift = false; break;
|
||||
case 2: mnemonic = "fmovd"; shift = true; break;
|
||||
case 3: mnemonic = "fmovq"; shift = true; break;
|
||||
default: mnemonic = nullptr;
|
||||
default: mnemonic = nullptr; shift = false; break;
|
||||
}
|
||||
if (mnemonic)
|
||||
{
|
||||
@ -1114,6 +1117,11 @@ offs_t sparc_disassembler::dasm_impdep1(char *buf, offs_t pc, UINT32 op) const
|
||||
dasm_vis_arg(buf, args, it->second.rd, RD);
|
||||
return 4 | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
else if ((m_vis_level >= 2) && (OPF == 0x081))
|
||||
{
|
||||
print(buf, "%-*s0x%x", m_op_field_width, "siam", IAMODE);
|
||||
return 4 | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
// TODO: driver hook for other kinds of coprocessor?
|
||||
|
||||
|
@ -17,6 +17,8 @@ class sparc_disassembler
|
||||
public:
|
||||
struct asi_desc
|
||||
{
|
||||
asi_desc() { }
|
||||
asi_desc(const char *name_, const char *desc_) : name(name_), desc(desc_) { }
|
||||
const char *name = nullptr;
|
||||
const char *desc = nullptr;
|
||||
};
|
||||
@ -24,14 +26,18 @@ public:
|
||||
|
||||
struct state_reg_desc
|
||||
{
|
||||
bool reserved = false;
|
||||
const char *read_name = nullptr;
|
||||
const char *write_name = nullptr;
|
||||
state_reg_desc() { }
|
||||
state_reg_desc(bool reserved_, const char *read_name_, const char *write_name_) : reserved(reserved_), read_name(read_name_), write_name(write_name_) { }
|
||||
bool reserved = false;
|
||||
const char *read_name = nullptr;
|
||||
const char *write_name = nullptr;
|
||||
};
|
||||
typedef std::map<UINT8, state_reg_desc> state_reg_desc_map;
|
||||
|
||||
struct prftch_desc
|
||||
{
|
||||
prftch_desc() { }
|
||||
prftch_desc(const char *name_) : name(name_) { }
|
||||
const char *name = nullptr;
|
||||
};
|
||||
typedef std::map<UINT8, prftch_desc> prftch_desc_map;
|
||||
@ -107,6 +113,8 @@ private:
|
||||
|
||||
struct fpop1_desc
|
||||
{
|
||||
fpop1_desc() { }
|
||||
fpop1_desc(bool three_op_, bool rs1_shift_, bool rs2_shift_, bool rd_shift_, const char *mnemonic_) : three_op(three_op_), rs1_shift(rs1_shift_), rs2_shift(rs2_shift_), rd_shift(rd_shift_), mnemonic(mnemonic_) { }
|
||||
bool three_op = true;
|
||||
bool rs1_shift = false;
|
||||
bool rs2_shift = false;
|
||||
@ -117,6 +125,8 @@ private:
|
||||
|
||||
struct fpop2_desc
|
||||
{
|
||||
fpop2_desc() { }
|
||||
fpop2_desc(bool int_rs1_, bool shift_, const char *mnemonic_) : int_rs1(int_rs1_), shift(shift_), mnemonic(mnemonic_) { }
|
||||
bool int_rs1 = false;
|
||||
bool shift = false;
|
||||
const char *mnemonic = nullptr;
|
||||
@ -125,6 +135,8 @@ private:
|
||||
|
||||
struct ldst_desc
|
||||
{
|
||||
ldst_desc() { }
|
||||
ldst_desc(bool rd_first_, bool alternate_, char rd_alt_reg_, bool rd_shift_, const char *mnemonic_, const char *g0_synth_) : rd_first(rd_first_), alternate(alternate_), rd_alt_reg(rd_alt_reg_), rd_shift(rd_shift_), mnemonic(mnemonic_), g0_synth(g0_synth_) { }
|
||||
bool rd_first = false;
|
||||
bool alternate = false;
|
||||
char rd_alt_reg = '\0';
|
||||
@ -137,6 +149,8 @@ private:
|
||||
struct vis_op_desc
|
||||
{
|
||||
enum arg { X, I, Fs, Fd };
|
||||
vis_op_desc() { }
|
||||
vis_op_desc(arg rs1_, arg rs2_, arg rd_, bool collapse_, const char *mnemonic_) : rs1(rs1_), rs2(rs2_), rd(rd_), collapse(collapse_), mnemonic(mnemonic_) { }
|
||||
arg rs1 = X;
|
||||
arg rs2 = X;
|
||||
arg rd = X;
|
||||
@ -206,6 +220,7 @@ private:
|
||||
static const vis_op_desc_map::value_type VIS2_OP_DESC[];
|
||||
|
||||
unsigned m_version;
|
||||
unsigned m_vis_level;
|
||||
int m_op_field_width;
|
||||
branch_desc m_branch_desc[8];
|
||||
int_op_desc_map m_int_op_desc;
|
||||
@ -218,8 +233,4 @@ private:
|
||||
vis_op_desc_map m_vis_op_desc;
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE( sparcv7 );
|
||||
CPU_DISASSEMBLE( sparcv8 );
|
||||
CPU_DISASSEMBLE( sparcv9 );
|
||||
|
||||
#endif // MAME_DEVICES_CPU_SPARC_SPARC_DASM_H
|
||||
|
@ -102,11 +102,12 @@
|
||||
#define SIMM13 (INT32(op << 19) >> 19)
|
||||
#define SIMM11 (INT32(op << 21) >> 21)
|
||||
#define SIMM10 (INT32(op << 22) >> 22)
|
||||
#define SIMM8 (INT32(op << 24) >> 24)
|
||||
#define IMM7 (op & 0x7f)
|
||||
#define SIMM7 (INT32(op << 25) >> 25)
|
||||
#define SIMM8 (INT32(op << 24) >> 24)
|
||||
#define SHCNT32 (op & 31)
|
||||
#define SHCNT64 (op & 63)
|
||||
#define IAMODE (op & 0x7)
|
||||
#define USEIMM ((op >> 13) & 1)
|
||||
#define USEEXT ((op >> 12) & 1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user