Files
exectos/xtoskrnl/includes/rtl/atomic.hh
Aiken Harris 9518e7da8e
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 21s
Builds / ExectOS (amd64, release) (push) Failing after 20s
Builds / ExectOS (i686, debug) (push) Failing after 19s
Builds / ExectOS (i686, release) (push) Failing after 18s
Migrate RTL subsystem to C++
2025-09-11 18:28:24 +02:00

98 lines
5.3 KiB
C++

/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/atomic.hh
* DESCRIPTION: Atomic operations support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_ATOMIC_HH
#define __XTOSKRNL_RTL_ATOMIC_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Atomic
{
public:
STATIC XTFASTCALL CHAR And8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT And16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG And32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR And64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL UCHAR BitTestAndSet(IN PLONG Base,
IN LONG Offset);
STATIC XTFASTCALL UCHAR BitTestAndSet64(IN PLONGLONG Base,
IN LONGLONG Offset);
STATIC XTFASTCALL CHAR CompareExchange8(IN PCHAR Address,
IN CHAR Comperand,
IN CHAR Exchange);
STATIC XTFASTCALL SHORT CompareExchange16(IN PSHORT Address,
IN SHORT Comperand,
IN SHORT Exchange);
STATIC XTFASTCALL LONG CompareExchange32(IN PLONG Address,
IN LONG Comperand,
IN LONG Exchange);
STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address,
IN LONG_PTR Comperand,
IN LONG_PTR Exchange);
STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address,
IN PVOID Comperand,
IN PVOID Exchange);
STATIC XTFASTCALL CHAR Decrement8(IN PCHAR Address);
STATIC XTFASTCALL SHORT Decrement16(IN PSHORT Address);
STATIC XTFASTCALL LONG Decrement32(IN PLONG Address);
STATIC XTFASTCALL LONG_PTR Decrement64(IN PLONG_PTR Address);
STATIC XTFASTCALL CHAR Exchange8(IN PCHAR Address,
IN CHAR Exchange);
STATIC XTFASTCALL SHORT Exchange16(IN PSHORT Address,
IN SHORT Exchange);
STATIC XTFASTCALL LONG Exchange32(IN PLONG Address,
IN LONG Exchange);
STATIC XTFASTCALL LONG_PTR Exchange64(IN PLONG_PTR Address,
IN LONG_PTR Exchange);
STATIC XTFASTCALL CHAR ExchangeAdd8(IN PCHAR Address,
IN CHAR Value);
STATIC XTFASTCALL SHORT ExchangeAdd16(IN PSHORT Address,
IN SHORT Value);
STATIC XTFASTCALL LONG ExchangeAdd32(IN PLONG Address,
IN LONG Value);
STATIC XTFASTCALL LONG_PTR ExchangeAdd64(IN PLONG_PTR Address,
IN LONG_PTR Value);
STATIC XTFASTCALL PVOID ExchangePointer(IN PVOID *Address,
IN PVOID Exchange);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL CHAR Increment8(IN PCHAR Address);
STATIC XTFASTCALL SHORT Increment16(IN PSHORT Address);
STATIC XTFASTCALL LONG Increment32(IN PLONG Address);
STATIC XTFASTCALL LONG_PTR Increment64(IN PLONG_PTR Address);
STATIC XTFASTCALL CHAR Or8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT Or16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG Or32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR Or64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER Header,
IN PSINGLE_LIST_ENTRY Entry);
STATIC XTFASTCALL CHAR Xor8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT Xor16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG Xor32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR Xor64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
};
}
#endif /* __XTOSKRNL_RTL_ATOMIC_HH */