[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Current status of OpenJDK-9 on sparc64



On Wed, Jun 07, 2017 at 11:26:58AM +0200, John Paul Adrian Glaubitz wrote:
> If anyone has any idea, please let me know. I have already asked on
> the hotspot-dev mailing list at Oracle, but for some reasons which are
> beyond human reasoning, Oracle does not support OpenJDK on their own
> hardware, so any support requests remain unanswered or get dismissed.

Ok, so actually some answered now and pointed me into the right
direction ;-).

Looking more closely at the build log, the failure actually occurs in
the zero build, e.g. the non-JIT JVM code. For zero, the
SPARC-specific implementation of memset_with_concurrent_readers()
is not to be used but just normal memset().

So, the #ifdef guard in the memset_with_concurrent_readers.hpp header
needs to be extended to "#if defined(SPARC) && !defined(ZERO)". In
the openjdk-8 package there was actually a patch to just do that,
called zero-sparc.diff. But it's currently disabled for the openjdk-9
package, probably because it needs to be updated.

Attaching the old patch.

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaubitz@debian.org
`. `'   Freie Universitaet Berlin - glaubitz@physik.fu-berlin.de
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
--- openjdk/hotspot/src/cpu/sparc/vm/bytecodes_sparc.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/cpu/sparc/vm/bytecodes_sparc.hpp	2014-01-15 10:55:36.991083672 +0000
@@ -25,7 +25,7 @@
 #ifndef CPU_SPARC_VM_BYTECODES_SPARC_HPP
 #define CPU_SPARC_VM_BYTECODES_SPARC_HPP
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 #define NLOCALS_IN_REGS 6
 #endif
 
--- openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp.old	2014-01-15 09:57:03.613191054 +0000
+++ openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp	2014-01-15 10:55:36.995083702 +0000
@@ -82,7 +82,7 @@
   // Must never look like an address returned by reserve_memory,
   // even in its subfields (as defined by the CPU immediate fields,
   // if the CPU splits constants across multiple instructions).
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   // On SPARC, 0 != %hi(any real address), because there is no
   // allocation in the first 1Kb of the virtual address space.
   return (char *) 0;
--- openjdk/hotspot/src/share/vm/opto/output.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/opto/output.cpp	2014-01-15 10:55:37.015083849 +0000
@@ -682,7 +682,7 @@
       array->append(new_loc_value( _regalloc, regnum, Location::lng ));
     }
 #else //_LP64
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     if (t->base() == Type::Long && OptoReg::is_reg(regnum)) {
       // For SPARC we have to swap high and low words for
       // long values stored in a single-register (g0-g7).
--- openjdk/hotspot/src/share/vm/opto/chaitin.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/opto/chaitin.cpp	2014-01-15 10:55:37.023083908 +0000
@@ -723,7 +723,7 @@
         case Op_RegFlags:
         case 0:                 // not an ideal register
           lrg.set_num_regs(1);
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
           lrg.set_reg_pressure(2);
 #else
           lrg.set_reg_pressure(1);
@@ -1328,7 +1328,7 @@
 
     // Check if a color is available and if so pick the color
     OptoReg::Name reg = choose_color( *lrg, chunk );
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     debug_only(lrg->compute_set_mask_size());
     assert(lrg->num_regs() < 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned");
 #endif
--- openjdk/hotspot/src/share/vm/opto/chaitin.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/opto/chaitin.hpp	2014-01-15 10:55:37.015083849 +0000
@@ -293,7 +293,7 @@
 // TEMPORARILY REPLACED WITH COMMAND LINE FLAG
 
 //// !!!!! Magic Constants need to move into ad file
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 //#define FLOAT_PRESSURE 30  /*     SFLT_REG_mask.Size() - 1 */
 //#define INT_PRESSURE   23  /* NOTEMP_I_REG_mask.Size() - 1 */
 #define FLOAT_INCREMENT(regs) regs
--- openjdk/hotspot/src/share/vm/runtime/safepoint.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/safepoint.cpp	2014-01-15 10:55:37.027083937 +0000
@@ -765,7 +765,7 @@
                 newptr, is_oop?"oop":"   ", (wasoop && !is_oop) ? "STALE" : ((wasoop==false&&is_oop==false&&oldptr !=newptr)?"STOMP":"     "));
 }
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 static void print_me(intptr_t *new_sp, intptr_t *old_sp, bool *was_oops) {
 #ifdef _LP64
   tty->print_cr("--------+------address-----+------before-----------+-------after----------+");
--- openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	2014-01-15 10:55:37.031083968 +0000
@@ -815,7 +815,7 @@
 #ifdef _LP64
       jlong res = (jlong)low->get_int();
 #else
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
       // For SPARC we have to swap high and low words.
       jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
 #else
@@ -866,7 +866,7 @@
 #ifdef _LP64
       jlong res = (jlong)low->get_int();
 #else
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
       // For SPARC we have to swap high and low words.
       jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
 #else
--- openjdk/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp	2014-01-15 10:55:37.035083997 +0000
@@ -62,7 +62,7 @@
   }
 #endif
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   if (FLAG_IS_DEFAULT(InlineSmallCode)) {
     FLAG_SET_DEFAULT(InlineSmallCode, 2500);
   }
