aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/luajit/APKBUILD9
-rw-r--r--main/luajit/enable-support-for-ppc64le.patch62
2 files changed, 47 insertions, 24 deletions
diff --git a/main/luajit/APKBUILD b/main/luajit/APKBUILD
index 77bd453dd2..b554116c4b 100644
--- a/main/luajit/APKBUILD
+++ b/main/luajit/APKBUILD
@@ -4,8 +4,8 @@
pkgname=luajit
pkgver=2.1.0_beta2
_realver=${pkgver/_/-}
-pkgrel=3
-pkgdesc='Just-in-time compiler and replacement for Lua 5.1 '
+pkgrel=4
+pkgdesc='Just-in-time compiler and replacement for Lua 5.1'
url='http://luajit.org'
arch="all !s390x"
license="MIT"
@@ -18,9 +18,6 @@ builddir=$srcdir/LuaJIT-$_realver
build() {
cd "$builddir"
- if [ "$CARCH" = "ppc64le" ]; then
- local LDFLAGS="-no-pie"
- fi
make amalg PREFIX=/usr || return 1
}
@@ -39,4 +36,4 @@ package() {
}
sha512sums="ef04db5bee66a6e24da8d488df2c035c9593792dca4cb49955d673281a7c7b00ab40f4a63e699959461da7fb0732cf81ec46808c33b66ae1eaca4ef94d0b61e3 LuaJIT-2.1.0-beta2.tar.gz
-f9823c3a5091338961e1e70a47e30d0d3e592cdf8d085405d3201a1739cb1ebaaca02eec8ee9a88eab3d80466f5f4227a847553b15f9dbb209fe789ae3b37b67 enable-support-for-ppc64le.patch"
+d48d74c856aed035d17f8355178cab4c17b5fed97d0a218fee7293fbb5c262b564cbc4ecf2e7c8558186371ae57df6f932e0313ed0453552ef99052f82876241 enable-support-for-ppc64le.patch"
diff --git a/main/luajit/enable-support-for-ppc64le.patch b/main/luajit/enable-support-for-ppc64le.patch
index 06be3f8251..0cd000b201 100644
--- a/main/luajit/enable-support-for-ppc64le.patch
+++ b/main/luajit/enable-support-for-ppc64le.patch
@@ -1,4 +1,4 @@
-From e54d7b18e777a05872e2aaa4ab40041a2c6db768 Mon Sep 17 00:00:00 2001
+From d2400df1c753683571c5df9ea29afb37b6583d36 Mon Sep 17 00:00:00 2001
From: Gustavo Serra Scalet <gsscalet@gmail.com>
Date: Tue, 2 Jun 2015 14:36:20 -0300
Subject: [PATCH] PPC64: Enable support for ppc64 little endian
@@ -7,13 +7,14 @@ Subject: [PATCH] PPC64: Enable support for ppc64 little endian
dynasm/dasm_ppc.lua | 11 +-
src/host/buildvm_asm.c | 19 +-
src/lj_arch.h | 4 +-
- src/lj_ccall.c | 32 +
+ src/lj_ccall.c | 37 +
src/lj_ccall.h | 9 +
src/lj_ccallback.c | 15 +
+ src/lj_ctype.h | 2 +-
src/lj_frame.h | 9 +
src/lj_target_ppc.h | 11 +-
- src/vm_ppc64.dasc | 4508 ++++++++++++++++++++++++++++++++++++++++++++++++
- 9 files changed, 4608 insertions(+), 10 deletions(-)
+ src/vm_ppc64.dasc | 4515 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 10 files changed, 4621 insertions(+), 11 deletions(-)
create mode 100644 src/vm_ppc64.dasc
diff --git a/dynasm/dasm_ppc.lua b/dynasm/dasm_ppc.lua
@@ -110,10 +111,10 @@ index f1e7d7f..e2cdda7 100644
#ifdef __NO_FPRS__
#error "No support for PPC/e500 anymore (use LuaJIT 2.0)"
diff --git a/src/lj_ccall.c b/src/lj_ccall.c
-index 5ab5b60..6b01544 100644
+index 5ab5b60..9ecad9d 100644
--- a/src/lj_ccall.c
+++ b/src/lj_ccall.c
-@@ -380,6 +380,37 @@
+@@ -380,6 +380,42 @@
#define CCALL_HANDLE_COMPLEXARG \
/* Pass complex by value in 2 or 4 GPRs. */
@@ -127,8 +128,13 @@ index 5ab5b60..6b01544 100644
+ if (nfpr + 1 <= CCALL_NARG_FPR) { \
+ dp = &cc->fpr[nfpr]; \
+ nfpr += 1; \
-+ ngpr += 1; /* align GPRs */ \
+ d = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ \
++ if (ngpr + 1 <= maxgpr) \
++ ngpr += 1; /* align GPRs */ \
++ else if (nsp + 1 <= CCALL_MAXSTACK) \
++ nsp += 1; /* align save area slots */ \
++ else \
++ goto err_nyi; /* Too many args */ \
+ goto done; \
+ } \
+ } else { /* Try to pass argument in GPRs. */ \
@@ -151,7 +157,7 @@ index 5ab5b60..6b01544 100644
#define CCALL_HANDLE_REGARG \
if (isfp) { /* Try to pass argument in FPRs. */ \
if (nfpr + 1 <= CCALL_NARG_FPR) { \
-@@ -402,6 +433,7 @@
+@@ -402,6 +438,7 @@
goto done; \
} \
}
@@ -160,7 +166,7 @@ index 5ab5b60..6b01544 100644
#define CCALL_HANDLE_RET \
if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \
diff --git a/src/lj_ccall.h b/src/lj_ccall.h
-index 91983fe..8ab50d2 100644
+index 91983fe..0994d84 100644
--- a/src/lj_ccall.h
+++ b/src/lj_ccall.h
@@ -85,12 +85,21 @@ typedef union FPRArg {
@@ -169,7 +175,7 @@ index 91983fe..8ab50d2 100644
+#if LJ_ARCH_PPC64
+#define CCALL_NARG_GPR 8
-+#define CCALL_NARG_FPR 8
++#define CCALL_NARG_FPR 13
+#define CCALL_NRET_GPR 4 /* For complex double. */
+#define CCALL_NRET_FPR 1
+#define CCALL_SPS_EXTRA 14
@@ -223,6 +229,19 @@ index 065c329..0ef527b 100644
*p++ = PPCI_MTCTR | PPCF_T(RID_TMP);
*p++ = PPCI_BCTR;
for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) {
+diff --git a/src/lj_ctype.h b/src/lj_ctype.h
+index 6639547..2f09d7d 100644
+--- a/src/lj_ctype.h
++++ b/src/lj_ctype.h
+@@ -153,7 +153,7 @@ typedef struct CType {
+
+ /* Simplify target-specific configuration. Checked in lj_ccall.h. */
+ #define CCALL_MAX_GPR 8
+-#define CCALL_MAX_FPR 8
++#define CCALL_MAX_FPR 13
+
+ typedef LJ_ALIGN(8) union FPRCBArg { double d; float f[2]; } FPRCBArg;
+
diff --git a/src/lj_frame.h b/src/lj_frame.h
index a86c36b..7ec6478 100644
--- a/src/lj_frame.h
@@ -279,10 +298,10 @@ index 9986768..7a68e2a 100644
PPCI_BC = 0x40800000,
diff --git a/src/vm_ppc64.dasc b/src/vm_ppc64.dasc
new file mode 100644
-index 0000000..45e5af9
+index 0000000..d7e6bb6
--- /dev/null
+++ b/src/vm_ppc64.dasc
-@@ -0,0 +1,4508 @@
+@@ -0,0 +1,4515 @@
+|// Low-level VM code for PPC64 CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
@@ -344,7 +363,7 @@ index 0000000..45e5af9
+|.define RA, r20 // Callee-save.
+|.define RB, r10
+|.define RC, r11
-+|.define RD, r12
++|.define RD, r12 // Also used as function linkage register
+|.define INS, r7 // Overlaps CARG5.
+|
+|.define TMP0, r0
@@ -395,7 +414,7 @@ index 0000000..45e5af9
+|.define SAVE_TOC, 24(sp) // TOC save area.
+|// Next frame lr: 16(sp)
+|.define SAVE_CR, 8(sp) // 64 bit CR save.
-+|// Back chain for sp: 0(sp) <-- sp while in interpreter
++|// Back chain for sp: 0(sp) <-- sp while in interpreter
+|
+|.define TMPD_BLO, 40(sp) // LSB
+|.define TMPD, TMPD_LO // base address of TMPD doubleword
@@ -981,7 +1000,8 @@ index 0000000..45e5af9
+ | std TMP1, SAVE_CFRAME
+ | std sp, L->cframe // Add our C frame to cframe chain.
+ | std L, DISPATCH_GL(cur_L)(DISPATCH)
-+ | mtctr CARG4
++ | mr r12, CARG4 // keep r12 for function linkage.
++ | mtctr r12
+ | bctrl // (lua_State *L, lua_CFunction func, void *ud)
+ | mr. BASE, CRET1
+ | li PC, FRAME_CP
@@ -2344,7 +2364,8 @@ index 0000000..45e5af9
+ | std TMP1, L->top
+ | mr CARG1, L
+ | bgt >5 // Need to grow stack.
-+ | mtctr TMP3
++ | mr r12, TMP3 // keep r12 for function linkage.
++ | mtctr r12
+ | bctrl // (lua_State *L)
+ | // Either throws an error, or recovers and returns -1, 0 or nresults+1.
+ | ld BASE, L->base
@@ -2677,6 +2698,11 @@ index 0000000..45e5af9
+ | lfd f6, CCSTATE->fpr[5]
+ | lfd f7, CCSTATE->fpr[6]
+ | lfd f8, CCSTATE->fpr[7]
++ | lfd f9, CCSTATE->fpr[8]
++ | lfd f10, CCSTATE->fpr[9]
++ | lfd f11, CCSTATE->fpr[10]
++ | lfd f12, CCSTATE->fpr[11]
++ | lfd f13, CCSTATE->fpr[12]
+ |3:
+ | ld r12, CCSTATE->func
+ | ld CARG2, CCSTATE->gpr[1]
@@ -4611,7 +4637,7 @@ index 0000000..45e5af9
+ | cmpld TMP1, TMP2
+ | std RC, L->top
+ | li_vmstate C
-+ | mtctr RD
++ | mtctr RD // RD is r12, the function linkage register
+ if (op == BC_FUNCCW) {
+ | ld CARG2, CFUNC:RB->f
+ }
@@ -4792,5 +4818,5 @@ index 0000000..45e5af9
+ }
+}
--
-2.11.0
+2.12.2