Make load and store ops use the appropriate sized data access.
--HG-- extra : convert_revision : 6b808586fab10ca433ef04b062bf701b906634b9
This commit is contained in:
parent
d926de462a
commit
f09847c7a6
1 changed files with 75 additions and 6 deletions
|
@ -123,7 +123,25 @@ def template MicroLoadExecute {{
|
||||||
%(ea_code)s;
|
%(ea_code)s;
|
||||||
DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
|
DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
|
||||||
|
|
||||||
fault = xc->read(EA, (%(mem_acc_type)s%(mem_acc_size)s_t&)Mem, 0);
|
unsigned flags = 0;
|
||||||
|
switch(dataSize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
fault = xc->read(EA, (uint8_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fault = xc->read(EA, (uint16_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
fault = xc->read(EA, (uint32_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
fault = xc->read(EA, (uint64_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
panic("Bad operand size!\n");
|
||||||
|
}
|
||||||
|
|
||||||
if(fault == NoFault)
|
if(fault == NoFault)
|
||||||
{
|
{
|
||||||
%(code)s;
|
%(code)s;
|
||||||
|
@ -149,7 +167,24 @@ def template MicroLoadInitiateAcc {{
|
||||||
%(ea_code)s;
|
%(ea_code)s;
|
||||||
DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
|
DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
|
||||||
|
|
||||||
fault = xc->read(EA, (%(mem_acc_type)s%(mem_acc_size)s_t&)Mem, 0);
|
unsigned flags = 0;
|
||||||
|
switch(dataSize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
fault = xc->read(EA, (uint8_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fault = xc->read(EA, (uint16_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
fault = xc->read(EA, (uint32_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
fault = xc->read(EA, (uint64_t&)Mem, flags);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
panic("Bad operand size!\n");
|
||||||
|
}
|
||||||
|
|
||||||
return fault;
|
return fault;
|
||||||
}
|
}
|
||||||
|
@ -195,8 +230,25 @@ def template MicroStoreExecute {{
|
||||||
|
|
||||||
if(fault == NoFault)
|
if(fault == NoFault)
|
||||||
{
|
{
|
||||||
fault = xc->write((%(mem_acc_type)s%(mem_acc_size)s_t)Mem,
|
unsigned flags = 0;
|
||||||
EA, 0, 0);
|
uint64_t *res = 0;
|
||||||
|
switch(dataSize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
fault = xc->write((uint8_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fault = xc->write((uint16_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
fault = xc->write((uint32_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
fault = xc->write((uint64_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
panic("Bad operand size!\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(fault == NoFault)
|
if(fault == NoFault)
|
||||||
{
|
{
|
||||||
|
@ -223,8 +275,25 @@ def template MicroStoreInitiateAcc {{
|
||||||
|
|
||||||
if(fault == NoFault)
|
if(fault == NoFault)
|
||||||
{
|
{
|
||||||
fault = xc->write((%(mem_acc_type)s%(mem_acc_size)s_t)Mem,
|
unsigned flags = 0;
|
||||||
EA, 0, 0);
|
uint64_t *res = 0;
|
||||||
|
switch(dataSize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
fault = xc->write((uint8_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fault = xc->write((uint16_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
fault = xc->write((uint32_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
fault = xc->write((uint64_t&)Mem, EA, flags, res);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
panic("Bad operand size!\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(fault == NoFault)
|
if(fault == NoFault)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue