Update to aarch64-jdk8u162-b12 and aarch64-shenandoah-jdk8u162-b12

This commit is contained in:
Jiri Vanek 2018-03-26 13:56:35 +02:00
parent c30f1465ce
commit 4a7ca1fbfd
15 changed files with 17 additions and 1049 deletions

2
.gitignore vendored
View File

@ -106,3 +106,5 @@
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b13.tar.xz
/aarch64-port-jdk8u-aarch64-jdk8u161-b14.tar.xz
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz
/aarch64-port-jdk8u-aarch64-jdk8u162-b12.tar.xz
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz

View File

@ -1,472 +0,0 @@
# HG changeset patch
# User mdoerr
# Date 1507750779 -3600
# Wed Oct 11 20:39:39 2017 +0100
# Node ID 92f0dbe76a13992cc27188e0f68e4b1771c7004a
# Parent 542c122b1d7d30c29189565248074aa28f21ae58
8145913, PR3466, RH1498309: PPC64: add Montgomery multiply intrinsic
Reviewed-by: aph, goetz
diff --git a/src/cpu/ppc/vm/assembler_ppc.hpp b/src/cpu/ppc/vm/assembler_ppc.hpp
--- openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
@@ -1180,6 +1180,8 @@
inline void mullw_( Register d, Register a, Register b);
inline void mulhw( Register d, Register a, Register b);
inline void mulhw_( Register d, Register a, Register b);
+ inline void mulhwu( Register d, Register a, Register b);
+ inline void mulhwu_(Register d, Register a, Register b);
inline void mulhd( Register d, Register a, Register b);
inline void mulhd_( Register d, Register a, Register b);
inline void mulhdu( Register d, Register a, Register b);
diff --git a/src/cpu/ppc/vm/assembler_ppc.inline.hpp b/src/cpu/ppc/vm/assembler_ppc.inline.hpp
--- openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp
+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp
@@ -109,6 +109,8 @@
inline void Assembler::mullw_( Register d, Register a, Register b) { emit_int32(MULLW_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(1)); }
inline void Assembler::mulhw( Register d, Register a, Register b) { emit_int32(MULHW_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); }
inline void Assembler::mulhw_( Register d, Register a, Register b) { emit_int32(MULHW_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); }
+inline void Assembler::mulhwu( Register d, Register a, Register b) { emit_int32(MULHWU_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); }
+inline void Assembler::mulhwu_(Register d, Register a, Register b) { emit_int32(MULHWU_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); }
inline void Assembler::mulhd( Register d, Register a, Register b) { emit_int32(MULHD_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); }
inline void Assembler::mulhd_( Register d, Register a, Register b) { emit_int32(MULHD_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); }
inline void Assembler::mulhdu( Register d, Register a, Register b) { emit_int32(MULHDU_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); }
diff --git a/src/cpu/ppc/vm/c2_init_ppc.cpp b/src/cpu/ppc/vm/c2_init_ppc.cpp
--- openjdk/hotspot/src/cpu/ppc/vm/c2_init_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/c2_init_ppc.cpp
@@ -45,4 +45,10 @@
FLAG_SET_ERGO(bool, InsertEndGroupPPC64, true);
}
}
+
+ if (OptimizeFill) {
+ warning("OptimizeFill is not supported on this CPU.");
+ FLAG_SET_DEFAULT(OptimizeFill, false);
+ }
+
}
diff --git a/src/cpu/ppc/vm/sharedRuntime_ppc.cpp b/src/cpu/ppc/vm/sharedRuntime_ppc.cpp
--- openjdk/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp
@@ -42,6 +42,8 @@
#include "opto/runtime.hpp"
#endif
+#include <alloca.h>
+
#define __ masm->
#ifdef PRODUCT
@@ -3269,3 +3271,245 @@
return RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_in_bytes/wordSize,
oop_maps, true);
}
+
+
+//------------------------------Montgomery multiplication------------------------
+//
+
+// Subtract 0:b from carry:a. Return carry.
+static unsigned long
+sub(unsigned long a[], unsigned long b[], unsigned long carry, long len) {
+ long i = 0;
+ unsigned long tmp, tmp2;
+ __asm__ __volatile__ (
+ "subfc %[tmp], %[tmp], %[tmp] \n" // pre-set CA
+ "mtctr %[len] \n"
+ "0: \n"
+ "ldx %[tmp], %[i], %[a] \n"
+ "ldx %[tmp2], %[i], %[b] \n"
+ "subfe %[tmp], %[tmp2], %[tmp] \n" // subtract extended
+ "stdx %[tmp], %[i], %[a] \n"
+ "addi %[i], %[i], 8 \n"
+ "bdnz 0b \n"
+ "addme %[tmp], %[carry] \n" // carry + CA - 1
+ : [i]"+b"(i), [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2)
+ : [a]"r"(a), [b]"r"(b), [carry]"r"(carry), [len]"r"(len)
+ : "ctr", "xer", "memory"
+ );
+ return tmp;
+}
+
+// Multiply (unsigned) Long A by Long B, accumulating the double-
+// length result into the accumulator formed of T0, T1, and T2.
+inline void MACC(unsigned long A, unsigned long B, unsigned long &T0, unsigned long &T1, unsigned long &T2) {
+ unsigned long hi, lo;
+ __asm__ __volatile__ (
+ "mulld %[lo], %[A], %[B] \n"
+ "mulhdu %[hi], %[A], %[B] \n"
+ "addc %[T0], %[T0], %[lo] \n"
+ "adde %[T1], %[T1], %[hi] \n"
+ "addze %[T2], %[T2] \n"
+ : [hi]"=&r"(hi), [lo]"=&r"(lo), [T0]"+r"(T0), [T1]"+r"(T1), [T2]"+r"(T2)
+ : [A]"r"(A), [B]"r"(B)
+ : "xer"
+ );
+}
+
+// As above, but add twice the double-length result into the
+// accumulator.
+inline void MACC2(unsigned long A, unsigned long B, unsigned long &T0, unsigned long &T1, unsigned long &T2) {
+ unsigned long hi, lo;
+ __asm__ __volatile__ (
+ "mulld %[lo], %[A], %[B] \n"
+ "mulhdu %[hi], %[A], %[B] \n"
+ "addc %[T0], %[T0], %[lo] \n"
+ "adde %[T1], %[T1], %[hi] \n"
+ "addze %[T2], %[T2] \n"
+ "addc %[T0], %[T0], %[lo] \n"
+ "adde %[T1], %[T1], %[hi] \n"
+ "addze %[T2], %[T2] \n"
+ : [hi]"=&r"(hi), [lo]"=&r"(lo), [T0]"+r"(T0), [T1]"+r"(T1), [T2]"+r"(T2)
+ : [A]"r"(A), [B]"r"(B)
+ : "xer"
+ );
+}
+
+// Fast Montgomery multiplication. The derivation of the algorithm is
+// in "A Cryptographic Library for the Motorola DSP56000,
+// Dusse and Kaliski, Proc. EUROCRYPT 90, pp. 230-237".
+static void
+montgomery_multiply(unsigned long a[], unsigned long b[], unsigned long n[],
+ unsigned long m[], unsigned long inv, int len) {
+ unsigned long t0 = 0, t1 = 0, t2 = 0; // Triple-precision accumulator
+ int i;
+
+ assert(inv * n[0] == -1UL, "broken inverse in Montgomery multiply");
+
+ for (i = 0; i < len; i++) {
+ int j;
+ for (j = 0; j < i; j++) {
+ MACC(a[j], b[i-j], t0, t1, t2);
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ MACC(a[i], b[0], t0, t1, t2);
+ m[i] = t0 * inv;
+ MACC(m[i], n[0], t0, t1, t2);
+
+ assert(t0 == 0, "broken Montgomery multiply");
+
+ t0 = t1; t1 = t2; t2 = 0;
+ }
+
+ for (i = len; i < 2*len; i++) {
+ int j;
+ for (j = i-len+1; j < len; j++) {
+ MACC(a[j], b[i-j], t0, t1, t2);
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ m[i-len] = t0;
+ t0 = t1; t1 = t2; t2 = 0;
+ }
+
+ while (t0) {
+ t0 = sub(m, n, t0, len);
+ }
+}
+
+// Fast Montgomery squaring. This uses asymptotically 25% fewer
+// multiplies so it should be up to 25% faster than Montgomery
+// multiplication. However, its loop control is more complex and it
+// may actually run slower on some machines.
+static void
+montgomery_square(unsigned long a[], unsigned long n[],
+ unsigned long m[], unsigned long inv, int len) {
+ unsigned long t0 = 0, t1 = 0, t2 = 0; // Triple-precision accumulator
+ int i;
+
+ assert(inv * n[0] == -1UL, "broken inverse in Montgomery multiply");
+
+ for (i = 0; i < len; i++) {
+ int j;
+ int end = (i+1)/2;
+ for (j = 0; j < end; j++) {
+ MACC2(a[j], a[i-j], t0, t1, t2);
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ if ((i & 1) == 0) {
+ MACC(a[j], a[j], t0, t1, t2);
+ }
+ for (; j < i; j++) {
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ m[i] = t0 * inv;
+ MACC(m[i], n[0], t0, t1, t2);
+
+ assert(t0 == 0, "broken Montgomery square");
+
+ t0 = t1; t1 = t2; t2 = 0;
+ }
+
+ for (i = len; i < 2*len; i++) {
+ int start = i-len+1;
+ int end = start + (len - start)/2;
+ int j;
+ for (j = start; j < end; j++) {
+ MACC2(a[j], a[i-j], t0, t1, t2);
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ if ((i & 1) == 0) {
+ MACC(a[j], a[j], t0, t1, t2);
+ }
+ for (; j < len; j++) {
+ MACC(m[j], n[i-j], t0, t1, t2);
+ }
+ m[i-len] = t0;
+ t0 = t1; t1 = t2; t2 = 0;
+ }
+
+ while (t0) {
+ t0 = sub(m, n, t0, len);
+ }
+}
+
+// The threshold at which squaring is advantageous was determined
+// experimentally on an i7-3930K (Ivy Bridge) CPU @ 3.5GHz.
+// Doesn't seem to be relevant for Power8 so we use the same value.
+#define MONTGOMERY_SQUARING_THRESHOLD 64
+
+// Copy len longwords from s to d, word-swapping as we go. The
+// destination array is reversed.
+static void reverse_words(unsigned long *s, unsigned long *d, int len) {
+ d += len;
+ while(len-- > 0) {
+ d--;
+ unsigned long s_val = *s;
+ // Swap words in a longword on little endian machines.
+#ifdef VM_LITTLE_ENDIAN
+ s_val = (s_val << 32) | (s_val >> 32);
+#endif
+ *d = s_val;
+ s++;
+ }
+}
+
+void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints,
+ jint len, jlong inv,
+ jint *m_ints) {
+ assert(len % 2 == 0, "array length in montgomery_multiply must be even");
+ int longwords = len/2;
+ assert(longwords > 0, "unsupported");
+
+ // Make very sure we don't use so much space that the stack might
+ // overflow. 512 jints corresponds to an 16384-bit integer and
+ // will use here a total of 8k bytes of stack space.
+ int total_allocation = longwords * sizeof (unsigned long) * 4;
+ guarantee(total_allocation <= 8192, "must be");
+ unsigned long *scratch = (unsigned long *)alloca(total_allocation);
+
+ // Local scratch arrays
+ unsigned long
+ *a = scratch + 0 * longwords,
+ *b = scratch + 1 * longwords,
+ *n = scratch + 2 * longwords,
+ *m = scratch + 3 * longwords;
+
+ reverse_words((unsigned long *)a_ints, a, longwords);
+ reverse_words((unsigned long *)b_ints, b, longwords);
+ reverse_words((unsigned long *)n_ints, n, longwords);
+
+ ::montgomery_multiply(a, b, n, m, (unsigned long)inv, longwords);
+
+ reverse_words(m, (unsigned long *)m_ints, longwords);
+}
+
+void SharedRuntime::montgomery_square(jint *a_ints, jint *n_ints,
+ jint len, jlong inv,
+ jint *m_ints) {
+ assert(len % 2 == 0, "array length in montgomery_square must be even");
+ int longwords = len/2;
+ assert(longwords > 0, "unsupported");
+
+ // Make very sure we don't use so much space that the stack might
+ // overflow. 512 jints corresponds to an 16384-bit integer and
+ // will use here a total of 6k bytes of stack space.
+ int total_allocation = longwords * sizeof (unsigned long) * 3;
+ guarantee(total_allocation <= 8192, "must be");
+ unsigned long *scratch = (unsigned long *)alloca(total_allocation);
+
+ // Local scratch arrays
+ unsigned long
+ *a = scratch + 0 * longwords,
+ *n = scratch + 1 * longwords,
+ *m = scratch + 2 * longwords;
+
+ reverse_words((unsigned long *)a_ints, a, longwords);
+ reverse_words((unsigned long *)n_ints, n, longwords);
+
+ if (len >= MONTGOMERY_SQUARING_THRESHOLD) {
+ ::montgomery_square(a, n, m, (unsigned long)inv, longwords);
+ } else {
+ ::montgomery_multiply(a, a, n, m, (unsigned long)inv, longwords);
+ }
+
+ reverse_words(m, (unsigned long *)m_ints, longwords);
+}
diff --git a/src/cpu/ppc/vm/stubGenerator_ppc.cpp b/src/cpu/ppc/vm/stubGenerator_ppc.cpp
--- openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp
@@ -2518,6 +2518,15 @@
generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry,
&StubRoutines::_safefetchN_fault_pc,
&StubRoutines::_safefetchN_continuation_pc);
+
+ if (UseMontgomeryMultiplyIntrinsic) {
+ StubRoutines::_montgomeryMultiply
+ = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply);
+ }
+ if (UseMontgomerySquareIntrinsic) {
+ StubRoutines::_montgomerySquare
+ = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square);
+ }
if (UseAESIntrinsics) {
StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock();
diff --git a/src/cpu/ppc/vm/templateInterpreter_ppc.cpp b/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
--- openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
@@ -265,7 +265,7 @@
__ cmpdi(CCR0, Rmdo, 0);
__ beq(CCR0, no_mdo);
- // Increment backedge counter in the MDO.
+ // Increment invocation counter in the MDO.
const int mdo_bc_offs = in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset());
__ lwz(Rscratch2, mdo_bc_offs, Rmdo);
__ addi(Rscratch2, Rscratch2, increment);
@@ -277,12 +277,12 @@
}
// Increment counter in MethodCounters*.
- const int mo_bc_offs = in_bytes(MethodCounters::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset());
+ const int mo_ic_offs = in_bytes(MethodCounters::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset());
__ bind(no_mdo);
__ get_method_counters(R19_method, R3_counters, done);
- __ lwz(Rscratch2, mo_bc_offs, R3_counters);
+ __ lwz(Rscratch2, mo_ic_offs, R3_counters);
__ addi(Rscratch2, Rscratch2, increment);
- __ stw(Rscratch2, mo_bc_offs, R3_counters);
+ __ stw(Rscratch2, mo_ic_offs, R3_counters);
__ load_const_optimized(Rscratch1, mask, R0);
__ and_(Rscratch1, Rscratch2, Rscratch1);
__ beq(CCR0, *overflow);
diff --git a/src/cpu/ppc/vm/vm_version_ppc.cpp b/src/cpu/ppc/vm/vm_version_ppc.cpp
--- openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
@@ -201,6 +201,12 @@
FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
}
+ if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
+ UseMontgomeryMultiplyIntrinsic = true;
+ }
+ if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) {
+ UseMontgomerySquareIntrinsic = true;
+ }
}
void VM_Version::print_features() {
diff --git a/src/share/vm/opto/library_call.cpp b/src/share/vm/opto/library_call.cpp
--- openjdk/hotspot/src/share/vm/opto/library_call.cpp
+++ openjdk/hotspot/src/share/vm/opto/library_call.cpp
@@ -6205,11 +6205,21 @@
Node* n_start = array_element_address(n, intcon(0), n_elem);
Node* m_start = array_element_address(m, intcon(0), m_elem);
- Node* call = make_runtime_call(RC_LEAF,
- OptoRuntime::montgomeryMultiply_Type(),
- stubAddr, stubName, TypePtr::BOTTOM,
- a_start, b_start, n_start, len, inv, top(),
- m_start);
+ Node* call = NULL;
+ if (CCallingConventionRequiresIntsAsLongs) {
+ Node* len_I2L = ConvI2L(len);
+ call = make_runtime_call(RC_LEAF,
+ OptoRuntime::montgomeryMultiply_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ a_start, b_start, n_start, len_I2L XTOP, inv,
+ top(), m_start);
+ } else {
+ call = make_runtime_call(RC_LEAF,
+ OptoRuntime::montgomeryMultiply_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ a_start, b_start, n_start, len, inv, top(),
+ m_start);
+ }
set_result(m);
}
@@ -6263,11 +6273,22 @@
Node* n_start = array_element_address(n, intcon(0), n_elem);
Node* m_start = array_element_address(m, intcon(0), m_elem);
- Node* call = make_runtime_call(RC_LEAF,
- OptoRuntime::montgomerySquare_Type(),
- stubAddr, stubName, TypePtr::BOTTOM,
- a_start, n_start, len, inv, top(),
- m_start);
+ Node* call = NULL;
+ if (CCallingConventionRequiresIntsAsLongs) {
+ Node* len_I2L = ConvI2L(len);
+ call = make_runtime_call(RC_LEAF,
+ OptoRuntime::montgomerySquare_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ a_start, n_start, len_I2L XTOP, inv, top(),
+ m_start);
+ } else {
+ call = make_runtime_call(RC_LEAF,
+ OptoRuntime::montgomerySquare_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ a_start, n_start, len, inv, top(),
+ m_start);
+ }
+
set_result(m);
}
diff --git a/src/share/vm/opto/runtime.cpp b/src/share/vm/opto/runtime.cpp
--- openjdk/hotspot/src/share/vm/opto/runtime.cpp
+++ openjdk/hotspot/src/share/vm/opto/runtime.cpp
@@ -1031,12 +1031,20 @@
// create input type (domain)
int num_args = 7;
int argcnt = num_args;
+ if (CCallingConventionRequiresIntsAsLongs) {
+ argcnt++; // additional placeholder
+ }
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
fields[argp++] = TypePtr::NOTNULL; // a
fields[argp++] = TypePtr::NOTNULL; // b
fields[argp++] = TypePtr::NOTNULL; // n
- fields[argp++] = TypeInt::INT; // len
+ if (CCallingConventionRequiresIntsAsLongs) {
+ fields[argp++] = TypeLong::LONG; // len
+ fields[argp++] = TypeLong::HALF; // placeholder
+ } else {
+ fields[argp++] = TypeInt::INT; // len
+ }
fields[argp++] = TypeLong::LONG; // inv
fields[argp++] = Type::HALF;
fields[argp++] = TypePtr::NOTNULL; // result
@@ -1055,11 +1063,19 @@
// create input type (domain)
int num_args = 6;
int argcnt = num_args;
+ if (CCallingConventionRequiresIntsAsLongs) {
+ argcnt++; // additional placeholder
+ }
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
fields[argp++] = TypePtr::NOTNULL; // a
fields[argp++] = TypePtr::NOTNULL; // n
- fields[argp++] = TypeInt::INT; // len
+ if (CCallingConventionRequiresIntsAsLongs) {
+ fields[argp++] = TypeLong::LONG; // len
+ fields[argp++] = TypeLong::HALF; // placeholder
+ } else {
+ fields[argp++] = TypeInt::INT; // len
+ }
fields[argp++] = TypeLong::LONG; // inv
fields[argp++] = Type::HALF;
fields[argp++] = TypePtr::NOTNULL; // result

