Delete broken RTL atomic functions
This commit is contained in:
@@ -87,7 +87,6 @@ typedef struct _ANSI_STRING64 ANSI_STRING64, *PANSI_STRING64;
|
|||||||
typedef struct _CPPORT CPPORT, *PCPPORT;
|
typedef struct _CPPORT CPPORT, *PCPPORT;
|
||||||
typedef const struct _CMMPAGEMAP_ROUTINES CMMPAGEMAP_ROUTINES, *PCMMPAGEMAP_ROUTINES;
|
typedef const struct _CMMPAGEMAP_ROUTINES CMMPAGEMAP_ROUTINES, *PCMMPAGEMAP_ROUTINES;
|
||||||
typedef struct _CSTRING CSTRING, *PCSTRING;
|
typedef struct _CSTRING CSTRING, *PCSTRING;
|
||||||
typedef struct _DOUBLE_ULONG_PTR DOUBLE_ULONG_PTR, *PDOUBLE_ULONG_PTR;
|
|
||||||
typedef struct _EFI_1394_DEVICE_PATH EFI_1394_DEVICE_PATH, *PEFI_1394_DEVICE_PATH;
|
typedef struct _EFI_1394_DEVICE_PATH EFI_1394_DEVICE_PATH, *PEFI_1394_DEVICE_PATH;
|
||||||
typedef struct _EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, *PEFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;
|
typedef struct _EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, *PEFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;
|
||||||
typedef struct _EFI_ACPI_ADR_DEVICE_PATH EFI_ACPI_ADR_DEVICE_PATH, *PEFI_ACPI_ADR_DEVICE_PATH;
|
typedef struct _EFI_ACPI_ADR_DEVICE_PATH EFI_ACPI_ADR_DEVICE_PATH, *PEFI_ACPI_ADR_DEVICE_PATH;
|
||||||
|
|||||||
@@ -156,13 +156,6 @@ typedef LPCUWSTR PCUTSTR, LPCUTSTR;
|
|||||||
/* Variadic ABI types */
|
/* Variadic ABI types */
|
||||||
typedef __builtin_va_list VA_LIST, *PVA_LIST;
|
typedef __builtin_va_list VA_LIST, *PVA_LIST;
|
||||||
|
|
||||||
/* Double ULONG_PTR structure */
|
|
||||||
typedef struct _DOUBLE_ULONG_PTR
|
|
||||||
{
|
|
||||||
ULONG_PTR LowPart;
|
|
||||||
ULONG_PTR HighPart;
|
|
||||||
} DOUBLE_ULONG_PTR, *PDOUBLE_ULONG_PTR;
|
|
||||||
|
|
||||||
/* 128-bit floats structure */
|
/* 128-bit floats structure */
|
||||||
typedef struct _FLOAT128
|
typedef struct _FLOAT128
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,9 +52,6 @@ namespace RTL
|
|||||||
STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address,
|
STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address,
|
||||||
IN LONG_PTR Comperand,
|
IN LONG_PTR Comperand,
|
||||||
IN LONG_PTR Exchange);
|
IN LONG_PTR Exchange);
|
||||||
STATIC XTFASTCALL DOUBLE_ULONG_PTR CompareExchange128(IN PDOUBLE_ULONG_PTR Address,
|
|
||||||
IN DOUBLE_ULONG_PTR Comperand,
|
|
||||||
IN DOUBLE_ULONG_PTR Exchange);
|
|
||||||
STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address,
|
STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address,
|
||||||
IN PVOID Comperand,
|
IN PVOID Comperand,
|
||||||
IN PVOID Exchange);
|
IN PVOID Exchange);
|
||||||
@@ -80,7 +77,7 @@ namespace RTL
|
|||||||
IN LONG_PTR Value);
|
IN LONG_PTR Value);
|
||||||
STATIC XTFASTCALL PVOID ExchangePointer(IN PVOID *Address,
|
STATIC XTFASTCALL PVOID ExchangePointer(IN PVOID *Address,
|
||||||
IN PVOID Exchange);
|
IN PVOID Exchange);
|
||||||
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER Header);
|
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER ListHead);
|
||||||
STATIC XTFASTCALL CHAR Increment8(IN PCHAR Address);
|
STATIC XTFASTCALL CHAR Increment8(IN PCHAR Address);
|
||||||
STATIC XTFASTCALL SHORT Increment16(IN PSHORT Address);
|
STATIC XTFASTCALL SHORT Increment16(IN PSHORT Address);
|
||||||
STATIC XTFASTCALL LONG Increment32(IN PLONG Address);
|
STATIC XTFASTCALL LONG Increment32(IN PLONG Address);
|
||||||
@@ -93,8 +90,8 @@ namespace RTL
|
|||||||
IN LONG Mask);
|
IN LONG Mask);
|
||||||
STATIC XTFASTCALL LONG_PTR Or64(IN PLONG_PTR Address,
|
STATIC XTFASTCALL LONG_PTR Or64(IN PLONG_PTR Address,
|
||||||
IN LONG_PTR Mask);
|
IN LONG_PTR Mask);
|
||||||
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER Header);
|
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER ListHead);
|
||||||
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER Header,
|
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER ListHead,
|
||||||
IN PSINGLE_LIST_ENTRY Entry);
|
IN PSINGLE_LIST_ENTRY Entry);
|
||||||
STATIC XTFASTCALL CHAR Xor8(IN PCHAR Address,
|
STATIC XTFASTCALL CHAR Xor8(IN PCHAR Address,
|
||||||
IN CHAR Mask);
|
IN CHAR Mask);
|
||||||
|
|||||||
@@ -341,41 +341,6 @@ RTL::Atomic::CompareExchange64(IN PLONG_PTR Address,
|
|||||||
return __sync_val_compare_and_swap(Address, Comperand, Exchange);
|
return __sync_val_compare_and_swap(Address, Comperand, Exchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Performs an atomic compare-exchange operation on the 64-bit or 128-bit value depending on architecture.
|
|
||||||
*
|
|
||||||
* @param Address
|
|
||||||
* Supplies the address of the value to compare and potentially exchange.
|
|
||||||
*
|
|
||||||
* @param Comperand
|
|
||||||
* Supplies the value to compare against.
|
|
||||||
*
|
|
||||||
* @param Exchange
|
|
||||||
* Supplies the value to write if the comparison returns equality.
|
|
||||||
*
|
|
||||||
* @return This routine returns the original value at the given address.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTFASTCALL
|
|
||||||
DOUBLE_ULONG_PTR
|
|
||||||
RTL::Atomic::CompareExchange128(IN PDOUBLE_ULONG_PTR Address,
|
|
||||||
IN DOUBLE_ULONG_PTR Comperand,
|
|
||||||
IN DOUBLE_ULONG_PTR Exchange)
|
|
||||||
{
|
|
||||||
DOUBLE_ULONG_PTR Value;
|
|
||||||
|
|
||||||
/* Make a local copy of the comperand */
|
|
||||||
Value = Comperand;
|
|
||||||
|
|
||||||
/* Perform an atomic compare-exchange operation */
|
|
||||||
__atomic_compare_exchange((VOLATILE PDOUBLE_ULONG_PTR)Address, &Value, &Exchange,
|
|
||||||
FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
|
|
||||||
|
|
||||||
/* Return value */
|
|
||||||
return Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs atomically compare exchange operation.
|
* Performs atomically compare exchange operation.
|
||||||
*
|
*
|
||||||
@@ -659,23 +624,6 @@ RTL::Atomic::ExchangePointer(IN PVOID *Address,
|
|||||||
return (PVOID)__sync_lock_test_and_set(Address, Exchange);
|
return (PVOID)__sync_lock_test_and_set(Address, Exchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all entries from single linked list.
|
|
||||||
*
|
|
||||||
* @param Header
|
|
||||||
* Supplies a pointer to the header of linked list.
|
|
||||||
*
|
|
||||||
* @return This routine returns a pointer to the original list, or NULLPTR if the list was already empty.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTFASTCALL
|
|
||||||
PSINGLE_LIST_ENTRY
|
|
||||||
RTL::Atomic::FlushSingleList(IN PSINGLE_LIST_HEADER Header)
|
|
||||||
{
|
|
||||||
return (PSINGLE_LIST_ENTRY)Exchange64((PLONG_PTR)&Header->Alignment, (LONGLONG)NULLPTR);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs atomically increment of the 8-bit value.
|
* Performs atomically increment of the 8-bit value.
|
||||||
*
|
*
|
||||||
@@ -828,89 +776,6 @@ RTL::Atomic::Or64(IN PLONG_PTR Address,
|
|||||||
return __sync_fetch_and_or(Address, Mask);
|
return __sync_fetch_and_or(Address, Mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes and returns the first entry from single linked list.
|
|
||||||
*
|
|
||||||
* @param Header
|
|
||||||
* Supplies a pointer to the header of a single linked list.
|
|
||||||
*
|
|
||||||
* @return This routine returns a pointer to the removed element, or NULLPTR if the list was empty.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTFASTCALL
|
|
||||||
PSINGLE_LIST_ENTRY
|
|
||||||
RTL::Atomic::PopEntrySingleList(IN PSINGLE_LIST_HEADER Header)
|
|
||||||
{
|
|
||||||
PSINGLE_LIST_ENTRY ListHead, FirstEntry, NextEntry;
|
|
||||||
|
|
||||||
/* Save header and first entry */
|
|
||||||
ListHead = (PSINGLE_LIST_ENTRY)Header;
|
|
||||||
FirstEntry = ListHead->Next;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
/* Check if list is not empty */
|
|
||||||
if(!FirstEntry)
|
|
||||||
{
|
|
||||||
/* Empty list */
|
|
||||||
return NULLPTR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update link */
|
|
||||||
NextEntry = FirstEntry;
|
|
||||||
|
|
||||||
/* Compare and exchange */
|
|
||||||
FirstEntry = (PSINGLE_LIST_ENTRY)CompareExchange64((PLONG_PTR)ListHead,
|
|
||||||
(LONG_PTR)FirstEntry->Next,
|
|
||||||
(LONG_PTR)FirstEntry);
|
|
||||||
} while(FirstEntry != NextEntry);
|
|
||||||
|
|
||||||
/* Return removed element */
|
|
||||||
return FirstEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inserts new entry at the beginning of single linked list.
|
|
||||||
*
|
|
||||||
* @param Header
|
|
||||||
* Supplies a pointer to the header of linked list.
|
|
||||||
*
|
|
||||||
* @param Entry
|
|
||||||
* Supplies a pointer to entry, that will be inserted into linked list.
|
|
||||||
*
|
|
||||||
* @return This routine returns a pointer to original heading, or NULLPTR if the list was originally empty.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTFASTCALL
|
|
||||||
PSINGLE_LIST_ENTRY
|
|
||||||
RTL::Atomic::PushEntrySingleList(IN PSINGLE_LIST_HEADER Header,
|
|
||||||
IN PSINGLE_LIST_ENTRY Entry)
|
|
||||||
{
|
|
||||||
PSINGLE_LIST_ENTRY ListHead, ListEntry, FirstEntry, NextEntry;
|
|
||||||
|
|
||||||
/* Save header and new entry */
|
|
||||||
ListHead = (PSINGLE_LIST_ENTRY)Header;
|
|
||||||
ListEntry = Entry;
|
|
||||||
|
|
||||||
/* Save next link in new first element */
|
|
||||||
FirstEntry = ListHead->Next;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
/* Update links */
|
|
||||||
ListEntry->Next = FirstEntry;
|
|
||||||
NextEntry = FirstEntry;
|
|
||||||
|
|
||||||
/* Compare and exchange */
|
|
||||||
FirstEntry = (PSINGLE_LIST_ENTRY)CompareExchange64((PLONG_PTR)ListHead,
|
|
||||||
(LONG_PTR)ListEntry,
|
|
||||||
(LONG_PTR)FirstEntry);
|
|
||||||
} while(FirstEntry != NextEntry);
|
|
||||||
|
|
||||||
/* Return original first element */
|
|
||||||
return FirstEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs an atomic bitwise XOR operation on the 8-bit value.
|
* Performs an atomic bitwise XOR operation on the 8-bit value.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user