diff --git a/core/build.h b/core/build.h index bfff0af60..94e8f5d2d 100755 --- a/core/build.h +++ b/core/build.h @@ -85,3 +85,8 @@ #error Invalid Target: TARGET_* not defined #endif +#ifdef HOST_NO_REC + #ifndef HOST_NO_AREC + #define HOST_NO_AREC 1 + #endif +#endif diff --git a/core/core.mk b/core/core.mk index 886b2cd16..4b4e3880f 100755 --- a/core/core.mk +++ b/core/core.mk @@ -19,6 +19,10 @@ ifndef NOT_ARM RZDCY_MODULES += rec-ARM/ endif +ifdef X86_REC + RZDCY_MODULES += rec-x86/ +endif + ifndef NO_REND RZDCY_MODULES += rend/gles/ else @@ -69,4 +73,4 @@ endif ifdef NO_REC RZDCY_CXXFLAGS += -DHOST_NO_REC -endif \ No newline at end of file +endif diff --git a/core/emitter/types.h b/core/emitter/types.h index 4b23850ee..691254d22 100644 --- a/core/emitter/types.h +++ b/core/emitter/types.h @@ -1,5 +1,8 @@ #pragma once +#if 1 +#include "types.h" +#else //basic types typedef signed __int8 s8; typedef signed __int16 s16; @@ -49,4 +52,5 @@ using namespace std; #ifndef die #define die(reason) { printf("Fatal error : %s\n in %s -> %s : %d \n",reason,__FUNCTION__,__FILE__,__LINE__); dbgbreak;} -#endif \ No newline at end of file +#endif +#endif diff --git a/core/emitter/x86_emitter.h b/core/emitter/x86_emitter.h index 6e4d9b3f3..ae709ab72 100644 --- a/core/emitter/x86_emitter.h +++ b/core/emitter/x86_emitter.h @@ -193,7 +193,7 @@ typedef void* dyna_finalizeFP(void* ptr,u32 oldsize,u32 newsize); //define it here cus we use it on label type ;) class x86_block; // a label -struct __declspec(dllexport) x86_Label +struct /*__declspec(dllexport)*/ x86_Label { u32 target_opcode; u8 patch_sz; @@ -202,7 +202,7 @@ struct __declspec(dllexport) x86_Label void* GetPtr(); }; //An empty type that we will use as ptr type.This is ptr-reference -struct __declspec(dllexport) x86_ptr +struct /*__declspec(dllexport)*/ x86_ptr { union { @@ -216,7 +216,7 @@ struct __declspec(dllexport) x86_ptr } }; //This is ptr/imm (for call/jmp) -struct __declspec(dllexport) x86_ptr_imm +struct /*__declspec(dllexport)*/ x86_ptr_imm { union { @@ -255,11 +255,11 @@ struct x86_mrm_t u32 disp; }; -__declspec(dllexport) x86_mrm_t x86_mrm(x86_reg base); -__declspec(dllexport) x86_mrm_t x86_mrm(x86_reg base,x86_ptr disp); -__declspec(dllexport) x86_mrm_t x86_mrm(x86_reg base,x86_reg index); -__declspec(dllexport) x86_mrm_t x86_mrm(x86_reg index,x86_sib_scale scale,x86_ptr disp); -__declspec(dllexport) x86_mrm_t x86_mrm(x86_reg base,x86_reg index,x86_sib_scale scale,x86_ptr disp); +/*__declspec(dllexport)*/ x86_mrm_t x86_mrm(x86_reg base); +/*__declspec(dllexport)*/ x86_mrm_t x86_mrm(x86_reg base,x86_ptr disp); +/*__declspec(dllexport)*/ x86_mrm_t x86_mrm(x86_reg base,x86_reg index); +/*__declspec(dllexport)*/ x86_mrm_t x86_mrm(x86_reg index,x86_sib_scale scale,x86_ptr disp); +/*__declspec(dllexport)*/ x86_mrm_t x86_mrm(x86_reg base,x86_reg index,x86_sib_scale scale,x86_ptr disp); struct code_patch @@ -273,7 +273,7 @@ struct code_patch u32 offset; //offset in opcode stream :) }; -struct __declspec(dllexport) x86_block_externs +struct /*__declspec(dllexport)*/ x86_block_externs { void Apply(void* code_base); bool Modify(u32 offs,u8* dst); @@ -282,7 +282,7 @@ struct __declspec(dllexport) x86_block_externs }; //A block of x86 code :p -class __declspec(dllexport) x86_block +class /*__declspec(dllexport)*/ x86_block { private: void* _labels; diff --git a/core/hw/arm7/arm7.cpp b/core/hw/arm7/arm7.cpp index 2ddb37c1d..3d8dcc84a 100644 --- a/core/hw/arm7/arm7.cpp +++ b/core/hw/arm7/arm7.cpp @@ -188,7 +188,7 @@ void armt_init(); //void CreateTables(); void arm_Init() { -#if !defined(HOST_NO_REC) +#if !defined(HOST_NO_AREC) armt_init(); #endif //CreateTables(); @@ -398,7 +398,7 @@ void FlushCache(); void arm_Reset() { -#if !defined(HOST_NO_REC) +#if !defined(HOST_NO_AREC) FlushCache(); #endif Arm7Enabled = false; @@ -512,7 +512,7 @@ void update_armintc() reg[INTR_PEND].I=e68k_out && armFiqEnable; } -#ifdef HOST_NO_REC +#ifdef HOST_NO_AREC void arm_Run(u32 CycleCount) { arm_Run_(CycleCount); } #else extern "C" void CompileCode(); @@ -789,7 +789,7 @@ u32 DYNACALL DoMemOp(u32 addr,u32 data) { u32 rv=0; -#if HOST_CPU==CPU_X86 && !defined(HOST_NO_REC) +#if HOST_CPU==CPU_X86 && !defined(HOST_NO_AREC) addr=virt_arm_reg(0); data=virt_arm_reg(1); #endif @@ -809,7 +809,7 @@ u32 DYNACALL DoMemOp(u32 addr,u32 data) arm_WriteMem32(addr,data); } - #if HOST_CPU==CPU_X86 && !defined(HOST_NO_REC) + #if HOST_CPU==CPU_X86 && !defined(HOST_NO_AREC) virt_arm_reg(0)=rv; #endif diff --git a/core/hw/arm7/virt_arm.cpp b/core/hw/arm7/virt_arm.cpp index 857082603..d55c4dda1 100644 --- a/core/hw/arm7/virt_arm.cpp +++ b/core/hw/arm7/virt_arm.cpp @@ -1,6 +1,6 @@ #include "virt_arm.h" -#if HOST_CPU==CPU_X86 && !defined(HOST_NO_REC) +#if HOST_CPU==CPU_X86 && !defined(HOST_NO_AREC) #define C_CORE @@ -321,4 +321,4 @@ u32& virt_arm_reg(u32 id) return VARM::arm_Reg[id].I; } -#endif \ No newline at end of file +#endif diff --git a/core/hw/sh4/dyna/blockmanager.cpp b/core/hw/sh4/dyna/blockmanager.cpp index 2ed79ea73..eec9cdd4b 100644 --- a/core/hw/sh4/dyna/blockmanager.cpp +++ b/core/hw/sh4/dyna/blockmanager.cpp @@ -92,14 +92,14 @@ u32 bm_gc_luc,bm_gcf_luc; DynarecCodeEntry* DYNACALL bm_GetCode(u32 addr) { //rdv_FailedToFindBlock_pc=addr; - DynarecCodeEntry* rv=FPCA(addr); + DynarecCodeEntry* rv=(DynarecCodeEntry*)FPCA(addr); - return rv; + return (DynarecCodeEntry*)rv; } DynarecCodeEntry* DYNACALL bm_GetCode2(u32 addr) { - return bm_GetCode(addr); + return (DynarecCodeEntry*)bm_GetCode(addr); } RuntimeBlockInfo* DYNACALL bm_GetBlock(u32 addr) @@ -155,7 +155,7 @@ void bm_AddBlock(RuntimeBlockInfo* blk) blkmap.insert(blk); - verify(bm_GetCode(blk->addr)==ngen_FailedToFindBlock); + verify((void*)bm_GetCode(blk->addr)==(void*)ngen_FailedToFindBlock); FPCA(blk->addr)=blk->code; #ifdef DYNA_OPROF diff --git a/core/linux/common.cpp b/core/linux/common.cpp index f05ead9bd..4809553a7 100644 --- a/core/linux/common.cpp +++ b/core/linux/common.cpp @@ -66,7 +66,7 @@ void fault_handler (int sn, siginfo_t * si, void *ctxr) if (VramLockedWrite((u8*)si->si_addr) || BM_LockedWrite((u8*)si->si_addr)) return; -#ifndef HOST_NO_REC +#if !defined( HOST_NO_REC) && HOST_CPU==CPU_ARM else if (dyna_cde) { GET_PC_FROM_CONTEXT(ctxr)=(u32)ngen_readm_fail_v2((u32*)GET_PC_FROM_CONTEXT(ctxr),(u32*)&(ctx->uc_mcontext.arm_r0),(unat)si->si_addr); diff --git a/core/types.h b/core/types.h index a9bce6c23..2fe4c8172 100644 --- a/core/types.h +++ b/core/types.h @@ -14,7 +14,7 @@ #if BUILD_COMPILER==COMPILER_VC #define DYNACALL __fastcall #else -#define DYNACALL +#define DYNACALL __attribute__((fastcall)) #endif #if BUILD_COMPILER==COMPILER_VC diff --git a/shell/lin86/Makefile b/shell/lin86/Makefile index d7503dfc1..8e3bb792a 100644 --- a/shell/lin86/Makefile +++ b/shell/lin86/Makefile @@ -2,7 +2,8 @@ LOCAL_PATH := $(call my-dir) FOR_LINUX :=1 NOT_ARM := 1 -NO_REC := 1 +X86_REC := 1 +#NO_REC := 1 #NO_REND := 1 RZDCY_SRC_DIR = ../../core @@ -26,33 +27,35 @@ LDFLAGS := -m32 -g -Wl,-Map,$(notdir $@).map,--gc-sections -Wl,-O3 -Wl,--sort-co SOURCES := cfg/ hw/arm7/ hw/aica/ hw/asic/ hw/ hw/gdrom/ hw/maple/ \ hw/mem/ hw/pvr/ hw/sh4/ hw/sh4/rec_v2/ plugins/ profiler/ serial_ipc/ \ - hw/extdev/ hw/arm/ imgread/ linux/ linux-dist/ ./ rec-ARM/ deps/zlib/ deps/chdr/ deps/crypto/ arm_emitter/ + hw/extdev/ hw/arm/ imgread/ linux/ linux-dist/ ./ rec-x86/ deps/zlib/ deps/chdr/ deps/crypto/ arm_emitter/ + + +CFLAGS := -m32 -g -O3 -D RELEASE -c -D TARGET_LINUX_x86 -D USES_HOMEDIR -D HOST_NO_AREC #-D NO_REND +CFLAGS += -D SUPPORT_X11 +CFLAGS += -frename-registers -fno-strict-aliasing -fsingle-precision-constant +CFLAGS += -ffast-math -ftree-vectorize -CXXFLAGS := -m32 -g -O3 -D RELEASE -c -D TARGET_LINUX_x86 -D USES_HOMEDIR -D HOST_NO_REC #-D NO_REND -CXXFLAGS += -frename-registers -fno-strict-aliasing -fsingle-precision-constant -CXXFLAGS += -ffast-math -ftree-vectorize #-fprefetch-loop-arrays #-std=c++0x -CXXFLAGS += $(CFLAGS) $(MFLAGS) -fno-exceptions -fno-rtti -CXXFLAGS += -D SUPPORT_X11 +CXXFLAGS = $(MFLAGS) -fno-exceptions -fno-rtti -fpermissive ifdef PGO_MAKE - CXXFLAGS += -fprofile-generate -pg + CFLAGS += -fprofile-generate -pg LDFLAGS += -fprofile-generate else - CXXFLAGS += -fomit-frame-pointer + CFLAGS += -fomit-frame-pointer endif ifdef PGO_USE - CXXFLAGS += -fprofile-use + CFLAGS += -fprofile-use endif ifdef LTO_TEST - CXXFLAGS += -flto -fwhole-program + CFLAGS += -flto -fwhole-program LDFLAGS +=-flto -fwhole-program endif @@ -86,11 +89,11 @@ $(EXECUTABLE_STRIPPED): $(EXECUTABLE) obj/%.build_obj : $(RZDCY_SRC_DIR)/%.cpp mkdir -p $(dir $@) - $(CXX) $(EXTRAFLAGS) $(INCS) $(CXXFLAGS) $< -o $@ + $(CXX) $(EXTRAFLAGS) $(INCS) $(CFLAGS) $(CXXFLAGS) $< -o $@ obj/%.build_obj : $(RZDCY_SRC_DIR)/%.c mkdir -p $(dir $@) - $(CC) $(EXTRAFLAGS) $(INCS) $(CXXFLAGS) $< -o $@ + $(CC) $(EXTRAFLAGS) $(INCS) $(CFLAGS) $< -o $@ obj/%.build_obj : $(RZDCY_SRC_DIR)/%.S mkdir -p $(dir $@)