View File

@ -1,31 +0,0 @@
# HG changeset patch
# User goetz
# Date 1477563748 -7200
# Thu Oct 27 12:22:28 2016 +0200
# Node ID 9b9d9e11c04d5e5f64829d34752e5c94b1c7d911
# Parent 92f0dbe76a13992cc27188e0f68e4b1771c7004a
8168318, PR3466, RH1498320: PPC64: Use cmpldi instead of li/cmpld
Reviewed-by: goetz
Contributed-by: igor.nunes@eldorado.org.br
diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad
--- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
@@ -10571,6 +10571,17 @@
ins_pipe(pipe_class_compare);
%}
+instruct cmpP_reg_null(flagsReg crx, iRegP_N2P src1, immP_0or1 src2) %{
+ match(Set crx (CmpP src1 src2));
+ format %{ "CMPLDI $crx, $src1, $src2 \t// ptr" %}
+ size(4);
+ ins_encode %{
+ // TODO: PPC port $archOpcode(ppc64Opcode_cmpl);
+ __ cmpldi($crx$$CondRegister, $src1$$Register, (int)((short)($src2$$constant & 0xFFFF)));
+ %}
+ ins_pipe(pipe_class_compare);
+%}
+
// Used in postalloc expand.
instruct cmpP_reg_imm16(flagsReg crx, iRegPsrc src1, immL16 src2) %{
// This match rule prevents reordering of node before a safepoint.

View File

@ -1,33 +0,0 @@
# HG changeset patch
# User mdoerr
# Date 1480079712 7200
# Fri Nov 25 11:15:12 2016 -0200
# Node ID 3c499a0ba92b1affb3f473c6502e374f4785aba9
# Parent 9b9d9e11c04d5e5f64829d34752e5c94b1c7d911
8170328, PR3466, RH1498321: PPC64: Use andis instead of lis/and
Reviewed-by: goetz, mdoerr
Contributed-by: Igor Nunes <igor.nunes@eldorado.org.br>
diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad
--- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
@@ -8889,6 +8889,19 @@
ins_pipe(pipe_class_default);
%}
+// Left shifted Immediate And
+instruct andI_reg_immIhi16(iRegIdst dst, iRegIsrc src1, immIhi16 src2, flagsRegCR0 cr0) %{
+ match(Set dst (AndI src1 src2));
+ effect(KILL cr0);
+ format %{ "ANDIS $dst, $src1, $src2.hi" %}
+ size(4);
+ ins_encode %{
+ // TODO: PPC port $archOpcode(ppc64Opcode_andis_);
+ __ andis_($dst$$Register, $src1$$Register, (int)((unsigned short)(($src2$$constant & 0xFFFF0000) >> 16)));
+ %}
+ ins_pipe(pipe_class_default);
+%}
+
// Immediate And
instruct andI_reg_uimm16(iRegIdst dst, iRegIsrc src1, uimmI16 src2, flagsRegCR0 cr0) %{
match(Set dst (AndI src1 src2));

View File

@ -1,115 +0,0 @@
# HG changeset patch
# User zgu
# Date 1496236768 14400
# Wed May 31 09:19:28 2017 -0400
# Node ID 8330ff7914ec54c46fd19300221f72d774423405
# Parent 55a34e4962e10c822affe8f89273a87e84cade92
8181055: PPC64: "mbind: Invalid argument" still seen after 8175813
Summary: Use numa_interleave_memory v2 api when available
Reviewed-by: dholmes, shade
diff -r 74c81011375b src/os/linux/vm/os_linux.cpp
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 17 17:52:34 2017 -0400
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 31 12:27:00 2017 -0400
@@ -2819,11 +2819,8 @@
extern "C" JNIEXPORT void numa_error(char *where) { }
extern "C" JNIEXPORT int fork1() { return fork(); }
-
-// If we are running with libnuma version > 2, then we should
-// be trying to use symbols with versions 1.1
-// If we are running with earlier version, which did not have symbol versions,
-// we should use the base version.
+// Handle request to load libnuma symbol version 1.1 (API v1). If it fails
+// load symbol from base version instead.
void* os::Linux::libnuma_dlsym(void* handle, const char *name) {
void *f = dlvsym(handle, name, "libnuma_1.1");
if (f == NULL) {
@@ -2832,6 +2829,12 @@
return f;
}
+// Handle request to load libnuma symbol version 1.2 (API v2) only.
+// Return NULL if the symbol is not defined in this particular version.
+void* os::Linux::libnuma_v2_dlsym(void* handle, const char* name) {
+ return dlvsym(handle, name, "libnuma_1.2");
+}
+
bool os::Linux::libnuma_init() {
// sched_getcpu() should be in libc.
set_sched_getcpu(CAST_TO_FN_PTR(sched_getcpu_func_t,
@@ -2856,6 +2859,8 @@
libnuma_dlsym(handle, "numa_tonode_memory")));
set_numa_interleave_memory(CAST_TO_FN_PTR(numa_interleave_memory_func_t,
libnuma_dlsym(handle, "numa_interleave_memory")));
+ set_numa_interleave_memory_v2(CAST_TO_FN_PTR(numa_interleave_memory_v2_func_t,
+ libnuma_v2_dlsym(handle, "numa_interleave_memory")));
set_numa_set_bind_policy(CAST_TO_FN_PTR(numa_set_bind_policy_func_t,
libnuma_dlsym(handle, "numa_set_bind_policy")));
set_numa_bitmask_isbitset(CAST_TO_FN_PTR(numa_bitmask_isbitset_func_t,
@@ -2975,6 +2980,7 @@
os::Linux::numa_available_func_t os::Linux::_numa_available;
os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory;
os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory;
+os::Linux::numa_interleave_memory_v2_func_t os::Linux::_numa_interleave_memory_v2;
os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy;
os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset;
os::Linux::numa_distance_func_t os::Linux::_numa_distance;
diff -r 74c81011375b src/os/linux/vm/os_linux.hpp
--- openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 17 17:52:34 2017 -0400
+++ openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 31 12:27:00 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -190,6 +190,9 @@
static void libpthread_init();
static bool libnuma_init();
static void* libnuma_dlsym(void* handle, const char* name);
+ // libnuma v2 (libnuma_1.2) symbols
+ static void* libnuma_v2_dlsym(void* handle, const char* name);
+
// Minimum stack size a thread can be created with (allowing
// the VM to completely create the thread and enter user code)
static size_t min_stack_allowed;
@@ -250,6 +253,8 @@
typedef int (*numa_available_func_t)(void);
typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
+ typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask);
+
typedef void (*numa_set_bind_policy_func_t)(int policy);
typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
typedef int (*numa_distance_func_t)(int node1, int node2);
@@ -261,6 +266,7 @@
static numa_available_func_t _numa_available;
static numa_tonode_memory_func_t _numa_tonode_memory;
static numa_interleave_memory_func_t _numa_interleave_memory;
+ static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2;
static numa_set_bind_policy_func_t _numa_set_bind_policy;
static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
static numa_distance_func_t _numa_distance;
@@ -275,6 +281,7 @@
static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
+ static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; }
static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
@@ -296,7 +303,10 @@
return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
}
static void numa_interleave_memory(void *start, size_t size) {
- if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
+ // Use v2 api if available
+ if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) {
+ _numa_interleave_memory_v2(start, size, _numa_all_nodes_ptr);
+ } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
_numa_interleave_memory(start, size, _numa_all_nodes);
}
}

