filename | test/sh4/mmummio.c |
changeset | 976:e57a25d9eb7d |
author | nkeynes |
date | Fri Aug 24 08:53:50 2012 +1000 (11 years ago) |
permissions | -rw-r--r-- |
last change | Move the generated prologue/epilogue code out into a common entry stub (reduces space requirements) and pre-save all saved registers. Change FASTCALL to use 3 regs instead of 2 since we can now keep everything in regs. |
file | annotate | diff | log | raw |
nkeynes@976 | 1 | #include <assert.h> |
nkeynes@976 | 2 | #include <stdio.h> |
nkeynes@976 | 3 | #include "../lib.h" |
nkeynes@976 | 4 | |
nkeynes@976 | 5 | #define PTEH 0xFF000000 |
nkeynes@976 | 6 | #define PTEL 0xFF000004 |
nkeynes@976 | 7 | #define TTB 0xFF000008 |
nkeynes@976 | 8 | #define TEA 0xFF00000C |
nkeynes@976 | 9 | #define MMUCR 0xFF000010 |
nkeynes@976 | 10 | #define PTEA 0xFF000034 |
nkeynes@976 | 11 | |
nkeynes@976 | 12 | #define ITLB_ADDR(entry) (0xF2000000 + (entry<<8)) |
nkeynes@976 | 13 | #define ITLB_DATA(entry) (0xF3000000 + (entry<<8)) |
nkeynes@976 | 14 | #define UTLB_ADDR(entry) (0xF6000000 + (entry<<8)) |
nkeynes@976 | 15 | #define UTLB_DATA1(entry) (0xF7000000 + (entry<<8)) |
nkeynes@976 | 16 | #define UTLB_DATA2(entry) (0xF7800000 + (entry<<8)) |
nkeynes@976 | 17 | |
nkeynes@976 | 18 | /* Bang on the mmio side of the TLBs to make sure the bits |
nkeynes@976 | 19 | * respond appropriately (with AT disabled so we don't risk |
nkeynes@976 | 20 | * doing a hard crash) */ |
nkeynes@976 | 21 | void test_tlb_mmio() |
nkeynes@976 | 22 | { |
nkeynes@976 | 23 | int entry; |
nkeynes@976 | 24 | for( entry=0; entry<64; entry++ ) { |
nkeynes@976 | 25 | long_write( UTLB_DATA1(entry), 0 ); |
nkeynes@976 | 26 | long_write( UTLB_ADDR(entry), 0xFFFFFFFF ); |
nkeynes@976 | 27 | assert( long_read( UTLB_ADDR(entry) ) == 0xFFFFFFFF ); |
nkeynes@976 | 28 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000104 ); |
nkeynes@976 | 29 | long_write( UTLB_ADDR(entry), 0x00000000 ); |
nkeynes@976 | 30 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 ); |
nkeynes@976 | 31 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 ); |
nkeynes@976 | 32 | long_write( UTLB_DATA1(entry), 0xFFFFFFFF ); |
nkeynes@976 | 33 | assert( long_read( UTLB_DATA1(entry) ) == 0x1FFFFDFF ); |
nkeynes@976 | 34 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000300 ); |
nkeynes@976 | 35 | long_write( UTLB_DATA1(entry), 0x00000000 ); |
nkeynes@976 | 36 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 ); |
nkeynes@976 | 37 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 ); |
nkeynes@976 | 38 | long_write( UTLB_DATA2(entry), 0xFFFFFFFF ); |
nkeynes@976 | 39 | assert( long_read( UTLB_DATA2(entry) ) == 0x0000000F ); |
nkeynes@976 | 40 | long_write( UTLB_DATA2(entry), 0x00000000 ); |
nkeynes@976 | 41 | assert( long_read( UTLB_DATA2(entry) ) == 0x00000000 ); |
nkeynes@976 | 42 | } |
nkeynes@976 | 43 | |
nkeynes@976 | 44 | for( entry=0; entry<4; entry++ ) { |
nkeynes@976 | 45 | long_write( ITLB_DATA(entry), 0 ); |
nkeynes@976 | 46 | long_write( ITLB_ADDR(entry), 0xFFFFFFFF ); |
nkeynes@976 | 47 | assert( long_read( ITLB_ADDR(entry) ) == 0xFFFFFDFF ); |
nkeynes@976 | 48 | assert( long_read( ITLB_DATA(entry) ) == 0x00000100 ); |
nkeynes@976 | 49 | long_write( ITLB_ADDR(entry), 0x00000000 ); |
nkeynes@976 | 50 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 ); |
nkeynes@976 | 51 | assert( long_read( ITLB_DATA(entry) ) == 0x00000000 ); |
nkeynes@976 | 52 | long_write( ITLB_DATA(entry), 0xFFFFFFFF ); |
nkeynes@976 | 53 | assert( long_read( ITLB_DATA(entry) ) == 0x1FFFFDDA ); |
nkeynes@976 | 54 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000100 ); |
nkeynes@976 | 55 | long_write( ITLB_DATA(entry), 0x00000000 ); |
nkeynes@976 | 56 | assert( long_read( ITLB_DATA(entry) ) == 0x00000000 ); |
nkeynes@976 | 57 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 ); |
nkeynes@976 | 58 | |
nkeynes@976 | 59 | } |
nkeynes@976 | 60 | } |
nkeynes@976 | 61 |
.