--- openjdk/hotspot/src/share/vm/runtime/stackValue.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/stackValue.cpp	2014-01-15 10:55:37.023083908 +0000
@@ -34,7 +34,7 @@
     // Stack or register value
     Location loc = ((LocationValue *)sv)->location();
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     // %%%%% Callee-save floats will NOT be working on a Sparc until we
     // handle the case of a 2 floats in a single double register.
     assert( !(loc.is_register() && loc.type() == Location::float_in_dbl), "Sparc does not handle callee-save floats yet" );
--- openjdk/hotspot/src/share/vm/runtime/arguments.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp	2014-01-15 10:55:37.043084056 +0000
@@ -1993,7 +1993,7 @@
 
   status = status && verify_object_alignment();
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   if (UseConcMarkSweepGC || UseG1GC) {
     // Issue a stern warning if the user has explicitly set
     // UseMemSetInBOT (it is known to cause issues), but allow
--- openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp	2014-01-15 10:55:37.063084203 +0000
@@ -1074,7 +1074,7 @@
             RelocIterator iter(nm, (address)instr_pc, (address)(instr_pc + 1));
             relocInfo::change_reloc_info_for_address(&iter, (address) instr_pc,
                                                      relocInfo::none, relocInfo::oop_type);
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
             // Sparc takes two relocations for an oop so update the second one.
             address instr_pc2 = instr_pc + NativeMovConstReg::add_offset;
             RelocIterator iter2(nm, instr_pc2, instr_pc2 + 1);
--- openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp	2014-01-15 10:55:37.047084085 +0000
@@ -577,7 +577,7 @@
       monitor_address(op->in_opr()->as_constant_ptr()->as_jint(), op->result_opr());
       break;
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     case lir_pack64:
       pack64(op->in_opr(), op->result_opr());
       break;
@@ -852,7 +852,7 @@
         if (!r->is_stack()) {
           stringStream st;
           st.print("bad oop %s at %d", r->as_Register()->name(), _masm->offset());
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
           _masm->_verify_oop(r->as_Register(), strdup(st.as_string()), __FILE__, __LINE__);
 #else
           _masm->verify_oop(r->as_Register());
--- openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp	2014-01-15 10:55:37.079084322 +0000
@@ -2128,7 +2128,7 @@
         }
 #endif
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
         assert(assigned_reg >= pd_first_fpu_reg && assigned_reg <= pd_last_fpu_reg, "no fpu register");
         assert(interval->assigned_regHi() >= pd_first_fpu_reg && interval->assigned_regHi() <= pd_last_fpu_reg, "no fpu register");
         assert(assigned_reg % 2 == 0 && assigned_reg + 1 == interval->assigned_regHi(), "must be sequential and even");
@@ -2726,7 +2726,7 @@
 
       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrLo is used)");
 #endif
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
 #endif
 #ifdef ARM
--- openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp	2014-01-15 10:55:37.059084174 +0000
@@ -595,7 +595,7 @@
   static LIR_Opr single_softfp(int reg)            { return (LIR_Opr)((reg  << LIR_OprDesc::reg1_shift) |                                     LIR_OprDesc::float_type  | LIR_OprDesc::cpu_register | LIR_OprDesc::single_size); }
   static LIR_Opr double_softfp(int reg1, int reg2) { return (LIR_Opr)((reg1 << LIR_OprDesc::reg1_shift) | (reg2 << LIR_OprDesc::reg2_shift) | LIR_OprDesc::double_type | LIR_OprDesc::cpu_register | LIR_OprDesc::double_size); }
 #endif
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   static LIR_Opr double_fpu(int reg1, int reg2) { return (LIR_Opr)(intptr_t)((reg1 << LIR_OprDesc::reg1_shift) |
                                                                              (reg2 << LIR_OprDesc::reg2_shift) |
                                                                              LIR_OprDesc::double_type          |
--- openjdk/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	2014-01-15 10:55:37.055084145 +0000
@@ -1891,7 +1891,7 @@
   Value recv = has_receiver ? apop() : NULL;
   int vtable_index = methodOopDesc::invalid_vtable_index;
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   // Currently only supported on Sparc.
   // The UseInlineCaches only controls dispatch to invokevirtuals for
   // loaded classes which we weren't able to statically bind.
--- openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp	2014-01-15 10:55:37.083084351 +0000
@@ -3095,7 +3095,7 @@
   tty->print_cr("stack_base: " INTPTR_FORMAT, (uintptr_t) this->_stack_base);
   tty->print_cr("stack_limit: " INTPTR_FORMAT, (uintptr_t) this->_stack_limit);
   tty->print_cr("monitor_base: " INTPTR_FORMAT, (uintptr_t) this->_monitor_base);
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
   tty->print_cr("last_Java_pc: " INTPTR_FORMAT, (uintptr_t) this->_last_Java_pc);
   tty->print_cr("frame_bottom: " INTPTR_FORMAT, (uintptr_t) this->_frame_bottom);
   tty->print_cr("&native_fresult: " INTPTR_FORMAT, (uintptr_t) &this->_native_fresult);
--- openjdk/hotspot/src/share/vm/utilities/macros.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/utilities/macros.hpp	2014-01-15 10:55:37.087084380 +0000
@@ -207,7 +207,7 @@
 #define NOT_AMD64(code) code
 #endif
 
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 #define SPARC_ONLY(code) code
 #define NOT_SPARC(code)
 #else
--- openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp	2014-01-15 10:55:37.087084380 +0000
@@ -243,7 +243,7 @@
 
 // checking for nanness
 #ifdef SOLARIS
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 inline int g_isnan(float  f) { return isnanf(f); }
 #else
 // isnanf() broken on Intel Solaris use isnand()
--- openjdk/hotspot/src/share/vm/utilities/globalDefinitions_sparcWorks.hpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_sparcWorks.hpp	2014-01-15 10:55:37.087084380 +0000
@@ -249,7 +249,7 @@
 
 // checking for nanness
 #ifdef SOLARIS
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
 inline int g_isnan(float  f) { return isnanf(f); }
 #else
 // isnanf() broken on Intel Solaris use isnand()
--- openjdk/hotspot/src/share/vm/adlc/output_h.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/adlc/output_h.cpp	2014-01-15 10:55:37.095084439 +0000
@@ -718,7 +718,7 @@
   fprintf(fp_hpp, "class Pipeline_Use_Cycle_Mask {\n");
 
   if (_pipeline->_maxcycleused <=
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     64
 #else
     32
--- openjdk/hotspot/src/share/vm/adlc/formssel.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/adlc/formssel.cpp	2014-01-15 10:55:37.103084499 +0000
@@ -1020,7 +1020,7 @@
     const char  *opType   = NULL;
     while (_matrule->base_operand(position, globals, result, name, opType)) {
       if ( strcmp(opType,"ConP") == 0 ) {
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
         reloc_entries += 2; // 1 for sethi + 1 for setlo
 #else
         ++reloc_entries;
@@ -1058,7 +1058,7 @@
   // Check for any component being an immediate float or double.
   Form::DataType data_type = is_chain_of_constant(globals);
   if( data_type==idealD || data_type==idealF ) {
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     // sparc required more relocation entries for floating constants
     // (expires 9/98)
     reloc_entries += 6;
--- openjdk/hotspot/src/share/vm/adlc/output_c.cpp.old	2014-01-14 21:26:34.000000000 +0000
+++ openjdk/hotspot/src/share/vm/adlc/output_c.cpp	2014-01-15 10:55:37.111084557 +0000
@@ -779,7 +779,7 @@
     /* Do Nothing */;
 
   else if (_pipeline->_maxcycleused <=
-#ifdef SPARC
+#if defined(SPARC) && !defined(ZERO)
     64
 #else
     32

Reply to: