filename | src/sh4/sh4x86.in |
changeset | 975:007bf7eb944f |
prev | 974:16b079ed11bb |
next | 991:60c7fab9c880 |
author | nkeynes |
date | Mon Jan 26 07:26:24 2009 +0000 (15 years ago) |
permissions | -rw-r--r-- |
last change | Add read_byte_for_write mem function for correct implementation of AND.B and friends with TLB enabled. Add read_byte and read_long MMIO stubs to do correct sign extension of IO reads |
file | annotate | diff | log | raw |
1.1 --- a/src/sh4/sh4x86.in Mon Jan 26 03:09:53 2009 +00001.2 +++ b/src/sh4/sh4x86.in Mon Jan 26 07:26:24 2009 +00001.3 @@ -307,6 +307,7 @@1.4 #endif1.6 #define MEM_READ_BYTE( addr_reg, value_reg ) decode_address(addr_reg); _CALL_READ(addr_reg, read_byte); MEM_RESULT(value_reg)1.7 +#define MEM_READ_BYTE_FOR_WRITE( addr_reg, value_reg ) decode_address(addr_reg); _CALL_READ(addr_reg, read_byte_for_write); MEM_RESULT(value_reg)1.8 #define MEM_READ_WORD( addr_reg, value_reg ) decode_address(addr_reg); _CALL_READ(addr_reg, read_word); MEM_RESULT(value_reg)1.9 #define MEM_READ_LONG( addr_reg, value_reg ) decode_address(addr_reg); _CALL_READ(addr_reg, read_long); MEM_RESULT(value_reg)1.10 #define MEM_WRITE_BYTE( addr_reg, value_reg ) decode_address(addr_reg); _CALL_WRITE(addr_reg, value_reg, write_byte)1.11 @@ -468,7 +469,7 @@1.12 load_reg( R_EAX, 0 );1.13 ADD_sh4r_r32( R_GBR, R_EAX );1.14 MOV_r32_esp8(R_EAX, 0);1.15 - MEM_READ_BYTE( R_EAX, R_EDX );1.16 + MEM_READ_BYTE_FOR_WRITE( R_EAX, R_EDX );1.17 MOV_esp8_r32(0, R_EAX);1.18 AND_imm32_r32(imm, R_EDX );1.19 MEM_WRITE_BYTE( R_EAX, R_EDX );1.20 @@ -808,7 +809,7 @@1.21 load_reg( R_EAX, 0 );1.22 ADD_sh4r_r32( R_GBR, R_EAX );1.23 MOV_r32_esp8( R_EAX, 0 );1.24 - MEM_READ_BYTE( R_EAX, R_EDX );1.25 + MEM_READ_BYTE_FOR_WRITE( R_EAX, R_EDX );1.26 MOV_esp8_r32( 0, R_EAX );1.27 OR_imm32_r32(imm, R_EDX );1.28 MEM_WRITE_BYTE( R_EAX, R_EDX );1.29 @@ -1026,7 +1027,7 @@1.30 COUNT_INST(I_TASB);1.31 load_reg( R_EAX, Rn );1.32 MOV_r32_esp8( R_EAX, 0 );1.33 - MEM_READ_BYTE( R_EAX, R_EDX );1.34 + MEM_READ_BYTE_FOR_WRITE( R_EAX, R_EDX );1.35 TEST_r8_r8( R_DL, R_DL );1.36 SETE_t();1.37 OR_imm8_r8( 0x80, R_DL );1.38 @@ -1078,7 +1079,7 @@1.39 load_reg( R_EAX, 0 );1.40 ADD_sh4r_r32( R_GBR, R_EAX );1.41 MOV_r32_esp8( R_EAX, 0 );1.42 - MEM_READ_BYTE(R_EAX, R_EDX);1.43 + MEM_READ_BYTE_FOR_WRITE(R_EAX, R_EDX);1.44 MOV_esp8_r32( 0, R_EAX );1.45 XOR_imm32_r32( imm, R_EDX );1.46 MEM_WRITE_BYTE( R_EAX, R_EDX );
.