View File

@ -1,92 +0,0 @@
# HG changeset patch
# User stuefe
# Date 1497865921 -7200
# Mon Jun 19 11:52:01 2017 +0200
# Node ID ca0c7b2783e0102468218589a062e7ac4736aae2
# Parent 148a7d6c463ad1726bad8a9e8d5df191314d704b
8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results
Reviewed-by: sspitsyn, sgehwolf, clanger
diff --git a/src/share/back/invoker.c b/src/share/back/invoker.c
--- openjdk/jdk/src/share/back/invoker.c
+++ openjdk/jdk/src/share/back/invoker.c
@@ -212,30 +212,6 @@
}
/*
- * Delete saved global references - if any - for:
- * - a potentially thrown Exception
- * - a returned refernce/array value
- * See invoker_doInvoke() and invoke* methods where global references
- * are being saved.
- */
-static void
-deletePotentiallySavedGlobalRefs(JNIEnv *env, InvokeRequest *request)
-{
- /* Delete potentially saved return value */
- if ((request->invokeType == INVOKE_CONSTRUCTOR) ||
- (returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT)) ||
- (returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY))) {
- if (request->returnValue.l != NULL) {
- tossGlobalRef(env, &(request->returnValue.l));
- }
- }
- /* Delete potentially saved exception */
- if (request->exception != NULL) {
- tossGlobalRef(env, &(request->exception));
- }
-}
-
-/*
* Delete global argument references from the request which got put there before a
* invoke request was carried out. See fillInvokeRequest().
*/
@@ -744,6 +720,7 @@
jint id;
InvokeRequest *request;
jboolean detached;
+ jboolean mustReleaseReturnValue = JNI_FALSE;
JDI_ASSERT(thread);
@@ -787,6 +764,13 @@
id = request->id;
exc = request->exception;
returnValue = request->returnValue;
+
+ /* Release return value and exception references, but delay the release
+ * until after the return packet was sent. */
+ mustReleaseReturnValue = request->invokeType == INVOKE_CONSTRUCTOR ||
+ returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT) ||
+ returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY);
+
}
/*
@@ -801,6 +785,12 @@
*/
deleteGlobalArgumentRefs(env, request);
+ /* From now on, do not access the request structure anymore
+ * for this request id, because once we give up the invokerLock it may
+ * be immediately reused by a new invoke request.
+ */
+ request = NULL;
+
/*
* Give up the lock before I/O operation
*/
@@ -821,7 +811,12 @@
*/
eventHandler_lock(); // for proper lock order
debugMonitorEnter(invokerLock);
- deletePotentiallySavedGlobalRefs(env, request);
+ if (mustReleaseReturnValue && returnValue.l != NULL) {
+ tossGlobalRef(env, &returnValue.l);
+ }
+ if (exc != NULL) {
+ tossGlobalRef(env, &exc);
+ }
debugMonitorExit(invokerLock);
eventHandler_unlock();
}

