//------------------------------------------------------------------------------
//
// InternalSwitchStackAsm for RISC-V
//
// Copyright (c) 2023, Bosc Corporation. All rights reserved.<BR>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
//------------------------------------------------------------------------------
.align 3

#/**
#
# This allows the caller to switch the stack and goes to the new entry point
#
# @param      Context      Parameter to pass in
# @param      Context2     Parameter2 to pass in
# @param      EntryPoint   The pointer to the location to enter
# @param      NewStack     New Location of the stack
#
# @return     Nothing. Goes to the Entry Point passing in the new parameters
#
#**/
#VOID
#EFIAPI
#InternalSwitchStackAsm (
#  VOID  *Context,
#  VOID  *Context2,
#  SWITCH_STACK_ENTRY_POINT EntryPoint,
#  VOID  *NewStack
#  );
#
    .globl InternalSwitchStackAsm
InternalSwitchStackAsm:
  mv ra, a2
  mv sp, a3
  ret
