< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page
*** 1,8 ***
  /*
!  * Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
!  * Copyright (c) 2015, 2025 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
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.
--- 1,8 ---
  /*
!  * Copyright (c) 2014, 2026, Oracle and/or its affiliates. All rights reserved.
!  * Copyright (c) 2015, 2026 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
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

*** 617,10 ***
--- 617,15 ---
      case dtos: __ fmr(F15_ftos, F1_RET); break; // TOS cache -> GR_FRET
      case vtos: break;                           // Nothing to do, this was a void return.
      default  : ShouldNotReachHere();
    }
  
+   if (state == atos && InlineTypeReturnedAsFields) {
+     __ unimplemented("return entry InlineTypeReturnedAsFields");
+     //__ store_inline_type_fields_to_buf(nullptr, true);
+   }
+ 
    __ restore_interpreter_state(R11_scratch1, false /*bcp_and_mdx_only*/, true /*restore_top_frame_sp*/);
  
    // Compiled code destroys templateTableBase, reload.
    __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R12_scratch2);
  

*** 1709,11 ***
    return entry;
  }
  
  // Generic interpreted method entry to (asm) interpreter.
  //
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
    bool inc_counter = UseCompiler || CountCompiledCalls;
    address entry = __ pc();
    // Generate the code to allocate the interpreter stack frame.
    Register Rsize_of_parameters = R4_ARG2, // Written by generate_fixed_frame.
             Rsize_of_locals     = R5_ARG3; // Written by generate_fixed_frame.
--- 1714,11 ---
    return entry;
  }
  
  // Generic interpreted method entry to (asm) interpreter.
  //
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized, bool object_init) {
    bool inc_counter = UseCompiler || CountCompiledCalls;
    address entry = __ pc();
    // Generate the code to allocate the interpreter stack frame.
    Register Rsize_of_parameters = R4_ARG2, // Written by generate_fixed_frame.
             Rsize_of_locals     = R5_ARG3; // Written by generate_fixed_frame.

*** 1790,20 ***
--- 1795,27 ---
    // Locking of synchronized methods. Must happen AFTER invocation_counter
    // check and stack overflow check, so method is not locked if overflows.
    if (synchronized) {
      lock_method(R3_ARG1, R4_ARG2, R5_ARG3);
    }
+ 
  #ifdef ASSERT
    else {
      Label Lok;
      __ lhz(R0, in_bytes(Method::access_flags_offset()), R19_method);
      __ andi_(R0, R0, JVM_ACC_SYNCHRONIZED);
      __ asm_assert_eq("method needs synchronization");
      __ bind(Lok);
    }
  #endif // ASSERT
  
+   // Issue a StoreStore barrier on entry to Object_init if the
+   // class has strict field fields.  Be lazy, always do it.
+   if (object_init) {
+     __ membar(MacroAssembler::StoreStore);
+   }
+ 
    // --------------------------------------------------------------------------
    // JVMTI support
    __ notify_method_entry();
  
    // --------------------------------------------------------------------------
< prev index next >