View File

@ -1,66 +0,0 @@
# HG changeset patch
# User mdoerr
# Date 1507752266 -3600
# Wed Oct 11 21:04:26 2017 +0100
# Node ID 5c00d5cd7677aec3549afe02e4f9de8dc7b20bef
# Parent 3c499a0ba92b1affb3f473c6502e374f4785aba9
8181810, PR3466, RH1498319: PPC64: Leverage extrdi for bitfield extract
Reviewed-by: mdoerr, simonis
Contributed-by: Matthew Brandyberry <mbrandy@linux.vnet.ibm.com>
diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad
--- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
@@ -1,6 +1,6 @@
//
// Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
-// Copyright 2012, 2014 SAP AG. All rights reserved.
+// Copyright (c) 2012, 2017 SAP SE. All rights reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This code is free software; you can redistribute it and/or modify it
@@ -8610,6 +8610,44 @@
ins_pipe(pipe_class_default);
%}
+// Bitfield Extract: URShiftI + AndI
+instruct andI_urShiftI_regI_immI_immIpow2minus1(iRegIdst dst, iRegIsrc src1, immI src2, immIpow2minus1 src3) %{
+ match(Set dst (AndI (URShiftI src1 src2) src3));
+
+ format %{ "EXTRDI $dst, $src1, shift=$src2, mask=$src3 \t// int bitfield extract" %}
+ size(4);
+ ins_encode %{
+ // TODO: PPC port $archOpcode(ppc64Opcode_rldicl);
+ int rshift = ($src2$$constant) & 0x1f;
+ int length = log2_long(((jlong) $src3$$constant) + 1);
+ if (rshift + length > 32) {
+ // if necessary, adjust mask to omit rotated bits.
+ length = 32 - rshift;
+ }
+ __ extrdi($dst$$Register, $src1$$Register, length, 64 - (rshift + length));
+ %}
+ ins_pipe(pipe_class_default);
+%}
+
+// Bitfield Extract: URShiftL + AndL
+instruct andL_urShiftL_regL_immI_immLpow2minus1(iRegLdst dst, iRegLsrc src1, immI src2, immLpow2minus1 src3) %{
+ match(Set dst (AndL (URShiftL src1 src2) src3));
+
+ format %{ "EXTRDI $dst, $src1, shift=$src2, mask=$src3 \t// long bitfield extract" %}
+ size(4);
+ ins_encode %{
+ // TODO: PPC port $archOpcode(ppc64Opcode_rldicl);
+ int rshift = ($src2$$constant) & 0x3f;
+ int length = log2_long(((jlong) $src3$$constant) + 1);
+ if (rshift + length > 64) {
+ // if necessary, adjust mask to omit rotated bits.
+ length = 64 - rshift;
+ }
+ __ extrdi($dst$$Register, $src1$$Register, length, 64 - (rshift + length));
+ %}
+ ins_pipe(pipe_class_default);
+%}
+
instruct sxtI_reg(iRegIdst dst, iRegIsrc src) %{
match(Set dst (ConvL2I (ConvI2L src)));

View File

@ -1,23 +0,0 @@
# HG changeset patch
# User adinn
# Date 1516891647 0
# Thu Jan 25 14:47:27 2018 +0000
# Node ID e321560ac819c05274c59f46f5cc28ccfd4b38ec
# Parent 77baeab90732e7cfb6eb1b754a768a197bca1ab5
8195859: AArch64: vtableStubs gtest fails after 8174962
Summary: gtest vtableStubs introduced by 8174962 fails on AArch64 with an invalid insn encoding
Reviewed-by: duke
diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
@@ -1049,7 +1049,8 @@
ldr(method_result, Address(method_result, vtable_offset_in_bytes));
} else {
vtable_offset_in_bytes += vtable_index.as_constant() * wordSize;
- ldr(method_result, Address(recv_klass, vtable_offset_in_bytes));
+ ldr(method_result,
+ form_address(rscratch1, recv_klass, vtable_offset_in_bytes));
}
}

