@@ -39,22 +39,28 @@ static __inline__ void pcsx_initMsan() { *((volatile char* const)0x1f802089) = 0
3939static __inline__ void pcsx_resetMsan () { * ((volatile char * const )0x1f802089 ) = 1 ; }
4040static __inline__ void * pcsx_msanAlloc (uint32_t size ) {
4141 register uint32_t a0 asm("a0" ) = size ;
42- return * ((void * volatile * const )0x1f80208c );
42+ void * ret ;
43+ __asm__ volatile ("lw %0, 0x208c(%1)" : "=r" (ret ) : "r" (0x1f800000 ), "r" (a0 ));
44+ return ret ;
4345}
4446static __inline__ void pcsx_msanFree (void * ptr ) { * ((void * volatile * const )0x1f80208c ) = ptr ; }
4547static __inline__ void * pcsx_msanRealloc (void * ptr , uint32_t size ) {
4648 register void * a0 asm("a0" ) = ptr ;
4749 register uint32_t a1 asm("a1" ) = size ;
48- return * ((void * volatile * const )0x1f802090 );
50+ void * ret ;
51+ __asm__ volatile ("lw %0, 0x2090(%1)" : "=r" (ret ) : "r" (0x1f800000 ), "r" (a0 ), "r" (a1 ));
52+ return ret ;
4953}
5054static __inline__ void pcsx_msanSetChainPtr (void * headerAddr , void * ptrToNext , uint32_t wordCount ) {
5155 register void * a0 asm("a0" ) = ptrToNext ;
5256 register uint32_t a1 asm("a1" ) = wordCount ;
53- * (( void * volatile * const ) 0x1f802094 ) = headerAddr ;
57+ __asm__ volatile ( "sw %0, 0x2094(%1)" : : "r" ( a0 ), "r" ( 0x1f800000 ), "r" ( a1 )) ;
5458}
5559static __inline__ void * pcsx_msanGetChainPtr (void * headerAddr ) {
5660 register void * a0 asm("a0" ) = headerAddr ;
57- return * ((void * volatile * const )0x1f802094 );
61+ void * ret ;
62+ __asm__ volatile ("lw %0, 0x2094(%1)" : "=r" (ret ) : "r" (0x1f800000 ), "r" (a0 ));
63+ return ret ;
5864}
5965
6066static __inline__ int pcsx_present () { return * ((volatile uint32_t * const )0x1f802080 ) == 0x58534350 ; }
0 commit comments