#pragma once #include "types.h" #include "sh4_if.h" #define r Sh4cntx.r #define r_bank Sh4cntx.r_bank #define gbr Sh4cntx.gbr #define ssr Sh4cntx.ssr #define spc Sh4cntx.spc #define sgr Sh4cntx.sgr #define dbr Sh4cntx.dbr #define vbr Sh4cntx.vbr #define mac Sh4cntx.mac #define pr Sh4cntx.pr #define fpul Sh4cntx.fpul #define next_pc Sh4cntx.pc #define curr_pc (next_pc-2) #define sr Sh4cntx.sr #define fpscr Sh4cntx.fpscr #define old_sr Sh4cntx.old_sr #define old_fpscr Sh4cntx.old_fpscr #define fr (&Sh4cntx.xffr[16]) #define xf Sh4cntx.xffr #define fr_hex ((u32*)fr) #define xf_hex ((u32*)xf) #define dr_hex ((u64*)fr) #define xd_hex ((u64*)xf) #define sh4_int_bCpuRun Sh4cntx.CpuRunning void UpdateFPSCR(); bool UpdateSR(); union DoubleReg { f64 dbl; f32 sgl[2]; }; INLINE f64 GetDR(u32 n) { #ifdef TRACE if (n>7) printf("DR_r INDEX OVERRUN %d >7",n); #endif DoubleReg t; t.sgl[1]=fr[(n<<1) + 0]; t.sgl[0]=fr[(n<<1) + 1]; return t.dbl; } INLINE f64 GetXD(u32 n) { #ifdef TRACE if (n>7) printf("XD_r INDEX OVERRUN %d >7",n); #endif DoubleReg t; t.sgl[1]=xf[(n<<1) + 0]; t.sgl[0]=xf[(n<<1) + 1]; return t.dbl; } INLINE void SetDR(u32 n,f64 val) { #ifdef TRACE if (n>7) printf("DR_w INDEX OVERRUN %d >7",n); #endif DoubleReg t; t.dbl=val; fr[(n<<1) | 1]=t.sgl[0]; fr[(n<<1) | 0]=t.sgl[1]; } INLINE void SetXD(u32 n,f64 val) { #ifdef TRACE if (n>7) printf("XD_w INDEX OVERRUN %d >7",n); #endif DoubleReg t; t.dbl=val; xf[(n<<1) | 1]=t.sgl[0]; xf[(n<<1) | 0]=t.sgl[1]; } //needs to be removed u32* Sh4_int_GetRegisterPtr(Sh4RegType reg); //needs to be made portable void SetFloatStatusReg(); bool Do_Interrupt(u32 intEvn); bool Do_Exeption(u32 epc, u32 expEvn, u32 CallVect);