View File

@ -1,61 +0,0 @@
# HG changeset patch
# User adinn
# Date 1516881392 0
# Thu Jan 25 11:56:32 2018 +0000
# Node ID 51d97ee431ff04f126c436b25dc75de7e0d2d4dd
# Parent 2da4a52715d837b639edcfe37c66e5428c023abd
8196136: AArch64: Correct register use in patch for JDK-8195685
Summary: itable stubs must not use java argument registers as scratch registers
Reviewed-by: aph
diff --git a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
--- a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
+++ b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp
@@ -64,8 +64,8 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
#ifndef PRODUCT
if (CountCompiledCalls) {
- __ lea(r19, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr()));
- __ incrementw(Address(r19));
+ __ lea(r16, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr()));
+ __ incrementw(Address(r16));
}
#endif
@@ -74,13 +74,13 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
// get receiver klass
address npe_addr = __ pc();
- __ load_klass(r19, j_rarg0);
+ __ load_klass(r16, j_rarg0);
#ifndef PRODUCT
if (DebugVtables) {
Label L;
// check offset vs vtable length
- __ ldrw(rscratch1, Address(r19, InstanceKlass::vtable_length_offset() * wordSize));
+ __ ldrw(rscratch1, Address(r16, InstanceKlass::vtable_length_offset() * wordSize));
__ cmpw(rscratch1, vtable_index * vtableEntry::size());
__ br(Assembler::GT, L);
__ enter();
@@ -92,7 +92,7 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
}
#endif // PRODUCT
- __ lookup_virtual_method(r19, vtable_index, rmethod);
+ __ lookup_virtual_method(r16, vtable_index, rmethod);
if (DebugVtables) {
Label L;
@@ -145,9 +145,9 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) {
// rscratch2: CompiledICHolder
// j_rarg0: Receiver
- // Most registers are in use; we'll use r0, rmethod, r10, r11
+ // Most registers are in use; we'll use r16, rmethod, r10, r11
const Register recv_klass_reg = r10;
- const Register holder_klass_reg = r0; // declaring interface klass (DECC)
+ const Register holder_klass_reg = r16; // declaring interface klass (DECC)
const Register resolved_klass_reg = rmethod; // resolved interface klass (REFC)
const Register temp_reg = r11;
const Register icholder_reg = rscratch2;

View File

@ -1,22 +0,0 @@
# HG changeset patch
# User adinn
# Date 1516984701 0
# Fri Jan 26 16:38:21 2018 +0000
# Node ID 2c35f60ad26425a6d1dd1071e8a5adde79154fe3
# Parent e2a7856edfbaccebd36bf02674e39b1a53867241
8196221: AArch64: Mistake in committed patch for JDK-8195859
Summary: The wrong patch was committed for JDK-8195859
Reviewed-by: duke
diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
@@ -1050,7 +1050,7 @@
} else {
vtable_offset_in_bytes += vtable_index.as_constant() * wordSize;
ldr(method_result,
- form_address(rscratch1, recv_klass, vtable_offset_in_bytes));
+ form_address(rscratch1, recv_klass, vtable_offset_in_bytes, 0));
}
}

