123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //------------------------------------------------------------------------------
- //
- // Make ECALL to SBI
- //
- // Copyright (c) 2023, Ventana Micro Systems Inc. All rights reserved.<BR>
- //
- // SPDX-License-Identifier: BSD-2-Clause-Patent
- //
- //------------------------------------------------------------------------------
- #include <Register/RiscV64/RiscVImpl.h>
- .data
- .align 3
- .section .text
- //
- // Make ECALL to SBI
- // ecall updates the same a0 and a1 registers with
- // return values. Hence, the C function which calls
- // this should pass the address of Arg0 and Arg1.
- // This routine saves the address and updates it
- // with a0 and a1 once ecall returns.
- //
- // @param a0 : Pointer to Arg0
- // @param a1 : Pointer to Arg1
- // @param a2 : Arg2
- // @param a3 : Arg3
- // @param a4 : Arg4
- // @param a5 : Arg5
- // @param a6 : FunctionID
- // @param a7 : ExtensionId
- //
- ASM_FUNC (RiscVSbiEcall)
- mv t0, a0
- mv t1, a1
- ld a0, 0(a0)
- ld a1, 0(a1)
- ecall
- sd a0, 0(t0)
- sd a1, 0(t1)
- ret
|