ARM64 内部函数
Microsoft C++ 编译器 (MSVC) 使以下内部函数在 ARM64 体系结构上可用。 有关 ARM 的详细信息,请参阅 ARM 开发人员文档网站的体系结构和软件开发工具部分。
NEON
适用于 ARM64 的 NEON 矢量指令集扩展提供 Single Instruction Multiple Data (SIMD) 功能。 它们类似于 x86 和 x64 体系结构处理器通用的 MMX 和 SSE 矢量指令集中的指令集。
根据头文件 arm64_neon.h
,霓虹灯内部函数受到支持。 MSVC 对 NEON 内部函数的支持类似于 ARM64 编译器,ARM 信息中心网站上的 ARM NEON 内部函数参考中对此进行了记录。
特定于 ARM64 的内部函数列表
支持特定于 ARM64 的内部函数,如头文件中 intrin.h
所示。
函数名称 | 说明 | 函数原型 |
---|---|---|
__break | 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 | CASH | 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 | CASAB | 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 | CASA | unsigned __int32 __casa32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value) |
__casa64 | CASA | 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 | double __getRegFp(int) | |
__getCallerReg | unsigned __int64 __getCallerReg(int) | |
__getCallerRegFp | double __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/store 内部函数。 |
|
__iso_volatile_load32 | __int32 __iso_volatile_load32(const volatile __int32 *) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_load64 | __int64 __iso_volatile_load64(const volatile __int64 *) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_load8 | __int8 __iso_volatile_load8(const volatile __int8 *) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_store16 | void __iso_volatile_store16(volatile __int16 *, __int16) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_store32 | void __iso_volatile_store32(volatile __int32 *, __int32) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_store64 | void __iso_volatile_store64(volatile __int64 *, __int64) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__iso_volatile_store8 | void __iso_volatile_store8(volatile __int8 *, __int8) 有关详细信息,请参阅 __iso_volatile_load/store 内部函数。 |
|
__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 *) 采用预提取操作 PLDL1KEEP 为系统提供一个 PRFM 内存提示,即可快速访问指定地址处或附近的内存。 某些系统可能会选择优化此内存访问模式以提高运行时性能。 但是,从 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 | unsigned long __readx18dword(unsigned 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 | double _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/store 内部函数
这些内部函数显式执行不进行编译器优化的加载和存储。
__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: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) |
[返回顶部]
互锁内部函数
互锁内部函数是用于执行原子读取-修改-写入操作的一组内部函数。 其中一些互锁内部函数通用于所有平台。 因为它们数量很多,所以在这里单独列出。 由于它们的定义大多是冗余的,因此,用一般术语来考虑更加容易。 它们的名称可用于派生确切行为。
下表总结了非 bittest 互锁内部函数的 ARM64 支持。 表中的每个单元格都对应一个名称,这些名称的派生方式是将该行的最左侧单元格中的操作名和该列的最上面单元格中的类型名附加到 _Interlocked
。 例如,第 Xor
行和第 8
列交叉处的单元格对应于 _InterlockedXor8
并且完全受支持。 大部分受支持的函数提供以下可选后缀:_acq
、_rel
和 _nf
。 _acq
后缀表示“获取”语义,而 _rel
后缀表示“发布”语义。 _nf
或“no fence”后缀是 ARM 和 ARM64 独有的,将在下一节中进行讨论。
Operation | 8 | 16 | 32 | 64 | 128 | P |
---|---|---|---|---|---|---|
添加 | 无 | 无 | 完全 | 完全 | 无 | 无 |
且 | 完全 | 完全 | 完全 | 完全 | 无 | 无 |
CompareExchange | 完整 | 完全 | 完全 | 完全 | 完全 | 完全 |
递减 | 无 | 完全 | 完全 | 完全 | 无 | 无 |
Exchange | 完全 | 完全 | 完全 | 完全 | 无 | 完全 |
ExchangeAdd | 完整 | 完全 | 完全 | 完全 | 无 | 无 |
增量 | 无 | 完全 | 完全 | 完全 | 无 | 无 |
或 | 完全 | 完全 | 完全 | 完全 | 无 | 无 |
Xor | 完全 | 完全 | 完全 | 完全 | 无 | 无 |
密钥:
完全:支持普通、
_acq
、_rel
和_nf
窗体。无:不支持
_nf (no fence) 后缀
_nf
或“no fence”后缀表示操作不表现为任何类型的内存屏障,与表现为某种类型屏障的其他三种形式(无格式、_acq
和 _rel
)相反。 _nf
形式的一种可能用途是维护统计信息计数器,该计数器由多个线程同时更新,但在执行多个线程时不会使用该计数器的值。
互锁内部函数列表
函数名称 | 函数原型 |
---|---|
_InterlockedAdd | long _InterlockedAdd(long _volatile *, long) |
_InterlockedAdd64 | __int64 _InterlockedAdd64(__int64 volatile *, __int64) |
_InterlockedAdd64_acq | __int64 _InterlockedAdd64_acq(__int64 volatile *, __int64) |
_InterlockedAdd64_nf | __int64 _InterlockedAdd64_nf(__int64 volatile *, __int64) |
_InterlockedAdd64_rel | __int64 _InterlockedAdd64_rel(__int64 volatile *, __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 volatile *, __int64) |
_InterlockedAnd64_acq | __int64 _InterlockedAnd64_acq(__int64 volatile *, __int64) |
_InterlockedAnd64_nf | __int64 _InterlockedAnd64_nf(__int64 volatile *, __int64) |
_InterlockedAnd64_rel | __int64 _InterlockedAnd64_rel(__int64 volatile *, __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 volatile *, __int64, __int64) |
_InterlockedCompareExchange64_acq | __int64 _InterlockedCompareExchange64_acq(__int64 volatile *, __int64, __int64) |
_InterlockedCompareExchange64_nf | __int64 _InterlockedCompareExchange64_nf(__int64 volatile *, __int64, __int64) |
_InterlockedCompareExchange64_rel | __int64 _InterlockedCompareExchange64_rel(__int64 volatile *, __int64, __int64) |
_InterlockedCompareExchange8 | char _InterlockedCompareExchange8(char volatile *, char, char) |
_InterlockedCompareExchange8_acq | char _InterlockedCompareExchange8_acq(char volatile *, 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 volatile *) |
_InterlockedDecrement64_acq | __int64 _InterlockedDecrement64_acq(__int64 volatile *) |
_InterlockedDecrement64_nf | __int64 _InterlockedDecrement64_nf(__int64 volatile *) |
_InterlockedDecrement64_rel | __int64 _InterlockedDecrement64_rel(__int64 volatile *) |
_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 volatile * _Target, __int64) |
_InterlockedExchange64_acq | __int64 _InterlockedExchange64_acq(__int64 volatile * _Target, __int64) |
_InterlockedExchange64_nf | __int64 _InterlockedExchange64_nf(__int64 volatile * _Target, __int64) |
_InterlockedExchange64_rel | __int64 _InterlockedExchange64_rel(__int64 volatile * _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 volatile *, __int64) |
_InterlockedExchangeAdd64_acq | __int64 _InterlockedExchangeAdd64_acq(__int64 volatile *, __int64) |
_InterlockedExchangeAdd64_nf | __int64 _InterlockedExchangeAdd64_nf(__int64 volatile *, __int64) |
_InterlockedExchangeAdd64_rel | __int64 _InterlockedExchangeAdd64_rel(__int64 volatile *, __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 volatile *) |
_InterlockedIncrement64_acq | __int64 _InterlockedIncrement64_acq(__int64 volatile *) |
_InterlockedIncrement64_nf | __int64 _InterlockedIncrement64_nf(__int64 volatile *) |
_InterlockedIncrement64_rel | __int64 _InterlockedIncrement64_rel(__int64 volatile *) |
_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 volatile *, __int64) |
_InterlockedOr64_acq | __int64 _InterlockedOr64_acq(__int64 volatile *, __int64) |
_InterlockedOr64_nf | __int64 _InterlockedOr64_nf(__int64 volatile *, __int64) |
_InterlockedOr64_rel | __int64 _InterlockedOr64_rel(__int64 volatile *, __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 volatile *, __int64) |
_InterlockedXor64_acq | __int64 _InterlockedXor64_acq(__int64 volatile *, __int64) |
_InterlockedXor64_nf | __int64 _InterlockedXor64_nf(__int64 volatile *, __int64) |
_InterlockedXor64_rel | __int64 _InterlockedXor64_rel(__int64 volatile *, __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 内部函数
纯互锁的 bit 测试内部函数通用于所有平台。 ARM64 添加了 _acq
、_rel
和 _nf
变体,它们只是修改操作的屏障语义,如本文前面的 _nf (no fence) 后缀中所述。
函数名称 | 函数原型 |
---|---|
_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) |
[返回顶部]