filename | test/lib.c |
changeset | 190:f7653df5e832 |
prev | 185:6755a04c447f |
author | nkeynes |
date | Sat Dec 27 02:59:35 2008 +0000 (15 years ago) |
branch | lxdream-mem |
permissions | -rw-r--r-- |
last change | Replace fpscr_mask/fpscr flags in xlat_cache_block with a single xlat_sh4_mode, which tracks the field of the same name in sh4r - actually a little faster this way. Now depends on SR.MD, FPSCR.PR and FPSCR.SZ (although it doesn't benefit from the SR flag yet). Also fixed the failure to check the flags in the common case (code address returned by previous block) which took away the performance benefits, but oh well. |
file | annotate | diff | log | raw |
nkeynes@185 | 1 | #include "lib.h" |
nkeynes@185 | 2 | |
nkeynes@185 | 3 | void fwrite_dump( FILE *f, char *buf, int length) |
nkeynes@185 | 4 | { |
nkeynes@185 | 5 | int i,j; |
nkeynes@185 | 6 | for( i=0; i<length; i+=16 ) { |
nkeynes@185 | 7 | fprintf( f, "%08X: ", i ); |
nkeynes@185 | 8 | for( j=0; j<16 && i+j < length; j+=4 ) { |
nkeynes@185 | 9 | unsigned int val = *((volatile unsigned int *)(buf+i+j)); |
nkeynes@185 | 10 | fprintf( f, "%02X %02X %02X %02X ", val&0xFF, (val>>8)&0xFF, (val>>16)&0xFF, (val>>24)&0xFF ); |
nkeynes@185 | 11 | } |
nkeynes@185 | 12 | for( ;j<16; j+= 4 ) { |
nkeynes@185 | 13 | fprintf( f, " " ); |
nkeynes@185 | 14 | } |
nkeynes@185 | 15 | for( j=0; j<16 && i+j < length; j++ ) { |
nkeynes@185 | 16 | fprintf( f, "%c", isprint(buf[i+j]) ? buf[i+j] : '.' ); |
nkeynes@185 | 17 | } |
nkeynes@185 | 18 | fprintf( f, "\n"); |
nkeynes@185 | 19 | } |
nkeynes@185 | 20 | } |
nkeynes@190 | 21 | |
nkeynes@190 | 22 | void fwrite_diff( FILE *f, char *a, int a_length, char *b, int b_length ) |
nkeynes@190 | 23 | { |
nkeynes@190 | 24 | int i; |
nkeynes@190 | 25 | fprintf( f, "Expected %d bytes:\n", a_length ); |
nkeynes@190 | 26 | fwrite_dump( f, a, a_length ); |
nkeynes@190 | 27 | fprintf( f, "but was %d bytes =>\n", b_length ); |
nkeynes@190 | 28 | fwrite_dump( f, b, b_length ); |
nkeynes@190 | 29 | } |
nkeynes@190 | 30 | |
nkeynes@190 | 31 | void fwrite_diff32( FILE *f, char *a, int a_length, char *b, int b_length ) |
nkeynes@190 | 32 | { |
nkeynes@190 | 33 | int i,j, k; |
nkeynes@190 | 34 | int length = a_length > b_length ? a_length : b_length; |
nkeynes@190 | 35 | fprintf( f, "Expected %d bytes, was %d bytes =>\n", a_length, b_length ); |
nkeynes@190 | 36 | |
nkeynes@190 | 37 | for( i=0; i<length; i+=16 ) { |
nkeynes@190 | 38 | for( k=0; k<32 && i+k < length; k+=4 ) { |
nkeynes@190 | 39 | if( i+k >= a_length || i+k >= b_length || |
nkeynes@190 | 40 | *((volatile unsigned int *)(a+i+k)) != *((volatile unsigned int *)(b+i+k)) ) { |
nkeynes@190 | 41 | break; |
nkeynes@190 | 42 | } |
nkeynes@190 | 43 | } |
nkeynes@190 | 44 | if( k != 32 && i+k != length ) { |
nkeynes@190 | 45 | fprintf( f, "%08X: ", i ); |
nkeynes@190 | 46 | for( j=0; j<16 && i+j < a_length; j+=4 ) { |
nkeynes@190 | 47 | fprintf( f, "%08X ", *((volatile unsigned int *)(a+i+j)) ); |
nkeynes@190 | 48 | } |
nkeynes@190 | 49 | |
nkeynes@190 | 50 | for(; j<16; j+=4 ) { |
nkeynes@190 | 51 | fprintf( f, " " ); |
nkeynes@190 | 52 | } |
nkeynes@190 | 53 | |
nkeynes@190 | 54 | fprintf( f, "| " ); |
nkeynes@190 | 55 | for( j=0; j<16 && i+j < b_length; j+=4 ) { |
nkeynes@190 | 56 | fprintf( f, "%08X ", *((volatile unsigned int *)(b+i+j)) ); |
nkeynes@190 | 57 | } |
nkeynes@190 | 58 | |
nkeynes@190 | 59 | fprintf( f, "\n"); |
nkeynes@190 | 60 | } |
nkeynes@190 | 61 | } |
nkeynes@190 | 62 | } |
.