diff options
author | Gustavo Romero <gromero@br.ibm.com> | 2017-05-10 21:04:43 +0000 |
---|---|---|
committer | Jakub Jirutka <jakub@jirutka.cz> | 2017-05-11 03:42:59 +0200 |
commit | 3204f81df925cb920e5eec0d661a7b853701667a (patch) | |
tree | 61fd3f06e49356de7cac7b898f238aa3111c32f7 | |
parent | cd1c97f6c9231c2aa9a6d01c3b7ea52ddd3c0e09 (diff) | |
download | aports-3204f81df925cb920e5eec0d661a7b853701667a.tar.bz2 aports-3204f81df925cb920e5eec0d661a7b853701667a.tar.xz |
main/luajit: ppc64: fix r12 TOC issue and remove workaround
-rw-r--r-- | main/luajit/APKBUILD | 9 | ||||
-rw-r--r-- | main/luajit/enable-support-for-ppc64le.patch | 62 |
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 |