Intrínsecos do ARM
O compilador do Visual C++ torna os seguintes intrinsics disponíveis na arquitetura de BRAÇO.Para obter mais informações sobre o BRAÇO, consulte Manual de referência da arquitetura de BRAÇO e Guia de ferramentas de assembler de BRAÇO no site de Infocenter de BRAÇO.
NÉON
As extensões de conjunto de instrução DE NÉON vetorial para o BRAÇO fornecem a única declaração vários recursos de (SIMD) de dados parecidas com aquelas no MMX e o vetor do SSE conjuntos de declaração que são comuns a processadores de arquitetura x e x64.
Os intrinsics DE NÉON são suportados, de maneira esperada no arquivo de cabeçalho arm_neon.h.O suporte do compilador do Visual C++ para os intrinsics DE NÉON lembra a do compilador de BRAÇO, que está documentado em apêndice G ARME o toolchain do compilador, referência de compilador versão 4,1 sobre ao site de Infocenter de BRAÇO.
A principal diferença entre o compilador do Visual C++ e o compilador de BRAÇO é que o compilador do Visual C++ adiciona variantes de _ex das instruções de carregar e de armazenamento do vetor de vldX e de vstX .Variantes de _ex têm um parâmetro adicional que especifica o alinhamento do argumento do ponteiro mas são idênticas ao contrário das suas contrapartes não de_ex .
Listar Braço- específico de Intrinsics
Nome da Função |
Instrução |
Protótipo de função |
---|---|---|
_arm_smlal |
SMLAL |
__int64 _arm_smlal (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_umlal |
UMLAL |
unsigned __int64 _arm_umlal (_RdHiLo unsigned __int64, _Rn de unsigned int, _Rm de unsigned int) |
_arm_clz |
CLZ |
_arm_clz de unsigned int (_Rm de unsigned int) |
_arm_qadd |
QADD |
_arm_qadd de int (_Rm de _Rn de int, int) |
_arm_qdadd |
QDADD |
_arm_qdadd de int (_Rm de _Rn de int, int) |
_arm_qdsub |
QDSUB |
_arm_qdsub de int (_Rm de _Rn de int, int) |
_arm_qsub |
QSUB |
_arm_qsub de int (_Rm de _Rn de int, int) |
_arm_smlabb |
SMLABB |
_arm_smlabb de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlabt |
SMLABT |
_arm_smlabt de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlatb |
SMLATB |
_arm_smlatb de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlatt |
SMLATT |
_arm_smlatt de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlalbb |
SMLALBB |
_arm_smlalbb __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlalbt |
SMLALBT |
_arm_smlalbt __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlaltb |
SMLALTB |
_arm_smlaltb __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlaltt |
SMLALTT |
_arm_smlaltt __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlawb |
SMLAWB |
_arm_smlawb de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlawt |
SMLAWT |
_arm_smlawt de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smulbb |
SMULBB |
_arm_smulbb de int (_Rn de _Rm de int, int) |
_arm_smulbt |
SMULBT |
_arm_smulbt de int (_Rn de _Rm de int, int) |
_arm_smultb |
SMULTB |
_arm_smultb de int (_Rn de _Rm de int, int) |
_arm_smultt |
SMULTT |
_arm_smultt de int (_Rn de _Rm de int, int) |
_arm_smulwb |
SMULWB |
_arm_smulwb de int (_Rn de _Rm de int, int) |
_arm_smulwt |
SMULWT |
_arm_smulwt de int (_Rn de _Rm de int, int) |
_arm_sadd16 |
SADD16 |
int _arm_sadd16 (_Rn de _Rm de int, int) |
_arm_sadd8 |
SADD8 |
int _arm_sadd8 (_Rn de _Rm de int, int) |
_arm_sasx |
SASX |
_arm_sasx de int (_Rn de _Rm de int, int) |
_arm_ssax |
SSAX |
_arm_ssax de int (_Rn de _Rm de int, int) |
_arm_ssub16 |
SSUB16 |
int _arm_ssub16 (_Rn de _Rm de int, int) |
_arm_ssub8 |
SSUB8 |
int _arm_ssub8 (_Rn de _Rm de int, int) |
_arm_shadd16 |
SHADD16 |
int _arm_shadd16 (_Rn de _Rm de int, int) |
_arm_shadd8 |
SHADD8 |
int _arm_shadd8 (_Rn de _Rm de int, int) |
_arm_shasx |
SHASX |
_arm_shasx de int (_Rn de _Rm de int, int) |
_arm_shsax |
SHSAX |
_arm_shsax de int (_Rn de _Rm de int, int) |
_arm_shsub16 |
SHSUB16 |
int _arm_shsub16 (_Rn de _Rm de int, int) |
_arm_shsub8 |
SHSUB8 |
int _arm_shsub8 (_Rn de _Rm de int, int) |
_arm_qadd16 |
QADD16 |
int _arm_qadd16 (_Rn de _Rm de int, int) |
_arm_qadd8 |
QADD8 |
int _arm_qadd8 (_Rn de _Rm de int, int) |
_arm_qasx |
QASX |
_arm_qasx de int (_Rn de _Rm de int, int) |
_arm_qsax |
QSAX |
_arm_qsax de int (_Rn de _Rm de int, int) |
_arm_qsub16 |
QSUB16 |
int _arm_qsub16 (_Rn de _Rm de int, int) |
_arm_qsub8 |
QSUB8 |
int _arm_qsub8 (_Rn de _Rm de int, int) |
_arm_uadd16 |
UADD16 |
unsigned int _arm_uadd16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uadd8 |
UADD8 |
unsigned int _arm_uadd8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uasx |
UASX |
_arm_uasx de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_usax |
USAX |
_arm_usax de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_usub16 |
USUB16 |
unsigned int _arm_usub16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_usub8 |
USUB8 |
unsigned int _arm_usub8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhadd16 |
UHADD16 |
unsigned int _arm_uhadd16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhadd8 |
UHADD8 |
unsigned int _arm_uhadd8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhasx |
UHASX |
_arm_uhasx de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhsax |
UHSAX |
_arm_uhsax de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhsub16 |
UHSUB16 |
unsigned int _arm_uhsub16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uhsub8 |
UHSUB8 |
unsigned int _arm_uhsub8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqadd16 |
UQADD16 |
unsigned int _arm_uqadd16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqadd8 |
UQADD8 |
unsigned int _arm_uqadd8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqasx |
UQASX |
_arm_uqasx de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqsax |
UQSAX |
_arm_uqsax de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqsub16 |
UQSUB16 |
unsigned int _arm_uqsub16 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_uqsub8 |
UQSUB8 |
unsigned int _arm_uqsub8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_sxtab |
SXTAB |
_arm_sxtab de int (_Rn de int, int, _Rm de _Rotation de unsigned int) |
_arm_sxtab16 |
SXTAB16 |
int _arm_sxtab16 (_Rn de _Rm de int, int, _Rotation de unsigned int) |
_arm_sxtah |
SXTAH |
_arm_sxtah de int (_Rn de _Rm de int, int, _Rotation de unsigned int) |
_arm_uxtab |
UXTAB |
_arm_uxtab de unsigned int (_Rn sem sinal de _Rm unsigned int, int, de _Rotation de unsigned int) |
_arm_uxtab16 |
UXTAB16 |
unsigned int _arm_uxta16b (_Rn sem sinal de _Rm unsigned int, int, de _Rotation de unsigned int) |
_arm_uxtah |
UXTAH |
_arm_uxtah de unsigned int (_Rn sem sinal de _Rm unsigned int, int, de _Rotation de unsigned int) |
_arm_sxtb |
SXTB |
_arm_sxtb de int, int (_Rn de _Rotation de unsigned int) |
_arm_sxtb16 |
SXTB16 |
int _arm_sxtb16 (_Rn de _Rotation unsigned int, int de) |
_arm_sxth |
SXTH |
_arm_sxth de int, int (_Rn de _Rotation de unsigned int) |
_arm_uxtb |
UXTB |
_arm_uxtb de unsigned int (_Rn de unsigned int, _Rotation de unsigned int) |
_arm_uxtb16 |
UXTB16 |
unsigned int _arm_uxtb16 (_Rn de unsigned int, _Rotation de unsigned int) |
_arm_uxth |
UXTH |
_arm_uxth de unsigned int (_Rn de unsigned int, _Rotation de unsigned int) |
_arm_pkhbt |
PKHBT |
_arm_pkhbt de int (_Rn de _Rm de int, int, _Lsl_imm de unsigned int) |
_arm_pkhtb |
PKHTB |
_arm_pkhtb de int (_Rn de _Rm de int, int, _Asr_imm de unsigned int) |
_arm_usad8 |
USAD8 |
unsigned int _arm_usad8 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_usada8 |
USADA8 |
unsigned int _arm_usada8 (_Rn sem sinal de _Rm unsigned int, int, de _Ra de unsigned int) |
_arm_ssat |
SSAT |
_arm_ssat de int (_Sat_imm de unsigned int, _Rn de _int, _Shift_type de _ARMINTR_SHIFT_T, _Shift_imm de unsigned int) |
_arm_usat |
USAT |
_arm_usat de int (_Sat_imm de unsigned int, _Rn de _int, _Shift_type de _ARMINTR_SHIFT_T, _Shift_imm de unsigned int) |
_arm_ssat16 |
SSAT16 |
int _arm_ssat16 (_Sat_imm de unsigned int, _Rn de _int) |
_arm_usat16 |
USAT16 |
int _arm_usat16 (_Sat_imm de unsigned int, _Rn de _int) |
_arm_rev |
REV |
_arm_rev de unsigned int (_Rm de unsigned int) |
_arm_rev16 |
REV16 |
unsigned int _arm_rev16 (_Rm de unsigned int) |
_arm_revsh |
REVSH |
_arm_revsh de unsigned int (_Rm de unsigned int) |
_arm_smlad |
SMLAD |
_arm_smlad de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smladx |
SMLADX |
_arm_smladx de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlsd |
SMLSD |
_arm_smlsd de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smlsdx |
SMLSDX |
_arm_smlsdx de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smmla |
SMMLA |
_arm_smmla de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smmlar |
SMMLAR |
int _arm_smmlar (_Rn de _Rm de int, int, int) de _Ra |
_arm_smmls |
SMMLS |
_arm_smmls de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smmlsr |
SMMLSR |
_arm_smmlsr de int (_Rn de _Rm de int, int, int) de _Ra |
_arm_smmul |
SMMUL |
_arm_smmul de int (_Rn de _Rm de int, int) |
_arm_smmulr |
SMMULR |
_arm_smmulr de int (_Rn de _Rm de int, int) |
_arm_smlald |
SMLALD |
_arm_smlald __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlaldx |
SMLALDX |
_arm_smlaldx __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlsld |
SMLSLD |
_arm_smlsld __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smlsldx |
SMLSLDX |
_arm_smlsldx __int64 (_RdHiLo __int64, _Rn de _Rm de int, int) |
_arm_smuad |
SMUAD |
_arm_smuad de int (_Rn de _Rm de int, int) |
_arm_smuadx |
SMUADX |
_arm_muadxs de int (_Rn de _Rm de int, int) |
_arm_smusd |
SMUSD |
_arm_smusd de int (_Rn de _Rm de int, int) |
_arm_smusdx |
SMUSDX |
_arm_smusdx de int (_Rn de _Rm de int, int) |
_arm_smull |
SMULL |
_arm_smull __int64 (_Rn de _Rm de int, int) |
_arm_umull |
UMULL |
_arm_umull unsigned __int64 (_Rn de unsigned int, _Rm de unsigned int) |
_arm_umaal |
UMAAL |
unsigned __int64 _arm_umaal (_RdLo sem sinal de _RdHi unsigned int, int, de _Rn de unsigned int, _Rm de unsigned int) |
_arm_bfc |
BFC |
_arm_bfc de unsigned int (_Rd sem sinal de _Lsb unsigned int, int, de _Width de unsigned int) |
_arm_bfi |
BFI |
_arm_bfi de unsigned int (_Rd sem sinal de _Rn unsigned int, int, de _Lsb de unsigned int, _Width de unsigned int) |
_arm_rbit |
RBIT |
_arm_rbit de unsigned int (_Rm de unsigned int) |
_arm_sbfx |
SBFX |
_arm_sbfx de int (_Rn de _Lsb unsigned int, int, de _Width de unsigned int) |
_arm_ubfx |
UBFX |
_arm_ubfx de unsigned int (_Rn sem sinal de _Lsb unsigned int, int, de _Width de unsigned int) |
_arm_sdiv |
SDIV |
_arm_sdiv de int (_Rn de _Rm de int, int) |
_arm_udiv |
UDIV |
_arm_udiv de unsigned int (_Rn de unsigned int, _Rm de unsigned int) |
__cps |
CPS |
__cps vagos (_Ops sem sinal de _Flags unsigned int, int, de _Mode de unsigned int) |
__dmb |
DMB |
__dmb vago (unsigned int _Type) Insere uma operação de barreira de memória no fluxo da declaração.O parâmetro _Type especifica o tipo de restrição que a barreira aplicado. Para obter mais informações sobre tipos de restrições que podem ser aplicadas, consulte Limitações de barreira de memória. |
__dsb |
DSB |
__dsb vago (_Type de unsigned int) Insere uma operação de barreira de memória no fluxo da declaração.O parâmetro _Type especifica o tipo de restrição que a barreira aplicado. Para obter mais informações sobre tipos de restrições que podem ser aplicadas, consulte Limitações de barreira de memória. |
__isb |
ISB |
__isb vago (_Type de unsigned int) Insere uma operação de barreira de memória no fluxo da declaração.O parâmetro _Type especifica o tipo de restrição que a barreira aplicado. Para obter mais informações sobre tipos de restrições que podem ser aplicadas, consulte Limitações de barreira de memória. |
__emit |
__emit vago (opcode __int32 não assinados) Insere uma instrução especificada no fluxo das instruções que é saída pelo compilador. O valor de opcode deve ser uma expressão constante que é conhecido em tempo de compilação.O tamanho de uma palavra de declaração é 16 bits e os 16 bits significativos de opcode são ignorados. O compilador não faz nenhuma tentativa de interpretar o conteúdo de opcode e não garante uma CPU ou um estado de memória antes da instrução inserida é executada. O compilador pressupõe que o CPU e os estados de memória são inalteradas após a instrução inserida é executada.Como consequência, as instruções que alteram o estado podem ter um impacto prejudicial no código normal que é gerado pelo compilador. Por esse motivo, use emit inserir somente as instruções que afetam um estado da CPU que o compilador não faz normalmente de processo por exemplo, co-processador - ou implementar as funções que são declaradas usando declspec(naked). |
|
__hvc |
HVC |
__hvc de unsigned int (unsigned int,…) |
__iso_volatile_load16 |
__int16 __iso_volatile_load16 const (*) __int16 temporários Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_load32 |
__int32 __iso_volatile_load32 const (*) __int32 temporários Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_load64 |
__int64 __iso_volatile_load64 __int64 voláteis const (*) Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_load8 |
__int8 __iso_volatile_load8 const (*) __int8 temporários Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_store16 |
__iso_volatile_store16 vago (* __int16 temporário, __int16) Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_store32 |
__iso_volatile_store32 vago (* __int32 temporário, __int32) Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_store64 |
__int64 temporário __iso_volatile_store64 vago (*), __int64 Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__iso_volatile_store8 |
__iso_volatile_store8 vago (* __int8 temporário, __int8) Para obter mais informações, consulte instrinsics de __iso_volatile_load/store. |
|
__ldrexd |
LDREXD |
__ldrexd __int64 __int64 temporário const (*) |
__prefetch |
PLD |
__prefetch vago de __cdecl (*) const vago Fornece uma dica de PLD memória do sistema que a memória em ou próximo de endereço especificado pode ser acessada em breve.Alguns sistemas podem optar para otimizar para aquele padrão de acesso de memória para desempenho em tempo de execução de aumento.No entanto, o ponto de vista de linguagem C++, a função não tem efeito perceptível, e pode não fazer nada. |
__rdpmccntr64 |
unsigned __int64 __rdpmccntr64 (vácuo) |
|
__sev |
SEV |
() vácuo __sev vago |
__static_assert |
__static_assert vago (int, char const *) |
|
__swi |
SVC |
__swi de unsigned int (unsigned int,…) |
__trap |
BKPT |
__trap de int, int (…) |
__wfe |
WFE |
() vácuo __wfe vago |
__wfi |
WFI |
() vácuo __wfi vago |
_AddSatInt |
QADD |
_AddSatInt de int (int, int) |
_CopyDoubleFromInt64 |
_CopyDoubleFromInt64 duplas () __int64 |
|
_CopyFloatFromInt32 |
float _CopyFloatFromInt32 (__int32) |
|
_CopyInt32FromFloat |
__int32 _CopyInt32FromFloat (flutuante) |
|
_CopyInt64FromDouble |
__int64 _CopyInt64FromDouble double () |
|
_CountLeadingOnes |
_CountLeadingOnes unsigned int (de execução demorada não assinados) |
|
_CountLeadingOnes64 |
unsigned int _CountLeadingOnes64) (unsigned __int64 |
|
_CountLeadingSigns |
_CountLeadingSigns unsigned int de longo () |
|
_CountLeadingSigns64 |
unsigned int () _CountLeadingSigns64 __int64 |
|
_CountLeadingZeros |
_CountLeadingZeros unsigned int (de execução demorada não assinados) |
|
_CountLeadingZeros64 |
unsigned int _CountLeadingZeros64) (unsigned __int64 |
|
_CountOneBits |
_CountOneBits unsigned int (de execução demorada não assinados) |
|
_CountOneBits64 |
unsigned int _CountOneBits64) (unsigned __int64 |
|
_DAddSatInt |
QDADD |
_DAddSatInt de int (int, int) |
_DSubSatInt |
QDSUB |
_DSubSatInt de int (int, int) |
_isunordered |
int _isunordered (double, double) |
|
_isunorderedf |
_isunorderedf de int (flutuante, flutuante) |
|
_MoveFromCoprocessor |
MRC |
_MoveFromCoprocessor de unsigned int (unsigned int, int sem sinal, unsigned int, int sem sinal, unsigned int) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor2 |
MRC2 |
unsigned int _MoveFromCoprocessor2 (unsigned int, int sem sinal, unsigned int, int sem sinal, unsigned int) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor64 |
MRRC |
unsigned __int64 _MoveFromCoprocessor64 (unsigned int, int sem sinal, unsigned int) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveFromCoprocessor64. |
_MoveToCoprocessor |
MCR |
_MoveToCoprocessor vago (unsigned int, int sem sinal, unsigned int, int sem sinal, unsigned int, int não assinados) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor2 |
MCR2 |
_MoveToCoprocessor2 vago (unsigned int, int sem sinal, unsigned int, int sem sinal, unsigned int, int não assinados) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor64 |
MCRR |
_MoveToCoprocessor64 vago (unsigned __int64, unsigned int, int sem sinal, unsigned int) Lê dados de um co-processador de BRAÇO usando as instruções de transferência de dados de co-processador.Para obter mais informações, consulte: _MoveToCoprocessor64. |
_MulHigh |
_MulHigh longo (tempo, long) |
|
_MulUnsignedHigh |
longos longos sem sinal de _MulUnsignedHigh (unsigned long, não assinados) |
|
_ReadBankedReg |
SRA. |
_ReadBankedReg de int (_Reg de int) |
_ReadStatusReg |
SRA. |
_ReadStatusReg de int (int) |
_SubSatInt |
QSUB |
_SubSatInt de int (int, int) |
_WriteBankedReg |
MSR |
_WriteBankedReg vago (_Value de _Reg de int, int) |
_WriteStatusReg |
MSR |
_WriteStatusReg vago (int, int, int) |
[NÉON]
Limitações de barreira de memória
As funções intrínsecas __dmb (barreira de memória dos dados), __dsb (barreira de sincronização de dados), e uso de __isb barreira (declaração) de sincronização dos seguintes valores predefinidos especificar o limite de barreira de memória em termos de domínio e de tipo compartilhamento de acesso que são afetados pela operação.
Valor de restrição |
Descrição |
---|---|
_ARM_BARRIER_SY |
O sistema, lê e grava completos. |
_ARM_BARRIER_ST |
Sistema completo, gravará somente. |
_ARM_BARRIER_ISH |
Compartilhável interno, lê e grava. |
_ARM_BARRIER_ISHST |
Compartilháveis interno, gravará somente. |
_ARM_BARRIER_NSH |
Não compartilhável, lê e grava. |
_ARM_BARRIER_NSHST |
Não compartilhável, gravará somente. |
_ARM_BARRIER_OSH |
Compartilhável externo, lê e grava. |
_ARM_BARRIER_OSHST |
Compartilháveis externo, gravará somente. |
Para o tipo intrínseco de __isb , a única restrição que está atualmente é válido; _ARM_BARRIER_SY todos os outros valores são reservadas pela arquitetura.
instrinsics de __iso_volatile_load/store
Essas funções intrínsecas executam explicitamente e carrega os armazenamentos que não estão sujeitos às otimizações de compilador.
__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)
Parâmetros
Location
O endereço de um local da memória de leitura ou gravação a.Value (intrinsics de armazenamento somente)
O valor para gravar o local da memória especificado.
Valor de retorno (intrinsics de carregamento somente)
O valor do local da memória que é especificado por Location.
Comentários
Você pode usar os intrinsics de __iso_volatile_load8/16/32/64 e de __iso_volatile_store8/16/32/64 para executar explicitamente os acessos de memória que não estão sujeitos às otimizações de compilador.O compilador não pode remover, synthetize, ou alterar a ordem relativo dessas operações, mas não produz barreiras implícitas de memória de hardware.Como consequência, o hardware ainda pode reorganizar os acessos de memória perceptíveis em vários segmentos.Mais precisamente, esses intrinsics são equivalentes a seguir expressões como compilados em /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;
Observe que os intrinsics têm ponteiros temporários para acomodar variáveis temporários.No entanto, não há necessidade ou recomendação usar ponteiros voláteis como argumentos; a semântica dessas operações é exatamente a mesma se um tipo comum, permanente é usado.
Para obter mais informações sobre o argumento de linha de comando de /volatile:iso , consulte /volatile (Interpretação da palavra-chave volatile).
_MoveFromCoprocessor, _MoveFromCoprocessor2
Essas funções intrínsecas ler dados de co-processadores de BRAÇO usando as instruções de transferência de dados de co-processador.
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
);
Parâmetros
coproc
Número de co-processador no intervalo 0 a 15.opcode1
Opcode Co-processador- específico no intervalo 0 a 7crn
Número de registro de co-processador, no intervalo 0 a 15, que especifica o primeiro operando à declaração.crm
Número de registro de co-processador, no intervalo 0 a 15, que especifica uma fonte ou um operando adicional de destino.opcode2
Opcode co-processador- específico adicional no intervalo 0 a 7.
Retornar valor
O valor que é lido de co-processador.
Comentários
Os valores de todos os cinco parâmetros do tipo intrínseco devem ser expressões constantes que são conhecidos em tempo de compilação.
_MoveFromCoprocessor usa a declaração de MRC; usa MRC2 de _MoveFromCoprocessor2 .Os parâmetros correspondentes aos bitfields que são codificados diretamente nas palavras de declaração.A interpretação de parâmetros é dependente co-processador-.Para obter mais informações, consulte o manual para o co-processador em questão.
_MoveFromCoprocessor64
Ler dados de co-processadores de BRAÇO usando as instruções de transferência de dados de co-processador.
unsigned __int64 _MoveFromCoprocessor64(
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parâmetros
coproc
Número de co-processador no intervalo 0 a 15.opcode1
Opcode Co-processador- específico no intervalo 0 a 15.crm
Número de registro de co-processador, no intervalo 0 a 15, que especifica uma fonte ou um operando adicional de destino.
Valor returns
O valor que é lido de co-processador.
Comentários
Os valores de todos os três parâmetros do tipo intrínseco devem ser expressões constantes que são conhecidos em tempo de compilação.
_MoveFromCoprocessor64 usa a declaração de MRRC.Os parâmetros correspondentes aos bitfields que são codificados diretamente nas palavras de declaração.A interpretação de parâmetros é dependente co-processador-.Para obter mais informações, consulte o manual para o co-processador em questão.
_MoveToCoprocessor, _MoveToCoprocessor2
Essas funções intrínsecas gravar dados para co-processadores de BRAÇO usando as instruções de transferência de dados de co-processador.
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
);
Parâmetros
value
O valor a ser gravado no co-processador.coproc
Número de co-processador no intervalo 0 a 15.opcode1
Opcode Co-processador- específico no intervalo 0 a 7.crn
Número de registro de co-processador, no intervalo 0 a 15, que especifica o primeiro operando à declaração.crm
Número de registro de co-processador, no intervalo 0 a 15, que especifica uma fonte ou um operando adicional de destino.opcode2
Opcode co-processador- específico adicional no intervalo 0 a 7.
Retornar valor
Nenhum.
Comentários
Os valores de coproc, de opcode1, de crn, de crm, e de parâmetros de opcode2 deste tipo intrínseco devem ser expressões constantes que são conhecidos em tempo de compilação.
_MoveToCoprocessor usa a declaração de MCR; usa MCR2 de _MoveToCoprocessor2 .Os parâmetros correspondentes aos bitfields que são codificados diretamente nas palavras de declaração.A interpretação de parâmetros é dependente co-processador-.Para obter mais informações, consulte o manual para o co-processador em questão.
_MoveToCoprocessor64
Essas funções intrínsecas gravar dados para co-processadores de BRAÇO usando as instruções de transferência de dados de co-processador.
void _MoveFromCoprocessor64(
unsigned __int64 value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parâmetros
coproc
Número de co-processador no intervalo 0 a 15.opcode1
Opcode Co-processador- específico no intervalo 0 a 15.crm
Número de registro de co-processador, no intervalo 0 a 15, que especifica uma fonte ou um operando adicional de destino.
Retornar valor
Nenhum.
Comentários
Os valores de coproc, de opcode1, e de parâmetros de crm deste tipo intrínseco devem ser expressões constantes que são conhecidos em tempo de compilação.
_MoveFromCoprocessor64 usa a declaração de MCRR.Os parâmetros correspondentes aos bitfields que são codificados diretamente nas palavras de declaração.A interpretação de parâmetros é dependente co-processador-.Para obter mais informações, consulte o manual para o co-processador em questão.
Suporte de BRAÇO para Intrinsics de outras arquiteturas
A tabela a seguir lista intrinsics de outras arquiteturas que são suportadas em plataformas de BRAÇO.Onde o comportamento de um tipo intrínseco no BRAÇO difere do comportamento em outras arquiteturas de hardware, detalhes adicionais são observados.
Nome da Função |
Protótipo de função |
---|---|
__assume |
(int) __assume vago |
__code_seg |
__code_seg vago (char const *) |
__debugbreak |
__debugbreak vago de __cdecl (vácuo) |
__fastfail |
__fastfail de vácuo de __declspec () noreturn (unsigned int) |
__nop |
() vácuo __nop vago
Observação
Em plataformas de BRAÇO, essa função gera uma instrução de NOP se ele é implementado na arquitetura de destino; caso contrário, uma instrução alternativo que não modifique o estado do programa ou o CPU é gerado- por exemplo, MOV r8, r8.Isso é funcional equivalente ao tipo intrínseco de __nop para outras arquiteturas de hardware.Porque uma declaração que não tem efeito sobre o estado do programa ou de CPU pode ser ignorada pela arquitetura de destino como uma otimização, a instrução não necessariamente consome ciclos de CPU.Como consequência, não use o tipo intrínseco de __nop para manipular o tempo de execução de uma sequência de código a menos que você tenha certeza sobre como o CPU irá se comportar.Em vez disso, você pode usar o tipo intrínseco de __nop para alinhar a declaração a seguir para um endereço de 32 bits específico do limite.
|
__yield |
() vácuo __yield vago
Observação
Em plataformas de BRAÇO, essa função gera a declaração de RENDIMENTO, que indica que o segmento está executando uma tarefa que pode temporariamente ser suspendida execução (por exemplo, a spinlock- sem negativamente a afectação do programa.Isso permite que o CPU para realizar outras tarefas durante verificará de execução que poderiam desperdiçados caso contrário.
|
_AddressOfReturnAddress |
vácuo _AddressOfReturnAddress vácuo (*) |
_BitScanForward |
_BitScanForward sem sinal char (unsigned long * _Index, _Mask unsigned long) |
_BitScanReverse |
_BitScanReverse sem sinal char (unsigned long * _Index, _Mask unsigned long) |
mais _bittest |
char sem sinal mais longo _bittest const (*), longo |
_bittestandcomplement |
_bittestandcomplement char unsigned long (*), longo |
_bittestandreset |
_bittestandreset char unsigned long (*), longo |
_bittestandset |
_bittestandset char unsigned long (*), longo |
_byteswap_uint64 |
unsigned __int64 __cdecl _byteswap_uint64) (unsigned __int64 |
_byteswap_ulong |
_byteswap_ulong unsigned long de __cdecl longos (sem sinal) |
_byteswap_ushort |
_byteswap_ushort unsigned short de __cdecl (unsigned short) |
_disable |
__cdecl vago _disable (vácuo)
Observação
Em plataformas de BRAÇO, essa função gera a declaração de CPSID; só está disponível como um tipo intrínseco.
|
_enable |
__cdecl vago _enable (vácuo)
Observação
Em plataformas de BRAÇO, essa função gera a declaração de CPSIE; só está disponível como um tipo intrínseco.
|
_lrotl |
_lrotl unsigned long de __cdecl (unsigned long, int) |
_lrotr |
_lrotr unsigned long de __cdecl (unsigned long, int) |
mais _ReadBarrier |
mais vácuo () _ReadBarrier vago |
mais _ReadWriteBarrier |
mais vácuo () _ReadWriteBarrier vago |
_ReturnAddress |
vácuo _ReturnAddress vácuo (*) |
_rotl |
_rotl sem sinal de __cdecl de int (_Value de unsigned int, int) de _Shift |
_rotl16 |
_rotl16 unsigned short (_Value unsigned short, _Shift sem sinal char) |
_rotl64 |
unsigned __int64 __cdecl _rotl64 (_Value unsigned __int64, _Shift de int) |
_rotl8 |
char sem sinal _rotl8 (_Value sem sinal char, _Shift sem sinal char) |
_rotr |
_rotr sem sinal de __cdecl de int (_Value de unsigned int, int) de _Shift |
_rotr16 |
_rotr16 unsigned short (_Value unsigned short, _Shift sem sinal char) |
_rotr64 |
unsigned __int64 __cdecl _rotr64 (_Value unsigned __int64, _Shift de int) |
_rotr8 |
char sem sinal _rotr8 (_Value sem sinal char, _Shift sem sinal char) |
_setjmpex |
_setjmpex de __cdecl de int (jmp_buf) |
mais _WriteBarrier |
mais vácuo () _WriteBarrier vago |
[NÉON]
Intrinsics com barreira
Os intrinsics com barreira são um conjunto de intrinsics que são usados para executar operações ler-alterar- atômicas de escrita.Alguns de eles são comuns a todas as plataformas.São listados aqui separadamente porque há um grande número de eles, mas porque suas definições são basicamente redundantes, é mais fácil pensar em geral sobre eles.Seus nomes podem ser usados para derivar os comportamentos exatos.
A tabela a seguir resume o suporte de BRAÇO de intrinsics bloqueados os mais non-bittest.Cada célula na tabela corresponde a um nome que é derivado acrescentando o nome da operação na célula mais à esquerda da linha e o nome do tipo de para a célula superior da coluna _Interlocked.Por exemplo, a célula na interseção de linha de Xor e coluna de 8 corresponde a _InterlockedXor8 e é totalmente suoprtado.A maioria das funções oferecem suporte para esses sufixos opcionais: _acq, _rel, e _nf.O sufixo de _acq indica que obtém “e” semântico o sufixo de _rel indica uma “versão” semântica.Esses sufixos são documentados na documentação de IPF no MSDN._nf ou do sufixo “nenhuma circunda” é exclusivo ARMAR-SE e são discutidos na próxima seção.
8 |
16 |
32 |
64 |
P |
|
---|---|---|---|---|---|
Adicionar |
Nenhum |
Nenhum |
Total |
Total |
Nenhum |
And |
Total |
Total |
Total |
Total |
Nenhum |
CompareExchange |
Total |
Total |
Total |
Total |
Total |
Redução |
Nenhum |
Total |
Total |
Total |
Nenhum |
Exchange |
Parcial |
Parcial |
Parcial |
Parcial |
Parcial |
ExchangeAdd |
Total |
Total |
Total |
Total |
Nenhum |
Incremento |
Nenhum |
Total |
Total |
Total |
Nenhum |
Ou |
Total |
Total |
Total |
Total |
Nenhum |
Xor |
Total |
Total |
Total |
Total |
Nenhum |
Chave:
Completamente: suporte claramente, _acq, _rel, e formulários de _nf .
Parcial: suporte claramente, _acq, e formulários de _nf .
Nenhum: Não suportado
sufixo de _nf (nenhuma circunda)
_nf ou do sufixo “nenhuma circunda” indicam que a operação não se comporta como qualquer tipo de barreira de memória.Isso está em contraste com outros três formas (lisos, _acq, e _rel), que todos se comportem como qualquer tipo de barreira.Um uso possível de formulários de _nf é manter um contador de estatísticas que estão atualizados por vários segmentos ao mesmo tempo mas o cujo valor não é usado de forma quando vários segmentos executa.
Lista de Intrinsics com barreira
Nome da Função |
Protótipo de função |
---|---|
_InterlockedAdd |
_InterlockedAdd longo _volatile longos (*), longo |
_InterlockedAdd64 |
__int64 _InterlockedAdd64 volátil __int64 (*), __int64 |
_InterlockedAdd64_acq |
__int64 _InterlockedAdd64_acq volátil __int64 (*), __int64 |
_InterlockedAdd64_nf |
__int64 _InterlockedAdd64_nf volátil __int64 (*), __int64 |
_InterlockedAdd64_rel |
__int64 _InterlockedAdd64_rel volátil __int64 (*), __int64 |
_InterlockedAdd_acq |
_InterlockedAdd_acq longo tempo volátil (*), longo |
_InterlockedAdd_nf |
_InterlockedAdd_nf longo tempo volátil (*), longo |
_InterlockedAdd_rel |
_InterlockedAdd_rel longo tempo volátil (*), longo |
_InterlockedAnd |
_InterlockedAnd longo tempo volátil (*), longo |
_InterlockedAnd16 |
_InterlockedAnd16 abreviada (volátil tempo curto, *) |
_InterlockedAnd16_acq |
_InterlockedAnd16_acq abreviada (volátil tempo curto, *) |
_InterlockedAnd16_nf |
_InterlockedAnd16_nf abreviada (volátil tempo curto, *) |
_InterlockedAnd16_rel |
_InterlockedAnd16_rel abreviada (volátil tempo curto, *) |
_InterlockedAnd64 |
__int64 _InterlockedAnd64 volátil __int64 (*), __int64 |
_InterlockedAnd64_acq |
__int64 _InterlockedAnd64_acq volátil __int64 (*), __int64 |
_InterlockedAnd64_nf |
__int64 _InterlockedAnd64_nf volátil __int64 (*), __int64 |
_InterlockedAnd64_rel |
__int64 _InterlockedAnd64_rel volátil __int64 (*), __int64 |
_InterlockedAnd8 |
char _InterlockedAnd8 volátil char (*), char |
_InterlockedAnd8_acq |
char _InterlockedAnd8_acq volátil char (*), char |
_InterlockedAnd8_nf |
char _InterlockedAnd8_nf volátil char (*), char |
_InterlockedAnd8_rel |
char _InterlockedAnd8_rel volátil char (*), char |
_InterlockedAnd_acq |
_InterlockedAnd_acq longo tempo volátil (*), longo |
_InterlockedAnd_nf |
_InterlockedAnd_nf longo tempo volátil (*), longo |
_InterlockedAnd_rel |
_InterlockedAnd_rel longo tempo volátil (*), longo |
_InterlockedCompareExchange |
_InterlockedCompareExchange longo de __cdecl (long volátil *, longo, longo) |
_InterlockedCompareExchange16 |
_InterlockedCompareExchange16 abreviada (volátil curto *, curto, curto) |
_InterlockedCompareExchange16_acq |
_InterlockedCompareExchange16_acq abreviada (volátil curto *, curto, curto) |
_InterlockedCompareExchange16_nf |
_InterlockedCompareExchange16_nf abreviada (volátil curto *, curto, curto) |
_InterlockedCompareExchange16_rel |
_InterlockedCompareExchange16_rel abreviada (volátil curto *, curto, curto) |
_InterlockedCompareExchange64 |
__int64 _InterlockedCompareExchange64 __int64 volátil (*), __int64, __int64 |
_InterlockedCompareExchange64_acq |
__int64 _InterlockedCompareExchange64_acq __int64 volátil (*), __int64, __int64 |
_InterlockedCompareExchange64_nf |
__int64 _InterlockedCompareExchange64_nf __int64 volátil (*), __int64, __int64 |
_InterlockedCompareExchange64_rel |
__int64 _InterlockedCompareExchange64_rel __int64 volátil (*), __int64, __int64 |
_InterlockedCompareExchange8 |
char _InterlockedCompareExchange8 volátil char (*), char, char |
_InterlockedCompareExchange8_acq |
char _InterlockedCompareExchange8_acq volátil char (*), char, char |
_InterlockedCompareExchange8_nf |
char _InterlockedCompareExchange8_nf volátil char (*), char, char |
_InterlockedCompareExchange8_rel |
char _InterlockedCompareExchange8_rel volátil char (*), char, char |
_InterlockedCompareExchangePointer |
vácuo * _InterlockedCompareExchangePointer vácuo (* volátil *, vácuo *, vácuo *) |
_InterlockedCompareExchangePointer_acq |
vácuo * _InterlockedCompareExchangePointer_acq (* vácuo volátil *, vácuo *, vácuo *) |
_InterlockedCompareExchangePointer_nf |
vácuo * _InterlockedCompareExchangePointer_nf vácuo (* volátil *, vácuo *, vácuo *) |
_InterlockedCompareExchangePointer_rel |
vácuo * _InterlockedCompareExchangePointer_rel (* vácuo volátil *, vácuo *, vácuo *) |
_InterlockedCompareExchange_acq |
_InterlockedCompareExchange_acq longo (long volátil *, longo, longo) |
_InterlockedCompareExchange_nf |
_InterlockedCompareExchange_nf longo (long volátil *, longo, longo) |
_InterlockedCompareExchange_rel |
_InterlockedCompareExchange_rel longo (long volátil *, longo, longo) |
_InterlockedDecrement |
_InterlockedDecrement longo de __cdecl (long volátil *) |
_InterlockedDecrement16 |
_InterlockedDecrement16 abreviada (volátil curto *) |
_InterlockedDecrement16_acq |
_InterlockedDecrement16_acq abreviada (volátil curto *) |
_InterlockedDecrement16_nf |
_InterlockedDecrement16_nf abreviada (volátil curto *) |
_InterlockedDecrement16_rel |
_InterlockedDecrement16_rel abreviada (volátil curto *) |
_InterlockedDecrement64 |
__int64 _InterlockedDecrement64 (*) volátil __int64 |
_InterlockedDecrement64_acq |
__int64 _InterlockedDecrement64_acq (*) volátil __int64 |
_InterlockedDecrement64_nf |
__int64 _InterlockedDecrement64_nf (*) volátil __int64 |
_InterlockedDecrement64_rel |
__int64 _InterlockedDecrement64_rel (*) volátil __int64 |
_InterlockedDecrement_acq |
_InterlockedDecrement_acq longo tempo volátil (*) |
_InterlockedDecrement_nf |
_InterlockedDecrement_nf longo tempo volátil (*) |
_InterlockedDecrement_rel |
_InterlockedDecrement_rel longo tempo volátil (*) |
_InterlockedExchange |
_InterlockedExchange longo de __cdecl (long volátil * _Target, longos) |
_InterlockedExchange16 |
_InterlockedExchange16 abreviada (volátil curto * _Target, curtas) |
_InterlockedExchange16_acq |
_InterlockedExchange16_acq abreviada (volátil curto * _Target, curtas) |
_InterlockedExchange16_nf |
_InterlockedExchange16_nf abreviada (volátil curto * _Target, curtas) |
_InterlockedExchange64 |
__int64 _InterlockedExchange64 __int64 volátil (*), _Target __int64 |
_InterlockedExchange64_acq |
__int64 _InterlockedExchange64_acq __int64 volátil (*), _Target __int64 |
_InterlockedExchange64_nf |
__int64 _InterlockedExchange64_nf __int64 volátil (*), _Target __int64 |
_InterlockedExchange8 |
char _InterlockedExchange8 volátil char (*), _Target char |
_InterlockedExchange8_acq |
char _InterlockedExchange8_acq volátil char (*), _Target char |
_InterlockedExchange8_nf |
char _InterlockedExchange8_nf volátil char (*), _Target char |
_InterlockedExchangeAdd |
_InterlockedExchangeAdd o longo do tempo __cdecl (*), o longo volátil |
_InterlockedExchangeAdd16 |
_InterlockedExchangeAdd16 abreviada (volátil tempo curto, *) |
_InterlockedExchangeAdd16_acq |
_InterlockedExchangeAdd16_acq abreviada (volátil tempo curto, *) |
_InterlockedExchangeAdd16_nf |
_InterlockedExchangeAdd16_nf abreviada (volátil tempo curto, *) |
_InterlockedExchangeAdd16_rel |
_InterlockedExchangeAdd16_rel abreviada (volátil tempo curto, *) |
_InterlockedExchangeAdd64 |
__int64 _InterlockedExchangeAdd64 volátil __int64 (*), __int64 |
_InterlockedExchangeAdd64_acq |
__int64 _InterlockedExchangeAdd64_acq volátil __int64 (*), __int64 |
_InterlockedExchangeAdd64_nf |
__int64 _InterlockedExchangeAdd64_nf volátil __int64 (*), __int64 |
_InterlockedExchangeAdd64_rel |
__int64 _InterlockedExchangeAdd64_rel volátil __int64 (*), __int64 |
_InterlockedExchangeAdd8 |
char _InterlockedExchangeAdd8 volátil char (*), char |
_InterlockedExchangeAdd8_acq |
char _InterlockedExchangeAdd8_acq volátil char (*), char |
_InterlockedExchangeAdd8_nf |
char _InterlockedExchangeAdd8_nf volátil char (*), char |
_InterlockedExchangeAdd8_rel |
char _InterlockedExchangeAdd8_rel volátil char (*), char |
_InterlockedExchangeAdd_acq |
_InterlockedExchangeAdd_acq longo tempo volátil (*), longo |
_InterlockedExchangeAdd_nf |
_InterlockedExchangeAdd_nf longo tempo volátil (*), longo |
_InterlockedExchangeAdd_rel |
_InterlockedExchangeAdd_rel longo tempo volátil (*), longo |
_InterlockedExchangePointer |
vácuo * _InterlockedExchangePointer (* vácuo volátil * _Target, vácuo *) |
_InterlockedExchangePointer_acq |
vácuo * _InterlockedExchangePointer_acq (* vácuo volátil * _Target, vácuo *) |
_InterlockedExchangePointer_nf |
vácuo * _InterlockedExchangePointer_nf (* vácuo volátil * _Target, vácuo *) |
_InterlockedExchange_acq |
_InterlockedExchange_acq longo (long volátil * _Target, longos) |
_InterlockedExchange_nf |
_InterlockedExchange_nf longo (long volátil * _Target, longos) |
_InterlockedIncrement |
_InterlockedIncrement longo de __cdecl (long volátil *) |
_InterlockedIncrement16 |
_InterlockedIncrement16 abreviada (volátil curto *) |
_InterlockedIncrement16_acq |
_InterlockedIncrement16_acq abreviada (volátil curto *) |
_InterlockedIncrement16_nf |
_InterlockedIncrement16_nf abreviada (volátil curto *) |
_InterlockedIncrement16_rel |
_InterlockedIncrement16_rel abreviada (volátil curto *) |
_InterlockedIncrement64 |
__int64 _InterlockedIncrement64 (*) volátil __int64 |
_InterlockedIncrement64_acq |
__int64 _InterlockedIncrement64_acq (*) volátil __int64 |
_InterlockedIncrement64_nf |
__int64 _InterlockedIncrement64_nf (*) volátil __int64 |
_InterlockedIncrement64_rel |
__int64 _InterlockedIncrement64_rel (*) volátil __int64 |
_InterlockedIncrement_acq |
_InterlockedIncrement_acq longo tempo volátil (*) |
_InterlockedIncrement_nf |
_InterlockedIncrement_nf longo tempo volátil (*) |
_InterlockedIncrement_rel |
_InterlockedIncrement_rel longo tempo volátil (*) |
_InterlockedOr |
_InterlockedOr longo tempo volátil (*), longo |
_InterlockedOr16 |
_InterlockedOr16 abreviada (volátil tempo curto, *) |
_InterlockedOr16_acq |
_InterlockedOr16_acq abreviada (volátil tempo curto, *) |
_InterlockedOr16_nf |
_InterlockedOr16_nf abreviada (volátil tempo curto, *) |
_InterlockedOr16_rel |
_InterlockedOr16_rel abreviada (volátil tempo curto, *) |
_InterlockedOr64 |
__int64 _InterlockedOr64 volátil __int64 (*), __int64 |
_InterlockedOr64_acq |
__int64 _InterlockedOr64_acq volátil __int64 (*), __int64 |
_InterlockedOr64_nf |
__int64 _InterlockedOr64_nf volátil __int64 (*), __int64 |
_InterlockedOr64_rel |
__int64 _InterlockedOr64_rel volátil __int64 (*), __int64 |
_InterlockedOr8 |
char _InterlockedOr8 volátil char (*), char |
_InterlockedOr8_acq |
char _InterlockedOr8_acq volátil char (*), char |
_InterlockedOr8_nf |
char _InterlockedOr8_nf volátil char (*), char |
_InterlockedOr8_rel |
char _InterlockedOr8_rel volátil char (*), char |
_InterlockedOr_acq |
_InterlockedOr_acq longo tempo volátil (*), longo |
_InterlockedOr_nf |
_InterlockedOr_nf longo tempo volátil (*), longo |
_InterlockedOr_rel |
_InterlockedOr_rel longo tempo volátil (*), longo |
_InterlockedXor |
_InterlockedXor longo tempo volátil (*), longo |
_InterlockedXor16 |
_InterlockedXor16 abreviada (volátil tempo curto, *) |
_InterlockedXor16_acq |
_InterlockedXor16_acq abreviada (volátil tempo curto, *) |
_InterlockedXor16_nf |
_InterlockedXor16_nf abreviada (volátil tempo curto, *) |
_InterlockedXor16_rel |
_InterlockedXor16_rel abreviada (volátil tempo curto, *) |
_InterlockedXor64 |
__int64 _InterlockedXor64 volátil __int64 (*), __int64 |
_InterlockedXor64_acq |
__int64 _InterlockedXor64_acq volátil __int64 (*), __int64 |
_InterlockedXor64_nf |
__int64 _InterlockedXor64_nf volátil __int64 (*), __int64 |
_InterlockedXor64_rel |
__int64 _InterlockedXor64_rel volátil __int64 (*), __int64 |
_InterlockedXor8 |
char _InterlockedXor8 volátil char (*), char |
_InterlockedXor8_acq |
char _InterlockedXor8_acq volátil char (*), char |
_InterlockedXor8_nf |
char _InterlockedXor8_nf volátil char (*), char |
_InterlockedXor8_rel |
char _InterlockedXor8_rel volátil char (*), char |
_InterlockedXor_acq |
_InterlockedXor_acq longo tempo volátil (*), longo |
_InterlockedXor_nf |
_InterlockedXor_nf longo tempo volátil (*), longo |
_InterlockedXor_rel |
_InterlockedXor_rel longo tempo volátil (*), longo |
[NÉON]
Os Intrinsics os mais _interlockedbittest
Os intrinsics os mais bittest bloqueados planície são comuns a todas as plataformas.O BRAÇO adiciona _acq, _rel, e variantes de _nf , que modificam apenas a semântica de barreira de uma operação, como descrito em sufixo de _nf (nenhuma circunda) anteriormente neste artigo.
Nome da Função |
Protótipo de função |
---|---|
_interlockedbittestandreset |
_interlockedbittestandreset char (unsigned long volátil *, longo) |
_interlockedbittestandreset_acq |
_interlockedbittestandreset_acq char (unsigned long volátil *, longo) |
_interlockedbittestandreset_nf |
_interlockedbittestandreset_nf char (unsigned long volátil *, longo) |
_interlockedbittestandreset_rel |
_interlockedbittestandreset_rel char (unsigned long volátil *, longo) |
_interlockedbittestandset |
_interlockedbittestandset char (unsigned long volátil *, longo) |
_interlockedbittestandset_acq |
_interlockedbittestandset_acq char (unsigned long volátil *, longo) |
_interlockedbittestandset_nf |
_interlockedbittestandset_nf char (unsigned long volátil *, longo) |
_interlockedbittestandset_rel |
_interlockedbittestandset_rel char (unsigned long volátil *, longo) |
[NÉON]