ARM64 內建
Microsoft C++編譯程式 (MSVC) 可在 ARM64 架構上使用下列內部函數。 如需 ARM 的詳細資訊,請參閱 ARM 開發人員文件網站的架構和軟體開發工具章節。
氖
ARM64 的 NEON 向量指令集延伸模組提供單一指令多個資料 (SIMD) 功能。 它們類似於MMX和SSE向量指令集中常見的 x86 和 x64 架構處理器。
支援 NEON 內建函式,並提供於標頭檔 arm64_neon.h
中。 NEON 內部函數的 MSVC 支援類似於 ARM64 編譯程式,該編譯程式記載於 ARM Infocenter 網站上的 ARM NEON 內建參考 中。
ARM64 特定內部函數清單
支援 ARM64 特定內部函數,如頭檔 intrin.h
中提供。
函數名稱 | 指示 | 函式原型 |
---|---|---|
__破 | BRK | void __break(int) |
__addx18byte | void __addx18byte(unsigned long, unsigned char) | |
__addx18word | void __addx18word(unsigned long, unsigned short) | |
__addx18dword | void __addx18dword(unsigned long, unsigned long) | |
__addx18qword | void __addx18qword(unsigned long, unsigned __int64) | |
__cas8 | CASB | unsigned __int8 __cas8(unsigned __int8 volatile* _Target、unsigned __int8 _Comp、unsigned __int8 _Value) |
__cas16 | 現金 | unsigned __int16 __cas16(unsigned __int16 volatile* _Target、unsigned __int16 _Comp、unsigned __int16 _Value) |
__cas32 | CAS | unsigned __int32 __cas32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value) |
__cas64 | CAS | unsigned __int64 __cas64(unsigned __int64 volatile* _Target、unsigned __int64 _Comp、unsigned __int64 _Value) |
__casa8 | 卡薩布 | unsigned __int8 __casa8(unsigned __int8 volatile* _Target、unsigned __int8 _Comp、unsigned __int8 _Value) |
__casa16 | CASAH | unsigned __int16 __casa16(unsigned __int16 volatile* _Target、unsigned __int16 _Comp、unsigned __int16 _Value) |
__casa32 | 卡薩 | unsigned __int32 __casa32(unsigned __int32 volatile* _Target、 unsigned __int32 _Comp、 unsigned __int32 _Value) |
__casa64 | 卡薩 | unsigned __int64 __casa64(unsigned __int64 volatile* _Target、unsigned __int64 _Comp、unsigned __int64 _Value) |
__casl8 | CASLB | unsigned __int8 __casl8(unsigned __int8 volatile* _Target、unsigned __int8 _Comp、unsigned __int8 _Value) |
__casl16 | CASLH | unsigned __int16 __casl16(unsigned __int16 volatile* _Target、unsigned __int16 _Comp、unsigned __int16 _Value) |
__casl32 | CASL | unsigned __int32 __casl32(unsigned __int32 volatile* _Target、unsigned __int32 _Comp、unsigned __int32 _Value) |
__casl64 | CASL | unsigned __int64 __casl64(unsigned __int64 volatile* _Target, unsigned __int64 _Comp, unsigned __int64 _Value) |
__casal8 | CASALB | unsigned __int8 __casal8(unsigned __int8 volatile* _Target, unsigned __int8 _Comp, unsigned __int8 _Value) |
__casal16 | CASALH | unsigned __int16 __casal16(unsigned __int16 volatile* _Target、unsigned __int16 _Comp、unsigned __int16 _Value) |
__casal32 | CASAL | unsigned __int32 __casal32(unsigned __int32 volatile* _Target、unsigned __int32 _Comp、unsigned __int32 _Value) |
__casal64 | CASAL | unsigned __int64 __casal64(unsigned __int64 volatile* _Target、unsigned __int64 _Comp、unsigned __int64 _Value) |
__crc32b | CRC32B | unsigned __int32 __crc32b(unsigned __int32, unsigned __int32) |
__crc32h | CRC32H | unsigned __int32 __crc32h(unsigned __int32、unsigned __int32) |
__crc32w | CRC32W | unsigned __int32 __crc32w(unsigned __int32,unsigned __int32) |
__crc32d | CRC32X | unsigned __int32 __crc32d(unsigned __int32,unsigned __int64) |
__crc32cb | CRC32CB | unsigned __int32 __crc32cb(unsigned __int32、unsigned __int32) |
__crc32ch | CRC32CH | unsigned __int32 __crc32ch(unsigned __int32,unsigned __int32) |
__crc32cw | CRC32CW | unsigned __int32 __crc32cw(unsigned __int32,unsigned __int32) |
__crc32cd | CRC32CX | unsigned __int32 __crc32cd(unsigned __int32,unsigned __int64) |
__dmb | DMB | void __dmb(unsigned int _Type )將記憶體屏障作業插入指令資料流中。 參數 _Type 會指定屏障強制執行的限制類型。如需可強制執行之限制類型的詳細資訊,請參閱 記憶體屏障限制。 |
__dsb | DSB | void __dsb(unsigned int _Type) 將記憶體屏障作業插入指令資料流中。 參數 _Type 會指定屏障強制執行的限制類型。如需可強制執行之限制類型的詳細資訊,請參閱 記憶體屏障限制。 |
__isb | ISB | void __isb(unsigned int _Type) 將記憶體屏障作業插入指令資料流中。 參數 _Type 會指定屏障強制執行的限制類型。如需可強制執行之限制類型的詳細資訊,請參閱 記憶體屏障限制。 |
__getReg | unsigned __int64 __getReg(int) | |
__getRegFp | 雙__getRegFp(int) | |
__getCallerReg | unsigned __int64 __getCallerReg(int) | |
__getCallerRegFp | 雙__getCallerRegFp(int) | |
__hvc | HVC | unsigned int __hvc(unsigned int, ...) |
__hlt | HLT | int __hlt(unsigned int, ...) |
__incx18byte | void __incx18byte(unsigned long) | |
__incx18word | void __incx18word(unsigned long) | |
__incx18dword | void __incx18dword(unsigned long) | |
__incx18qword | void __incx18qword(unsigned long) | |
__iso_volatile_load16 | __int16 __iso_volatile_load16(const volatile __int16 *) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_load32 | __int32 __iso_volatile_load32(const volatile __int32 *) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_load64 | __int64 __iso_volatile_load64(const volatile __int64 *) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_load8 | __int8 __iso_volatile_load8(const volatile __int8 *) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_store16 | void __iso_volatile_store16(volatile __int16 *, __int16) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_store32 | void __iso_volatile_store32(volatile __int32 *, __int32) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_store64 | void __iso_volatile_store64(volatile __int64 *, __int64) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__iso_volatile_store8 | void __iso_volatile_store8(volatile __int8 *, __int8) 如需詳細資訊,請參閱 __iso_volatile_load/存放內部函數。 |
|
__ldar8 | LDARB | unsigned __int8 __ldar8(unsigned __int8 volatile* _Target) |
__ldar16 | LDARH | unsigned __int16 __ldar16(unsigned __int16 volatile* _Target) |
__ldar32 | LDAR | unsigned __int32 __ldar32(unsigned __int32 volatile* _Target) |
__ldar64 | LDAR | unsigned __int64 __ldar64(unsigned __int64 volatile* _Target) |
__ldapr8 | LDAPRB | unsigned __int8 __ldapr8(unsigned __int8 volatile* _Target) |
__ldapr16 | LDAPRH | unsigned __int16 __ldapr16(unsigned __int16 volatile* _Target) |
__ldapr32 | LDAPR | unsigned __int32 __ldapr32(unsigned __int32 volatile* _Target) |
__ldapr64 | LDAPR | unsigned __int64 __ldapr64(unsigned __int64 volatile* _Target) |
__mulh | __int64 __mulh(__int64,__int64) | |
__prefetch | PRFM | void __cdecl __prefetch(const void *) 提供 PRFM 記憶體提示,並將預先擷取作業 PLDL1KEEP 提供給系統,指出可能很快就會存取位於指定位址或附近的記憶體。 有些系統可能會選擇最佳化此記憶體存取模式,來增加執行階段效能。 不過,從 C++ 語言的觀點來看,函式沒有顯著的影響,而且可能根本不執行任何動作。 |
__prefetch2 | PRFM | void __cdecl __prefetch(const void *, uint8_t prfop) 提供 PRFM 記憶體提示,並提供提供的預先擷取作業給系統,讓記憶體位於指定位址或附近的記憶體可能很快就會存取。 有些系統可能會選擇最佳化此記憶體存取模式,來增加執行階段效能。 不過,從 C++ 語言的觀點來看,函式沒有顯著的影響,而且可能根本不執行任何動作。 |
__readx18byte | unsigned char __readx18byte(unsigned long) | |
__readx18word | unsigned short __readx18word(unsigned long) | |
__readx18dword | 不帶正負號的長__readx18dword(不帶正負號的 long) | |
__readx18qword | unsigned __int64 __readx18qword(unsigned long) | |
__setReg | void __setReg(int, unsigned __int64) | |
__setRegFp | void __setRegFp(int, double) | |
__setCallerReg | void __setCallerReg(int, unsigned __int64) | |
__setCallerRegFp | void __setCallerRegFp(int, double) | |
__sev | SEV | void __sev(void) |
__static_assert | void __static_assert(int, const char *) | |
__stlr8 | STLRB | void __stlr8(unsigned __int8 volatile* _Target, unsigned __int8 _Value) |
__stlr16 | STLRH | void __stlr16(unsigned __int16 volatile* _Target, unsigned __int16 _Value) |
__stlr32 | STLR | void __stlr32(unsigned __int32 volatile* _Target, unsigned __int32 _Value) |
__stlr64 | STLR | void __stlr64(unsigned __int64 volatile* _Target, unsigned __int64 _Value) |
__swp8 | SWPB | unsigned __int8 __swp8(unsigned __int8 volatile* _Target, unsigned __int8 _Value) |
__swp16 | SWPH | unsigned __int16 __swp16(unsigned __int16 volatile* _Target, unsigned __int16 _Value) |
__swp32 | SWP | unsigned __int32 __swp32(unsigned __int32 volatile* _Target, unsigned __int32 _Value) |
__swp64 | SWP | unsigned __int64 __swp64(unsigned __int64 volatile* _Target, unsigned __int64 _Value) |
__swpa8 | SWPAB | unsigned __int8 __swpa8(unsigned __int8 volatile* _Target, unsigned __int8 _Value) |
__swpa16 | SWPAH | unsigned __int16 __swpa16(unsigned __int16 volatile* _Target, unsigned __int16 _Value) |
__swpa32 | SWPA | unsigned __int32 __swpa32(unsigned __int32 volatile* _Target, unsigned __int32 _Value) |
__swpa64 | SWPA | unsigned __int64 __swpa64(unsigned __int64 volatile* _Target, unsigned __int64 _Value) |
__swpl8 | SWPLB | unsigned __int8 __swpl8(unsigned __int8 volatile* _Target,unsigned __int8 _Value) |
__swpl16 | SWPLH | unsigned __int16 __swpl16(unsigned __int16 volatile* _Target, unsigned __int16 _Value) |
__swpl32 | SWPL | unsigned __int32 __swpl32(unsigned __int32 volatile* _Target, unsigned __int32 _Value) |
__swpl64 | SWPL | unsigned __int64 __swpl64(unsigned __int64 volatile* _Target, unsigned __int64 _Value) |
__swpal8 | SWPALB | unsigned __int8 __swpal8(unsigned __int8 volatile* _Target, unsigned __int8 _Value) |
__swpal16 | SWPALH | unsigned __int16 __swpal16(unsigned __int16 volatile* _Target,unsigned __int16 _Value) |
__swpal32 | SWPAL | unsigned __int32 __swpal32(unsigned __int32 volatile* _Target, unsigned __int32 _Value) |
__swpal64 | SWPAL | unsigned __int64 __swpal64(unsigned __int64 volatile* _Target, unsigned __int64 _Value) |
__sys | SYS | unsigned int __sys(int, __int64) |
__svc | SVC | unsigned int __svc(unsigned int, ...) |
__wfe | WFE | void __wfe(void) |
__wfi | WFI | void __wfi(void) |
__writex18byte | void __writex18byte(unsigned long, unsigned char) | |
__writex18word | void __writex18word(unsigned long, unsigned short) | |
__writex18dword | void __writex18dword(unsigned long, unsigned long) | |
__writex18qword | void __writex18qword(unsigned long, unsigned __int64) | |
__umulh | unsigned __int64 __umulh(unsigned __int64, unsigned __int64) | |
_CopyDoubleFromInt64 | 雙_CopyDoubleFromInt64(__int64) | |
_CopyFloatFromInt32 | float _CopyFloatFromInt32(__int32) | |
_CopyInt32FromFloat | __int32 _CopyInt32FromFloat(float) | |
_CopyInt64FromDouble | __int64 _CopyInt64FromDouble(double) | |
_CountLeadingOnes | unsigned int _CountLeadingOnes(unsigned long) | |
_CountLeadingOnes64 | unsigned int _CountLeadingOnes64(unsigned __int64) | |
_CountLeadingSigns | unsigned int _CountLeadingSigns(long) | |
_CountLeadingSigns64 | unsigned int _CountLeadingSigns64(__int64) | |
_CountLeadingZeros | unsigned int _CountLeadingZeros(unsigned long) | |
_CountLeadingZeros64 | unsigned int _CountLeadingZeros64(unsigned __int64) | |
_CountTrailingZeros | unsigned int _CountTrailingZeros(unsigned long) | |
_CountTrailingZeros64 | unsigned int _CountTrailingZeros64(unsigned __int64) | |
_CountOneBits | unsigned int _CountOneBits(unsigned long) | |
_CountOneBits64 | unsigned int _CountOneBits64(unsigned __int64) | |
_ReadStatusReg | MRS | __int64 _ReadStatusReg(int) |
_WriteStatusReg | MSR | void _WriteStatusReg(int, __int64) |
[返回頂端]
記憶體屏障限制
內部函 __dmb
式(數據記憶體屏障)、 __dsb
(資料同步屏障)和 __isb
(指令同步處理屏障)會使用下列預先定義的值來指定共用網域的記憶體屏障限制,以及受作業影響的存取類型。
限制值 | 描述 |
---|---|
_ARM64_BARRIER_SY | 完整系統,讀取和寫入。 |
_ARM64_BARRIER_ST | 完整系統,只寫入。 |
_ARM64_BARRIER_LD | 完整系統,唯讀。 |
_ARM64_BARRIER_ISH | 可內部共用,讀取和寫入。 |
_ARM64_BARRIER_ISHST | 可內部共用,只寫入。 |
_ARM64_BARRIER_ISHLD | 內部可共用,只讀。 |
_ARM64_BARRIER_NSH | 不可共用,讀取和寫入。 |
_ARM64_BARRIER_NSHST | 不可共用,只寫入。 |
_ARM64_BARRIER_NSHLD | 不可共用、唯讀。 |
_ARM64_BARRIER_OSH | 可外部共用,讀取和寫入。 |
_ARM64_BARRIER_OSHST | 可外部共用,只寫入。 |
_ARM64_BARRIER_OSHLD | 外部可共用,只讀。 |
__isb
對於內部函數,目前唯一有效的限制是_ARM64_BARRIER_SY;所有其他值都會由架構保留。
__iso_volatile_load/存放內部函數
這些內部函數會明確執行不受編譯程式優化影響的載入和存放區。
__int16 __iso_volatile_load16(const volatile __int16 * Location);
__int32 __iso_volatile_load32(const volatile __int32 * Location);
__int64 __iso_volatile_load64(const volatile __int64 * Location);
__int8 __iso_volatile_load8(const volatile __int8 * Location);
void __iso_volatile_store16(volatile __int16 * Location, __int16 Value);
void __iso_volatile_store32(volatile __int32 * Location, __int32 Value);
void __iso_volatile_store64(volatile __int64 * Location, __int64 Value);
void __iso_volatile_store8(volatile __int8 * Location, __int8 Value);
參數
地點
要讀取或寫入的記憶體位置的位址。
ReplTest1
要寫入指定記憶體位置的值(僅儲存內部函數)。
傳回值(僅載入內部函數)
Location 所指定的記憶體位置值。
備註
您可以使用 __iso_volatile_load8/16/32/64
和 __iso_volatile_store8/16/32/64
內建來明確執行不受編譯程式優化影響的記憶體存取。 編譯程式無法移除、合成或變更這些作業的相對順序。 不過,它不會產生隱含的硬體記憶體屏障。 因此,硬體可能仍然重新排列跨多個執行緒中可觀察到的記憶體存取。 更精確地說,這些內部函數相當於在 /volatile:iso 下編譯的下列表達式。
int a = __iso_volatile_load32(p); // equivalent to: int a = *(const volatile __int32*)p;
__iso_volatile_store32(p, a); // equivalent to: *(volatile __int32*)p = a;
請注意,內建函式採取暫時性 (volatile) 指標以容納暫時性變數。 不過,不需要或建議使用揮發性指標作為自變數。 如果使用一般、非揮發性型別,這些作業的語意就完全相同。
如需 /volatile:iso 命令行自變數的詳細資訊,請參閱 /volatile (volatile 關鍵詞解譯) 。
其他架構內部函數的ARM64支援
下表列出ARM64平臺上支援之其他架構的內部函數。 如果 ARM64 內部函數的行為與其他硬體架構的行為不同,則會指出其他詳細數據。
函數名稱 | 函式原型 |
---|---|
__assume | void __assume(int) |
__code_seg | void __code_seg(const char *) |
__debugbreak | void __cdecl __debugbreak(void) |
__fastfail | __declspec(noreturn) void __fastfail(unsigned int) |
__nop | void __nop(void) |
__yield | void __yield(void) 附注: 在 ARM64 平臺上,此函式會產生 YIELD 指令。 此指令指出線程正在執行的工作,而工作可能會暫時暫停執行,例如,微調鎖定,而不會對程式造成負面影響。 它可讓 CPU 在執行週期期間執行其他工作,否則會浪費。 |
_AddressOfReturnAddress | void * _AddressOfReturnAddress(void) |
_BitScanForward | unsigned char _BitScanForward(unsigned long * _Index,unsigned long _Mask) |
_BitScanForward64 | unsigned char _BitScanForward64(unsigned long * _Index, unsigned __int64 _Mask) |
_BitScanReverse | unsigned char _BitScanReverse(unsigned long * _Index,unsigned long _Mask) |
_BitScanReverse64 | unsigned char _BitScanReverse64(unsigned long * _Index, unsigned __int64 _Mask) |
_bittest | unsigned char _bittest(long const *, long) |
_bittest64 | unsigned char _bittest64(__int64 const *, __int64) |
_bittestandcomplement | unsigned char _bittestandcomplement(long *, long) |
_bittestandcomplement64 | unsigned char _bittestandcomplement64(__int64 *, __int64) |
_bittestandreset | unsigned char _bittestandreset(long *, long) |
_bittestandreset64 | unsigned char _bittestandreset64(__int64 *, __int64) |
_bittestandset | unsigned char _bittestandset(long *, long) |
_bittestandset64 | unsigned char _bittestandset64(__int64 *, __int64) |
_byteswap_uint64 | unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64) |
_byteswap_ulong | unsigned long __cdecl _byteswap_ulong(unsigned long) |
_byteswap_ushort | unsigned short __cdecl _byteswap_ushort(unsigned short) |
_disable | void __cdecl _disable(void) 注意: 在 ARM64 平臺上,此函式會產生指令 MSR DAIFCLR,#2 ;它只能做為內建。 |
_enable | void __cdecl _enable(void) 注意: 在 ARM64 平臺上,此函式會產生指令 MSR DAIFSET,#2 ;它只能做為內建。 |
_lrotl | unsigned long __cdecl _lrotl(unsigned long, int) |
_lrotr | unsigned long __cdecl _lrotr(unsigned long, int) |
_ReadBarrier | void _ReadBarrier(void) |
_ReadWriteBarrier | void _ReadWriteBarrier(void) |
_ReturnAddress | void * _ReturnAddress(void) |
_rotl | unsigned int __cdecl _rotl(unsigned int _Value, int _Shift) |
_rotl16 | unsigned short _rotl16(unsigned short _Value, unsigned char _Shift) |
_rotl64 | unsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift) |
_rotl8 | unsigned char _rotl8(unsigned char _Value, unsigned char _Shift) |
_rotr | unsigned int __cdecl _rotr(unsigned int _Value, int _Shift) |
_rotr16 | unsigned short _rotr16(unsigned short _Value, unsigned char _Shift) |
_rotr64 | unsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift) |
_rotr8 | unsigned char _rotr8(unsigned char _Value, unsigned char _Shift) |
_setjmpex | int __cdecl _setjmpex(jmp_buf) |
_WriteBarrier | void _WriteBarrier(void) |
[返回頂端]
內建聯結
連鎖內建函式是一組內建函式,用來執行不可部分完成的讀取-修改-寫入作業。 其中有部分通用於所有平台。 它們會分別列在這裡,因為有大量的它們。 因為它們的定義大多是多餘的,所以一般情況下更容易思考它們。 它們的名稱可以用來得出確切的行為。
下表摘要說明非位聯結內部函數的ARM64支援。 在表中的每個儲存格對應的名稱,是將列的最左邊儲存格的作業名稱,和欄的最上方儲存格的類型名稱,附加至 _Interlocked
所衍生的名稱。 例如,數據列和數據行交集 Xor
處的 8
單元格會對應至 _InterlockedXor8
且完全支援。 大部分受支援的函式會提供這些選擇性的字尾:_acq
、_rel
和 _nf
。 _acq
字尾表示「取得」語意,_rel
字尾表示「釋放」語意。 _nf
或 「無柵欄」後綴對 ARM 和 ARM64 而言是唯一的,下一節會討論。
作業 | 8 | 16 | 32 | 64 | 128 | P |
---|---|---|---|---|---|---|
加 | 無 | 無 | 完整 | 完整 | 無 | 無 |
且 | 完整 | 完整 | 完整 | 完整 | 無 | 無 |
CompareExchange | 完整 | 完整 | 完整 | 完整 | 完整 | 完整 |
遞減 | 無 | 完整 | 完整 | 完整 | 無 | 無 |
Exchange | 完整 | 完整 | 完整 | 完整 | 無 | 完整 |
ExchangeAdd | 完整 | 完整 | 完整 | 完整 | 無 | 無 |
[遞增] | 無 | 完整 | 完整 | 完整 | 無 | 無 |
Or | 完整 | 完整 | 完整 | 完整 | 無 | 無 |
Xor | 完整 | 完整 | 完整 | 完整 | 無 | 無 |
金鑰:
完整:支援純文字、
_acq
、、_rel
和_nf
表單。無:不支援
_nf (沒有柵欄) 後綴
_nf
或「無柵欄」後綴表示作業不會作為任何種類的記憶體屏障,與其他三種形式(純文本、_acq
和_rel
)相反,它們的行為都是某種障礙。 表單的 _nf
其中一個可能用法是維護由多個線程同時更新的統計數據計數器,但是其值不會在執行多個線程時使用。
內建聯結的清單
函數名稱 | 函式原型 |
---|---|
_InterlockedAdd | long _InterlockedAdd(long _volatile *, long) |
_InterlockedAdd64 | __int64 _InterlockedAdd64(__int64揮發性 *, __int64) |
_InterlockedAdd64_acq | __int64 _InterlockedAdd64_acq(__int64揮發性 *, __int64) |
_InterlockedAdd64_nf | __int64 _InterlockedAdd64_nf(__int64揮發性 *, __int64) |
_InterlockedAdd64_rel | __int64 _InterlockedAdd64_rel(__int64揮發性 *, __int64) |
_InterlockedAdd_acq | long _InterlockedAdd_acq(long volatile *, long) |
_InterlockedAdd_nf | long _InterlockedAdd_nf(long volatile *, long) |
_InterlockedAdd_rel | long _InterlockedAdd_rel(long volatile *, long) |
_InterlockedAnd | long _InterlockedAnd(long volatile *, long) |
_InterlockedAnd16 | short _InterlockedAnd16(short volatile *, short) |
_InterlockedAnd16_acq | short _InterlockedAnd16_acq(short volatile *, short) |
_InterlockedAnd16_nf | short _InterlockedAnd16_nf(short volatile *, short) |
_InterlockedAnd16_rel | short _InterlockedAnd16_rel(short volatile *, short) |
_InterlockedAnd64 | __int64 _InterlockedAnd64(__int64揮發性 *, __int64) |
_InterlockedAnd64_acq | __int64 _InterlockedAnd64_acq(__int64揮發性 *, __int64) |
_InterlockedAnd64_nf | __int64 _InterlockedAnd64_nf(__int64揮發性 *, __int64) |
_InterlockedAnd64_rel | __int64 _InterlockedAnd64_rel(__int64揮發性 *, __int64) |
_InterlockedAnd8 | char _InterlockedAnd8(char volatile *, char) |
_InterlockedAnd8_acq | char _InterlockedAnd8_acq(char volatile *, char) |
_InterlockedAnd8_nf | char _InterlockedAnd8_nf(char volatile *, char) |
_InterlockedAnd8_rel | char _InterlockedAnd8_rel(char volatile *, char) |
_InterlockedAnd_acq | long _InterlockedAnd_acq(long volatile *, long) |
_InterlockedAnd_nf | long _InterlockedAnd_nf(long volatile *, long) |
_InterlockedAnd_rel | long _InterlockedAnd_rel(long volatile *, long) |
_InterlockedCompareExchange | long __cdecl _InterlockedCompareExchange(long volatile *, long, long) |
_InterlockedCompareExchange_acq | long _InterlockedCompareExchange_acq(long volatile *, long, long) |
_InterlockedCompareExchange_nf | long _InterlockedCompareExchange_nf(long volatile *, long, long) |
_InterlockedCompareExchange_rel | long _InterlockedCompareExchange_rel(long volatile *, long, long) |
_InterlockedCompareExchange16 | short _InterlockedCompareExchange16(short volatile *, short, short) |
_InterlockedCompareExchange16_acq | short _InterlockedCompareExchange16_acq(short volatile *, short, short) |
_InterlockedCompareExchange16_nf | short _InterlockedCompareExchange16_nf(short volatile *, short, short) |
_InterlockedCompareExchange16_rel | short _InterlockedCompareExchange16_rel(short volatile *, short, short) |
_InterlockedCompareExchange64 | __int64 _InterlockedCompareExchange64(__int64揮發性 *、__int64、__int64) |
_InterlockedCompareExchange64_acq | __int64 _InterlockedCompareExchange64_acq(__int64揮發性 *、__int64、__int64) |
_InterlockedCompareExchange64_nf | __int64 _InterlockedCompareExchange64_nf(__int64揮發性 *、__int64、__int64) |
_InterlockedCompareExchange64_rel | __int64 _InterlockedCompareExchange64_rel(__int64揮發性 *、__int64、__int64) |
_InterlockedCompareExchange8 | char _InterlockedCompareExchange8(char volatile *, char, char) |
_InterlockedCompareExchange8_acq | char _InterlockedCompareExchange8_acq(char volatile *, char, char, char) |
_InterlockedCompareExchange8_nf | char _InterlockedCompareExchange8_nf(char volatile *, char, char) |
_InterlockedCompareExchange8_rel | char _InterlockedCompareExchange8_rel(char volatile *, char, char) |
_InterlockedCompareExchangePointer | void * _InterlockedCompareExchangePointer(void * volatile *, void *, void *) |
_InterlockedCompareExchangePointer_acq | void * _InterlockedCompareExchangePointer_acq(void * volatile *, void *, void *) |
_InterlockedCompareExchangePointer_nf | void * _InterlockedCompareExchangePointer_nf(void * volatile *, void *, void *) |
_InterlockedCompareExchangePointer_rel | void * _InterlockedCompareExchangePointer_rel(void * volatile *, void *, void *) |
_InterlockedCompareExchange128 | unsigned char _InterlockedCompareExchange128(__int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult) |
_InterlockedCompareExchange128_acq | unsigned char _InterlockedCompareExchange128_acq(__int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult) |
_InterlockedCompareExchange128_nf | unsigned char _InterlockedCompareExchange128_nf(__int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult) |
_InterlockedCompareExchange128_rel | unsigned char _InterlockedCompareExchange128_rel(__int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult) |
_InterlockedDecrement | long __cdecl _InterlockedDecrement(long volatile *) |
_InterlockedDecrement16 | short _InterlockedDecrement16(short volatile *) |
_InterlockedDecrement16_acq | short _InterlockedDecrement16_acq(short volatile *) |
_InterlockedDecrement16_nf | short _InterlockedDecrement16_nf(short volatile *) |
_InterlockedDecrement16_rel | short _InterlockedDecrement16_rel(short volatile *) |
_InterlockedDecrement64 | __int64 _InterlockedDecrement64(__int64揮發性 *) |
_InterlockedDecrement64_acq | __int64 _InterlockedDecrement64_acq(__int64揮發性 *) |
_InterlockedDecrement64_nf | __int64 _InterlockedDecrement64_nf(__int64揮發性 *) |
_InterlockedDecrement64_rel | __int64 _InterlockedDecrement64_rel(__int64揮發性 *) |
_InterlockedDecrement_acq | long _InterlockedDecrement_acq(long volatile *) |
_InterlockedDecrement_nf | long _InterlockedDecrement_nf(long volatile *) |
_InterlockedDecrement_rel | long _InterlockedDecrement_rel(long volatile *) |
_InterlockedExchange | long __cdecl _InterlockedExchange(long volatile * _Target, long) |
_InterlockedExchange_acq | long _InterlockedExchange_acq(long volatile * _Target, long) |
_InterlockedExchange_nf | long _InterlockedExchange_nf(long volatile * _Target, long) |
_InterlockedExchange_rel | long _InterlockedExchange_rel(long volatile * _Target, long) |
_InterlockedExchange16 | short _InterlockedExchange16(short volatile * _Target, short) |
_InterlockedExchange16_acq | short _InterlockedExchange16_acq(short volatile * _Target,short) |
_InterlockedExchange16_nf | short _InterlockedExchange16_nf(short volatile * _Target,short) |
_InterlockedExchange16_rel | short _InterlockedExchange16_rel(short volatile * _Target, short) |
_InterlockedExchange64 | __int64 _InterlockedExchange64(__int64揮發性 * _Target,__int64) |
_InterlockedExchange64_acq | __int64 _InterlockedExchange64_acq(__int64揮發性 * _Target,__int64) |
_InterlockedExchange64_nf | __int64 _InterlockedExchange64_nf(__int64揮發性 * _Target,__int64) |
_InterlockedExchange64_rel | __int64 _InterlockedExchange64_rel(__int64揮發性 * _Target,__int64) |
_InterlockedExchange8 | char _InterlockedExchange8(char volatile * _Target, char) |
_InterlockedExchange8_acq | char _InterlockedExchange8_acq(char volatile * _Target,char) |
_InterlockedExchange8_nf | char _InterlockedExchange8_nf(char volatile * _Target, char) |
_InterlockedExchange8_rel | char _InterlockedExchange8_rel(char volatile * _Target,char) |
_InterlockedExchangeAdd | long __cdecl _InterlockedExchangeAdd(long volatile *, long) |
_InterlockedExchangeAdd16 | short _InterlockedExchangeAdd16(short volatile *, short) |
_InterlockedExchangeAdd16_acq | short _InterlockedExchangeAdd16_acq(short volatile *, short) |
_InterlockedExchangeAdd16_nf | short _InterlockedExchangeAdd16_nf(short volatile *, short) |
_InterlockedExchangeAdd16_rel | short _InterlockedExchangeAdd16_rel(short volatile *, short) |
_InterlockedExchangeAdd64 | __int64 _InterlockedExchangeAdd64(__int64揮發性 *, __int64) |
_InterlockedExchangeAdd64_acq | __int64 _InterlockedExchangeAdd64_acq(__int64揮發性 *, __int64) |
_InterlockedExchangeAdd64_nf | __int64 _InterlockedExchangeAdd64_nf(__int64揮發性 *, __int64) |
_InterlockedExchangeAdd64_rel | __int64 _InterlockedExchangeAdd64_rel(__int64揮發性 *, __int64) |
_InterlockedExchangeAdd8 | char _InterlockedExchangeAdd8(char volatile *, char) |
_InterlockedExchangeAdd8_acq | char _InterlockedExchangeAdd8_acq(char volatile *, char) |
_InterlockedExchangeAdd8_nf | char _InterlockedExchangeAdd8_nf(char volatile *, char) |
_InterlockedExchangeAdd8_rel | char _InterlockedExchangeAdd8_rel(char volatile *, char) |
_InterlockedExchangeAdd_acq | long _InterlockedExchangeAdd_acq(long volatile *, long) |
_InterlockedExchangeAdd_nf | long _InterlockedExchangeAdd_nf(long volatile *, long) |
_InterlockedExchangeAdd_rel | long _InterlockedExchangeAdd_rel(long volatile *, long) |
_InterlockedExchangePointer | void * _InterlockedExchangePointer(void * volatile * _Target, void *) |
_InterlockedExchangePointer_acq | void * _InterlockedExchangePointer_acq(void * volatile * _Target, void *) |
_InterlockedExchangePointer_nf | void * _InterlockedExchangePointer_nf(void * volatile * _Target, void *) |
_InterlockedExchangePointer_rel | void * _InterlockedExchangePointer_rel(void * volatile * _Target, void *) |
_InterlockedIncrement | long __cdecl _InterlockedIncrement(long volatile *) |
_InterlockedIncrement16 | short _InterlockedIncrement16(short volatile *) |
_InterlockedIncrement16_acq | short _InterlockedIncrement16_acq(short volatile *) |
_InterlockedIncrement16_nf | short _InterlockedIncrement16_nf(short volatile *) |
_InterlockedIncrement16_rel | short _InterlockedIncrement16_rel(short volatile *) |
_InterlockedIncrement64 | __int64 _InterlockedIncrement64(__int64揮發性 *) |
_InterlockedIncrement64_acq | __int64 _InterlockedIncrement64_acq(__int64揮發性 *) |
_InterlockedIncrement64_nf | __int64 _InterlockedIncrement64_nf(__int64揮發性 *) |
_InterlockedIncrement64_rel | __int64 _InterlockedIncrement64_rel(__int64揮發性 *) |
_InterlockedIncrement_acq | long _InterlockedIncrement_acq(long volatile *) |
_InterlockedIncrement_nf | long _InterlockedIncrement_nf(long volatile *) |
_InterlockedIncrement_rel | long _InterlockedIncrement_rel(long volatile *) |
_InterlockedOr | long _InterlockedOr(long volatile *, long) |
_InterlockedOr16 | short _InterlockedOr16(short volatile *, short) |
_InterlockedOr16_acq | short _InterlockedOr16_acq(short volatile *, short) |
_InterlockedOr16_nf | short _InterlockedOr16_nf(short volatile *, short) |
_InterlockedOr16_rel | short _InterlockedOr16_rel(short volatile *, short) |
_InterlockedOr64 | __int64 _InterlockedOr64(__int64揮發性 *, __int64) |
_InterlockedOr64_acq | __int64 _InterlockedOr64_acq(__int64揮發性 *, __int64) |
_InterlockedOr64_nf | __int64 _InterlockedOr64_nf(__int64揮發性 *, __int64) |
_InterlockedOr64_rel | __int64 _InterlockedOr64_rel(__int64揮發性 *, __int64) |
_InterlockedOr8 | char _InterlockedOr8(char volatile *, char) |
_InterlockedOr8_acq | char _InterlockedOr8_acq(char volatile *, char) |
_InterlockedOr8_nf | char _InterlockedOr8_nf(char volatile *, char) |
_InterlockedOr8_rel | char _InterlockedOr8_rel(char volatile *, char) |
_InterlockedOr_acq | long _InterlockedOr_acq(long volatile *, long) |
_InterlockedOr_nf | long _InterlockedOr_nf(long volatile *, long) |
_InterlockedOr_rel | long _InterlockedOr_rel(long volatile *, long) |
_InterlockedXor | long _InterlockedXor(long volatile *, long) |
_InterlockedXor16 | short _InterlockedXor16(short volatile *, short) |
_InterlockedXor16_acq | short _InterlockedXor16_acq(short volatile *, short) |
_InterlockedXor16_nf | short _InterlockedXor16_nf(short volatile *, short) |
_InterlockedXor16_rel | short _InterlockedXor16_rel(short volatile *, short) |
_InterlockedXor64 | __int64 _InterlockedXor64(__int64揮發性 *, __int64) |
_InterlockedXor64_acq | __int64 _InterlockedXor64_acq(__int64揮發性 *, __int64) |
_InterlockedXor64_nf | __int64 _InterlockedXor64_nf(__int64揮發性 *, __int64) |
_InterlockedXor64_rel | __int64 _InterlockedXor64_rel(__int64揮發性 *, __int64) |
_InterlockedXor8 | char _InterlockedXor8(char volatile *, char) |
_InterlockedXor8_acq | char _InterlockedXor8_acq(char volatile *, char) |
_InterlockedXor8_nf | char _InterlockedXor8_nf(char volatile *, char) |
_InterlockedXor8_rel | char _InterlockedXor8_rel(char volatile *, char) |
_InterlockedXor_acq | long _InterlockedXor_acq(long volatile *, long) |
_InterlockedXor_nf | long _InterlockedXor_nf(long volatile *, long) |
_InterlockedXor_rel | long _InterlockedXor_rel(long volatile *, long) |
[返回頂端]
_interlockedbittest內部函數
所有平臺通用的一般聯結位測試內部函數。 ARM64 會新增 _acq
、 _rel
和 _nf
變體,其只會修改作業的屏障語意,如本文稍早的_nf(無柵欄)後綴所述。
函數名稱 | 函式原型 |
---|---|
_interlockedbittestandreset | unsigned char _interlockedbittestandreset(long volatile *, long) |
_interlockedbittestandreset_acq | unsigned char _interlockedbittestandreset_acq(long volatile *, long) |
_interlockedbittestandreset_nf | unsigned char _interlockedbittestandreset_nf(long volatile *, long) |
_interlockedbittestandreset_rel | unsigned char _interlockedbittestandreset_rel(long volatile *, long) |
_interlockedbittestandreset64 | unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64) |
_interlockedbittestandreset64_acq | unsigned char _interlockedbittestandreset64_acq(__int64 volatile *, __int64) |
_interlockedbittestandreset64_nf | unsigned char _interlockedbittestandreset64_nf(__int64 volatile *, __int64) |
_interlockedbittestandreset64_rel | unsigned char _interlockedbittestandreset64_rel(__int64 volatile *, __int64) |
_interlockedbittestandset | unsigned char _interlockedbittestandset(long volatile *, long) |
_interlockedbittestandset_acq | unsigned char _interlockedbittestandset_acq(long volatile *, long) |
_interlockedbittestandset_nf | unsigned char _interlockedbittestandset_nf(long volatile *, long) |
_interlockedbittestandset_rel | unsigned char _interlockedbittestandset_rel(long volatile *, long) |
_interlockedbittestandset64 | unsigned char _interlockedbittestandset64(__int64 volatile *, __int64) |
_interlockedbittestandset64_acq | unsigned char _interlockedbittestandset64_acq(__int64 volatile *, __int64) |
_interlockedbittestandset64_nf | unsigned char _interlockedbittestandset64_nf(__int64 volatile *, __int64) |
_interlockedbittestandset64_rel | unsigned char _interlockedbittestandset64_rel(__int64 volatile *, __int64) |
[返回頂端]
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: