/* SPARC reference MMU table walk: Context table->L1->L2->PTE */
/* Context base + context number */
pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
/* Ctx pde */
switch (pde & PTE_ENTRYTYPE_MASK) {
return 4;
case 1: /* L0 PDE */
pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
return 4;
case 1: /* L1 PDE */
pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
return 4;
case 1: /* L2 PDE */
pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
/* update page modified and dirty bits */
is_dirty = (rw & 1) && !(pde & PG_MODIFIED_MASK);
if (!(pde & PG_ACCESSED_MASK) || is_dirty) {
- uint32_t tmppde;
pde |= PG_ACCESSED_MASK;
if (is_dirty)
pde |= PG_MODIFIED_MASK;
- tmppde = bswap32(pde);
- cpu_physical_memory_write(pde_ptr, (uint8_t *)&tmppde, 4);
+ stl_phys_notdirty(pde_ptr, pde);
}
/* check access */
*access_index = ((rw & 1) << 2) | (rw & 2) | (is_user? 0 : 1);
/* Context base + context number */
pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
+
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
case 0: /* Invalid */
if (mmulev == 3)
return pde;
pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
if (mmulev == 2)
return pde;
pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
if (mmulev == 1)
return pde;
pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
switch (pde & PTE_ENTRYTYPE_MASK) {
default:
printf("MMU dump:\n");
pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
- cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);
- bswap32s(&pde);
+ pde = ldl_phys(pde_ptr);
printf("Root ptr: 0x%08x, ctx: %d\n", env->mmuregs[1] << 4, env->mmuregs[2]);
for (n = 0, va = 0; n < 256; n++, va += 16 * 1024 * 1024) {
pde_ptr = mmu_probe(va, 2);
case 0x20 ... 0x2f: /* MMU passthrough */
cpu_physical_memory_read(T0, (void *) &ret, size);
if (size == 4)
- bswap32s(&ret);
- else if (size == 2)
- bswap16s((uint16_t *)&ret);
+ tswap32s(&ret);
+ else if (size == 2)
+ tswap16s((uint16_t *)&ret);
break;
default:
ret = 0;
int src = T1, dst = T0;
uint8_t temp[32];
- bswap32s(&src);
+ tswap32s(&src);
cpu_physical_memory_read(src, (void *) &temp, 32);
cpu_physical_memory_write(dst, (void *) &temp, 32);
uint64_t val;
val = (((uint64_t)T1) << 32) | T2;
- bswap64s(&val);
+ tswap64s(&val);
for (i = 0; i < 32; i += 8, dst += 8) {
cpu_physical_memory_write(dst, (void *) &val, 8);
{
int temp = T1;
if (size == 4)
- bswap32s(&temp);
+ tswap32s(&temp);
else if (size == 2)
- bswap16s((uint16_t *)&temp);
-
+ tswap16s((uint16_t *)&temp);
cpu_physical_memory_write(T0, (void *) &temp, size);
}
return;