Share via


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 特定內部函數清單

函數名稱 指示 函式原型
__打破 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)
__系統 系統 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);

參數

地點
要讀取或寫入的記憶體位置的位址。


要寫入指定記憶體位置的值(僅儲存內部函數)。

傳回值(僅載入內部函數)

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)

[返回頂端]

另請參閱

編譯程式內部函數
ARM 內部函數
ARM 組合器參考
C++ 語言參考