1 //------------------------------------------------------------------------------
3 // RISC-V synchronization functions.
5 // Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
7 // SPDX-License-Identifier: BSD-2-Clause-Patent
9 //------------------------------------------------------------------------------
17 .global ASM_PFX(InternalSyncCompareExchange32)
18 .global ASM_PFX(InternalSyncCompareExchange64)
19 .global ASM_PFX(InternalSyncIncrement)
20 .global ASM_PFX(InternalSyncDecrement)
23 // ompare and xchange a 32-bit value.
25 // @param a0 : Pointer to 32-bit value.
26 // @param a1 : Compare value.
27 // @param a2 : Exchange value.
29 ASM_PFX (InternalSyncCompareExchange32):
30 lr.w a3, (a0) // Load the value from a0 and make
31 // the reservation of address.
33 sc.w a3, a2, (a0) // Write the value back to the address.
39 .global ASM_PFX(InternalSyncCompareExchange64)
42 // Compare and xchange a 64-bit value.
44 // @param a0 : Pointer to 64-bit value.
45 // @param a1 : Compare value.
46 // @param a2 : Exchange value.
48 ASM_PFX (SyncCompareExchange64):
49 lr.d a3, (a0) // Load the value from a0 and make
50 // the reservation of address.
52 sc.d a3, a2, (a0) // Write the value back to the address.
59 // Performs an atomic increment of an 32-bit unsigned integer.
61 // @param a0 : Pointer to 32-bit value.
63 ASM_PFX (InternalSyncIncrement):
70 // Performs an atomic decrement of an 32-bit unsigned integer.
72 // @param a0 : Pointer to 32-bit value.
74 ASM_PFX (InternalSyncDecrement):