From b330b468b3f37bd0b11765524548dbdbb1dd1a95 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 15 Dec 2011 20:39:30 +0100 Subject: [PATCH] MIPS: Add build rules (non-functional, yet). --- src/Makefile | 18 +++++++++++++++++- src/buildvm.c | 3 +++ src/buildvm_asm.c | 2 ++ src/lib_jit.c | 2 ++ src/lj_arch.h | 24 ++++++++++++++++++++++++ src/lj_frame.h | 10 ++++++++++ 6 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 3e5b6dc8..5a60612d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -54,6 +54,7 @@ CCOPT_X64= CCOPT_ARM= CCOPT_PPC= CCOPT_PPCSPE= +CCOPT_MIPS= # CCDEBUG= # Uncomment the next line to generate debug information: @@ -242,6 +243,13 @@ else ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH))) TARGET_CCARCH= ppcspe TARGET_XCFLAGS+= $(CCOPT_PPCSPE) +else +ifneq (,$(findstring LJ_TARGET_MIPS ,$(TARGET_TESTARCH))) + ifneq (,$(findstring MIPSEL ,$(TARGET_TESTARCH))) + TARGET_ARCH= -D__MIPSEL__=1 + endif + TARGET_CCARCH= mips + TARGET_XCFLAGS+= $(CCOPT_MIPS) else $(error Unsupported target architecture) endif @@ -249,8 +257,9 @@ endif endif endif endif +endif -TARGET_ARCH= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_CCARCH)) +TARGET_ARCH+= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_CCARCH)) ifneq (,$(PREFIX)) ifneq (/usr/local,$(PREFIX)) @@ -353,6 +362,7 @@ DASM_FLAGS_X64WIN= -D X64 -D X64WIN DASM_FLAGS_ARM= DASM_FLAGS_PPC= DASM_FLAGS_PPCSPE= +DASM_FLAGS_MIPS= BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o BUILDVM_T= buildvm @@ -399,6 +409,7 @@ ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \ buildvm_ppc.h buildvm_ppcspe.h +###ALL_DYNGEN+= buildvm_mips.h WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk ALL_RM= $(ALL_T) $(ALL_GEN) *.o $(WIN_RM) @@ -491,6 +502,7 @@ distclean: clean $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_ARM) -o buildvm_arm.h buildvm_arm.dasc $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPC) -o buildvm_ppc.h buildvm_ppc.dasc $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPCSPE) -o buildvm_ppcspe.h buildvm_ppcspe.dasc + @### $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_MIPS) -o buildvm_mips.h buildvm_mips.dasc depend: @for file in $(ALL_HDRGEN) $(ALL_DYNGEN); do \ @@ -536,6 +548,10 @@ buildvm_ppcspe.h: buildvm_ppcspe.dasc $(E) "DYNASM $@" $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPCSPE) -o $@ buildvm_ppcspe.dasc +buildvm_mips.h: buildvm_mips.dasc + $(E) "DYNASM $@" + $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_MIPS) -o $@ buildvm_mips.dasc + buildvm.o: $(ALL_DYNGEN) $(DASM_DIR)/dasm_*.h $(BUILDVM_T): $(BUILDVM_O) diff --git a/src/buildvm.c b/src/buildvm.c index 3e5d7b1c..43e6d88b 100644 --- a/src/buildvm.c +++ b/src/buildvm.c @@ -74,6 +74,9 @@ static int collect_reloc(BuildCtx *ctx, uint8_t *addr, int idx, int type); #elif LJ_TARGET_PPCSPE #include "../dynasm/dasm_ppc.h" #include "buildvm_ppcspe.h" +#elif LJ_TARGET_MIPS +#include "../dynasm/dasm_mips.h" +#include "buildvm_mips.h" #else #error "No support for this architecture (yet)" #endif diff --git a/src/buildvm_asm.c b/src/buildvm_asm.c index 01330456..236dd176 100644 --- a/src/buildvm_asm.c +++ b/src/buildvm_asm.c @@ -119,6 +119,8 @@ static void emit_asm_wordreloc(BuildCtx *ctx, uint8_t *p, int n, ins, sym); exit(1); } +#elif LJ_TARGET_MIPS + UNUSED(sym); /* NYI */ #else #error "missing relocation support for this architecture" #endif diff --git a/src/lib_jit.c b/src/lib_jit.c index d4277add..8cb511ca 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c @@ -614,6 +614,8 @@ static uint32_t jit_cpudetect(lua_State *L) #endif #elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE /* Nothing to do. */ +#elif LJ_TARGET_MIPS + /* NYI */ #else #error "Missing CPU detection for this architecture" #endif diff --git a/src/lj_arch.h b/src/lj_arch.h index 50a6ef00..3a52c212 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h @@ -23,6 +23,8 @@ #define LUAJIT_ARCH_ppc 4 #define LUAJIT_ARCH_PPCSPE 5 #define LUAJIT_ARCH_ppcspe 5 +#define LUAJIT_ARCH_MIPS 6 +#define LUAJIT_ARCH_mips 6 /* Target OS. */ #define LUAJIT_OS_OTHER 0 @@ -47,6 +49,8 @@ #else #define LUAJIT_TARGET LUAJIT_ARCH_PPC #endif +#elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) +#define LUAJIT_TARGET LUAJIT_ARCH_MIPS #else #error "No support for this architecture (yet)" #endif @@ -182,6 +186,26 @@ #define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */ #define LJ_ARCH_NOJIT 1 +#elif LUAJIT_TARGET == LUAJIT_ARCH_MIPS + +#define LJ_ARCH_NAME "mips" +#define LJ_ARCH_BITS 32 +#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) +#define LJ_ARCH_ENDIAN LUAJIT_LE +#else +#define LJ_ARCH_ENDIAN LUAJIT_BE +#endif +#define LJ_ARCH_HASFPU 1 +#define LJ_TARGET_MIPS 1 +#define LJ_TARGET_EHRETREG 4 +#define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ +#define LJ_TARGET_MASKSHIFT 1 +#define LJ_TARGET_MASKROT 1 +#define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ +#define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE +#define LJ_ARCH_NOFFI 1 +#define LJ_ARCH_NOJIT 1 + #else #error "No target architecture defined" #endif diff --git a/src/lj_frame.h b/src/lj_frame.h index 3497671b..a69917ee 100644 --- a/src/lj_frame.h +++ b/src/lj_frame.h @@ -117,6 +117,16 @@ enum { #define CFRAME_OFS_MULTRES 8 #define CFRAME_SIZE 184 #define CFRAME_SHIFT_MULTRES 3 +#elif LJ_TARGET_MIPS +/* NYI: Dummy definitions for now. */ +#define CFRAME_OFS_ERRF 0 +#define CFRAME_OFS_NRES 0 +#define CFRAME_OFS_PREV 0 +#define CFRAME_OFS_L 0 +#define CFRAME_OFS_PC 0 +#define CFRAME_OFS_MULTRES 0 +#define CFRAME_SIZE 256 +#define CFRAME_SHIFT_MULTRES 3 #else #error "Missing CFRAME_* definitions for this architecture" #endif