diff a/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp b/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp --- a/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp +++ b/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp @@ -1,7 +1,7 @@ /* - * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. * 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 @@ -580,10 +580,16 @@ ResolvedFieldEntry* entry = cache->resolved_field_entry_at(index); if (!entry->is_resolved(Bytecodes::_getfield)) { return normal_entry(method, 0, THREAD); } + // Flattened entries require handling beyond a direct field load. + // Bail to slow path. + if (entry->is_flat()) { + return normal_entry(method, 0, THREAD); + } + ZeroStack* stack = thread->zero_stack(); intptr_t* topOfStack = stack->sp(); // Load the object pointer and drop into the slow path // if we have a NullPointerException @@ -671,10 +677,16 @@ ResolvedFieldEntry* entry = cache->resolved_field_entry_at(index); if (!entry->is_resolved(Bytecodes::_putfield)) { return normal_entry(method, 0, THREAD); } + // Flattened entries require handling beyond a direct field store. + // Bail to slow path. + if (entry->is_flat()) { + return normal_entry(method, 0, THREAD); + } + ZeroStack* stack = thread->zero_stack(); intptr_t* topOfStack = stack->sp(); // Figure out where the receiver is. If there is a long/double // operand on stack top, then receiver is two slots down.