Intrinsics RAMIĘ
Kompilator Visual C++ udostępnia następujące intrinsics w ramach architektury ARM.Aby uzyskać więcej informacji na temat ARM, zobacz ARM architektury Reference Manual i ARM asembler narzędzia przewodnik na stronie internetowej ARM Centrum informacyjne.
NEON
Rozszerzenia NEON wektor instrukcji set dla ARM zapewniają możliwości pojedynczej instrukcji wielu danych (SIMD), które przypominają te w MMX i SSE wektor zestawów instrukcji, które są wspólne dla procesorów architekturę x 86 i x 64.
NEON intrinsics są obsługiwane, jak przewidziano w pliku nagłówkowym arm_neon.h.Obsługa kompilatora Visual C++ NEON intrinsics jest podobna do kompilator ARM, który opisano w dodatku G kompilator ARM toolchain, w wersji 4.1 kompilator odwołanie na stronie internetowej ARM Centrum informacyjne.
Podstawową różnicą między kompilatora Visual C++ i kompilator ARM jest, że kompilator języka Visual C++ dodaje _ex wariantów vldX i vstX wektor obciążenia i przechowywać instrukcje._ex Wariantów zająć dodatkowy parametr, który określa wyrównanie argumentem wskaźnika, ale są inaczej identyczne, aby ich nie-_ex odpowiedników.
Specyficzne dla ARM Intrinsics aukcję
Nazwa funkcji |
Instrukcja |
Prototyp funkcji |
---|---|---|
_arm_smlal |
SMLAL |
__int64 _arm_smlal (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_umlal |
UMLAL |
_arm_umlal unsigned __int64 (unsigned __int64 _RdHiLo, unsigned int _Rn, unsigned int _Rm) |
_arm_clz |
CLZ |
_arm_clz unsigned int (unsigned int _Rm) |
_arm_qadd |
QADD |
int _arm_qadd (int _Rm, int _Rn) |
_arm_qdadd |
QDADD |
int _arm_qdadd (int _Rm, int _Rn) |
_arm_qdsub |
QDSUB |
int _arm_qdsub (int _Rm, int _Rn) |
_arm_qsub |
QSUB |
int _arm_qsub (int _Rm, int _Rn) |
_arm_smlabb |
SMLABB |
int _arm_smlabb (int _Rn, int _Rm, int _Ra) |
_arm_smlabt |
SMLABT |
int _arm_smlabt (int _Rn, int _Rm, int _Ra) |
_arm_smlatb |
SMLATB |
int _arm_smlatb (int _Rn, int _Rm, int _Ra) |
_arm_smlatt |
SMLATT |
int _arm_smlatt (int _Rn, int _Rm, int _Ra) |
_arm_smlalbb |
SMLALBB |
__int64 _arm_smlalbb (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlalbt |
SMLALBT |
__int64 _arm_smlalbt (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlaltb |
SMLALTB |
__int64 _arm_smlaltb (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlaltt |
SMLALTT |
__int64 _arm_smlaltt (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlawb |
SMLAWB |
int _arm_smlawb (int _Rn, int _Rm, int _Ra) |
_arm_smlawt |
SMLAWT |
int _arm_smlawt (int _Rn, int _Rm, int _Ra) |
_arm_smulbb |
SMULBB |
int _arm_smulbb (int _Rn, int _Rm) |
_arm_smulbt |
SMULBT |
int _arm_smulbt (int _Rn, int _Rm) |
_arm_smultb |
SMULTB |
int _arm_smultb (int _Rn, int _Rm) |
_arm_smultt |
SMULTT |
int _arm_smultt (int _Rn, int _Rm) |
_arm_smulwb |
SMULWB |
int _arm_smulwb (int _Rn, int _Rm) |
_arm_smulwt |
SMULWT |
int _arm_smulwt (int _Rn, int _Rm) |
_arm_sadd16 |
SADD16 |
int _arm_sadd16 (int _Rn, int _Rm) |
_arm_sadd8 |
SADD8 |
int _arm_sadd8 (int _Rn, int _Rm) |
_arm_sasx |
SASX |
int _arm_sasx (int _Rn, int _Rm) |
_arm_ssax |
SSAX |
int _arm_ssax (int _Rn, int _Rm) |
_arm_ssub16 |
SSUB16 |
int _arm_ssub16 (int _Rn, int _Rm) |
_arm_ssub8 |
SSUB8 |
int _arm_ssub8 (int _Rn, int _Rm) |
_arm_shadd16 |
SHADD16 |
int _arm_shadd16 (int _Rn, int _Rm) |
_arm_shadd8 |
SHADD8 |
int _arm_shadd8 (int _Rn, int _Rm) |
_arm_shasx |
SHASX |
int _arm_shasx (int _Rn, int _Rm) |
_arm_shsax |
SHSAX |
int _arm_shsax (int _Rn, int _Rm) |
_arm_shsub16 |
SHSUB16 |
int _arm_shsub16 (int _Rn, int _Rm) |
_arm_shsub8 |
SHSUB8 |
int _arm_shsub8 (int _Rn, int _Rm) |
_arm_qadd16 |
QADD16 |
int _arm_qadd16 (int _Rn, int _Rm) |
_arm_qadd8 |
QADD8 |
int _arm_qadd8 (int _Rn, int _Rm) |
_arm_qasx |
QASX |
int _arm_qasx (int _Rn, int _Rm) |
_arm_qsax |
QSAX |
int _arm_qsax (int _Rn, int _Rm) |
_arm_qsub16 |
QSUB16 |
int _arm_qsub16 (int _Rn, int _Rm) |
_arm_qsub8 |
QSUB8 |
int _arm_qsub8 (int _Rn, 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 |
_arm_uasx unsigned int (unsigned int _Rn, unsigned int _Rm) |
_arm_usax |
USAX |
_arm_usax unsigned int (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 |
_arm_uhasx unsigned int (unsigned int _Rn, unsigned int _Rm) |
_arm_uhsax |
UHSAX |
_arm_uhsax unsigned int (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 |
_arm_uqasx unsigned int (unsigned int _Rn, unsigned int _Rm) |
_arm_uqsax |
UQSAX |
_arm_uqsax unsigned int (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 |
_arm_uxtab unsigned int (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 |
_arm_uxtah unsigned int (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 |
_arm_uxtb unsigned int (unsigned int _Rn, unsigned int _Rotation) |
_arm_uxtb16 |
UXTB16 |
unsigned int _arm_uxtb16 (unsigned int _Rn, unsigned int _Rotation) |
_arm_uxth |
UXTH |
_arm_uxth unsigned int (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 |
_arm_rev unsigned int (unsigned int _Rm) |
_arm_rev16 |
REV16 |
unsigned int _arm_rev16 (unsigned int _Rm) |
_arm_revsh |
REVSH |
_arm_revsh unsigned int (unsigned int _Rm) |
_arm_smlad |
SMLAD |
int _arm_smlad (int _Rn, int _Rm, int _Ra) |
_arm_smladx |
SMLADX |
int _arm_smladx (int _Rn, int _Rm, int _Ra) |
_arm_smlsd |
SMLSD |
int _arm_smlsd (int _Rn, int _Rm, int _Ra) |
_arm_smlsdx |
SMLSDX |
int _arm_smlsdx (int _Rn, int _Rm, int _Ra) |
_arm_smmla |
SMMLA |
int _arm_smmla (int _Rn, int _Rm, int _Ra) |
_arm_smmlar |
SMMLAR |
int _arm_smmlar (int _Rn, int _Rm, int _Ra) |
_arm_smmls |
SMMLS |
int _arm_smmls (int _Rn, int _Rm, int _Ra) |
_arm_smmlsr |
SMMLSR |
int _arm_smmlsr (int _Rn, int _Rm, int _Ra) |
_arm_smmul |
SMMUL |
int _arm_smmul (int _Rn, int _Rm) |
_arm_smmulr |
SMMULR |
int _arm_smmulr (int _Rn, int _Rm) |
_arm_smlald |
SMLALD |
__int64 _arm_smlald (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlaldx |
SMLALDX |
__int64 _arm_smlaldx (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlsld |
SMLSLD |
__int64 _arm_smlsld (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smlsldx |
SMLSLDX |
__int64 _arm_smlsldx (__int64 _RdHiLo, int _Rn, int _Rm) |
_arm_smuad |
SMUAD |
int _arm_smuad (int _Rn, int _Rm) |
_arm_smuadx |
SMUADX |
int _arm_muadxs (int _Rn, int _Rm) |
_arm_smusd |
SMUSD |
int _arm_smusd (int _Rn, int _Rm) |
_arm_smusdx |
SMUSDX |
int _arm_smusdx (int _Rn, int _Rm) |
_arm_smull |
SMULL |
__int64 _arm_smull (int _Rn, int _Rm) |
_arm_umull |
UMULL |
_arm_umull unsigned __int64 (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 |
STRONY |
_arm_bfc unsigned int (unsigned int _Rd, unsigned int _Lsb, unsigned int właściwości) |
_arm_bfi |
BFI |
_arm_bfi unsigned int (unsigned int _Rd, unsigned int _Rn, unsigned int _Lsb, unsigned int właściwości) |
_arm_rbit |
RBIT |
_arm_rbit unsigned int (unsigned int _Rm) |
_arm_sbfx |
SBFX |
int _arm_sbfx (int _Rn, unsigned int _Lsb, unsigned int właściwości) |
_arm_ubfx |
UBFX |
_arm_ubfx unsigned int (unsigned int _Rn, unsigned int _Lsb, unsigned int właściwości) |
_arm_sdiv |
SDIV |
int _arm_sdiv (int _Rn, int _Rm) |
_arm_udiv |
UDIV |
_arm_udiv unsigned int (unsigned int _Rn, unsigned int _Rm) |
__cps |
USŁUGI PUNKTU POŁĄCZENIA |
void __cps (unsigned int _Ops, unsigned int _Flags, unsigned int _Mode) |
__dmb |
DMB |
void __dmb (unsigned int _Type) Wstawia operację bariera pamięci do strumieni instrukcji.Parametr _Type określa rodzaj ograniczenia, które wymusza zapory. Aby uzyskać więcej informacji na temat rodzaje ograniczeń, które mogą być egzekwowane, zobacz Ograniczenia bariera pamięci. |
__dsb |
DSB |
void __dsb (unsigned int _Type) Wstawia operację bariera pamięci do strumieni instrukcji.Parametr _Type określa rodzaj ograniczenia, które wymusza zapory. Aby uzyskać więcej informacji na temat rodzaje ograniczeń, które mogą być egzekwowane, zobacz Ograniczenia bariera pamięci. |
__isb |
ISB |
void __isb (unsigned int _Type) Wstawia operację bariera pamięci do strumieni instrukcji.Parametr _Type określa rodzaj ograniczenia, które wymusza zapory. Aby uzyskać więcej informacji na temat rodzaje ograniczeń, które mogą być egzekwowane, zobacz Ograniczenia bariera pamięci. |
__emit |
void __emit (unsigned __int32 opcode) Wstawia określonej instrukcji do strumienia instrukcji, który jest wysyłany przez kompilator. Wartość opcode musi być wyrażenie stałe, o której wiadomo, w czasie kompilacji.Rozmiar instrukcji programu word jest 16 bitów i najbardziej znaczące bity 16 opcode są ignorowane. Kompilator, że próba zinterpretować zawartości opcode i nie gwarantuje stanie Procesora lub pamięci, przed wykonaniem instrukcji wstawionego. Kompilator zakłada, że Państwa Procesora i pamięci są bez zmian, po wykonaniu instrukcji wstawionego.W związku z tym instrukcje, które zmieniają się Państwo może mieć szkodliwy wpływ na normalne kod, który jest generowany przez kompilator. Z tego powodu należy użyć emit tylko po to, aby wstawić instrukcje, które wpływają na stan Procesora, który kompilator nie są normalnie przetwarzane — na przykład koprocesora Państwo — lub do implementacji funkcji, które są zadeklarowane za pomocą declspec(naked). |
|
__hvc |
HVC |
__hvc unsigned int (unsigned int,...) |
__iso_volatile_load16 |
__int16 __iso_volatile_load16 (const lotnych __int16 *) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_load32 |
__int32 __iso_volatile_load32 (const lotnych __int32 *) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_load64 |
__int64 __iso_volatile_load64 (const __int64 lotnych *) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_load8 |
__int8 __iso_volatile_load8 (const lotnych __int8 *) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_store16 |
void __iso_volatile_store16 (lotnych __int16 *, __int16) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_store32 |
void __iso_volatile_store32 (lotnych __int32 *, __int32) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_store64 |
void __iso_volatile_store64 (lotnych __int64 *, __int64) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__iso_volatile_store8 |
void __iso_volatile_store8 (lotnych __int8 *, __int8) Aby uzyskać więcej informacji, zobacz instrinsics __iso_volatile_load/Sklep. |
|
__ldrexd |
LDREXD |
__int64 __ldrexd (const __int64 lotnych *) |
__prefetch |
ROZ |
void __cdecl __prefetch(const void *) Zawiera PLD pamięci podpowiedź do systemu, że ilość pamięci lub w jego pobliżu określony adres może być wkrótce dostępny.Niektóre systemy może wybrać opcję Optymalizuj dla deseniowi dostępu do pamięci zwiększyć wydajność w czasie wykonywania.Jednak z C++ języka punktu widzenia, funkcja nie wpływa dostrzegalnych i nie mogą robić nic. |
__rdpmccntr64 |
__rdpmccntr64(void) unsigned __int64 |
|
__sev |
O POZIOMIE WAŻNOŚCI |
void __sev(void) |
__static_assert |
void __static_assert (int, const char *) |
|
__swi |
SVC |
__swi unsigned int (unsigned int,...) |
__trap |
BKPT |
int __trap (int,...) |
__wfe |
WFE |
void __wfe(void) |
__wfi |
WFI |
void __wfi(void) |
_AddSatInt |
QADD |
int _AddSatInt (int, int) |
_CopyDoubleFromInt64 |
Podwójna _CopyDoubleFromInt64(__int64) |
|
_CopyFloatFromInt32 |
_CopyFloatFromInt32(__int32) pływaka |
|
_CopyInt32FromFloat |
__int32 _CopyInt32FromFloat(float) |
|
_CopyInt64FromDouble |
__int64 _CopyInt64FromDouble(double) |
|
_CountLeadingOnes |
_CountLeadingOnes(unsigned long) unsigned int |
|
_CountLeadingOnes64 |
_CountLeadingOnes64(unsigned __int64) unsigned int |
|
_CountLeadingSigns |
_CountLeadingSigns(long) unsigned int |
|
_CountLeadingSigns64 |
_CountLeadingSigns64(__int64) unsigned int |
|
_CountLeadingZeros |
_CountLeadingZeros(unsigned long) unsigned int |
|
_CountLeadingZeros64 |
_CountLeadingZeros64(unsigned __int64) unsigned int |
|
_CountOneBits |
_CountOneBits(unsigned long) unsigned int |
|
_CountOneBits64 |
_CountOneBits64(unsigned __int64) unsigned int |
|
_DAddSatInt |
QDADD |
int _DAddSatInt (int, int) |
_DSubSatInt |
QDSUB |
int _DSubSatInt (int, int) |
_isunordered |
int _isunordered (podwójny, podwójne) |
|
_isunorderedf |
int _isunorderedf (float, float) |
|
_MoveFromCoprocessor |
MRC |
_MoveFromCoprocessor unsigned int (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor2 |
MRC2 |
unsigned int _MoveFromCoprocessor2 (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor64 |
MRRC |
unsigned __int64 _MoveFromCoprocessor64 (unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveFromCoprocessor64. |
_MoveToCoprocessor |
MCR |
void _MoveToCoprocessor (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor2 |
MCR2 |
void _MoveToCoprocessor2 (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor64 |
MCRR |
void _MoveToCoprocessor64 (unsigned __int64, unsigned int, unsigned int, unsigned int) Odczytuje dane z koprocesora ARM przy użyciu instrukcji koprocesora transferu danych.Aby uzyskać więcej informacji, zobacz _MoveToCoprocessor64. |
_MulHigh |
LONG _MulHigh (długi, długi) |
|
_MulUnsignedHigh |
niepodpisane długi _MulUnsignedHigh (długo unsigned, unsigned long) |
|
_ReadBankedReg |
PANI |
int _ReadBankedReg (int _Reg) |
_ReadStatusReg |
PANI |
int _ReadStatusReg(int) |
_SubSatInt |
QSUB |
int _SubSatInt (int, int) |
_WriteBankedReg |
MSR |
void _WriteBankedReg (int _Value, int _Reg) |
_WriteStatusReg |
MSR |
void _WriteStatusReg (int, int, int) |
[NEON]
Ograniczenia bariera pamięci
Funkcji wewnętrznych __dmb (bariera pamięci danych), __dsb (bariery synchronizację danych), i __isb wykorzystania (instrukcja synchronizacji bariery) następujące wstępnie zdefiniowane wartości określające ograniczenia bariera pamięci pod względem udostępnianie domeny i rodzaj dostępu, których dotyczy operacja.
Wartość ograniczenia |
Opis |
---|---|
_ARM_BARRIER_SY |
Pełny system, odczyty i zapisy. |
_ARM_BARRIER_ST |
Pełny system tylko operacje zapisu. |
_ARM_BARRIER_ISH |
Wewnętrzna udostępnianych, odczyty i zapisy. |
_ARM_BARRIER_ISHST |
Wewnętrzny udostępnianych, zapisuje tylko. |
_ARM_BARRIER_NSH |
Non udostępnianych, odczyty i zapisy. |
_ARM_BARRIER_NSHST |
Non udostępnianych, zapisuje tylko. |
_ARM_BARRIER_OSH |
Zewnętrzne udostępnianych, odczyty i zapisy. |
_ARM_BARRIER_OSHST |
Zewnętrzne udostępnianych, zapisuje tylko. |
Dla __isb wewnętrznej, jedynym ograniczeniem dotychczasowe jest _ARM_BARRIER_SY; wszystkie inne wartości są zarezerwowane przez architekturę.
instrinsics __iso_volatile_load/Sklep
Te funkcje wykonywać jawnie ładunków i magazynów, które nie podlegają optymalizacje kompilatora.
__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)
Parametry
Location
Adres lokalizacji pamięci, aby odczytywać lub zapisywać dane do.Value(przechowywać tylko intrinsics)
Wartość do zapisu w lokalizacji określonej pamięci.
Zwracana wartość (tylko intrinsics obciążenia)
Wartość lokalizacji w pamięci określonej przez Location.
Uwagi
Można użyć __iso_volatile_load8/16/32/64 i __iso_volatile_store8/16/32/64 intrinsics do jawnie wykonywania dostępów do pamięci, które nie podlegają optymalizacje kompilatora.Kompilator nie można usunąć, synthetize, lub zmienić względna kolejność tych operacji, ale nie generuje barier pamięci niejawna sprzętu.Kolejność w związku z tym, sprzęt może nadal zmieniać dostępów do pamięci dostrzegalnych przez wiele wątków.Dokładniej, intrinsics te są równoważne z następujących określeń, opracowane pod /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;
Należy zauważyć, że intrinsics podjąć lotnych wskaźniki odpowiadające lotnych zmiennych.Jednakże nie istnieje wymóg lub zalecenie, aby używać lotnych wskaźniki jako argumenty; Semantyka tych operacji są dokładnie takie same w przypadku używania typu zwykły, trwałej.
Aby uzyskać więcej informacji o /volatile:iso argument wiersza polecenia, zobacz /volatile (interpretacja słowa kluczowego volatile).
_MoveFromCoprocessor, _MoveFromCoprocessor2
Te funkcje odczytywać dane z koprocesory ARM, zgodnie z instrukcjami koprocesora danych transferu.
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
);
Parametry
coproc
Koprocesor liczba z przedziału od 0 do 15.opcode1
Kod operacji specyficznych dla koprocesora z zakresu od 0 do 7crn
Liczba z przedziału od 0 do 15, określająca pierwszy argument opcji Instrukcja rejestrów.crm
Rejestrów liczba z przedziału od 0 do 15, która określa dodatkowe źródło lub miejsce docelowe operandu.opcode2
Dodatkowe specyficzne dla koprocesora kod operacji z zakresu od 0 do 7.
Zwracana wartość
Wartość, która jest odczytywana z Koprocesor.
Uwagi
Wartości wszystkich parametrów pięciu tym wewnętrznych musi być stała wyrażeń, które są znane w czasie kompilacji.
_MoveFromCoprocessorużywa instrukcji MRC; _MoveFromCoprocessor2używa MRC2.Parametry odpowiadają pola bitowe, które są kodowane bezpośrednio do programu word instrukcji.Interpretacja parametrów jest zależne od koprocesora.Aby uzyskać więcej informacji zobacz Podręcznik dla danego koprocesora.
_MoveFromCoprocessor64
Odczytuje dane z koprocesory ARM, zgodnie z instrukcjami koprocesora danych transferu.
unsigned __int64 _MoveFromCoprocessor64(
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parametry
coproc
Koprocesor liczba z przedziału od 0 do 15.opcode1
Kod operacji specyficznych dla koprocesora z zakresu od 0 do 15.crm
Rejestrów liczba z przedziału od 0 do 15, która określa dodatkowe źródło lub miejsce docelowe operandu.
Zwraca wartość
Wartość, która jest odczytywana z Koprocesor.
Uwagi
Wartości wszystkich trzech parametrów w tym wewnętrznych musi być stała wyrażeń, które są znane w czasie kompilacji.
_MoveFromCoprocessor64używa instrukcji MRRC.Parametry odpowiadają pola bitowe, które są kodowane bezpośrednio do programu word instrukcji.Interpretacja parametrów jest zależne od koprocesora.Aby uzyskać więcej informacji zobacz Podręcznik dla danego koprocesora.
_MoveToCoprocessor, _MoveToCoprocessor2
Te funkcje zapisywać danych koprocesory ARM przy użyciu instrukcji koprocesora transferu danych.
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
);
Parametry
value
Wartość do zapisania w Koprocesor.coproc
Koprocesor liczba z przedziału od 0 do 15.opcode1
Kod operacji specyficznych dla koprocesora z zakresu od 0 do 7.crn
Liczba z przedziału od 0 do 15, określająca pierwszy argument opcji Instrukcja rejestrów.crm
Rejestrów liczba z przedziału od 0 do 15, która określa dodatkowe źródło lub miejsce docelowe operandu.opcode2
Dodatkowe specyficzne dla koprocesora kod operacji z zakresu od 0 do 7.
Zwracana wartość
Brak.
Uwagi
Wartości coproc, opcode1, crn, crm, i opcode2 parametry tym wewnętrznych musi być stała wyrażeń, które są znane w czasie kompilacji.
_MoveToCoprocessorużywa instrukcji MCR; _MoveToCoprocessor2używa MCR2.Parametry odpowiadają pola bitowe, które są kodowane bezpośrednio do programu word instrukcji.Interpretacja parametrów jest zależne od koprocesora.Aby uzyskać więcej informacji zobacz Podręcznik dla danego koprocesora.
_MoveToCoprocessor64
Te funkcje zapisywać danych koprocesory ARM przy użyciu instrukcji koprocesora transferu danych.
void _MoveFromCoprocessor64(
unsigned __int64 value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parametry
coproc
Koprocesor liczba z przedziału od 0 do 15.opcode1
Kod operacji specyficznych dla koprocesora z zakresu od 0 do 15.crm
Rejestrów liczba z przedziału od 0 do 15, która określa dodatkowe źródło lub miejsce docelowe operandu.
Zwracana wartość
Brak.
Uwagi
Wartości coproc, opcode1, i crm parametry tym wewnętrznych musi być stała wyrażeń, które są znane w czasie kompilacji.
_MoveFromCoprocessor64używa instrukcji MCRR.Parametry odpowiadają pola bitowe, które są kodowane bezpośrednio do programu word instrukcji.Interpretacja parametrów jest zależne od koprocesora.Aby uzyskać więcej informacji zobacz Podręcznik dla danego koprocesora.
Obsługa ARM Intrinsics z innych architektur
Poniższa lista zawiera intrinsics z innych architektur, które są obsługiwane na platformach ARM.Jeżeli zachowanie wewnętrznych na ARM różni się od jego zachowanie na innych architekturach sprzętowych, dodatkowe szczegóły zostały wymienione.
Nazwa funkcji |
Prototyp funkcji |
---|---|
__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)
Uwaga
Na platformach ARM ta funkcja generuje instrukcję NOP, jeśli jeden jest wykonywane w architekturze; w przeciwnym razie jest generowany alternatywnych instrukcji, która nie zmienia stanu programu lub Procesora — na przykład, MOV r8, r8.To jest funkcjonalnie równoważne __nop wewnętrzne dla innych architektur sprzętowych.Ponieważ instrukcji, która nie ma wpływu na stan programu lub Procesora może być ignorowany przez architekturze jako Optymalizacja, instrukcja nie koniecznie zużywa cykle Procesora.W związku z tym nie należy używać wewnętrznych __nop do manipulowania czas wykonania sekwencji kodu, jeśli nie masz pewności jak Procesor będzie działać.Zamiast tego można użyć __nop wewnętrzne wyrównać następnej instrukcji na adres określonych granicach 32-bitowych.
|
__yield |
void __yield(void)
Uwaga
Na platformach ARM, ta funkcja generuje instrukcję plonu, która wskazuje, że wątek wykonuje zadanie, które mogą zostać tymczasowo zawieszony z wykonania — na przykład spinlock — nie ma wpływu na program.Dzięki temu Procesora do wykonywania innych zadań podczas cykli wykonanie, które w przeciwnym razie marne.
|
_AddressOfReturnAddress |
void * _AddressOfReturnAddress(void) |
_BitScanForward |
bez znaku (znak) _BitScanForward (unsigned długo * _Index, unsigned _Mask długa) |
_BitScanReverse |
bez znaku (znak) _BitScanReverse (unsigned długo * _Index, unsigned _Mask długa) |
_bittest |
bez znaku (znak) _bittest (const długo *, długie) |
_bittestandcomplement |
bez znaku (znak) _bittestandcomplement (long *, długie) |
_bittestandreset |
bez znaku (znak) _bittestandreset (long *, długie) |
_bittestandset |
bez znaku (znak) _bittestandset (long *, długie) |
_byteswap_uint64 |
unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64) |
_byteswap_ulong |
_byteswap_ulong(unsigned long) unsigned __cdecl długa |
_byteswap_ushort |
_byteswap_ushort bez znaku __cdecl krótkie (short bez znaku) |
_disable |
void __cdecl _disable(void)
Uwaga
Na platformach ARM ta funkcja generuje instrukcję CPSID; jest on dostępny tylko jako wewnętrzne.
|
_Aktywny |
void __cdecl _enable(void)
Uwaga
Na platformach ARM ta funkcja generuje instrukcję CPSIE; jest on dostępny tylko jako wewnętrzne.
|
_lrotl |
_lrotl unsigned __cdecl długie (unsigned long, int) |
_lrotr |
_lrotr unsigned __cdecl długie (unsigned long, int) |
_ReadBarrier |
void _ReadBarrier(void) |
_ReadWriteBarrier |
void _ReadWriteBarrier(void) |
_ReturnAddress |
void * _ReturnAddress(void) |
_rotl |
_rotl __cdecl unsigned int (unsigned int _Value, int _Shift) |
_rotl16 |
niepodpisane krótki _rotl16 (unsigned _Value krótkich, unsigned char _Shift) |
_rotl64 |
unsigned __int64 __cdecl _rotl64 (unsigned __int64 _Value, int _Shift) |
_rotl8 |
bez znaku (znak) _rotl8 (unsigned char _Value, unsigned char _Shift) |
_rotr |
_rotr __cdecl unsigned int (unsigned int _Value, int _Shift) |
_rotr16 |
niepodpisane krótki _rotr16 (unsigned _Value krótkich, unsigned char _Shift) |
_rotr64 |
unsigned __int64 __cdecl _rotr64 (unsigned __int64 _Value, int _Shift) |
_rotr8 |
bez znaku (znak) _rotr8 (unsigned char _Value, unsigned char _Shift) |
_setjmpex |
int __cdecl _setjmpex(jmp_buf) |
_WriteBarrier |
void _WriteBarrier(void) |
[NEON]
Zablokowane Intrinsics
Intrinsics blokujące są zestawem intrinsics, które są używane do wykonywania operacji odczytu zapisu zmiany atomowych.Niektóre z nich są wspólne dla wszystkich platform.Są one wymienione oddzielnie w tym miejscu ponieważ istnieje duża ich liczba, ale ponieważ ich definicje są głównie nadmiarowe, to łatwiej myśleć o nich w ogóle warunki.Ich nazw może służyć do uzyskania dokładną zachowań.
W następującej tabeli podsumowano wsparcie ARM intrinsics nie bittest-, zablokowane.Każda komórka w tabeli odpowiada nazwie otrzymanych w wyniku dołączania nazwy operacji w skrajnej lewej komórce wiersza i wpisz nazwę w komórce górze kolumny, aby _Interlocked.Na przykład komórka na przecięciu Xor wiersz i 8 kolumna odpowiada _InterlockedXor8 i jest w pełni obsługiwane.Większość obsługiwanych funkcji oferuje te opcjonalne sufiksy: _acq, _rel, i _nf._acq Sufiks wskazuje "nabyć" semantyczne i _rel sufiks wskazuje "zwolnienie" semantyczne.Te sufiksy są opisane w dokumentacji IPF w witrynie MSDN._nf Lub sufiks "nie ogrodzenia" jest unikatowy dla ARM i została omówiona w następnej sekcji.
8 |
16 |
32 |
64 |
P |
|
---|---|---|---|---|---|
Dodaj |
Brak |
Brak |
Pełna |
Pełna |
Brak |
I |
Pełna |
Pełna |
Pełna |
Pełna |
Brak |
CompareExchange |
Pełna |
Pełna |
Pełna |
Pełna |
Pełna |
Zmniejsz |
Brak |
Pełna |
Pełna |
Pełna |
Brak |
Exchange |
Częściowe |
Częściowe |
Częściowe |
Częściowe |
Częściowe |
ExchangeAdd |
Pełna |
Pełna |
Pełna |
Pełna |
Brak |
Przyrost |
Brak |
Pełna |
Pełna |
Pełna |
Brak |
Lub |
Pełna |
Pełna |
Pełna |
Pełna |
Brak |
XOR |
Pełna |
Pełna |
Pełna |
Pełna |
Brak |
Klucz:
Full: supports plain, _acq, _rel, and _nf forms.
Częściowe: obsługuje plain, _acq, i _nf formularzy.
Brak: nieobsługiwane
sufiks domeny _nf (nie ogrodzenia)
_nf Lub sufiks "nie ogrodzenia" wskazuje, że operacja nie zachowuje się jak wszelkiego rodzaju bariera pamięci.W przeciwieństwie do innych form trzy (zwykły, _acq, i _rel), które wszystkie zachowują się jak pewnego rodzaju zapory.Jednym z możliwych zastosowań _nf formularzy ma utrzymać statystyki licznika jest aktualizowana przez wiele wątków w tym samym czasie, ale których w przeciwnym razie niezastosowania wartości podczas, gdy wykonują wiele wątków.
Wykaz blokujących Intrinsics
Nazwa funkcji |
Prototyp funkcji |
---|---|
_InterlockedAdd |
długa _InterlockedAdd (długa _volatile *, długie) |
_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 |
długa _InterlockedAdd_acq (długo lotnych *, długie) |
_InterlockedAdd_nf |
długa _InterlockedAdd_nf (długo lotnych *, długie) |
_InterlockedAdd_rel |
długa _InterlockedAdd_rel (długo lotnych *, długie) |
_InterlockedAnd |
długa _InterlockedAnd (długo lotnych *, długie) |
_InterlockedAnd16 |
krótki _InterlockedAnd16 (volatile krótki *, krótki) |
_InterlockedAnd16_acq |
krótki _InterlockedAnd16_acq (volatile krótki *, krótki) |
_InterlockedAnd16_nf |
krótki _InterlockedAnd16_nf (volatile krótki *, krótki) |
_InterlockedAnd16_rel |
krótki _InterlockedAnd16_rel (volatile krótki *, krótki) |
_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 |
długa _InterlockedAnd_acq (długo lotnych *, długie) |
_InterlockedAnd_nf |
długa _InterlockedAnd_nf (długo lotnych *, długie) |
_InterlockedAnd_rel |
długa _InterlockedAnd_rel (długo lotnych *, długie) |
_InterlockedCompareExchange |
długa __cdecl _InterlockedCompareExchange (długo lotnych *, długo,) |
_InterlockedCompareExchange16 |
krótki _InterlockedCompareExchange16 (volatile krótki *, krótkie, krótkie) |
_InterlockedCompareExchange16_acq |
krótki _InterlockedCompareExchange16_acq (volatile krótki *, krótkie, krótkie) |
_InterlockedCompareExchange16_nf |
krótki _InterlockedCompareExchange16_nf (volatile krótki *, krótkie, krótkie) |
_InterlockedCompareExchange16_rel |
krótki _InterlockedCompareExchange16_rel (volatile krótki *, krótkie, krótkie) |
_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 *) |
_InterlockedCompareExchange_acq |
długa _InterlockedCompareExchange_acq (długo lotnych *, długo,) |
_InterlockedCompareExchange_nf |
długa _InterlockedCompareExchange_nf (długo lotnych *, długo,) |
_InterlockedCompareExchange_rel |
długa _InterlockedCompareExchange_rel (długo lotnych *, długo,) |
_InterlockedDecrement |
długa __cdecl _InterlockedDecrement(long volatile *) |
_InterlockedDecrement16 |
krótki _InterlockedDecrement16(short volatile *) |
_InterlockedDecrement16_acq |
krótki _InterlockedDecrement16_acq(short volatile *) |
_InterlockedDecrement16_nf |
krótki _InterlockedDecrement16_nf(short volatile *) |
_InterlockedDecrement16_rel |
krótki _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 |
długi _InterlockedDecrement_acq(long volatile *) |
_InterlockedDecrement_nf |
długi _InterlockedDecrement_nf(long volatile *) |
_InterlockedDecrement_rel |
długi _InterlockedDecrement_rel(long volatile *) |
_InterlockedExchange |
długa __cdecl _InterlockedExchange (długo lotnych * _Target, długie) |
_InterlockedExchange16 |
krótki _InterlockedExchange16 (volatile krótki * _Target, krótka) |
_InterlockedExchange16_acq |
krótki _InterlockedExchange16_acq (volatile krótki * _Target, krótka) |
_InterlockedExchange16_nf |
krótki _InterlockedExchange16_nf (volatile krótki * _Target, krótka) |
_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 |
char _InterlockedExchange8 (char volatile * _Target, char) |
_InterlockedExchange8_acq |
char _InterlockedExchange8_acq (char volatile * _Target, char) |
_InterlockedExchange8_nf |
char _InterlockedExchange8_nf (char volatile * _Target, char) |
_InterlockedExchangeAdd |
długa __cdecl _InterlockedExchangeAdd (długo lotnych *, długie) |
_InterlockedExchangeAdd16 |
krótki _InterlockedExchangeAdd16 (volatile krótki *, krótki) |
_InterlockedExchangeAdd16_acq |
krótki _InterlockedExchangeAdd16_acq (volatile krótki *, krótki) |
_InterlockedExchangeAdd16_nf |
krótki _InterlockedExchangeAdd16_nf (volatile krótki *, krótki) |
_InterlockedExchangeAdd16_rel |
krótki _InterlockedExchangeAdd16_rel (volatile krótki *, krótki) |
_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 |
długa _InterlockedExchangeAdd_acq (długo lotnych *, długie) |
_InterlockedExchangeAdd_nf |
długa _InterlockedExchangeAdd_nf (długo lotnych *, długie) |
_InterlockedExchangeAdd_rel |
długa _InterlockedExchangeAdd_rel (długo lotnych *, długie) |
_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 |
długa _InterlockedExchange_acq (długo lotnych * _Target, długie) |
_InterlockedExchange_nf |
długa _InterlockedExchange_nf (długo lotnych * _Target, długie) |
_InterlockedIncrement |
długa __cdecl _InterlockedIncrement(long volatile *) |
_InterlockedIncrement16 |
krótki _InterlockedIncrement16(short volatile *) |
_InterlockedIncrement16_acq |
krótki _InterlockedIncrement16_acq(short volatile *) |
_InterlockedIncrement16_nf |
krótki _InterlockedIncrement16_nf(short volatile *) |
_InterlockedIncrement16_rel |
krótki _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 |
długi _InterlockedIncrement_acq(long volatile *) |
_InterlockedIncrement_nf |
długi _InterlockedIncrement_nf(long volatile *) |
_InterlockedIncrement_rel |
długi _InterlockedIncrement_rel(long volatile *) |
_InterlockedOr |
długa _InterlockedOr (długo lotnych *, długie) |
_InterlockedOr16 |
krótki _InterlockedOr16 (volatile krótki *, krótki) |
_InterlockedOr16_acq |
krótki _InterlockedOr16_acq (volatile krótki *, krótki) |
_InterlockedOr16_nf |
krótki _InterlockedOr16_nf (volatile krótki *, krótki) |
_InterlockedOr16_rel |
krótki _InterlockedOr16_rel (volatile krótki *, krótki) |
_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 |
długa _InterlockedOr_acq (długo lotnych *, długie) |
_InterlockedOr_nf |
długa _InterlockedOr_nf (długo lotnych *, długie) |
_InterlockedOr_rel |
długa _InterlockedOr_rel (długo lotnych *, długie) |
_InterlockedXor |
długa _InterlockedXor (długo lotnych *, długie) |
_InterlockedXor16 |
krótki _InterlockedXor16 (volatile krótki *, krótki) |
_InterlockedXor16_acq |
krótki _InterlockedXor16_acq (volatile krótki *, krótki) |
_InterlockedXor16_nf |
krótki _InterlockedXor16_nf (volatile krótki *, krótki) |
_InterlockedXor16_rel |
krótki _InterlockedXor16_rel (volatile krótki *, krótki) |
_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 |
długa _InterlockedXor_acq (długo lotnych *, długie) |
_InterlockedXor_nf |
długa _InterlockedXor_nf (długo lotnych *, długie) |
_InterlockedXor_rel |
długa _InterlockedXor_rel (długo lotnych *, długie) |
[NEON]
_interlockedbittest Intrinsics
Intrinsics zwykły bittest blokujące są wspólne dla wszystkich platform.Dodaje ARM _acq, _rel, i _nf wariantów, które po prostu zmodyfikować bariery semantykę operacji, zgodnie z opisem w sufiks domeny _nf (nie ogrodzenia) wcześniej w tym artykule.
Nazwa funkcji |
Prototyp funkcji |
---|---|
_interlockedbittestandreset |
bez znaku (znak) _interlockedbittestandreset (długo lotnych *, długie) |
_interlockedbittestandreset_acq |
bez znaku (znak) _interlockedbittestandreset_acq (długo lotnych *, długie) |
_interlockedbittestandreset_nf |
bez znaku (znak) _interlockedbittestandreset_nf (długo lotnych *, długie) |
_interlockedbittestandreset_rel |
bez znaku (znak) _interlockedbittestandreset_rel (długo lotnych *, długie) |
_interlockedbittestandset |
bez znaku (znak) _interlockedbittestandset (długo lotnych *, długie) |
_interlockedbittestandset_acq |
bez znaku (znak) _interlockedbittestandset_acq (długo lotnych *, długie) |
_interlockedbittestandset_nf |
bez znaku (znak) _interlockedbittestandset_nf (długo lotnych *, długie) |
_interlockedbittestandset_rel |
bez znaku (znak) _interlockedbittestandset_rel (długo lotnych *, długie) |
[NEON]