< prev index next >

src/hotspot/cpu/ppc/continuationFreezeThaw_ppc.inline.hpp

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

*** 54,10 ***
--- 55,13 ---
    assert(FKind::is_instance(f), "");
    if (FKind::interpreted) {
      return frame(f.sender_sp(), f.sender_pc(), f.interpreter_frame_sender_sp());
    }
  
+   assert(f.cb() == nullptr || !f.cb()->is_nmethod() || !f.cb()->as_nmethod()->needs_stack_repair(),
+          "unsupported");
+ 
    intptr_t* sender_sp = f.sender_sp();
    address sender_pc = f.sender_pc();
    assert(sender_sp != f.sp(), "must have changed");
  
    int slot = 0;

*** 267,11 ***
  //                                                         | frame::java_abi        |
  //      Where f is the frame to be relocated on the heap.  | (metadata_words_at_top)|<- SP == unext. SP of new frame
  //      See also StackChunkFrameStream::frame_size().      ==========================
  //
  template<typename FKind>
! frame FreezeBase::new_heap_frame(frame& f, frame& caller) {
    assert(FKind::is_instance(f), "");
  
    intptr_t *sp, *fp;
    if (FKind::interpreted) {
      intptr_t locals_offset = *f.addr_at(ijava_idx(locals));
--- 271,12 ---
  //                                                         | frame::java_abi        |
  //      Where f is the frame to be relocated on the heap.  | (metadata_words_at_top)|<- SP == unext. SP of new frame
  //      See also StackChunkFrameStream::frame_size().      ==========================
  //
  template<typename FKind>
! frame FreezeBase::new_heap_frame(frame& f, frame& caller, int size_adjust) {
+   assert(size_adjust == 0, "unsupported");
    assert(FKind::is_instance(f), "");
  
    intptr_t *sp, *fp;
    if (FKind::interpreted) {
      intptr_t locals_offset = *f.addr_at(ijava_idx(locals));

*** 315,11 ***
  
      return frame(sp, sp, fp, f.pc(), nullptr, nullptr, true /* on_heap */);
    }
  }
  
! inline void FreezeBase::patch_pd(frame& hf, const frame& caller) {
    if (caller.is_interpreted_frame()) {
      assert(!caller.is_empty(), "");
      patch_callee_link_relative(caller, caller.fp());
    }
  #ifdef ASSERT
--- 320,11 ---
  
      return frame(sp, sp, fp, f.pc(), nullptr, nullptr, true /* on_heap */);
    }
  }
  
! inline void FreezeBase::patch_pd(frame& hf, const frame& caller, bool is_bottom_frame) {
    if (caller.is_interpreted_frame()) {
      assert(!caller.is_empty(), "");
      patch_callee_link_relative(caller, caller.fp());
    }
  #ifdef ASSERT

*** 501,11 ***
  //  If the new frame is at the bottom just above the ContinuationEntry frame then the stackargs
  //  don't overlap the caller either even though it is compiled because the size is not
  //  limited/known. In contrast to the interpreted caller case the abi overlaps with the caller
  //  if there are no stackargs. This is to comply with shared code (see e.g. StackChunkFrameStream::frame_size())
  //
! template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame& caller, bool bottom) {
    assert(FKind::is_instance(hf), "");
  
    assert(is_aligned(caller.fp(), frame::frame_alignment), PTR_FORMAT, p2i(caller.fp()));
    // caller.sp() can be unaligned. This is fixed below.
    if (FKind::interpreted) {
--- 506,12 ---
  //  If the new frame is at the bottom just above the ContinuationEntry frame then the stackargs
  //  don't overlap the caller either even though it is compiled because the size is not
  //  limited/known. In contrast to the interpreted caller case the abi overlaps with the caller
  //  if there are no stackargs. This is to comply with shared code (see e.g. StackChunkFrameStream::frame_size())
  //
! template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame& caller, bool bottom, int size_adjust) {
+   assert(size_adjust == 0, "unsupported");
    assert(FKind::is_instance(hf), "");
  
    assert(is_aligned(caller.fp(), frame::frame_alignment), PTR_FORMAT, p2i(caller.fp()));
    // caller.sp() can be unaligned. This is fixed below.
    if (FKind::interpreted) {
< prev index next >