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]
Restrizioni 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.
instrinsics 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).
_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 7crn
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.
_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.
_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.
_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)
Nota
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)
Nota
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)
Nota
Su piattaforme di ARM, questa funzione genera l'istruzione di CPSID; è disponibile solo come intrinseci.
|
_enable |
__cdecl void _enable (void)
Nota
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
suffisso 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.
Elenco 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]
Gli 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