View File

@ -204,7 +204,7 @@
# note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there.
%global project aarch64-port
%global repo jdk8u
%global revision aarch64-jdk8u161-b14
%global revision aarch64-jdk8u162-b12
# eg # jdk8u60-b27 -> jdk8u60 or # aarch64-jdk8u60-b27 -> aarch64-jdk8u60 (dont forget spec escape % by %%)
%global whole_update %(VERSION=%{revision}; echo ${VERSION%%-*})
# eg jdk8u60 -> 60 or aarch64-jdk8u60 -> 60
@ -937,7 +937,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%{?1}
Name: java-%{javaver}-%{origin}
Version: %{javaver}.%{updatever}
Release: 9.%{buildver}%{?dist}
Release: 1.%{buildver}%{?dist}
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
# also included the epoch in their virtual provides. This created a
@ -963,7 +963,7 @@ URL: http://openjdk.java.net/
Source0: %{project}-%{repo}-%{revision}.tar.xz
# Shenandoah HotSpot
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz
# Custom README for -src subpackage
Source2: README.src
@ -1077,33 +1077,6 @@ Patch526: 6260348-pr3066.patch
# 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property"
Patch538: 8061305-pr3335-rh1423421.patch
# Patches upstream and appearing in 8u162
# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813
Patch551: 8181055-pr3394-rh1448880.patch
# 8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results
Patch553: 8181419-pr3413-rh1463144.patch
# 8145913, PR3466, RH1498309: PPC64: add Montgomery multiply intrinsic
Patch556: 8145913-pr3466-rh1498309.patch
# 8168318, PR3466, RH1498320: PPC64: Use cmpldi instead of li/cmpld
Patch557: 8168318-pr3466-rh1498320.patch
# 8170328, PR3466, RH1498321: PPC64: Use andis instead of lis/and
Patch558: 8170328-pr3466-rh1498321.patch
# 8181810, PR3466, RH1498319: PPC64: Leverage extrdi for bitfield extract
Patch559: 8181810-pr3466-rh1498319.patch
# Aarch64 build fixes after January 2018 CPU
#
# JDK-8195685 AArch64 cannot build with JDK-8174962 (already included in source tarball)
# JDK-8196136 AArch64: Correct register use in patch for JDK-8195685
# JDK-8195859 AArch64: vtableStubs gtest fails after 8174962
# JDK-8196221 AArch64: Mistake in committed patch for JDK-8195859
Patch570: JDK-8196136-correct-register-use-8195685.patch
Patch571: JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch
Patch572: JDK-8196221-mistake-in-8195859.patch
Patch573: rhbz_1540242.patch
Patch574: rhbz_1540242_2.patch
# Patches ineligible for 8u
# 8043805: Allow using a system-installed libjpeg
Patch201: system-libjpeg.patch
@ -1503,29 +1476,11 @@ sh %{SOURCE12}
%patch526
%patch528
%patch538
%patch551
%patch553
%patch560
pushd openjdk/jdk
%patch561 -p1
popd
# PPC64 updates
%patch556
%patch557
%patch558
%patch559
pushd openjdk/hotspot
# Aarch64 build fixes after January 2018 CPU
%patch570 -p1
%patch571 -p1
%patch572 -p1
# Zero/AArch64 fix for RHBZ#1540242
%patch573 -p1
%patch574 -p1
popd
# RPM-only fixes
%patch525
@ -2158,6 +2113,13 @@ require "copy_jdk_configs.lua"
%endif
%changelog
* Wed Mar 21 2018 Andrew Hughes <gnu.andrew@redhat.com> - 1:1.8.0.162-1.b12
- Update to aarch64-jdk8u162-b12 and aarch64-shenandoah-jdk8u162-b12.
- Remove upstreamed patches for 8181055/PR3394/RH1448880,
- 8181419/PR3413/RH1463144, 8145913/PR3466/RH1498309,
- 8168318/PR3466/RH1498320, 8170328/PR3466/RR1498321 and
- 8181810/PR3466/RH1498319.
* Wed Mar 07 2018 Adam Williamson <awilliam@redhat.com> - 1:1.8.0.161-9.b14
- Rebuild to fix GCC 8 mis-compilation
See https://da.gd/YJVwk ("GCC 8 ABI change on x86_64")

