Gli intrinseci del monitoraggio ARM

Il compilatore di Visual C++ rende disponibili le seguenti funzioni intrinsechearchitettura del monitoraggio ARM.Per ulteriori informazioni sul monitoraggio ARM, vedere Manuale di riferimento di architettura del monitoraggio ARM e Nell'assembly di GLI strumenti la guida sul sito Web di Infocenter di ARM.

NEON

Le estensioni forniscono istruzioni ATTIVITÀ NEON vettoriale per il monitoraggio ARM fornisce set di istruzioni di funzionalità di (SIMD) di SIMD simili a quelle in MMX e vettoriale di SSE comuni ai processori dell'architettura x86 e x64.

Le nuove ATTIVITÀ NEON sono supportate, direttamente nel file di intestazione arm_neon.h.Il supporto del compilatore di Visual C++ alle funzioni intrinseche ATTIVITÀ NEON è simile a quello del compilatore di ARM, che è documentato nell'appendice G ARMI il toolchain del compilatore, la versione un riferimento a 4,1 compilatori sul sito Web di Infocenter di ARM.

La differenza principale tra il compilatore di Visual C++ e il compilatore di ARM è che il compilatore di Visual C++ aggiunge le variabili di _ex delle istruzioni di caricamento e l'archivio di vettore di vstX e di vldX.Varianti di _ex accettano un parametro aggiuntivo che specifica l'allineamento dell'argomento del puntatore ma sono altrimenti identiche alle relative controparti non di_ex.

Elenco Braccio- specifico degli intrinseci

Function Name

Istruzione

Prototipo di funzione

_arm_smlal

SMLAL

__int64 _arm_smlal (_RdHiLo __int64, _Rn int, _Rm int)

_arm_umlal

UMLAL

__int64 senza firma _arm_umlal (_RdHiLo senza firma __int64, _Rn senza firma int, _Rm senza firma int)

_arm_clz

CLZ

_arm_clz senza firma int (_Rm senza firma int)

_arm_qadd

QADD

_arm_qadd di int (_Rm int, _Rn int)

_arm_qdadd

QDADD

_arm_qdadd di int (_Rm int, _Rn int)

_arm_qdsub

QDSUB

_arm_qdsub di int (_Rm int, _Rn int)

_arm_qsub

QSUB

_arm_qsub di int (_Rm int, _Rn int)

_arm_smlabb

SMLABB

_arm_smlabb di int (_Rn int, _Rm int, _Ra int)

_arm_smlabt

SMLABT

_arm_smlabt di int (_Rn int, _Rm int, _Ra int)

_arm_smlatb

SMLATB

_arm_smlatb di int (_Rn int, _Rm int, _Ra int)

_arm_smlatt

SMLATT

_arm_smlatt di int (_Rn int, _Rm int, _Ra int)

_arm_smlalbb

SMLALBB

