aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-25 13:00:42 +0200
committerMike Pall <mike>2010-08-25 13:00:42 +0200
commit5526fa23122a0192c4315a1955a44bbaa2607d43 (patch)
tree49c6041ac9853c289122d748891f5ab947810840
parent06ae534328c3337851ff8c786d0202bb2f1074ca (diff)
downloadluajit-5526fa23122a0192c4315a1955a44bbaa2607d43.tar.gz
luajit-5526fa23122a0192c4315a1955a44bbaa2607d43.tar.bz2
luajit-5526fa23122a0192c4315a1955a44bbaa2607d43.zip
PPC: Add PowerPC target architecture selection.
-rw-r--r--src/Makefile.dep13
-rw-r--r--src/buildvm.c13
-rw-r--r--src/buildvm_fold.c3
-rw-r--r--src/buildvm_lib.c3
-rw-r--r--src/lj_arch.h47
5 files changed, 61 insertions, 18 deletions
diff --git a/src/Makefile.dep b/src/Makefile.dep
index 9968a563..f2914d6d 100644
--- a/src/Makefile.dep
+++ b/src/Makefile.dep
@@ -1,12 +1,13 @@
1buildvm.o: buildvm.c lua.h luaconf.h luajit.h lj_obj.h lj_def.h lj_arch.h \ 1buildvm.o: buildvm.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \
2 lj_gc.h lj_bc.h lj_ir.h lj_frame.h lj_dispatch.h lj_jit.h buildvm.h \ 2 lj_obj.h lj_gc.h lj_bc.h lj_ir.h lj_frame.h lj_dispatch.h lj_jit.h \
3 luajit.h \
3 lj_traceerr.h 4 lj_traceerr.h
4buildvm_asm.o: buildvm_asm.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \ 5buildvm_asm.o: buildvm_asm.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \
5 lj_bc.h 6 lj_bc.h
6buildvm_fold.o: buildvm_fold.c lj_obj.h lua.h luaconf.h lj_def.h \ 7buildvm_fold.o: buildvm_fold.c buildvm.h lj_def.h lua.h luaconf.h \
7 lj_arch.h lj_ir.h buildvm.h 8 lj_arch.h lj_obj.h lj_ir.h
8buildvm_lib.o: buildvm_lib.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ 9buildvm_lib.o: buildvm_lib.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \
9 lj_lib.h buildvm.h 10 lj_obj.h lj_lib.h
10buildvm_peobj.o: buildvm_peobj.c buildvm.h lj_def.h lua.h luaconf.h \ 11buildvm_peobj.o: buildvm_peobj.c buildvm.h lj_def.h lua.h luaconf.h \
11 lj_arch.h lj_bc.h 12 lj_arch.h lj_bc.h
12lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ 13lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \
diff --git a/src/buildvm.c b/src/buildvm.c
index 817d4bc4..e6eeabd2 100644
--- a/src/buildvm.c
+++ b/src/buildvm.c
@@ -14,22 +14,19 @@
14** It's a one-shot tool -- any effort fixing this would be wasted. 14** It's a one-shot tool -- any effort fixing this would be wasted.
15*/ 15*/
16 16
17#include "lua.h"
18#include "luajit.h"
19
20#ifdef LUA_USE_WIN 17#ifdef LUA_USE_WIN
21#include <fcntl.h> 18#include <fcntl.h>
22#include <io.h> 19#include <io.h>
23#endif 20#endif
24 21
22#include "buildvm.h"
25#include "lj_obj.h" 23#include "lj_obj.h"
26#include "lj_gc.h" 24#include "lj_gc.h"
27#include "lj_bc.h" 25#include "lj_bc.h"
28#include "lj_ir.h" 26#include "lj_ir.h"
29#include "lj_frame.h" 27#include "lj_frame.h"
30#include "lj_dispatch.h" 28#include "lj_dispatch.h"
31 29#include "luajit.h"
32#include "buildvm.h"
33 30
34/* ------------------------------------------------------------------------ */ 31/* ------------------------------------------------------------------------ */
35 32
@@ -422,6 +419,12 @@ int main(int argc, char **argv)
422 BuildCtx *ctx = &ctx_; 419 BuildCtx *ctx = &ctx_;
423 int status, binmode; 420 int status, binmode;
424 421
422 if (sizeof(void *) != 4*LJ_32+8*LJ_64) {
423 fprintf(stderr,"Error: pointer size mismatch in cross-build.\n");
424 fprintf(stderr,"Try: make CC=\"gcc -m32\" CROSS=... TARGET=...\n\n");
425 return 1;
426 }
427
425 UNUSED(argc); 428 UNUSED(argc);
426 parseargs(ctx, argv); 429 parseargs(ctx, argv);
427 430
diff --git a/src/buildvm_fold.c b/src/buildvm_fold.c
index bd872534..97632c56 100644
--- a/src/buildvm_fold.c
+++ b/src/buildvm_fold.c
@@ -3,11 +3,10 @@
3** Copyright (C) 2005-2010 Mike Pall. See Copyright Notice in luajit.h 3** Copyright (C) 2005-2010 Mike Pall. See Copyright Notice in luajit.h
4*/ 4*/
5 5
6#include "buildvm.h"
6#include "lj_obj.h" 7#include "lj_obj.h"
7#include "lj_ir.h" 8#include "lj_ir.h"
8 9
9#include "buildvm.h"
10
11/* Context for the folding hash table generator. */ 10/* Context for the folding hash table generator. */
12static int lineno; 11static int lineno;
13static int funcidx; 12static int funcidx;
diff --git a/src/buildvm_lib.c b/src/buildvm_lib.c
index ed55bf5d..0a758ebd 100644
--- a/src/buildvm_lib.c
+++ b/src/buildvm_lib.c
@@ -3,11 +3,10 @@
3** Copyright (C) 2005-2010 Mike Pall. See Copyright Notice in luajit.h 3** Copyright (C) 2005-2010 Mike Pall. See Copyright Notice in luajit.h
4*/ 4*/
5 5
6#include "buildvm.h"
6#include "lj_obj.h" 7#include "lj_obj.h"
7#include "lj_lib.h" 8#include "lj_lib.h"
8 9
9#include "buildvm.h"
10
11/* Context for library definitions. */ 10/* Context for library definitions. */
12static uint8_t obuf[8192]; 11static uint8_t obuf[8192];
13static uint8_t *optr; 12static uint8_t *optr;
diff --git a/src/lj_arch.h b/src/lj_arch.h
index 86a2d5ed..d87575ed 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -18,6 +18,10 @@
18#define LUAJIT_ARCH_x86 1 18#define LUAJIT_ARCH_x86 1
19#define LUAJIT_ARCH_X64 2 19#define LUAJIT_ARCH_X64 2
20#define LUAJIT_ARCH_x64 2 20#define LUAJIT_ARCH_x64 2
21#define LUAJIT_ARCH_PPC 3
22#define LUAJIT_ARCH_ppc 3
23#define LUAJIT_ARCH_PPCSPE 4
24#define LUAJIT_ARCH_ppcspe 4
21 25
22 26
23/* Select native target if no target defined. */ 27/* Select native target if no target defined. */
@@ -27,6 +31,12 @@
27#define LUAJIT_TARGET LUAJIT_ARCH_X86 31#define LUAJIT_TARGET LUAJIT_ARCH_X86
28#elif defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) 32#elif defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
29#define LUAJIT_TARGET LUAJIT_ARCH_X64 33#define LUAJIT_TARGET LUAJIT_ARCH_X64
34#elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC)
35#ifdef __NO_FPRS__
36#define LUAJIT_TARGET LUAJIT_ARCH_PPCSPE
37#else
38#define LUAJIT_TARGET LUAJIT_ARCH_PPC
39#endif
30#else 40#else
31#error "No support for this architecture (yet)" 41#error "No support for this architecture (yet)"
32#endif 42#endif
@@ -35,23 +45,56 @@
35 45
36/* Set target properties. */ 46/* Set target properties. */
37#if LUAJIT_TARGET == LUAJIT_ARCH_X86 47#if LUAJIT_TARGET == LUAJIT_ARCH_X86
48
38#define LJ_ARCH_NAME "x86" 49#define LJ_ARCH_NAME "x86"
39#define LJ_ARCH_BITS 32 50#define LJ_ARCH_BITS 32
40#define LJ_ARCH_ENDIAN LUAJIT_LE 51#define LJ_ARCH_ENDIAN LUAJIT_LE
41#define LJ_TARGET_X86 1 52#define LJ_TARGET_X86 1
42#define LJ_TARGET_X86ORX64 1 53#define LJ_TARGET_X86ORX64 1
43#define LJ_PAGESIZE 4096 54#define LJ_PAGESIZE 4096
55#define LJ_TARGET_MASKEDSHIFT 1
56
44#elif LUAJIT_TARGET == LUAJIT_ARCH_X64 57#elif LUAJIT_TARGET == LUAJIT_ARCH_X64
58
45#define LJ_ARCH_NAME "x64" 59#define LJ_ARCH_NAME "x64"
46#define LJ_ARCH_BITS 64 60#define LJ_ARCH_BITS 64
47#define LJ_ARCH_ENDIAN LUAJIT_LE 61#define LJ_ARCH_ENDIAN LUAJIT_LE
48#define LJ_TARGET_X64 1 62#define LJ_TARGET_X64 1
49#define LJ_TARGET_X86ORX64 1 63#define LJ_TARGET_X86ORX64 1
50#define LJ_PAGESIZE 4096 64#define LJ_PAGESIZE 4096
65#define LJ_TARGET_MASKEDSHIFT 1
66
67#elif LUAJIT_TARGET == LUAJIT_ARCH_PPC
68
69#error "No support for plain PowerPC CPUs (yet)"
70
71#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE
72
73#define LJ_ARCH_NAME "ppcspe"
74#define LJ_ARCH_BITS 32
75#define LJ_ARCH_ENDIAN LUAJIT_BE
76#define LJ_TARGET_PPC 1
77#define LJ_TARGET_PPCSPE 1
78#define LJ_PAGESIZE 4096
79#define LJ_TARGET_MASKEDSHIFT 1
80#define LJ_ARCH_NOJIT 1
81
51#else 82#else
52#error "No target architecture defined" 83#error "No target architecture defined"
53#endif 84#endif
54 85
86/* Check target-specific constraints. */
87#ifndef _BUILDVM_H
88#if LJ_TARGET_PPC
89#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE)
90#error "No support for PowerPC CPUs without double-precision FPU"
91#endif
92#if defined(_LITTLE_ENDIAN)
93#error "No support for little-endian PowerPC"
94#endif
95#endif
96#endif
97
55/* Disable or enable the JIT compiler. */ 98/* Disable or enable the JIT compiler. */
56#if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) 99#if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT)
57#define LJ_HASJIT 0 100#define LJ_HASJIT 0
@@ -78,9 +121,7 @@
78#endif 121#endif
79 122
80/* Whether target CPU masks the shift count by the operand length or not. */ 123/* Whether target CPU masks the shift count by the operand length or not. */
81#if LJ_TARGET_X86ORX64 124#ifndef LJ_TARGET_MASKEDSHIFT
82#define LJ_TARGET_MASKEDSHIFT 1
83#else
84#define LJ_TARGET_MASKEDSHIFT 0 125#define LJ_TARGET_MASKEDSHIFT 0
85#endif 126#endif
86 127