ARM内部
Visual C++ 编译器在 ARM 体系结构使以下内部可用。有关 ARM 的更多信息,请 ARM 体系结构参考手册 参见中的和 ARM 汇编工具指南 ARM Infocenter 网站上。
氖
ARM 的霓虹向量命令设置的扩展提供唯一类似于 MMX,并且 SSE 向量命令组为 x86 和 x64 体系结构处理器共有的命令多个数据 (SIMD) 功能。
霓虹内部在标头文件 arm_neon.h支持,根据提供。Visual C++ 编译器为霓虹内部函数支持类似于 ARM 编译器,在 ARM 武装编译器 toolchain,版本 4.1 编译器引用 Infocenter 网站的附录 G 文档。
Visual C++ 编译器和 ARM 编译器之间的主要区别在于 Visual C++ 编译器添加 vldX 和 vstX 向量加载和存储命令的 _ex 变量。_ex 变体带有指定指针参数的对齐方式的一个附加参数,但与其非_ex 重复为相同。
ARM 特定的内部列表
函数名 |
指令 |
函数原型 |
---|---|---|
_arm_smlal |
SMLAL |
_arm_smlal __int64 (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_umlal |
UMLAL |
_arm_umlal unsigned __int64 (unsigned __int64 _RdHiLo、unsigned int _Rn,unsigned int _Rm) |
_arm_clz |
CLZ |
unsigned int _arm_clz (unsigned int _Rm) |
_arm_qadd |
QADD |
int _arm_qadd (_Rm int,int _Rn) |
_arm_qdadd |
QDADD |
int _arm_qdadd (_Rm int,int _Rn) |
_arm_qdsub |
QDSUB |
int _arm_qdsub (_Rm int,int _Rn) |
_arm_qsub |
QSUB |
int _arm_qsub (_Rm int,int _Rn) |
_arm_smlabb |
SMLABB |
int _arm_smlabb (int _Rn、_Rm int,int _Ra) |
_arm_smlabt |
SMLABT |
int _arm_smlabt (int _Rn、_Rm int,int _Ra) |
_arm_smlatb |
SMLATB |
int _arm_smlatb (int _Rn、_Rm int,int _Ra) |
_arm_smlatt |
SMLATT |
int _arm_smlatt (int _Rn、_Rm int,int _Ra) |
_arm_smlalbb |
SMLALBB |
__int64 _arm_smlalbb (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlalbt |
SMLALBT |
__int64 _arm_smlalbt (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlaltb |
SMLALTB |
__int64 _arm_smlaltb (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlaltt |
SMLALTT |
__int64 _arm_smlaltt (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlawb |
SMLAWB |
int _arm_smlawb (int _Rn、_Rm int,int _Ra) |
_arm_smlawt |
SMLAWT |
int _arm_smlawt (int _Rn、_Rm int,int _Ra) |
_arm_smulbb |
SMULBB |
int _arm_smulbb (_Rn int,int _Rm) |
_arm_smulbt |
SMULBT |
int _arm_smulbt (_Rn int,int _Rm) |
_arm_smultb |
SMULTB |
int _arm_smultb (_Rn int,int _Rm) |
_arm_smultt |
SMULTT |
int _arm_smultt (_Rn int,int _Rm) |
_arm_smulwb |
SMULWB |
int _arm_smulwb (_Rn int,int _Rm) |
_arm_smulwt |
SMULWT |
int _arm_smulwt (_Rn int,int _Rm) |
_arm_sadd16 |
SADD16 |
int _arm_sadd16 (_Rn int,int _Rm) |
_arm_sadd8 |
SADD8 |
int _arm_sadd8 (_Rn int,int _Rm) |
_arm_sasx |
SASX |
int _arm_sasx (_Rn int,int _Rm) |
_arm_ssax |
SSAX |
int _arm_ssax (_Rn int,int _Rm) |
_arm_ssub16 |
SSUB16 |
int _arm_ssub16 (_Rn int,int _Rm) |
_arm_ssub8 |
SSUB8 |
int _arm_ssub8 (_Rn int,int _Rm) |
_arm_shadd16 |
SHADD16 |
int _arm_shadd16 (_Rn int,int _Rm) |
_arm_shadd8 |
SHADD8 |
int _arm_shadd8 (_Rn int,int _Rm) |
_arm_shasx |
SHASX |
int _arm_shasx (_Rn int,int _Rm) |
_arm_shsax |
SHSAX |
int _arm_shsax (_Rn int,int _Rm) |
_arm_shsub16 |
SHSUB16 |
int _arm_shsub16 (_Rn int,int _Rm) |
_arm_shsub8 |
SHSUB8 |
int _arm_shsub8 (_Rn int,int _Rm) |
_arm_qadd16 |
QADD16 |
int _arm_qadd16 (_Rn int,int _Rm) |
_arm_qadd8 |
QADD8 |
int _arm_qadd8 (_Rn int,int _Rm) |
_arm_qasx |
QASX |
int _arm_qasx (_Rn int,int _Rm) |
_arm_qsax |
QSAX |
int _arm_qsax (_Rn int,int _Rm) |
_arm_qsub16 |
QSUB16 |
int _arm_qsub16 (_Rn int,int _Rm) |
_arm_qsub8 |
QSUB8 |
int _arm_qsub8 (_Rn int,int _Rm) |
_arm_uadd16 |
UADD16 |
unsigned int _arm_uadd16 (unsigned int _Rn,unsigned int _Rm) |
_arm_uadd8 |
UADD8 |
unsigned int _arm_uadd8 (unsigned int _Rn,unsigned int _Rm) |
_arm_uasx |
UASX |
unsigned int _arm_uasx (unsigned int _Rn,unsigned int _Rm) |
_arm_usax |
USAX |
unsigned int _arm_usax (unsigned int _Rn,unsigned int _Rm) |
_arm_usub16 |
USUB16 |
unsigned int _arm_usub16 (unsigned int _Rn,unsigned int _Rm) |
_arm_usub8 |
USUB8 |
unsigned int _arm_usub8 (unsigned int _Rn,unsigned int _Rm) |
_arm_uhadd16 |
UHADD16 |
unsigned int _arm_uhadd16 (unsigned int _Rn,unsigned int _Rm) |
_arm_uhadd8 |
UHADD8 |
unsigned int _arm_uhadd8 (unsigned int _Rn,unsigned int _Rm) |
_arm_uhasx |
UHASX |
unsigned int _arm_uhasx (unsigned int _Rn,unsigned int _Rm) |
_arm_uhsax |
UHSAX |
unsigned int _arm_uhsax (unsigned int _Rn,unsigned int _Rm) |
_arm_uhsub16 |
UHSUB16 |
unsigned int _arm_uhsub16 (unsigned int _Rn,unsigned int _Rm) |
_arm_uhsub8 |
UHSUB8 |
unsigned int _arm_uhsub8 (unsigned int _Rn,unsigned int _Rm) |
_arm_uqadd16 |
UQADD16 |
unsigned int _arm_uqadd16 (unsigned int _Rn,unsigned int _Rm) |
_arm_uqadd8 |
UQADD8 |
unsigned int _arm_uqadd8 (unsigned int _Rn,unsigned int _Rm) |
_arm_uqasx |
UQASX |
unsigned int _arm_uqasx (unsigned int _Rn,unsigned int _Rm) |
_arm_uqsax |
UQSAX |
unsigned int _arm_uqsax (unsigned int _Rn,unsigned int _Rm) |
_arm_uqsub16 |
UQSUB16 |
unsigned int _arm_uqsub16 (unsigned int _Rn,unsigned int _Rm) |
_arm_uqsub8 |
UQSUB8 |
unsigned int _arm_uqsub8 (unsigned int _Rn,unsigned int _Rm) |
_arm_sxtab |
SXTAB |
int _arm_sxtab (int _Rn、int _Rm,unsigned int _Rotation) |
_arm_sxtab16 |
SXTAB16 |
int _arm_sxtab16 (int _Rn、int _Rm,unsigned int _Rotation) |
_arm_sxtah |
SXTAH |
int _arm_sxtah (int _Rn、int _Rm,unsigned int _Rotation) |
_arm_uxtab |
UXTAB |
unsigned int _arm_uxtab (unsigned int _Rn、unsigned int _Rm,unsigned int _Rotation) |
_arm_uxtab16 |
UXTAB16 |
unsigned int _arm_uxta16b (unsigned int _Rn、unsigned int _Rm,unsigned int _Rotation) |
_arm_uxtah |
UXTAH |
unsigned int _arm_uxtah (unsigned int _Rn、unsigned int _Rm,unsigned int _Rotation) |
_arm_sxtb |
SXTB |
int _arm_sxtb (int _Rn,unsigned int _Rotation) |
_arm_sxtb16 |
SXTB16 |
int _arm_sxtb16 (int _Rn,unsigned int _Rotation) |
_arm_sxth |
SXTH |
int _arm_sxth (int _Rn,unsigned int _Rotation) |
_arm_uxtb |
UXTB |
unsigned int _arm_uxtb (unsigned int _Rn,unsigned int _Rotation) |
_arm_uxtb16 |
UXTB16 |
unsigned int _arm_uxtb16 (unsigned int _Rn,unsigned int _Rotation) |
_arm_uxth |
UXTH |
unsigned int _arm_uxth (unsigned int _Rn,unsigned int _Rotation) |
_arm_pkhbt |
PKHBT |
int _arm_pkhbt (int _Rn、int _Rm,unsigned int _Lsl_imm) |
_arm_pkhtb |
PKHTB |
int _arm_pkhtb (int _Rn、int _Rm,unsigned int _Asr_imm) |
_arm_usad8 |
USAD8 |
unsigned int _arm_usad8 (unsigned int _Rn,unsigned int _Rm) |
_arm_usada8 |
USADA8 |
unsigned int _arm_usada8 (unsigned int _Rn、unsigned int _Rm,unsigned int _Ra) |
_arm_ssat |
SSAT |
int _arm_ssat (unsigned int _Sat_imm、_int _Rn、_ARMINTR_SHIFT_T _Shift_type,unsigned int _Shift_imm) |
_arm_usat |
USAT |
int _arm_usat (unsigned int _Sat_imm、_int _Rn、_ARMINTR_SHIFT_T _Shift_type,unsigned int _Shift_imm) |
_arm_ssat16 |
SSAT16 |
int _arm_ssat16 (unsigned int _Sat_imm,_int _Rn) |
_arm_usat16 |
USAT16 |
int _arm_usat16 (unsigned int _Sat_imm,_int _Rn) |
_arm_rev |
REV |
unsigned int _arm_rev (unsigned int _Rm) |
_arm_rev16 |
REV16 |
unsigned int _arm_rev16 (unsigned int _Rm) |
_arm_revsh |
REVSH |
unsigned int _arm_revsh (unsigned int _Rm) |
_arm_smlad |
SMLAD |
int _arm_smlad (int _Rn、_Rm int,int _Ra) |
_arm_smladx |
SMLADX |
int _arm_smladx (int _Rn、_Rm int,int _Ra) |
_arm_smlsd |
SMLSD |
int _arm_smlsd (int _Rn、_Rm int,int _Ra) |
_arm_smlsdx |
SMLSDX |
int _arm_smlsdx (int _Rn、_Rm int,int _Ra) |
_arm_smmla |
SMMLA |
int _arm_smmla (int _Rn、_Rm int,int _Ra) |
_arm_smmlar |
SMMLAR |
_arm_smmlar 的 int (int _Rn、_Rm int,int _Ra) |
_arm_smmls |
SMMLS |
int _arm_smmls (int _Rn、_Rm int,int _Ra) |
_arm_smmlsr |
SMMLSR |
int _arm_smmlsr (int _Rn、_Rm int,int _Ra) |
_arm_smmul |
SMMUL |
int _arm_smmul (_Rn int,int _Rm) |
_arm_smmulr |
SMMULR |
int _arm_smmulr (_Rn int,int _Rm) |
_arm_smlald |
SMLALD |
__int64 _arm_smlald (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlaldx |
SMLALDX |
__int64 _arm_smlaldx (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlsld |
SMLSLD |
__int64 _arm_smlsld (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smlsldx |
SMLSLDX |
__int64 _arm_smlsldx (__int64 _RdHiLo、_Rn int,int _Rm) |
_arm_smuad |
SMUAD |
int _arm_smuad (_Rn int,int _Rm) |
_arm_smuadx |
SMUADX |
int _arm_muadxs (_Rn int,int _Rm) |
_arm_smusd |
SMUSD |
int _arm_smusd (_Rn int,int _Rm) |
_arm_smusdx |
SMUSDX |
int _arm_smusdx (_Rn int,int _Rm) |
_arm_smull |
SMULL |
__int64 _arm_smull (_Rn int,int _Rm) |
_arm_umull |
UMULL |
unsigned __int64 _arm_umull (unsigned int _Rn,unsigned int _Rm) |
_arm_umaal |
UMAAL |
_arm_umaal unsigned __int64 (unsigned int _RdLo、unsigned int _RdHi、unsigned int _Rn,unsigned int _Rm) |
_arm_bfc |
BFC |
unsigned int _arm_bfc (unsigned int _Rd、unsigned int _Lsb,unsigned int _Width) |
_arm_bfi |
BFI |
unsigned int _arm_bfi (unsigned int _Rd、unsigned int _Rn、unsigned int _Lsb,unsigned int _Width) |
_arm_rbit |
RBIT |
unsigned int _arm_rbit (unsigned int _Rm) |
_arm_sbfx |
SBFX |
int _arm_sbfx (int _Rn、unsigned int _Lsb,unsigned int _Width) |
_arm_ubfx |
UBFX |
unsigned int _arm_ubfx (unsigned int _Rn、unsigned int _Lsb,unsigned int _Width) |
_arm_sdiv |
SDIV |
int _arm_sdiv (_Rn int,int _Rm) |
_arm_udiv |
UDIV |
unsigned int _arm_udiv (unsigned int _Rn,unsigned int _Rm) |
__cps |
CPS |
无效__cps (unsigned int _Ops、unsigned int _Flags,unsigned int _Mode) |
__dmb |
DMB |
无效__dmb (unsigned int _Type) 插入内存障碍操作到命令流。该参数 _Type 指定关卡实施此限制。 有关上强制执行的命名限制的更多信息,请参见 内存障碍限制。 |
__dsb |
DSB |
无效__dsb (unsigned int _Type) 插入内存障碍操作到命令流。该参数 _Type 指定关卡实施此限制。 有关上强制执行的命名限制的更多信息,请参见 内存障碍限制。 |
__isb |
ISB |
无效__isb (unsigned int _Type) 插入内存障碍操作到命令流。该参数 _Type 指定关卡实施此限制。 有关上强制执行的命名限制的更多信息,请参见 内存障碍限制。 |
__emit |
无效__emit (无符号__int32 操作码) 插入指定的命令为输出由编译器命令中的流。 opcode 的值必须是在编译时已知的常量表达式。指令字大小为 16 位,并最重要的 16 位 opcode 被忽略。 在插入的命令前,编译器不尝试解释 opcode 内容,并不保证 CPU 或内存状态。 编译器假定,CPU 和内存状态未更改,在插入的命令执行后。因此,更改状态的命令会对由编译器生成的代码的不利的影响。 因此,对影响个 CPU 一条将命令中仅使用 emit,编译器通常不处理 (例如,协处理器状态或如何使用 declspec(naked),声明的实现功能。 |
|
__hvc |
HVC |
unsigned int __hvc (unsigned int,…) |
__iso_volatile_load16 |
__int16 __iso_volatile_load16 (const-volatile 的__int16 *) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_load32 |
__int32 __iso_volatile_load32 (const-volatile 的__int32 *) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_load64 |
__int64 __iso_volatile_load64 (const-volatile __int64 *) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_load8 |
__int8 __iso_volatile_load8 (const-volatile 的__int8 *) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_store16 |
无效__iso_volatile_store16 (变量的__int16 *,__int16) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_store32 |
无效__iso_volatile_store32 (可变__int32 *,__int32) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_store64 |
无效__iso_volatile_store64 (变量__int64 *,__int64) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__iso_volatile_store8 |
无效__iso_volatile_store8 (变量的__int8 *,__int8) 有关更多信息,请参见__iso_volatile_load/store instrinsics。 |
|
__ldrexd |
LDREXD |
__int64 __ldrexd (const-volatile __int64 *) |
__prefetch |
PLD |
无效__cdecl __prefetch (无效的常量*) 提供一个 PLD 内存提示。在某些构造一个指定地址的内存可能很快捕获的系统。某些系统可以选择优化为该内存存取模式可以提高运行时性能。但是,从 C++ 语言的角度来看,该函数都没有可观察效果,还可以执行。 |
__rdpmccntr64 |
unsigned __int64 __rdpmccntr64 (失效) |
|
__sev |
SEV |
无效__sev (失效) |
__static_assert |
无效__static_assert (int,const char *) |
|
__swi |
SVC |
unsigned int __swi (unsigned int,…) |
__trap |
BKPT |
int __trap (int,…) |
__wfe |
WFE |
无效__wfe (失效) |
__wfi |
WFI |
无效__wfi (失效) |
_AddSatInt |
QADD |
int _AddSatInt (int,int) |
_CopyDoubleFromInt64 |
二进制_CopyDoubleFromInt64 (__int64) |
|
_CopyFloatFromInt32 |
浮动_CopyFloatFromInt32 (__int32) |
|
_CopyInt32FromFloat |
__int32 _CopyInt32FromFloat (浮动) |
|
_CopyInt64FromDouble |
__int64 _CopyInt64FromDouble (二元) |
|
_CountLeadingOnes |
unsigned int _CountLeadingOnes (unsigned long) |
|
_CountLeadingOnes64 |
unsigned int _CountLeadingOnes64 (unsigned __int64) |
|
_CountLeadingSigns |
unsigned int _CountLeadingSigns (长) |
|
_CountLeadingSigns64 |
unsigned int _CountLeadingSigns64 (__int64) |
|
_CountLeadingZeros |
unsigned int _CountLeadingZeros (unsigned long) |
|
_CountLeadingZeros64 |
unsigned int _CountLeadingZeros64 (unsigned __int64) |
|
_CountOneBits |
unsigned int _CountOneBits (unsigned long) |
|
_CountOneBits64 |
unsigned int _CountOneBits64 (unsigned __int64) |
|
_DAddSatInt |
QDADD |
int _DAddSatInt (int,int) |
_DSubSatInt |
QDSUB |
int _DSubSatInt (int,int) |
_isunordered |
_isunordered 的 int (二进制文件,二元) |
|
_isunorderedf |
int _isunorderedf (浮点数,浮动) |
|
_MoveFromCoprocessor |
MRC |
unsigned int _MoveFromCoprocessor (unsigned int、unsigned int、unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveFromCoprocessor,_MoveFromCoprocessor2。 |
_MoveFromCoprocessor2 |
MRC2 |
unsigned int _MoveFromCoprocessor2 (unsigned int、unsigned int、unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveFromCoprocessor,_MoveFromCoprocessor2。 |
_MoveFromCoprocessor64 |
MRRC |
unsigned __int64 _MoveFromCoprocessor64 (unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveFromCoprocessor64。 |
_MoveToCoprocessor |
MCR |
无效_MoveToCoprocessor (unsigned int、unsigned int、unsigned int、unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveToCoprocessor,_MoveToCoprocessor2。 |
_MoveToCoprocessor2 |
MCR2 |
无效_MoveToCoprocessor2 (unsigned int、unsigned int、unsigned int、unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveToCoprocessor,_MoveToCoprocessor2。 |
_MoveToCoprocessor64 |
MCRR |
无效_MoveToCoprocessor64 (unsigned __int64、unsigned int、unsigned int,unsigned int) 使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。有关更多信息,请参见_MoveToCoprocessor64。 |
_MulHigh |
长_MulHigh (长,长) |
|
_MulUnsignedHigh |
unsigned long _MulUnsignedHigh (unsigned long,unsigned long) |
|
_ReadBankedReg |
一些 |
int _ReadBankedReg (int _Reg) |
_ReadStatusReg |
一些 |
int _ReadStatusReg (int) |
_SubSatInt |
QSUB |
int _SubSatInt (int,int) |
_WriteBankedReg |
MSR |
无效_WriteBankedReg (_Value int,int _Reg) |
_WriteStatusReg |
MSR |
无效_WriteStatusReg (int、int,int) |
[氖]
内存障碍限制
内部函数 __dmb (数据障碍),__dsb (数据同步障碍) 和 __isb (命令同步障碍) 使用由操作影响的下列预定义的值指定的内存障碍限制基于有点儿共享的字段和访问。
限制值 |
描述 |
---|---|
_ARM_BARRIER_SY |
完整的系统,读取和写入。 |
_ARM_BARRIER_ST |
完整的系统,只写访问权。 |
_ARM_BARRIER_ISH |
内部可共享,读取和写入。 |
_ARM_BARRIER_ISHST |
内部可共享,只写访问权。 |
_ARM_BARRIER_NSH |
不能共享,读取和写入。 |
_ARM_BARRIER_NSHST |
不能共享,只写访问权。 |
_ARM_BARRIER_OSH |
外部可共享,读取和写入。 |
_ARM_BARRIER_OSHST |
外部可共享,只写访问权。 |
对于 __isb 内部,当前有效的唯一限制是_ARM_BARRIER_SY;其他值由体系结构保留。
__iso_volatile_load/store instrinsics
这些内部函数显式执行不受编译器优化取决于加载和存储。
__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
内存位置读取从或写入的地址。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 关键字解释)。
_MoveFromCoprocessor,_MoveFromCoprocessor2
使用协处理器数据传输调整命令,这些内部函数读取从 ARM 协处理器的数据。
int _MoveFromCoprocessor(
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);
int _MoveFromCoprocessor2(
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);
参数
coproc
在 0 到 15 之间的协处理器数。opcode1
在 0 到 7 之间的协处理器特定操作码crn
协处理器寄存器编号,在 0 到 15 之间,指定第一个操作线程的命令。crm
协处理器寄存器编号,在 0 到 15 之间,指定一个不同的源或目标操作。opcode2
在 0 到 7 之间 . 的其他协处理器特定操作码。
返回值
从协处理器读取的值。
备注
此内部的全部五个参数的值必须是在编译时已知的常量表达式。
_MoveFromCoprocessor 使用 MRC 命令;_MoveFromCoprocessor2 使用 MRC2。参数对应于中输入直接添加到指令字 bitfields。参数的解释为协处理器相关。有关更多信息,为相关的协处理器请参见参考线。
_MoveFromCoprocessor64
使用协处理器数据传输调整命令,读取 ARM 协处理器的数据。
unsigned __int64 _MoveFromCoprocessor64(
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
参数
coproc
在 0 到 15 之间的协处理器数。opcode1
在 0 到 15 之间的协处理器特定操作码。crm
协处理器寄存器编号,在 0 到 15 之间,指定一个不同的源或目标操作。
返回值
从协处理器读取的值。
备注
此内部的所有三个参数的值必须是在编译时已知的常量表达式。
_MoveFromCoprocessor64 使用 MRRC 命令。参数对应于中输入直接添加到指令字 bitfields。参数的解释为协处理器相关。有关更多信息,为相关的协处理器请参见参考线。
_MoveToCoprocessor,_MoveToCoprocessor2
武装协处理器的这些内部函数写入数据使用协处理器数据传输调整命令。
void _MoveToCoprocessor(
unsigned int value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);
void _MoveToCoprocessor2(
unsigned int value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);
参数
value
对协处理器要写入的值。coproc
在 0 到 15 之间的协处理器数。opcode1
在 0 到 7 之间 . 的协处理器特定操作码。crn
协处理器寄存器编号,在 0 到 15 之间,指定第一个操作线程的命令。crm
协处理器寄存器编号,在 0 到 15 之间,指定一个不同的源或目标操作。opcode2
在 0 到 7 之间 . 的其他协处理器特定操作码。
返回值
无。
备注
coproc、opcode1、crn、crm和内部的 opcode2 参数的值必须是在编译时已知的常量表达式。
_MoveToCoprocessor 使用 MCR 命令;_MoveToCoprocessor2 使用 MCR2。参数对应于中输入直接添加到指令字 bitfields。参数的解释为协处理器相关。有关更多信息,为相关的协处理器请参见参考线。
_MoveToCoprocessor64
武装协处理器的这些内部函数写入数据使用协处理器数据传输调整命令。
void _MoveFromCoprocessor64(
unsigned __int64 value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
参数
coproc
在 0 到 15 之间的协处理器数。opcode1
在 0 到 15 之间的协处理器特定操作码。crm
协处理器寄存器编号,在 0 到 15 之间,指定一个不同的源或目标操作。
返回值
无。
备注
coproc、opcode1和内部的 crm 参数的值必须是在编译时已知的常量表达式。
_MoveFromCoprocessor64 使用 MCRR 命令。参数对应于中输入直接添加到指令字 bitfields。参数的解释为协处理器相关。有关更多信息,为相关的协处理器请参见参考线。
可用于其他体系结构的内部函数支持
下表列出了在 ARM 平台支持的其他体系结构的内部。如果内部的行为在 ARM 的与在其他硬件体系结构的行为不同,其他详细信息注意。
函数名 |
函数原型 |
---|---|
__assume |
无效__assume (int) |
__code_seg |
无效__code_seg (const char *) |
__debugbreak |
无效__cdecl __debugbreak (失效) |
__fastfail |
declspec(noreturn) 无效__fastfail (无符号整数) |
__nop |
无效__nop (失效)
说明
在 ARM 平台上,因此,如果一个在目标结构中,实现此功能生成 NOP 命令;否则,不会更改程序状态或 CPU 是生成有关示例的替代命令,MOV r8, r8。这是功能上等效于其他硬件体系结构的__nop 内部。由于没有给过程或 CPU 的状态的影响的命令可能由目标结构忽略作为一种优化方式,命令不一定消耗 CPU 周期。因此,不要使用__nop 内部操作代码序列的执行时间,除非您确定 CPU 有关如何将行为。相反,可以使用__nop 内部对齐下命令为特定 32 位边界地址。
|
__yield |
无效__yield (失效)
说明
在 ARM 平台上,此功能生成 yield 命令,指示线程执行可以从执行 (例如暂时挂起的任务,spinlock 不会影响程序的。这使 CPU 执行其他任务。会浪费的执行循环内。
|
_AddressOfReturnAddress |
void * _AddressOfReturnAddress (失效) |
_BitScanForward |
unsigned char _BitScanForward (unsigned long * _Index,无符号 long _Mask) |
_BitScanReverse |
unsigned char _BitScanReverse (unsigned long * _Index,无符号 long _Mask) |
_bittest |
_bittest unsigned char (长 const *,长) |
_bittestandcomplement |
unsigned char _bittestandcomplement (长*,长) |
_bittestandreset |
unsigned char _bittestandreset (长*,长) |
_bittestandset |
unsigned char _bittestandset (长*,长) |
_byteswap_uint64 |
unsigned __int64 __cdecl _byteswap_uint64 (unsigned __int64) |
_byteswap_ulong |
无符号 long __cdecl _byteswap_ulong (unsigned long) |
_byteswap_ushort |
无符号短__cdecl _byteswap_ushort (unsigned short) |
_disable |
_disable 无效的__cdecl (失效)
说明
在 ARM 平台上,此功能生成 CPSID 命令;它只能用作内部。
|
_enable |
_enable 无效的__cdecl (失效)
说明
在 ARM 平台上,此功能生成 CPSIE 命令;它只能用作内部。
|
_lrotl |
无符号 long __cdecl _lrotl (unsigned long,int) |
_lrotr |
无符号 long __cdecl _lrotr (unsigned long,int) |
_ReadBarrier |
无效_ReadBarrier (失效) |
_ReadWriteBarrier |
无效_ReadWriteBarrier (失效) |
_ReturnAddress |
void * _ReturnAddress (失效) |
_rotl |
unsigned int __cdecl _rotl (unsigned int,int _Value _Shift) |
_rotl16 |
无符号短_rotl16 (无符号短_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,int _Value _Shift) |
_rotr16 |
无符号短_rotr16 (无符号短_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 |
无效_WriteBarrier (失效) |
[氖]
联锁的内部
联锁的内部函数用于执行基本阅读修改写操作的组继承。某些对所有平台是通用的。它们分别列出此处,因为具有大量它们,但,因为它们的定义主要是多余的,一般来说考虑它们更容易。其名称可用于派生的确切行为。
下表总结了可支持非 bittest 互锁的内部。每个单元格在表中对应于通过追加操作名称处的行最左侧的单元格和列中最顶层的单元格的类型名称。_Interlocked的名称。例如,在 Xor 行和列 8 的交集的单元格对应于 _InterlockedXor8 和完全支持。大多数支持的功能提供这些选项后缀:_acq、_rel和 _nf。_acq 后缀指示“get”语义,并 _rel 后缀指示语义“的版本”。这些后缀 MSDN 的 IPF 文档。_nf 或“不范围”后缀是唯一的武装和讨论在下一节。
8 |
16 |
32 |
64 |
P |
|
---|---|---|---|---|---|
添加 |
无 |
无 |
完全 |
完全 |
无 |
And |
完全 |
完全 |
完全 |
完全 |
无 |
CompareExchange |
完全 |
完全 |
完全 |
完全 |
完全 |
递减 |
无 |
完全 |
完全 |
完全 |
无 |
Exchange |
Partial |
Partial |
Partial |
Partial |
Partial |
ExchangeAdd |
完全 |
完全 |
完全 |
完全 |
无 |
递增 |
无 |
完全 |
完全 |
完全 |
无 |
Or |
完全 |
完全 |
完全 |
完全 |
无 |
Xor |
完全 |
完全 |
完全 |
完全 |
无 |
密钥:
完全:支持简单地,_acq、_rel和 _nf 窗体。
部分:支持简单地,_acq和 _nf 窗体。
无:不支持
_nf (没有大小) 后缀
_nf 或“不范围”后缀指示操作不行为就如同任何内存屏障这与其他三个窗体是 (无格式,_acq和 _rel),所有行为是障碍。为 _nf 窗体的可能用途是维持值未以其他方式使用多个线程同时更新,但计数器的统计信息,并在多个线程正在执行时。
列出互锁的内部
函数名 |
函数原型 |
---|---|
_InterlockedAdd |
长_InterlockedAdd (长_volatile *,长) |
_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 |
长_InterlockedAdd_acq (长可变*,长) |
_InterlockedAdd_nf |
长_InterlockedAdd_nf (长可变*,长) |
_InterlockedAdd_rel |
长_InterlockedAdd_rel (长可变*,长) |
_InterlockedAnd |
长_InterlockedAnd (长可变*,长) |
_InterlockedAnd16 |
短_InterlockedAnd16 (短变量*,短) |
_InterlockedAnd16_acq |
短_InterlockedAnd16_acq (短变量*,短) |
_InterlockedAnd16_nf |
短_InterlockedAnd16_nf (短变量*,短) |
_InterlockedAnd16_rel |
短_InterlockedAnd16_rel (短变量*,短) |
_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 |
字符_InterlockedAnd8 (字符 volatile *,字符) |
_InterlockedAnd8_acq |
字符_InterlockedAnd8_acq (字符 volatile *,字符) |
_InterlockedAnd8_nf |
字符_InterlockedAnd8_nf (字符 volatile *,字符) |
_InterlockedAnd8_rel |
字符_InterlockedAnd8_rel (字符 volatile *,字符) |
_InterlockedAnd_acq |
长_InterlockedAnd_acq (长可变*,长) |
_InterlockedAnd_nf |
长_InterlockedAnd_nf (长可变*,长) |
_InterlockedAnd_rel |
长_InterlockedAnd_rel (长可变*,长) |
_InterlockedCompareExchange |
长__cdecl _InterlockedCompareExchange (长可变*,长,长) |
_InterlockedCompareExchange16 |
短_InterlockedCompareExchange16 (短变量*,短,短) |
_InterlockedCompareExchange16_acq |
短_InterlockedCompareExchange16_acq (短变量*,短,短) |
_InterlockedCompareExchange16_nf |
短_InterlockedCompareExchange16_nf (短变量*,短,短) |
_InterlockedCompareExchange16_rel |
短_InterlockedCompareExchange16_rel (短变量*,短,短) |
_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 |
字符_InterlockedCompareExchange8 (字符 volatile *,字符,字符) |
_InterlockedCompareExchange8_acq |
字符_InterlockedCompareExchange8_acq (字符 volatile *,字符,字符) |
_InterlockedCompareExchange8_nf |
字符_InterlockedCompareExchange8_nf (字符 volatile *,字符,字符) |
_InterlockedCompareExchange8_rel |
字符_InterlockedCompareExchange8_rel (字符 volatile *,字符,字符) |
_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 *) |
_InterlockedCompareExchange_acq |
长_InterlockedCompareExchange_acq (长可变*,长,长) |
_InterlockedCompareExchange_nf |
长_InterlockedCompareExchange_nf (长可变*,长,长) |
_InterlockedCompareExchange_rel |
长_InterlockedCompareExchange_rel (长可变*,长,长) |
_InterlockedDecrement |
长__cdecl _InterlockedDecrement (长可变*) |
_InterlockedDecrement16 |
短_InterlockedDecrement16 (短变量*) |
_InterlockedDecrement16_acq |
短_InterlockedDecrement16_acq (短变量*) |
_InterlockedDecrement16_nf |
短_InterlockedDecrement16_nf (短变量*) |
_InterlockedDecrement16_rel |
短_InterlockedDecrement16_rel (短变量*) |
_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 |
长_InterlockedDecrement_acq (长可变*) |
_InterlockedDecrement_nf |
长_InterlockedDecrement_nf (长可变*) |
_InterlockedDecrement_rel |
长_InterlockedDecrement_rel (长可变*) |
_InterlockedExchange |
长__cdecl _InterlockedExchange (长可变* _Target,长) |
_InterlockedExchange16 |
短_InterlockedExchange16 (短变量* _Target,短) |
_InterlockedExchange16_acq |
短_InterlockedExchange16_acq (短变量* _Target,短) |
_InterlockedExchange16_nf |
短_InterlockedExchange16_nf (短变量* _Target,短) |
_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) |
_InterlockedExchange8 |
字符_InterlockedExchange8 (字符 volatile * _Target,字符) |
_InterlockedExchange8_acq |
字符_InterlockedExchange8_acq (字符 volatile * _Target,字符) |
_InterlockedExchange8_nf |
字符_InterlockedExchange8_nf (字符 volatile * _Target,字符) |
_InterlockedExchangeAdd |
长__cdecl _InterlockedExchangeAdd (长可变*,长) |
_InterlockedExchangeAdd16 |
短_InterlockedExchangeAdd16 (短变量*,短) |
_InterlockedExchangeAdd16_acq |
短_InterlockedExchangeAdd16_acq (短变量*,短) |
_InterlockedExchangeAdd16_nf |
短_InterlockedExchangeAdd16_nf (短变量*,短) |
_InterlockedExchangeAdd16_rel |
短_InterlockedExchangeAdd16_rel (短变量*,短) |
_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 |
字符_InterlockedExchangeAdd8 (字符 volatile *,字符) |
_InterlockedExchangeAdd8_acq |
字符_InterlockedExchangeAdd8_acq (字符 volatile *,字符) |
_InterlockedExchangeAdd8_nf |
字符_InterlockedExchangeAdd8_nf (字符 volatile *,字符) |
_InterlockedExchangeAdd8_rel |
字符_InterlockedExchangeAdd8_rel (字符 volatile *,字符) |
_InterlockedExchangeAdd_acq |
长_InterlockedExchangeAdd_acq (长可变*,长) |
_InterlockedExchangeAdd_nf |
长_InterlockedExchangeAdd_nf (长可变*,长) |
_InterlockedExchangeAdd_rel |
长_InterlockedExchangeAdd_rel (长可变*,长) |
_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 *) |
_InterlockedExchange_acq |
长_InterlockedExchange_acq (长可变* _Target,长) |
_InterlockedExchange_nf |
长_InterlockedExchange_nf (长可变* _Target,长) |
_InterlockedIncrement |
长__cdecl _InterlockedIncrement (长可变*) |
_InterlockedIncrement16 |
短_InterlockedIncrement16 (短变量*) |
_InterlockedIncrement16_acq |
短_InterlockedIncrement16_acq (短变量*) |
_InterlockedIncrement16_nf |
短_InterlockedIncrement16_nf (短变量*) |
_InterlockedIncrement16_rel |
短_InterlockedIncrement16_rel (短变量*) |
_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 |
长_InterlockedIncrement_acq (长可变*) |
_InterlockedIncrement_nf |
长_InterlockedIncrement_nf (长可变*) |
_InterlockedIncrement_rel |
长_InterlockedIncrement_rel (长可变*) |
_InterlockedOr |
长_InterlockedOr (长可变*,长) |
_InterlockedOr16 |
短_InterlockedOr16 (短变量*,短) |
_InterlockedOr16_acq |
短_InterlockedOr16_acq (短变量*,短) |
_InterlockedOr16_nf |
短_InterlockedOr16_nf (短变量*,短) |
_InterlockedOr16_rel |
短_InterlockedOr16_rel (短变量*,短) |
_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 |
字符_InterlockedOr8 (字符 volatile *,字符) |
_InterlockedOr8_acq |
字符_InterlockedOr8_acq (字符 volatile *,字符) |
_InterlockedOr8_nf |
字符_InterlockedOr8_nf (字符 volatile *,字符) |
_InterlockedOr8_rel |
字符_InterlockedOr8_rel (字符 volatile *,字符) |
_InterlockedOr_acq |
长_InterlockedOr_acq (长可变*,长) |
_InterlockedOr_nf |
长_InterlockedOr_nf (长可变*,长) |
_InterlockedOr_rel |
长_InterlockedOr_rel (长可变*,长) |
_InterlockedXor |
长_InterlockedXor (长可变*,长) |
_InterlockedXor16 |
短_InterlockedXor16 (短变量*,短) |
_InterlockedXor16_acq |
短_InterlockedXor16_acq (短变量*,短) |
_InterlockedXor16_nf |
短_InterlockedXor16_nf (短变量*,短) |
_InterlockedXor16_rel |
短_InterlockedXor16_rel (短变量*,短) |
_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 |
字符_InterlockedXor8 (字符 volatile *,字符) |
_InterlockedXor8_acq |
字符_InterlockedXor8_acq (字符 volatile *,字符) |
_InterlockedXor8_nf |
字符_InterlockedXor8_nf (字符 volatile *,字符) |
_InterlockedXor8_rel |
字符_InterlockedXor8_rel (字符 volatile *,字符) |
_InterlockedXor_acq |
长_InterlockedXor_acq (长可变*,长) |
_InterlockedXor_nf |
长_InterlockedXor_nf (长可变*,长) |
_InterlockedXor_rel |
长_InterlockedXor_rel (长可变*,长) |
[氖]
_interlockedbittest 内部
纯互锁的 bittest 内部对所有平台是通用的。ARM 添加 _acq、_rel和 _nf 变量,修改操作的关卡语义,如 _nf (没有大小) 后缀 前面所述本文中。
函数名 |
函数原型 |
---|---|
_interlockedbittestandreset |
unsigned char _interlockedbittestandreset (长可变*,长) |
_interlockedbittestandreset_acq |
unsigned char _interlockedbittestandreset_acq (长可变*,长) |
_interlockedbittestandreset_nf |
unsigned char _interlockedbittestandreset_nf (长可变*,长) |
_interlockedbittestandreset_rel |
unsigned char _interlockedbittestandreset_rel (长可变*,长) |
_interlockedbittestandset |
unsigned char _interlockedbittestandset (长可变*,长) |
_interlockedbittestandset_acq |
unsigned char _interlockedbittestandset_acq (长可变*,长) |
_interlockedbittestandset_nf |
unsigned char _interlockedbittestandset_nf (长可变*,长) |
_interlockedbittestandset_rel |
unsigned char _interlockedbittestandset_rel (长可变*,长) |
[氖]