__int64 _arm_smlalbb (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlalbt

SMLALBT

__int64 _arm_smlalbt (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlaltb

SMLALTB

__int64 _arm_smlaltb (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlaltt

SMLALTT

__int64 _arm_smlaltt (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlawb

SMLAWB

_arm_smlawb di int (_Rn int, _Rm int, _Ra int)

_arm_smlawt

SMLAWT

_arm_smlawt di int (_Rn int, _Rm int, _Ra int)

_arm_smulbb

SMULBB

_arm_smulbb di int (_Rn int, _Rm int)

_arm_smulbt

SMULBT

_arm_smulbt di int (_Rn int, _Rm int)

_arm_smultb

SMULTB

_arm_smultb di int (_Rn int, _Rm int)

_arm_smultt

SMULTT

_arm_smultt di int (_Rn int, _Rm int)

_arm_smulwb

SMULWB

_arm_smulwb di int (_Rn int, _Rm int)

_arm_smulwt

SMULWT

_arm_smulwt di int (_Rn int, _Rm int)

_arm_sadd16

SADD16

int _arm_sadd16 (_Rn int, _Rm int)

_arm_sadd8

SADD8

int _arm_sadd8 (_Rn int, _Rm int)

_arm_sasx

SASX

_arm_sasx di int (_Rn int, _Rm int)

_arm_ssax

SSAX

_arm_ssax di int (_Rn int, _Rm int)

_arm_ssub16

SSUB16

int _arm_ssub16 (_Rn int, _Rm int)

_arm_ssub8

SSUB8

int _arm_ssub8 (_Rn int, _Rm int)

_arm_shadd16

SHADD16

int _arm_shadd16 (_Rn int, _Rm int)

_arm_shadd8

SHADD8

int _arm_shadd8 (_Rn int, _Rm int)

_arm_shasx

SHASX

_arm_shasx di int (_Rn int, _Rm int)

_arm_shsax

SHSAX

_arm_shsax di int (_Rn int, _Rm int)

_arm_shsub16

SHSUB16

int _arm_shsub16 (_Rn int, _Rm int)

_arm_shsub8

SHSUB8

int _arm_shsub8 (_Rn int, _Rm int)

_arm_qadd16

QADD16

int _arm_qadd16 (_Rn int, _Rm int)

_arm_qadd8

QADD8

int _arm_qadd8 (_Rn int, _Rm int)

_arm_qasx

QASX

_arm_qasx di int (_Rn int, _Rm int)

_arm_qsax

QSAX

_arm_qsax di int (_Rn int, _Rm int)

_arm_qsub16

QSUB16

int _arm_qsub16 (_Rn int, _Rm int)

_arm_qsub8

QSUB8

int _arm_qsub8 (_Rn int, _Rm int)

_arm_uadd16

UADD16

intero senza firma _arm_uadd16 (_Rn senza firma int, _Rm senza firma int)

_arm_uadd8

UADD8

intero senza firma _arm_uadd8 (_Rn senza firma int, _Rm senza firma int)

_arm_uasx

UASX

_arm_uasx senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_usax

USAX

_arm_usax senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_usub16

USUB16

intero senza firma _arm_usub16 (_Rn senza firma int, _Rm senza firma int)

_arm_usub8

USUB8

intero senza firma _arm_usub8 (_Rn senza firma int, _Rm senza firma int)

_arm_uhadd16

UHADD16

intero senza firma _arm_uhadd16 (_Rn senza firma int, _Rm senza firma int)

_arm_uhadd8

UHADD8

intero senza firma _arm_uhadd8 (_Rn senza firma int, _Rm senza firma int)

_arm_uhasx

UHASX

_arm_uhasx senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_uhsax

UHSAX

_arm_uhsax senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_uhsub16

UHSUB16

intero senza firma _arm_uhsub16 (_Rn senza firma int, _Rm senza firma int)

_arm_uhsub8

UHSUB8

intero senza firma _arm_uhsub8 (_Rn senza firma int, _Rm senza firma int)

_arm_uqadd16

UQADD16

intero senza firma _arm_uqadd16 (_Rn senza firma int, _Rm senza firma int)

_arm_uqadd8

UQADD8

intero senza firma _arm_uqadd8 (_Rn senza firma int, _Rm senza firma int)

_arm_uqasx

UQASX

_arm_uqasx senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_uqsax

UQSAX

_arm_uqsax senza firma int (_Rn senza firma int, _Rm senza firma int)

_arm_uqsub16

UQSUB16

intero senza firma _arm_uqsub16 (_Rn senza firma int, _Rm senza firma int)

_arm_uqsub8

UQSUB8

intero senza firma _arm_uqsub8 (_Rn senza firma int, _Rm senza firma int)

_arm_sxtab

SXTAB

_arm_sxtab di int (_Rn int, _Rm int, _Rotation unsigned int)

_arm_sxtab16

SXTAB16

int _arm_sxtab16 (_Rn int, _Rm int, _Rotation unsigned int)

_arm_sxtah

SXTAH

_arm_sxtah di int (_Rn int, _Rm int, _Rotation unsigned int)

_arm_uxtab

UXTAB

_arm_uxtab senza firma int (_Rn senza firma int, _Rm senza firma int, _Rotation senza firma int)

_arm_uxtab16

UXTAB16

intero senza firma _arm_uxta16b (_Rn senza firma int, _Rm senza firma int, _Rotation senza firma int)

_arm_uxtah

UXTAH

_arm_uxtah senza firma int (_Rn senza firma int, _Rm senza firma int, _Rotation senza firma int)

_arm_sxtb

SXTB

_arm_sxtb di int (_Rn int, _Rotation unsigned int)

_arm_sxtb16

SXTB16

int _arm_sxtb16 (_Rn int, _Rotation unsigned int)

_arm_sxth

SXTH

_arm_sxth di int (_Rn int, _Rotation unsigned int)

_arm_uxtb

UXTB

_arm_uxtb senza firma int (_Rn senza firma int, _Rotation senza firma int)

_arm_uxtb16

UXTB16

intero senza firma _arm_uxtb16 (_Rn senza firma int, _Rotation senza firma int)

_arm_uxth

UXTH

_arm_uxth senza firma int (_Rn senza firma int, _Rotation senza firma int)

_arm_pkhbt

PKHBT

_arm_pkhbt di int (_Rn int, _Rm int, _Lsl_imm unsigned int)

_arm_pkhtb

PKHTB

_arm_pkhtb di int (_Rn int, _Rm int, _Asr_imm unsigned int)

_arm_usad8

USAD8

intero senza firma _arm_usad8 (_Rn senza firma int, _Rm senza firma int)

_arm_usada8

USADA8

intero senza firma _arm_usada8 (_Rn senza firma int, _Rm senza firma int, _Ra senza firma int)

_arm_ssat

SSAT

_arm_ssat di int (_Sat_imm senza firma int, _Rn di _int, _Shift_type di _ARMINTR_SHIFT_T, _Shift_imm senza firma int)

_arm_usat

USAT

_arm_usat di int (_Sat_imm senza firma int, _Rn di _int, _Shift_type di _ARMINTR_SHIFT_T, _Shift_imm senza firma int)

_arm_ssat16

SSAT16

int _arm_ssat16 (_Sat_imm unsigned int, _Rn di _int)

_arm_usat16

USAT16

int _arm_usat16 (_Sat_imm unsigned int, _Rn di _int)

_arm_rev

Disattivare

_arm_rev senza firma int (_Rm senza firma int)

_arm_rev16

REV16

intero senza firma _arm_rev16 (_Rm senza firma int)

_arm_revsh

REVSH

_arm_revsh senza firma int (_Rm senza firma int)

_arm_smlad

SMLAD

_arm_smlad di int (_Rn int, _Rm int, _Ra int)

_arm_smladx

SMLADX

_arm_smladx di int (_Rn int, _Rm int, _Ra int)

_arm_smlsd

SMLSD

_arm_smlsd di int (_Rn int, _Rm int, _Ra int)

_arm_smlsdx

SMLSDX

_arm_smlsdx di int (_Rn int, _Rm int, _Ra int)

_arm_smmla

SMMLA

_arm_smmla di int (_Rn int, _Rm int, _Ra int)

_arm_smmlar

SMMLAR

int _arm_smmlar (_Rn int, _Rm int, _Ra int)

_arm_smmls

SMMLS

_arm_smmls di int (_Rn int, _Rm int, _Ra int)

_arm_smmlsr

SMMLSR

_arm_smmlsr di int (_Rn int, _Rm int, _Ra int)

_arm_smmul

SMMUL

_arm_smmul di int (_Rn int, _Rm int)

_arm_smmulr

SMMULR

_arm_smmulr di int (_Rn int, _Rm int)

_arm_smlald

SMLALD

__int64 _arm_smlald (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlaldx

SMLALDX

__int64 _arm_smlaldx (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlsld

SMLSLD

__int64 _arm_smlsld (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smlsldx

SMLSLDX

__int64 _arm_smlsldx (_RdHiLo __int64, _Rn int, _Rm int)

_arm_smuad

SMUAD

_arm_smuad di int (_Rn int, _Rm int)

_arm_smuadx

SMUADX

_arm_muadxs di int (_Rn int, _Rm int)

_arm_smusd

SMUSD

_arm_smusd di int (_Rn int, _Rm int)

_arm_smusdx

SMUSDX

_arm_smusdx di int (_Rn int, _Rm int)

_arm_smull

SMULL

__int64 _arm_smull (_Rn int, _Rm int)

_arm_umull

UMULL

__int64 _arm_umull senza firma (_Rn senza firma int, _Rm senza firma int)

_arm_umaal

UMAAL

__int64 senza firma _arm_umaal (_RdLo senza firma int, _RdHi senza firma int, _Rn senza firma int, _Rm senza firma int)

_arm_bfc

BFC

_arm_bfc senza firma int (_Rd senza firma int, _Lsb senza firma int, _Width senza firma int)

_arm_bfi

BFI

_arm_bfi senza firma int (_Rd senza firma int, _Rn senza firma int, _Lsb senza firma int, _Width senza firma int)

_arm_rbit

RBIT

_arm_rbit senza firma int (_Rm senza firma int)

_arm_sbfx

SBFX

_arm_sbfx di int (_Rn int, _Lsb senza firma int, _Width senza firma int)

_arm_ubfx

UBFX

_arm_ubfx senza firma int (_Rn senza firma int, _Lsb senza firma int, _Width senza firma int)

_arm_sdiv

SDIV

_arm_sdiv di int (_Rn int, _Rm int)

_arm_udiv

UDIV

_arm_udiv senza firma int (_Rn senza firma int, _Rm senza firma int)

__cps

Caratteri di base

__cps void (_Ops senza firma int, _Flags senza firma int, _Mode senza firma int)

__dmb

DMB

__dmb void (intero senza segno _Type)

Inserisce un'operazione di barriera di memoria nel flusso di istruzioni.Il parametro _Type specifica il tipo di restrizione che la barriera applicato.

Per ulteriori informazioni sui tipi di restrizioni applicabili, vedere Restrizioni della barriera di memoria.

__dsb

DSB

__dsb void (_Type unsigned int)

Inserisce un'operazione di barriera di memoria nel flusso di istruzioni.Il parametro _Type specifica il tipo di restrizione che la barriera applicato.

Per ulteriori informazioni sui tipi di restrizioni applicabili, vedere Restrizioni della barriera di memoria.

__isb

ISB

__isb void (_Type unsigned int)

Inserisce un'operazione di barriera di memoria nel flusso di istruzioni.Il parametro _Type specifica il tipo di restrizione che la barriera applicato.

Per ulteriori informazioni sui tipi di restrizioni applicabili, vedere Restrizioni della barriera di memoria.

__emit

__emit void (codice operativo senza segno __int32)

Inserisce un'istruzione specificata nel flusso di istruzioni restituito dal compilatore.

Il valore di opcode deve essere un'espressione costante che è noto in fase di compilazione.La dimensione di una parola di istruzione è 16 bit e a 16 bit più significativi di opcode vengono ignorati.

Il compilatore non fa tentativo di interpretare il contenuto di opcode e non implica uno stato della memoria o della prima che l'istruzione inserita sia eseguita.

Il compilatore presuppone che gli stati di memoria e della CPU sono rimasti invariati dopo l'istruzione immessa viene eseguita.Pertanto, le istruzioni che modificano lo stato può avere un impatto pericoloso nel normale codice generato dal compilatore.

Per questo motivo, utilizzare emit inserire solo le istruzioni che influiscono su uno stato della CPU che il compilatore non è in genere i processi, ad esempio coprocessore stato o implementare funzioni che vengono dichiarate utilizzando declspec(naked).

__hvc

HVC

__hvc senza firma int (integer senza firma,…)

__iso_volatile_load16

__int16 __iso_volatile_load16 (const __int16 volatili *)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_load32

__int32 __iso_volatile_load32 (const __int32 volatili *)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_load64

__int64 __iso_volatile_load64 (const __int64 volatili *)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_load8

__int8 __iso_volatile_load8 (const __int8 volatili *)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_store16

__iso_volatile_store16 void (__int16 volatile *, __int16)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_store32

__iso_volatile_store32 void (__int32 volatile *, __int32)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_store64

__iso_volatile_store64 void (__int64 volatile *, __int64)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__iso_volatile_store8

__iso_volatile_store8 void (__int8 volatile *, __int8)

Per ulteriori informazioni, vedere instrinsics di __iso_volatile_load/store.

__ldrexd

LDREXD

__int64 __ldrexd (const __int64 volatile *)

__prefetch

PLD

__prefetch void di __cdecl (const void *)

Fornisce un suggerimento di memoria di PLD nel sistema che la memoria in corrispondenza dell'indirizzo specificato può essere eseguito precedentemente.Alcuni sistemi possono scegliere per ottimizzare per il modello di accesso alla memoria aumentino le prestazioni di runtime.Tuttavia, dal punto di vista del linguaggio C++, la funzione non ha alcun effetto osservabile e non viene eseguita alcuna operazione.

__rdpmccntr64

__int64 senza segno __rdpmccntr64 (void)

__sev

SEV

__sev void (void)

__static_assert

__static_assert void (int, const *)

__swi

SVC

__swi senza firma int (integer senza firma,…)

__trap

BKPT

__trap int (int,…)

__wfe

WFE

__wfe void (void)

__wfi

WFI

__wfi void (void)

_AddSatInt

QADD

_AddSatInt di int (int, int)

_CopyDoubleFromInt64

doppio _CopyDoubleFromInt64 (__int64)

_CopyFloatFromInt32

float _CopyFloatFromInt32 (__int32)

_CopyInt32FromFloat

__int32 _CopyInt32FromFloat (float)

_CopyInt64FromDouble

__int64 _CopyInt64FromDouble (double)

_CountLeadingOnes

_CountLeadingOnes senza firma int (long senza firma)

_CountLeadingOnes64

intero senza firma _CountLeadingOnes64 (__int64 senza firma)

_CountLeadingSigns

_CountLeadingSigns unsigned int (long)

_CountLeadingSigns64

intero senza segno _CountLeadingSigns64 (__int64)

_CountLeadingZeros

_CountLeadingZeros senza firma int (long senza firma)

_CountLeadingZeros64

intero senza firma _CountLeadingZeros64 (__int64 senza firma)

_CountOneBits

_CountOneBits senza firma int (long senza firma)

_CountOneBits64

intero senza firma _CountOneBits64 (__int64 senza firma)

_DAddSatInt

QDADD

_DAddSatInt di int (int, int)

_DSubSatInt

QDSUB

_DSubSatInt di int (int, int)

_isunordered

int _isunordered (double, double)

_isunorderedf

_isunorderedf di int (float, float)

_MoveFromCoprocessor

MRC

_MoveFromCoprocessor senza firma int (integer senza firma int, senza firma int, senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveFromCoprocessor, _MoveFromCoprocessor2.

_MoveFromCoprocessor2

MRC2

intero senza firma _MoveFromCoprocessor2 (int senza firma int, senza firma int, senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveFromCoprocessor, _MoveFromCoprocessor2.

_MoveFromCoprocessor64

MRRC

__int64 senza firma _MoveFromCoprocessor64 (int senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveFromCoprocessor64.

_MoveToCoprocessor

MCR

_MoveToCoprocessor void (int senza firma int, senza firma int, senza firma int, senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveToCoprocessor, _MoveToCoprocessor2.

_MoveToCoprocessor2

MCR2

_MoveToCoprocessor2 void (int senza firma int, senza firma int, senza firma int, senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveToCoprocessor, _MoveToCoprocessor2.

_MoveToCoprocessor64

MCRR

_MoveToCoprocessor64 void (__int64 senza firma int, senza firma int, senza firma, senza firma int)

Legge i dati da un coprocessore di ARM tramite istruzioni di trasferimento dei dati del coprocessore.Per ulteriori informazioni, vedere _MoveToCoprocessor64.

_MulHigh

_MulHigh lungo (tempo, long)

_MulUnsignedHigh

senza firma lunghi lunghi di _MulUnsignedHigh (lungo senza firma, senza firma)

_ReadBankedReg

SIG.RA

_ReadBankedReg di int (_Reg int)

_ReadStatusReg

SIG.RA

_ReadStatusReg di int (integer)

_SubSatInt

QSUB

_SubSatInt di int (int, int)

_WriteBankedReg

MSR

_WriteBankedReg void (_Value int, _Reg int)

_WriteStatusReg

MSR

_WriteStatusReg void (int, int, int)

[NEON]

Hh875058.collapse_all(it-it,VS.110).gifRestrizioni della barriera di memoria

Le funzioni intrinseche __dmb (barriera di memoria dei dati, __dsb (barriera di sincronizzazione dei dati) e utilizzo di __isb (barriera di sincronizzazione a l) i seguenti valori predefiniti specificare la restrizione di barriera di memoria in termini di dominio e condividere tipo di accesso interessati dall'operazione.

Valore della restrizione

Descrizione

_ARM_BARRIER_SY

Il sistema completo, legge e scrive.

_ARM_BARRIER_ST

Il sistema completo, scrittura solo.

_ARM_BARRIER_ISH

Ripartibile interno, lettura e scrittura.

_ARM_BARRIER_ISHST

Ripartibile interno, scrittura solo.

_ARM_BARRIER_NSH

Non divisibile, lettura e scrittura.

_ARM_BARRIER_NSHST

Non divisibile, scrittura solo.

_ARM_BARRIER_OSH

Ripartibile esterno, lettura e scrittura.

_ARM_BARRIER_OSHST

Ripartibile esterno, scrittura solo.

Per la funzione intrinseca di __isb, l'unica restrizione attualmente valido è _ARM_BARRIER_SY; tutti gli altri valori sono riservati dall'architettura.

Hh875058.collapse_all(it-it,VS.110).gifinstrinsics di __iso_volatile_load/store

Queste funzioni intrinseche esplicitamente eseguono carica e gli archivi che non sono soggetti alle ottimizzazioni del compilatore.

__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)

Parametri

  • Location
    L'indirizzo di una posizione di memoria da leggere o scrivere su.

  • Value (intrinseci di archiviare solo)
    Il valore da scrivere nella posizione di memoria specificata.

Valore restituito (intrinseci di caricamento solo)

Il valore della posizione di memoria specificata da Location.

Note

È possibile utilizzare le funzioni intrinseche di __iso_volatile_store8/16/32/64 e di __iso_volatile_load8/16/32/64 in modo esplicito per eseguire gli accessi alla memoria non sono soggetti alle ottimizzazioni del compilatore.Il compilatore non può rimuovere, sintetizzare, o modificare l'ordine relativo di queste operazioni, ma non genera le barriere implicite di memoria hardware.Di conseguenza, l'hardware possa ancora riordinare gli accessi alla memoria osservabili tra i thread.Più precisamente, queste intrinseci sono equivalenti alle espressioni come compilate in /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;

Si noti che le funzioni intrinseche accettano puntatori volatili per adattarli alle variabili volatili.Tuttavia, non esiste alcun requisito o requisito utilizzare i puntatori volatile come argomenti; la semantica di queste operazioni è esattamente la stessa se un carattere normale e non volatile viene utilizzato.

Per ulteriori informazioni sull'argomento della riga di comando /volatile:iso, vedere /volatile (interpretazione della parole chiave volatile).

Hh875058.collapse_all(it-it,VS.110).gif_MoveFromCoprocessor, _MoveFromCoprocessor2

Queste funzioni intrinseche letti i dati da coprocessori di ARM tramite istruzioni di trasferimento dei dati del coprocessore.

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
);

Parametri

  • coproc
    Numero del coprocessore compreso tra 0 e 15.

  • opcode1
    Il codice operativo Coprocessore- specifico compreso tra 0 e 7

  • crn
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica il primo operando l'istruzione.

  • crm
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica un'origine o un operando aggiuntivo di destinazione.

  • opcode2
    Il codice operativo coprocessore- specifico aggiuntivo compreso tra 0 e 7.

Valore restituito

Il valore che viene letto dal coprocessore.

Note

I valori di tutte e cinque i parametri della funzione intrinseca devono essere espressioni costanti che è noto in fase di compilazione.

_MoveFromCoprocessor utilizza l'istruzione di MRC; utilizzare MRC2 di _MoveFromCoprocessor2.I parametri corrispondono ai campi di bit che sono codificati direttamente la parola all'istruzione.Interpretazione dei parametri è coprocessore- dipendente.Per ulteriori informazioni, vedere il manuale per il coprocessore in questione.

Hh875058.collapse_all(it-it,VS.110).gif_MoveFromCoprocessor64

Legge i dati da coprocessori di ARM tramite istruzioni di trasferimento dei dati del coprocessore.

unsigned __int64 _MoveFromCoprocessor64(
      unsigned int coproc,
      unsigned int opcode1,
      unsigned int crm,
);

Parametri

  • coproc
    Numero del coprocessore compreso tra 0 e 15.

  • opcode1
    Il codice operativo Coprocessore- specifico compreso tra 0 e 15.

  • crm
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica un'origine o un operando aggiuntivo di destinazione.

Valore viene restituito

Il valore che viene letto dal coprocessore.

Note

I valori di tutti e tre i parametri della funzione intrinseca devono essere espressioni costanti che è noto in fase di compilazione.

_MoveFromCoprocessor64 utilizza l'istruzione di MRRC.I parametri corrispondono ai campi di bit che sono codificati direttamente la parola all'istruzione.Interpretazione dei parametri è coprocessore- dipendente.Per ulteriori informazioni, vedere il manuale per il coprocessore in questione.

Hh875058.collapse_all(it-it,VS.110).gif_MoveToCoprocessor, _MoveToCoprocessor2

Queste funzioni intrinseche generati dati a coprocessori di ARM tramite istruzioni di trasferimento dei dati del coprocessore.

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
);

Parametri

  • value
    Il valore nel coprocessore.

  • coproc
    Numero del coprocessore compreso tra 0 e 15.

  • opcode1
    Il codice operativo Coprocessore- specifico compreso tra 0 e 7.

  • crn
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica il primo operando l'istruzione.

  • crm
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica un'origine o un operando aggiuntivo di destinazione.

  • opcode2
    Il codice operativo coprocessore- specifico aggiuntivo compreso tra 0 e 7.

Valore restituito

Nessuno.

Note

I valori di coproc, di opcode1, di crn, di crme i parametri di opcode2 di questa funzione intrinseca devono essere espressioni costanti che è noto in fase di compilazione.

_MoveToCoprocessor utilizza l'istruzione di MCR; utilizzare MCR2 di _MoveToCoprocessor2.I parametri corrispondono ai campi di bit che sono codificati direttamente la parola all'istruzione.Interpretazione dei parametri è coprocessore- dipendente.Per ulteriori informazioni, vedere il manuale per il coprocessore in questione.

Hh875058.collapse_all(it-it,VS.110).gif_MoveToCoprocessor64

Queste funzioni intrinseche generati dati a coprocessori di ARM tramite istruzioni di trasferimento dei dati del coprocessore.

void _MoveFromCoprocessor64(
      unsigned __int64 value,
      unsigned int coproc,
      unsigned int opcode1,
      unsigned int crm,
);

Parametri

  • coproc
    Numero del coprocessore compreso tra 0 e 15.

  • opcode1
    Il codice operativo Coprocessore- specifico compreso tra 0 e 15.

  • crm
    Numero del registro del coprocessore, compreso tra 0 e 15, che specifica un'origine o un operando aggiuntivo di destinazione.

Valore restituito

Nessuno.

Note

I valori di coproc, di opcode1e i parametri di crm di questa funzione intrinseca devono essere espressioni costanti che è noto in fase di compilazione.

_MoveFromCoprocessor64 utilizza l'istruzione di MCRR.I parametri corrispondono ai campi di bit che sono codificati direttamente la parola all'istruzione.Interpretazione dei parametri è coprocessore- dipendente.Per ulteriori informazioni, vedere il manuale per il coprocessore in questione.

Supporto del monitoraggio ARM alle funzioni intrinseche da altre architetture

Nella tabella seguente sono elencati gli intrinseci da altre architetture supportate le piattaforme di ARM.Dove il comportamento di una funzione intrinseca sul monitoraggio ARM è diverso dal relativo comportamento nelle architetture hardware, dettagli aggiuntivi sono indicati.

Function Name

Prototipo di funzione

__assume

__assume void (int)

__code_seg

__code_seg void (const *)

__debugbreak

__debugbreak void di __cdecl (void)

__fastfail

__fastfail void __declspec (noreturn) (intero senza segno)

__nop

__nop void (void)

NotaNota
Su piattaforme di ARM, questa funzione genera un'istruzione di NOP se si è implementato nell'architettura di destinazione; in caso contrario, un'istruzione alternativa non modifica lo stato del programma o la CPU è generare-, ad esempio MOV r8, r8.Questo è il punto di vista funzionale alla funzione intrinseca del __nop per le architetture hardware.Poiché un'istruzione che non ha effetto sullo stato del programma o della CPU può essere ignoratoarchitettura di destinazione come ottimizzazione, l'istruzione non utilizza i cicli della CPU.Pertanto, non utilizzare l'intrinseco di __nop per modificare il tempo di esecuzione di una sequenza di codice a meno che non sia protetto sulla CPU si comporterà.In alternativa, è possibile utilizzare l'intrinseco di __nop per allineare l'istruzione seguente a un indirizzo specifico limite di 32 bit.

__yield

__yield void (void)

NotaNota
Su piattaforme di ARM, questa funzione genera l'istruzione di RENDIMENTO, che indica che il thread esegue un'attività che può essere temporaneamente sospesa esecuzione- peresempio, a spinlock- senza influire negativamente sul programma.Ciò consente alla CPU per eseguire altre attività nei cicli di esecuzione che sarebbero altrimenti sprecati.

_AddressOfReturnAddress

void * _AddressOfReturnAddress (void)

_BitScanForward

_BitScanForward senza segno char (lungo senza firma * _Index, _Mask lungo senza firma)

_BitScanReverse

_BitScanReverse senza segno char (lungo senza firma * _Index, _Mask lungo senza firma)

il più _bittest

char senza segno più _bittest lungo (const *, long)

_bittestandcomplement

_bittestandcomplement senza segno char * (tempo, long)

_bittestandreset

_bittestandreset senza segno char * (tempo, long)

_bittestandset

_bittestandset senza segno char * (tempo, long)

_byteswap_uint64

__int64 __cdecl senza firma _byteswap_uint64 (__int64 senza firma)

_byteswap_ulong

_byteswap_ulong lungo senza firma del __cdecl (long senza firma)

_byteswap_ushort

breve _byteswap_ushort senza firma del __cdecl (brevi senza firma)

_disable

__cdecl void _disable (void)

NotaNota
Su piattaforme di ARM, questa funzione genera l'istruzione di CPSID; è disponibile solo come intrinseci.

_enable

__cdecl void _enable (void)

NotaNota
Su piattaforme di ARM, questa funzione genera l'istruzione di CPSIE; è disponibile solo come intrinseci.

_lrotl

_lrotl lungo senza firma del __cdecl (lungo senza firma, int)

_lrotr

_lrotr lungo senza firma del __cdecl (lungo senza firma, int)

più _ReadBarrier

più _ReadBarrier void (void)

più _ReadWriteBarrier

più _ReadWriteBarrier void (void)

_ReturnAddress

void * _ReturnAddress (void)

_rotl

_rotl senza firma del __cdecl di int (_Value senza firma int, _Shift int)

_rotl16

breve _rotl16 senza firma (breve _Value senza firma, _Shift senza firma di caratteri)

_rotl64

__int64 __cdecl senza firma _rotl64 (_Value senza firma __int64, _Shift int)

_rotl8

char senza segno _rotl8 (_Value senza segno char, _Shift senza segno char)

_rotr

_rotr senza firma del __cdecl di int (_Value senza firma int, _Shift int)

_rotr16

breve _rotr16 senza firma (breve _Value senza firma, _Shift senza firma di caratteri)

_rotr64

__int64 __cdecl senza firma _rotr64 (_Value senza firma __int64, _Shift int)

_rotr8

char senza segno _rotr8 (_Value senza segno char, _Shift senza segno char)

_setjmpex

_setjmpex di __cdecl di int (jmp_buf)

più _WriteBarrier

più _WriteBarrier void (void)

[NEON]

Gli intrinseci collegate

Gli intrinseci collegate sono un insieme di funzioni intrinseche utilizzate per eseguire atomico read-modificare- scrivere le operazioni.Alcune di esse sono comuni a tutte le piattaforme.Vengono elencati separatamente perché in è tantissimo loro, ma perché le relative definizioni sono principalmente ridondanti, è più facile pensare che in generale.I nomi possono essere utilizzati per derivare i comportamenti specifiche.

Nella tabella seguente viene riepilogato il supporto del MONITORAGGIO degli intrinseci collegate non - bittest.Ogni cella della tabella corrisponde al nome che viene derivata aggiungendo il nome dell'operazione nella cella a sinistra della riga e il nome del tipo nella cella in primo piano della colonna in _Interlocked.Ad esempio, la cella all'intersezione della riga di Xor e di colonna di 8 corrisponde a _InterlockedXor8 e completamente supportato.La maggior parte delle funzioni supportate offrono questi suffissi facoltativi: _acq, _rele _nf.Il suffisso di _acq indica che "acquisti" semantico e il suffisso di _rel indica una "versione" semantica.Questi suffissi sono illustrati nella documentazione IPF su MSDN._nf o "il suffisso di alcun limite" è univoco ARMARE e viene descritto nella sezione successiva.

8

16

32

64

P

Add

Nessuno

Nessuno

Full

Full

Nessuno

And

Full

Full

Full

Full

Nessuno

Metodo CompareExchange

Full

Full

Full

Full

Full

Decrement

Nessuno

Full

Full

Full

Nessuno

Exchange

Partial

Partial

Partial

Partial

Partial

ExchangeAdd

Full

Full

Full

Full

Nessuno

Increment

Nessuno

Full

Full

Full

Nessuno

Oppure

Full

Full

Full

Full

Nessuno

Xor

Full

Full

Full

Full

Nessuno

Chiave:

  • Completo: supporta normale, _acq, _rele i form di _nf.

  • Parziale: supporta normale, _acqe i form di _nf.

  • Nessuno: Non supportato

Hh875058.collapse_all(it-it,VS.110).gifsuffisso di _nf (alcun limite)

_nf o "il suffisso di alcun limite" indica che l'operazione non si comporta come un tipo di barriera di memoria.Ciò si differenzia dagli altri tre form (normale, _acqe _rel), che tutte si comportano come tipo di barriera.Un possibile utilizzo dei form di _nf a gestire un contatore di componenti aggiuntivi che viene aggiornato da più thread contemporaneamente ma il cui valore non è utilizzato in caso contrario mentre i thread eseguono.

Hh875058.collapse_all(it-it,VS.110).gifElenco degli intrinseci collegate

Function Name

Prototipo di funzione

_InterlockedAdd

_InterlockedAdd lungo (_volatile lunghi *, long)

_InterlockedAdd64

__int64 _InterlockedAdd64 (volatile __int64 *, __int64)

_InterlockedAdd64_acq

__int64 _InterlockedAdd64_acq (volatile __int64 *, __int64)

_InterlockedAdd64_nf

__int64 _InterlockedAdd64_nf (volatile __int64 *, __int64)

_InterlockedAdd64_rel

__int64 _InterlockedAdd64_rel (volatile __int64 *, __int64)

_InterlockedAdd_acq

_InterlockedAdd_acq lungo (tempo volatile *, long)

_InterlockedAdd_nf

_InterlockedAdd_nf lungo (tempo volatile *, long)

_InterlockedAdd_rel

_InterlockedAdd_rel lungo (tempo volatile *, long)

_InterlockedAnd

_InterlockedAnd lungo (tempo volatile *, long)

_InterlockedAnd16

breve _InterlockedAnd16 (breve volatile *, breve)

_InterlockedAnd16_acq

breve _InterlockedAnd16_acq (breve volatile *, breve)

_InterlockedAnd16_nf

breve _InterlockedAnd16_nf (breve volatile *, breve)

_InterlockedAnd16_rel

breve _InterlockedAnd16_rel (breve volatile *, breve)

_InterlockedAnd64

__int64 _InterlockedAnd64 (volatile __int64 *, __int64)

_InterlockedAnd64_acq

__int64 _InterlockedAnd64_acq (volatile __int64 *, __int64)

_InterlockedAnd64_nf

__int64 _InterlockedAnd64_nf (volatile __int64 *, __int64)

_InterlockedAnd64_rel

__int64 _InterlockedAnd64_rel (volatile __int64 *, __int64)

_InterlockedAnd8

char _InterlockedAnd8 (volatile char *, char)

_InterlockedAnd8_acq

char _InterlockedAnd8_acq (volatile char *, char)

_InterlockedAnd8_nf

char _InterlockedAnd8_nf (volatile char *, char)

_InterlockedAnd8_rel

char _InterlockedAnd8_rel (volatile char *, char)

_InterlockedAnd_acq

_InterlockedAnd_acq lungo (tempo volatile *, long)

_InterlockedAnd_nf

_InterlockedAnd_nf lungo (tempo volatile *, long)

_InterlockedAnd_rel

_InterlockedAnd_rel lungo (tempo volatile *, long)

_InterlockedCompareExchange

_InterlockedCompareExchange lungo di __cdecl (tempo volatile *, lungo, long)

_InterlockedCompareExchange16

breve _InterlockedCompareExchange16 (breve volatile *, breve, breve)

_InterlockedCompareExchange16_acq

breve _InterlockedCompareExchange16_acq (breve volatile *, breve, breve)

_InterlockedCompareExchange16_nf

breve _InterlockedCompareExchange16_nf (breve volatile *, breve, breve)

_InterlockedCompareExchange16_rel

breve _InterlockedCompareExchange16_rel (breve volatile *, breve, breve)

_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 (volatile char *, char, char)

_InterlockedCompareExchange8_acq

char _InterlockedCompareExchange8_acq (volatile char *, char, char)

_InterlockedCompareExchange8_nf

char _InterlockedCompareExchange8_nf (volatile char *, char, char)

_InterlockedCompareExchange8_rel

char _InterlockedCompareExchange8_rel (volatile char *, 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

_InterlockedCompareExchange_acq lungo (tempo volatile *, lungo, long)

_InterlockedCompareExchange_nf

_InterlockedCompareExchange_nf lungo (tempo volatile *, lungo, long)

_InterlockedCompareExchange_rel

_InterlockedCompareExchange_rel lungo (tempo volatile *, lungo, long)

_InterlockedDecrement

_InterlockedDecrement lungo di __cdecl (tempo volatile *)

_InterlockedDecrement16

breve _InterlockedDecrement16 (breve volatile *)

_InterlockedDecrement16_acq

breve _InterlockedDecrement16_acq (breve volatile *)

_InterlockedDecrement16_nf

breve _InterlockedDecrement16_nf (breve volatile *)

_InterlockedDecrement16_rel

breve _InterlockedDecrement16_rel (breve volatile *)

_InterlockedDecrement64

__int64 _InterlockedDecrement64 (volatile __int64 *)

_InterlockedDecrement64_acq

__int64 _InterlockedDecrement64_acq (volatile __int64 *)

_InterlockedDecrement64_nf

__int64 _InterlockedDecrement64_nf (volatile __int64 *)

_InterlockedDecrement64_rel

__int64 _InterlockedDecrement64_rel (volatile __int64 *)

_InterlockedDecrement_acq

_InterlockedDecrement_acq lungo (tempo volatile *)

_InterlockedDecrement_nf

_InterlockedDecrement_nf lungo (tempo volatile *)

_InterlockedDecrement_rel

_InterlockedDecrement_rel lungo (tempo volatile *)

_InterlockedExchange

_InterlockedExchange lungo di __cdecl (tempo volatile * _Target, lunghi)

_InterlockedExchange16

breve _InterlockedExchange16 (breve volatile * _Target, short)

_InterlockedExchange16_acq

breve _InterlockedExchange16_acq (breve volatile * _Target, short)

_InterlockedExchange16_nf

breve _InterlockedExchange16_nf (breve 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)

_InterlockedExchange8

char _InterlockedExchange8 (volatile char * _Target, char)

_InterlockedExchange8_acq

char _InterlockedExchange8_acq (volatile char * _Target, char)

_InterlockedExchange8_nf

char _InterlockedExchange8_nf (volatile char * _Target, char)

_InterlockedExchangeAdd

_InterlockedExchangeAdd lungo di __cdecl (tempo volatile *, long)

_InterlockedExchangeAdd16

breve _InterlockedExchangeAdd16 (breve volatile *, breve)

_InterlockedExchangeAdd16_acq

breve _InterlockedExchangeAdd16_acq (breve volatile *, breve)

_InterlockedExchangeAdd16_nf

breve _InterlockedExchangeAdd16_nf (breve volatile *, breve)

_InterlockedExchangeAdd16_rel

breve _InterlockedExchangeAdd16_rel (breve volatile *, breve)

_InterlockedExchangeAdd64

__int64 _InterlockedExchangeAdd64 (volatile __int64 *, __int64)

_InterlockedExchangeAdd64_acq

__int64 _InterlockedExchangeAdd64_acq (volatile __int64 *, __int64)

_InterlockedExchangeAdd64_nf

__int64 _InterlockedExchangeAdd64_nf (volatile __int64 *, __int64)

_InterlockedExchangeAdd64_rel

__int64 _InterlockedExchangeAdd64_rel (volatile __int64 *, __int64)

_InterlockedExchangeAdd8

char _InterlockedExchangeAdd8 (volatile char *, char)

_InterlockedExchangeAdd8_acq

char _InterlockedExchangeAdd8_acq (volatile char *, char)

_InterlockedExchangeAdd8_nf

char _InterlockedExchangeAdd8_nf (volatile char *, char)

_InterlockedExchangeAdd8_rel

char _InterlockedExchangeAdd8_rel (volatile char *, char)

_InterlockedExchangeAdd_acq

_InterlockedExchangeAdd_acq lungo (tempo volatile *, long)

_InterlockedExchangeAdd_nf

_InterlockedExchangeAdd_nf lungo (tempo volatile *, long)

_InterlockedExchangeAdd_rel

_InterlockedExchangeAdd_rel lungo (tempo 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 *)

_InterlockedExchange_acq

_InterlockedExchange_acq lungo (tempo volatile * _Target, lunghi)

_InterlockedExchange_nf

_InterlockedExchange_nf lungo (tempo volatile * _Target, lunghi)

_InterlockedIncrement

_InterlockedIncrement lungo di __cdecl (tempo volatile *)

_InterlockedIncrement16

breve _InterlockedIncrement16 (breve volatile *)

_InterlockedIncrement16_acq

breve _InterlockedIncrement16_acq (breve volatile *)

_InterlockedIncrement16_nf

breve _InterlockedIncrement16_nf (breve volatile *)

_InterlockedIncrement16_rel

breve _InterlockedIncrement16_rel (breve volatile *)

_InterlockedIncrement64

__int64 _InterlockedIncrement64 (volatile __int64 *)

_InterlockedIncrement64_acq

__int64 _InterlockedIncrement64_acq (volatile __int64 *)

_InterlockedIncrement64_nf

__int64 _InterlockedIncrement64_nf (volatile __int64 *)

_InterlockedIncrement64_rel

__int64 _InterlockedIncrement64_rel (volatile __int64 *)

_InterlockedIncrement_acq

_InterlockedIncrement_acq lungo (tempo volatile *)

_InterlockedIncrement_nf

_InterlockedIncrement_nf lungo (tempo volatile *)

_InterlockedIncrement_rel

_InterlockedIncrement_rel lungo (tempo volatile *)

_InterlockedOr

_InterlockedOr lungo (tempo volatile *, long)

_InterlockedOr16

breve _InterlockedOr16 (breve volatile *, breve)

_InterlockedOr16_acq

breve _InterlockedOr16_acq (breve volatile *, breve)

_InterlockedOr16_nf

breve _InterlockedOr16_nf (breve volatile *, breve)

_InterlockedOr16_rel

breve _InterlockedOr16_rel (breve volatile *, breve)

_InterlockedOr64

__int64 _InterlockedOr64 (volatile __int64 *, __int64)

_InterlockedOr64_acq

__int64 _InterlockedOr64_acq (volatile __int64 *, __int64)

_InterlockedOr64_nf

__int64 _InterlockedOr64_nf (volatile __int64 *, __int64)

_InterlockedOr64_rel

__int64 _InterlockedOr64_rel (volatile __int64 *, __int64)

_InterlockedOr8

char _InterlockedOr8 (volatile char *, char)

_InterlockedOr8_acq

char _InterlockedOr8_acq (volatile char *, char)

_InterlockedOr8_nf

char _InterlockedOr8_nf (volatile char *, char)

_InterlockedOr8_rel

char _InterlockedOr8_rel (volatile char *, char)

_InterlockedOr_acq

_InterlockedOr_acq lungo (tempo volatile *, long)

_InterlockedOr_nf

_InterlockedOr_nf lungo (tempo volatile *, long)

_InterlockedOr_rel

_InterlockedOr_rel lungo (tempo volatile *, long)

_InterlockedXor

_InterlockedXor lungo (tempo volatile *, long)

_InterlockedXor16

breve _InterlockedXor16 (breve volatile *, breve)

_InterlockedXor16_acq

breve _InterlockedXor16_acq (breve volatile *, breve)

_InterlockedXor16_nf

breve _InterlockedXor16_nf (breve volatile *, breve)

_InterlockedXor16_rel

breve _InterlockedXor16_rel (breve volatile *, breve)

_InterlockedXor64

__int64 _InterlockedXor64 (volatile __int64 *, __int64)

_InterlockedXor64_acq

__int64 _InterlockedXor64_acq (volatile __int64 *, __int64)

_InterlockedXor64_nf

__int64 _InterlockedXor64_nf (volatile __int64 *, __int64)

_InterlockedXor64_rel

__int64 _InterlockedXor64_rel (volatile __int64 *, __int64)

_InterlockedXor8

char _InterlockedXor8 (volatile char *, char)

_InterlockedXor8_acq

char _InterlockedXor8_acq (volatile char *, char)

_InterlockedXor8_nf

char _InterlockedXor8_nf (volatile char *, char)

_InterlockedXor8_rel

char _InterlockedXor8_rel (volatile char *, char)

_InterlockedXor_acq

_InterlockedXor_acq lungo (tempo volatile *, long)

_InterlockedXor_nf

_InterlockedXor_nf lungo (tempo volatile *, long)

_InterlockedXor_rel

_InterlockedXor_rel lungo (tempo volatile *, long)

[NEON]

Hh875058.collapse_all(it-it,VS.110).gifGli intrinseci più _interlockedbittest

Gli intrinseci più semplice bittest collegate sono comuni a tutte le piattaforme.Il monitoraggio ARM aggiunge _acq, _rele varianti di _nf, che modificano la semantica di barriera di un'operazione, come descritto in suffisso di _nf (alcun limite) più indietro in questo articolo.

Function Name

Prototipo di funzione

_interlockedbittestandreset

_interlockedbittestandreset senza segno char (tempo volatile *, long)

_interlockedbittestandreset_acq

_interlockedbittestandreset_acq senza segno char (tempo volatile *, long)

_interlockedbittestandreset_nf

_interlockedbittestandreset_nf senza segno char (tempo volatile *, long)

_interlockedbittestandreset_rel

_interlockedbittestandreset_rel senza segno char (tempo volatile *, long)

_interlockedbittestandset

_interlockedbittestandset senza segno char (tempo volatile *, long)

_interlockedbittestandset_acq

_interlockedbittestandset_acq senza segno char (tempo volatile *, long)

_interlockedbittestandset_nf

_interlockedbittestandset_nf senza segno char (tempo volatile *, long)

_interlockedbittestandset_rel

_interlockedbittestandset_rel senza segno char (tempo volatile *, long)

[NEON]

Vedere anche

Riferimenti

Funzioni intrinseche del compilatore

Altre risorse

Riferimento dell'assembly del monitoraggio ARM

Riferimenti al linguaggio C++