endianness fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1588 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
aab3309407
commit
02aab46a36
|
@ -256,11 +256,18 @@ void helper_ld_asi(int asi, int size, int sign)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x20 ... 0x2f: /* MMU passthrough */
|
case 0x20 ... 0x2f: /* MMU passthrough */
|
||||||
cpu_physical_memory_read(T0, (void *) &ret, size);
|
switch(size) {
|
||||||
if (size == 4)
|
case 1:
|
||||||
tswap32s(&ret);
|
ret = ldub_phys(T0);
|
||||||
else if (size == 2)
|
break;
|
||||||
tswap16s((uint16_t *)&ret);
|
case 2:
|
||||||
|
ret = lduw_phys(T0 & ~1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 4:
|
||||||
|
ret = ldl_phys(T0 & ~3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -369,12 +376,18 @@ void helper_st_asi(int asi, int size, int sign)
|
||||||
return;
|
return;
|
||||||
case 0x20 ... 0x2f: /* MMU passthrough */
|
case 0x20 ... 0x2f: /* MMU passthrough */
|
||||||
{
|
{
|
||||||
uint32_t temp = T1;
|
switch(size) {
|
||||||
if (size == 4)
|
case 1:
|
||||||
tswap32s(&temp);
|
stb_phys(T0, T1);
|
||||||
else if (size == 2)
|
break;
|
||||||
tswap16s((uint16_t *)&temp);
|
case 2:
|
||||||
cpu_physical_memory_write(T0, (void *) &temp, size);
|
stw_phys(T0 & ~1, T1);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
default:
|
||||||
|
stl_phys(T0 & ~3, T1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
@ -395,13 +408,21 @@ void helper_ld_asi(int asi, int size, int sign)
|
||||||
case 0x14: // Bypass
|
case 0x14: // Bypass
|
||||||
case 0x15: // Bypass, non-cacheable
|
case 0x15: // Bypass, non-cacheable
|
||||||
{
|
{
|
||||||
cpu_physical_memory_read(T0, (void *) &ret, size);
|
switch(size) {
|
||||||
if (size == 8)
|
case 1:
|
||||||
tswap64s(&ret);
|
ret = ldub_phys(T0);
|
||||||
if (size == 4)
|
break;
|
||||||
tswap32s((uint32_t *)&ret);
|
case 2:
|
||||||
else if (size == 2)
|
ret = lduw_phys(T0 & ~1);
|
||||||
tswap16s((uint16_t *)&ret);
|
break;
|
||||||
|
case 4:
|
||||||
|
ret = ldl_phys(T0 & ~3);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 8:
|
||||||
|
ret = ldq_phys(T0 & ~7);
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x04: // Nucleus
|
case 0x04: // Nucleus
|
||||||
|
@ -503,14 +524,21 @@ void helper_st_asi(int asi, int size, int sign)
|
||||||
case 0x14: // Bypass
|
case 0x14: // Bypass
|
||||||
case 0x15: // Bypass, non-cacheable
|
case 0x15: // Bypass, non-cacheable
|
||||||
{
|
{
|
||||||
target_ulong temp = T1;
|
switch(size) {
|
||||||
if (size == 8)
|
case 1:
|
||||||
tswap64s(&temp);
|
stb_phys(T0, T1);
|
||||||
else if (size == 4)
|
break;
|
||||||
tswap32s((uint32_t *)&temp);
|
case 2:
|
||||||
else if (size == 2)
|
stw_phys(T0 & ~1, T1);
|
||||||
tswap16s((uint16_t *)&temp);
|
break;
|
||||||
cpu_physical_memory_write(T0, (void *) &temp, size);
|
case 4:
|
||||||
|
stl_phys(T0 & ~3, T1);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
default:
|
||||||
|
stq_phys(T0 & ~7, T1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 0x04: // Nucleus
|
case 0x04: // Nucleus
|
||||||
|
|
Loading…
Reference in a new issue