< prev index next > src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
Print this page
/*
- * Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015, 2025 SAP SE. All rights reserved.
+ * 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.
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);
return entry;
}
// Generic interpreted method entry to (asm) interpreter.
//
- address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
+ 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.
// 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 >