Working on linux x86 dyna

This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis 2014-03-25 00:12:30 +02:00
parent 78f45da8da
commit ad054f1b96
10 changed files with 54 additions and 38 deletions

View File

@ -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

View File

@ -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
endif

View File

@ -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
#endif
#endif

View File

@ -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;

View File

@ -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

View File

@ -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
#endif

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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 $@)