View File

@ -1,22 +0,0 @@
diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
--- a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+++ b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
@@ -698,6 +698,7 @@
extern "C" {
int SpinPause() {
+ return 0;
}
void _Copy_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) {
diff --git a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
--- a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+++ b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
@@ -408,6 +408,7 @@
extern "C" {
int SpinPause() {
+ return 0;
}

View File

@ -1,59 +0,0 @@
diff --git a/src/cpu/aarch64/vm/assembler_aarch64.hpp b/src/cpu/aarch64/vm/assembler_aarch64.hpp
--- a/src/cpu/aarch64/vm/assembler_aarch64.hpp
+++ b/src/cpu/aarch64/vm/assembler_aarch64.hpp
@@ -2529,6 +2529,8 @@
virtual RegisterOrConstant delayed_value_impl(intptr_t* delayed_value_addr,
Register tmp,
int offset) {
+ ShouldNotCallThis();
+ return RegisterOrConstant();
}
// Stack overflow checking
diff --git a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
+++ b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
@@ -209,6 +209,7 @@
Address LIR_Assembler::as_Address_hi(LIR_Address* addr) {
ShouldNotReachHere();
+ return Address();
}
Address LIR_Assembler::as_Address(LIR_Address* addr) {
diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp
@@ -434,8 +434,8 @@
void mov(Register dst, Address a);
public:
- int push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); }
- int pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); }
+ void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); }
+ void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); }
// Push and pop everything that might be clobbered by a native
// runtime call except rscratch1 and rscratch2. (They are always
diff --git a/src/cpu/aarch64/vm/nativeInst_aarch64.hpp b/src/cpu/aarch64/vm/nativeInst_aarch64.hpp
--- a/src/cpu/aarch64/vm/nativeInst_aarch64.hpp
+++ b/src/cpu/aarch64/vm/nativeInst_aarch64.hpp
@@ -220,6 +220,7 @@
else if (is_ldr_literal_at(instruction_address()))
return(addr_at(4));
assert(false, "Unknown instruction in NativeMovConstReg");
+ return NULL;
}
intptr_t data() const;
diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
--- a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+++ b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
@@ -472,6 +472,7 @@
err.report_and_die();
ShouldNotReachHere();
+ return true; // Mute compiler
}
void os::Linux::init_thread_fpu_state(void) {

View File

@ -1,3 +1,3 @@
SHA512 (systemtap-tapset-3.6.0pre02.tar.xz) = d59858bbe9e927bdf47711e3c71c88f93567596aea3e1736b33b436a7a2cb38af25a9b4b4224ca513454b3f2d0371d14e753176c1810d9745a7e4af8edae7fb8
SHA512 (aarch64-port-jdk8u-aarch64-jdk8u161-b14.tar.xz) = f60836acdf2a38961e1f8299b4c5274f0201a0e365c37f107e8793640f691e6fef9a03daa0172aa192eddab6db86e9ea904aa0da2abd4d5a75aa147af59d715e
SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz) = da15dbe6c02233d5c172cf862090f335e499fde97dd3a93cd15d6011b7f27864b1af3c58d3677bcf2aef763c3ca60bc97c2223990133ec4d073e5a93fb969053
SHA512 (aarch64-port-jdk8u-aarch64-jdk8u162-b12.tar.xz) = 5bb05e931a57c25c627fa0b588b74ab89e050e6d0a0b7073ba1d65aa3a3ee9f5d5e62e1fbfe3da55a472ecb3dad9cec3a6faf73b5d95b59bcefa2246caddcab3
SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz) = 833a4516fc3b68fedb78feddd272d7f52e9af90aeebc3eb95aa4a86d69b4540e14ad73fdd913b7201c9663c2f136cfe3ec2e2d3b8d39cf1e99ec1c7711079740

View File

@ -31,7 +31,7 @@ if [ "x$REPO_NAME" = "x" ] ; then
REPO_NAME="jdk8u"
fi
if [ "x$VERSION" = "x" ] ; then
VERSION="aarch64-jdk8u151-b12"
VERSION="aarch64-jdk8u162-b12"
fi
if [ "x$COMPRESSION" = "x" ] ; then
@ -109,7 +109,7 @@ if [ "x$VERSION" = "xtip" ] ; then
VERSION="tip"
else
#hardcoding version for anything else except tip
VERSION="aarch64-shenandoah-jdk8u151-b12"
VERSION="aarch64-shenandoah-jdk8u162-b12"
fi
MAIN_REPO_NAME=$REPO_NAME
REPO_NAME=jdk8u-shenandoah