//===----- trampoline_setup.c - Implement __trampoline_setup -------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "int_lib.h"

extern void __clear_cache(void *start, void *end);

// The ppc compiler generates calls to __trampoline_setup() when creating
// trampoline functions on the stack for use with nested functions.
// This function creates a custom 40-byte trampoline function on the stack
// which loads r11 with a pointer to the outer function's locals
// and then jumps to the target nested function.

#if __powerpc__ && !defined(__powerpc64__)
COMPILER_RT_ABI void __trampoline_setup(uint32_t *trampOnStack,
                                        int trampSizeAllocated,
                                        const void *realFunc, void *localsPtr) {
  // should never happen, but if compiler did not allocate
  // enough space on stack for the trampoline, abort
  if (trampSizeAllocated < 40)
    compilerrt_abort();

  // create trampoline
  trampOnStack[0] = 0x7c0802a6; // mflr r0
  trampOnStack[1] = 0x4800000d; // bl Lbase
  trampOnStack[2] = (uint32_t)realFunc;
  trampOnStack[3] = (uint32_t)localsPtr;
  trampOnStack[4] = 0x7d6802a6; // Lbase: mflr r11
  trampOnStack[5] = 0x818b0000; // lwz    r12,0(r11)
  trampOnStack[6] = 0x7c0803a6; // mtlr r0
  trampOnStack[7] = 0x7d8903a6; // mtctr r12
  trampOnStack[8] = 0x816b0004; // lwz    r11,4(r11)
  trampOnStack[9] = 0x4e800420; // bctr

  // clear instruction cache
  __clear_cache(trampOnStack, &trampOnStack[10]);
}
#endif // __powerpc__ && !defined(__powerpc64__)
