|
|
| version 1.37, 2012/01/08 19:15:40 | version 1.38, 2012/01/23 06:01:44 |
|---|---|
| Line 212 cpu_memory_access_la_RMW_b(UINT32 laddr, | Line 212 cpu_memory_access_la_RMW_b(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep = tlb_lookup(laddr, ucrw); | ep = tlb_lookup(laddr, ucrw); |
| if (ep != NULL) { | if (ep != NULL) { |
| paddr = ep->paddr + (laddr & PAGE_MASK); | paddr = ep->paddr + (laddr & CPU_PAGE_MASK); |
| goto onepage; | goto onepage; |
| } | } |
| Line 237 cpu_memory_access_la_RMW_w(UINT32 laddr, | Line 237 cpu_memory_access_la_RMW_w(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| if ((laddr + 1) & PAGE_MASK) | if ((laddr + 1) & CPU_PAGE_MASK) |
| goto onepage; | goto onepage; |
| ep[1] = tlb_lookup(laddr + 1, ucrw); | ep[1] = tlb_lookup(laddr + 1, ucrw); |
| if (ep[1] != NULL) { | if (ep[1] != NULL) { |
| paddr[1] = ep[1]->paddr + (laddr & PAGE_MASK); | paddr[1] = ep[1]->paddr + (laddr & CPU_PAGE_MASK); |
| goto separate; | goto separate; |
| } | } |
| } | } |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| if ((laddr + 1) & PAGE_MASK) { | if ((laddr + 1) & CPU_PAGE_MASK) { |
| onepage: | onepage: |
| value = cpu_memoryread_w(paddr[0]); | value = cpu_memoryread_w(paddr[0]); |
| result = (*func)(value, arg); | result = (*func)(value, arg); |
| Line 281 cpu_memory_access_la_RMW_d(UINT32 laddr, | Line 281 cpu_memory_access_la_RMW_d(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= 4) | if (remain >= 4) |
| goto onepage; | goto onepage; |
| ep[1] = tlb_lookup(laddr + remain, ucrw); | ep[1] = tlb_lookup(laddr + remain, ucrw); |
| if (ep[1] != NULL) { | if (ep[1] != NULL) { |
| paddr[1] = ep[1]->paddr + (laddr & PAGE_MASK); | paddr[1] = ep[1]->paddr + (laddr & CPU_PAGE_MASK); |
| goto separate; | goto separate; |
| } | } |
| } | } |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= 4) { | if (remain >= 4) { |
| onepage: | onepage: |
| value = cpu_memoryread_d(paddr[0]); | value = cpu_memoryread_d(paddr[0]); |
| Line 353 cpu_linear_memory_read_b(UINT32 laddr, i | Line 353 cpu_linear_memory_read_b(UINT32 laddr, i |
| /* TLB */ | /* TLB */ |
| ep = tlb_lookup(laddr, ucrw); | ep = tlb_lookup(laddr, ucrw); |
| if (ep != NULL) { | if (ep != NULL) { |
| paddr = ep->paddr + (laddr & PAGE_MASK); | paddr = ep->paddr + (laddr & CPU_PAGE_MASK); |
| return cpu_memoryread(paddr); | return cpu_memoryread(paddr); |
| } | } |
| Line 372 cpu_linear_memory_read_w(UINT32 laddr, i | Line 372 cpu_linear_memory_read_w(UINT32 laddr, i |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| if ((laddr + 1) & PAGE_MASK) | if ((laddr + 1) & CPU_PAGE_MASK) |
| return cpu_memoryread_w(paddr[0]); | return cpu_memoryread_w(paddr[0]); |
| ep[1] = tlb_lookup(laddr + 1, ucrw); | ep[1] = tlb_lookup(laddr + 1, ucrw); |
| Line 385 cpu_linear_memory_read_w(UINT32 laddr, i | Line 385 cpu_linear_memory_read_w(UINT32 laddr, i |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| if ((laddr + 1) & PAGE_MASK) | if ((laddr + 1) & CPU_PAGE_MASK) |
| return cpu_memoryread_w(paddr[0]); | return cpu_memoryread_w(paddr[0]); |
| paddr[1] = paging(laddr + 1, ucrw); | paddr[1] = paging(laddr + 1, ucrw); |
| Line 406 cpu_linear_memory_read_d(UINT32 laddr, i | Line 406 cpu_linear_memory_read_d(UINT32 laddr, i |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_d(paddr[0]); | return cpu_memoryread_d(paddr[0]); |
| Line 420 cpu_linear_memory_read_d(UINT32 laddr, i | Line 420 cpu_linear_memory_read_d(UINT32 laddr, i |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_d(paddr[0]); | return cpu_memoryread_d(paddr[0]); |
| Line 463 cpu_linear_memory_read_q(UINT32 laddr, i | Line 463 cpu_linear_memory_read_q(UINT32 laddr, i |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_d(paddr[0]); | return cpu_memoryread_d(paddr[0]); |
| Line 477 cpu_linear_memory_read_q(UINT32 laddr, i | Line 477 cpu_linear_memory_read_q(UINT32 laddr, i |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_q(paddr[0]); | return cpu_memoryread_q(paddr[0]); |
| Line 549 cpu_linear_memory_read_f(UINT32 laddr, i | Line 549 cpu_linear_memory_read_f(UINT32 laddr, i |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_f(paddr[0]); | return cpu_memoryread_f(paddr[0]); |
| Line 563 cpu_linear_memory_read_f(UINT32 laddr, i | Line 563 cpu_linear_memory_read_f(UINT32 laddr, i |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) | if (remain >= sizeof(value)) |
| return cpu_memoryread_f(paddr[0]); | return cpu_memoryread_f(paddr[0]); |
| Line 588 cpu_linear_memory_write_b(UINT32 laddr, | Line 588 cpu_linear_memory_write_b(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep = tlb_lookup(laddr, ucrw); | ep = tlb_lookup(laddr, ucrw); |
| if (ep != NULL) { | if (ep != NULL) { |
| paddr = ep->paddr + (laddr & PAGE_MASK); | paddr = ep->paddr + (laddr & CPU_PAGE_MASK); |
| cpu_memorywrite(paddr, value); | cpu_memorywrite(paddr, value); |
| return; | return; |
| } | } |
| Line 607 cpu_linear_memory_write_w(UINT32 laddr, | Line 607 cpu_linear_memory_write_w(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| if ((laddr + 1) & PAGE_MASK) { | if ((laddr + 1) & CPU_PAGE_MASK) { |
| cpu_memorywrite_w(paddr[0], value); | cpu_memorywrite_w(paddr[0], value); |
| return; | return; |
| } | } |
| Line 622 cpu_linear_memory_write_w(UINT32 laddr, | Line 622 cpu_linear_memory_write_w(UINT32 laddr, |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| if ((laddr + 1) & PAGE_MASK) { | if ((laddr + 1) & CPU_PAGE_MASK) { |
| cpu_memorywrite_w(paddr[0], value); | cpu_memorywrite_w(paddr[0], value); |
| return; | return; |
| } | } |
| Line 643 cpu_linear_memory_write_d(UINT32 laddr, | Line 643 cpu_linear_memory_write_d(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_d(paddr[0], value); | cpu_memorywrite_d(paddr[0], value); |
| return; | return; |
| Line 659 cpu_linear_memory_write_d(UINT32 laddr, | Line 659 cpu_linear_memory_write_d(UINT32 laddr, |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_d(paddr[0], value); | cpu_memorywrite_d(paddr[0], value); |
| return; | return; |
| Line 701 cpu_linear_memory_write_q(UINT32 laddr, | Line 701 cpu_linear_memory_write_q(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_q(paddr[0], value); | cpu_memorywrite_q(paddr[0], value); |
| return; | return; |
| Line 717 cpu_linear_memory_write_q(UINT32 laddr, | Line 717 cpu_linear_memory_write_q(UINT32 laddr, |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_q(paddr[0], value); | cpu_memorywrite_q(paddr[0], value); |
| return; | return; |
| Line 788 cpu_linear_memory_write_f(UINT32 laddr, | Line 788 cpu_linear_memory_write_f(UINT32 laddr, |
| /* TLB */ | /* TLB */ |
| ep[0] = tlb_lookup(laddr, ucrw); | ep[0] = tlb_lookup(laddr, ucrw); |
| if (ep[0] != NULL) { | if (ep[0] != NULL) { |
| paddr[0] = ep[0]->paddr + (laddr & PAGE_MASK); | paddr[0] = ep[0]->paddr + (laddr & CPU_PAGE_MASK); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_f(paddr[0], value); | cpu_memorywrite_f(paddr[0], value); |
| return; | return; |
| Line 804 cpu_linear_memory_write_f(UINT32 laddr, | Line 804 cpu_linear_memory_write_f(UINT32 laddr, |
| /* paging */ | /* paging */ |
| paddr[0] = paging(laddr, ucrw); | paddr[0] = paging(laddr, ucrw); |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| if (remain >= sizeof(value)) { | if (remain >= sizeof(value)) { |
| cpu_memorywrite_f(paddr[0], value); | cpu_memorywrite_f(paddr[0], value); |
| return; | return; |
| Line 833 cpu_memory_access_la_region(UINT32 laddr | Line 833 cpu_memory_access_la_region(UINT32 laddr |
| if (length == 0) | if (length == 0) |
| return; | return; |
| remain = PAGE_SIZE - (laddr & PAGE_MASK); | remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); |
| for (;;) { | for (;;) { |
| if (!CPU_STAT_PAGING) { | if (!CPU_STAT_PAGING) { |
| paddr = laddr; | paddr = laddr; |
| Line 857 cpu_memory_access_la_region(UINT32 laddr | Line 857 cpu_memory_access_la_region(UINT32 laddr |
| remain -= r; | remain -= r; |
| if (remain <= 0) { | if (remain <= 0) { |
| /* next page */ | /* next page */ |
| remain += PAGE_SIZE; | remain += CPU_PAGE_SIZE; |
| } | } |
| } | } |
| } | } |
| Line 886 paging(UINT32 laddr, int ucrw) | Line 886 paging(UINT32 laddr, int ucrw) |
| ep = tlb_lookup(laddr, ucrw); | ep = tlb_lookup(laddr, ucrw); |
| if (ep != NULL) | if (ep != NULL) |
| return ep->paddr + (laddr & PAGE_MASK); | return ep->paddr + (laddr & CPU_PAGE_MASK); |
| pde_addr = CPU_STAT_PDE_BASE + ((laddr >> 20) & 0xffc); | pde_addr = CPU_STAT_PDE_BASE + ((laddr >> 20) & 0xffc); |
| pde = cpu_memoryread_d(pde_addr); | pde = cpu_memoryread_d(pde_addr); |
| Line 917 paging(UINT32 laddr, int ucrw) | Line 917 paging(UINT32 laddr, int ucrw) |
| } | } |
| /* make physical address */ | /* make physical address */ |
| paddr = (pte & CPU_PTE_BASEADDR_MASK) + (laddr & PAGE_MASK); | paddr = (pte & CPU_PTE_BASEADDR_MASK) + (laddr & CPU_PAGE_MASK); |
| bit = ucrw & (CPU_PAGE_WRITE|CPU_PAGE_USER_MODE); | bit = ucrw & (CPU_PAGE_WRITE|CPU_PAGE_USER_MODE); |
| bit |= (pde & pte & (CPU_PTE_WRITABLE|CPU_PTE_USER_MODE)); | bit |= (pde & pte & (CPU_PTE_WRITABLE|CPU_PTE_USER_MODE)); |