Intrinsik ARM
Pengkompilasi Microsoft C++ (MSVC) membuat intrinsik berikut tersedia pada arsitektur ARM. Untuk informasi selengkapnya tentang ARM, lihat bagian Alat Pengembangan Arsitektur dan Perangkat Lunak dari situs web Dokumentasi Pengembang ARM.
NEON
Ekstensi set instruksi vektor NEON untuk ARM menyediakan kemampuan Single Instruction Multiple Data (SIMD) yang menyerupai yang ada di set instruksi vektor MMX dan SSE yang umum untuk prosesor arsitektur x86 dan x64.
Intrinsik NEON didukung, seperti yang disediakan dalam file arm_neon.h
header . Dukungan MSVC untuk intrinsik NEON menyerupai pengompilasi ARM, yang didokumentasikan dalam Lampiran G dari toolchain Compiler ARM, Referensi Kompilator Versi 4.1 di situs web ARM Infocenter.
Perbedaan utama antara MSVC dan pengkompilasi ARM adalah bahwa MSVC menambahkan _ex
varian vldX
beban vektor dan vstX
instruksi penyimpanan. _ex
Varian mengambil parameter tambahan yang menentukan perataan argumen pointer tetapi identik dengan non-rekan_ex
mereka.
Daftar Intrinsik khusus ARM
Nama Fungsi | Instruksi | Prototipe Fungsi |
---|---|---|
_arm_smlal | SMLAL | __int64 _arm_smlal(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_umlal | UMLAL | __int64 _arm_umlal yang tidak ditandatangani(__int64 _RdHiLo tidak ditandatangani, _Rn int yang tidak ditandatangani, _Rm) |
_arm_clz | CLZ | _arm_clz int yang tidak ditandatangani(_Rm int yang tidak ditandatangani) |
_arm_qadd | QADD | int _arm_qadd(int _Rm, int _Rn) |
_arm_qdadd | QDADD | int _arm_qdadd(int _Rm, int _Rn) |
_arm_qdsub | QDSUB | int _arm_qdsub(int _Rm, int _Rn) |
_arm_qsub | QSUB | int _arm_qsub(int _Rm, int _Rn) |
_arm_smlabb | SMLABB | int _arm_smlabb(int _Rn, int _Rm, int _Ra) |
_arm_smlabt | SMLABT | int _arm_smlabt(int _Rn, int _Rm, int _Ra) |
_arm_smlatb | SMLATB | int _arm_smlatb(int _Rn, int _Rm, int _Ra) |
_arm_smlatt | SMLATT | int _arm_smlatt(int _Rn, int _Rm, int _Ra) |
_arm_smlalbb | SMLALBB | __int64 _arm_smlalbb(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlalbt | SMLALBT | __int64 _arm_smlalbt(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlaltb | SMLALTB | __int64 _arm_smlaltb(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlaltt | SMLALTT | __int64 _arm_smlaltt(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlawb | SMLAWB | int _arm_smlawb(int _Rn, int _Rm, int _Ra) |
_arm_smlawt | SMLAWT | int _arm_smlawt(int _Rn, int _Rm, int _Ra) |
_arm_smulbb | SMULBB | int _arm_smulbb(int _Rn, int _Rm) |
_arm_smulbt | SMULBT | int _arm_smulbt(int _Rn, int _Rm) |
_arm_smultb | SMULTB | int _arm_smultb(int _Rn, int _Rm) |
_arm_smultt | SMULTT | int _arm_smultt(int _Rn, int _Rm) |
_arm_smulwb | SMULWB | int _arm_smulwb(int _Rn, int _Rm) |
_arm_smulwt | SMULWT | int _arm_smulwt(int _Rn, int _Rm) |
_arm_sadd16 | SADD16 | int _arm_sadd16(int _Rn, int _Rm) |
_arm_sadd8 | SADD8 | int _arm_sadd8(int _Rn, int _Rm) |
_arm_sasx | SASX | int _arm_sasx(int _Rn, int _Rm) |
_arm_ssax | SSAX | int _arm_ssax(int _Rn, int _Rm) |
_arm_ssub16 | SSUB16 | int _arm_ssub16(int _Rn, int _Rm) |
_arm_ssub8 | SSUB8 | int _arm_ssub8(int _Rn, int _Rm) |
_arm_shadd16 | SHADD16 | int _arm_shadd16(int _Rn, int _Rm) |
_arm_shadd8 | SHADD8 | int _arm_shadd8(int _Rn, int _Rm) |
_arm_shasx | SHASX | int _arm_shasx(int _Rn, int _Rm) |
_arm_shsax | SHSAX | int _arm_shsax(int _Rn, int _Rm) |
_arm_shsub16 | SHSUB16 | int _arm_shsub16(int _Rn, int _Rm) |
_arm_shsub8 | SHSUB8 | int _arm_shsub8(int _Rn, int _Rm) |
_arm_qadd16 | QADD16 | int _arm_qadd16(int _Rn, int _Rm) |
_arm_qadd8 | QADD8 | int _arm_qadd8(int _Rn, int _Rm) |
_arm_qasx | QASX | int _arm_qasx(int _Rn, int _Rm) |
_arm_qsax | QSAX | int _arm_qsax(int _Rn, int _Rm) |
_arm_qsub16 | QSUB16 | int _arm_qsub16(int _Rn, int _Rm) |
_arm_qsub8 | QSUB8 | int _arm_qsub8(int _Rn, int _Rm) |
_arm_uadd16 | UADD16 | _arm_uadd16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uadd8 | UADD8 | _arm_uadd8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uasx | UASX | _arm_uasx int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_usax | USAX | _arm_usax int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_usub16 | USUB16 | _arm_usub16 int tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_usub8 | USUB8 | _arm_usub8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhadd16 | UHADD16 | _arm_uhadd16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhadd8 | UHADD8 | _arm_uhadd8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhasx | UHASX | _arm_uhasx int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhsax | UHSAX | _arm_uhsax int tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhsub16 | UHSUB16 | _arm_uhsub16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uhsub8 | UHSUB8 | _arm_uhsub8 int tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqadd16 | UQADD16 | _arm_uqadd16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqadd8 | UQADD8 | _arm_uqadd8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqasx | UQASX | _arm_uqasx int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqsax | UQSAX | _arm_uqsax int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqsub16 | UQSUB16 | _arm_uqsub16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_uqsub8 | UQSUB8 | _arm_uqsub8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_sxtab | SXTAB | int _arm_sxtab(int _Rn, int _Rm, _Rotation int unsigned) |
_arm_sxtab16 | SXTAB16 | int _arm_sxtab16(int _Rn, int _Rm, _Rotation int yang tidak ditandatangani) |
_arm_sxtah | SXTAH | int _arm_sxtah(int _Rn, int _Rm, _Rotation int unsigned) |
_arm_uxtab | UXTAB | _arm_uxtab int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani, _Rotation) |
_arm_uxtab16 | UXTAB16 | _arm_uxta16b int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani, _Rotation) |
_arm_uxtah | UXTAH | _arm_uxtah int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani, _Rotation) |
_arm_sxtb | SXTB | int _arm_sxtb(_Rn int, _Rotation int yang tidak ditandatangani) |
_arm_sxtb16 | SXTB16 | _arm_sxtb16 int(_Rn int, _Rotation int tidak ditandatangani) |
_arm_sxth | SXTH | _arm_sxth int(_Rn int, _Rotation int yang tidak ditandatangani) |
_arm_uxtb | UXTB | _arm_uxtb int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rotation int yang tidak ditandatangani) |
_arm_uxtb16 | UXTB16 | _arm_uxtb16 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rotation int yang tidak ditandatangani) |
_arm_uxth | UXTH | _arm_uxth int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rotation int yang tidak ditandatangani) |
_arm_pkhbt | PKHBT | int _arm_pkhbt(int _Rn, int _Rm, _Lsl_imm int unsigned) |
_arm_pkhtb | PKHTB | int _arm_pkhtb(int _Rn, int _Rm, _Asr_imm int yang tidak ditandatangani) |
_arm_usad8 | USAD8 | _arm_usad8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_usada8 | USADA8 | _arm_usada8 int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani, _Ra) |
_arm_ssat | SSAT | int _arm_ssat(_Sat_imm int, _int _Rn, _ARMINTR_SHIFT_T _Shift_type, _Shift_imm int yang tidak ditandatangani) |
_arm_usat | USAT | int _arm_usat(_Sat_imm int, _int _Rn, _ARMINTR_SHIFT_T _Shift_type, _Shift_imm int yang tidak ditandatangani) |
_arm_ssat16 | SSAT16 | _arm_ssat16 int(_Sat_imm int yang tidak ditandatangani, _int _Rn) |
_arm_usat16 | USAT16 | int _arm_usat16(_Sat_imm int yang tidak ditandatangani, _int _Rn) |
_arm_rev | REV | _arm_rev int yang tidak ditandatangani(_Rm int yang tidak ditandatangani) |
_arm_rev16 | REV16 | _arm_rev16 int yang tidak ditandatangani(_Rm int yang tidak ditandatangani) |
_arm_revsh | REVSH | _arm_revsh int yang tidak ditandatangani(_Rm int yang tidak ditandatangani) |
_arm_smlad | SMLAD | int _arm_smlad(int _Rn, int _Rm, int _Ra) |
_arm_smladx | SMLADX | int _arm_smladx(int _Rn, int _Rm, int _Ra) |
_arm_smlsd | SMLSD | int _arm_smlsd(int _Rn, int _Rm, int _Ra) |
_arm_smlsdx | SMLSDX | int _arm_smlsdx(int _Rn, int _Rm, int _Ra) |
_arm_smmla | SMMLA | int _arm_smmla(int _Rn, int _Rm, int _Ra) |
_arm_smmlar | SMMLAR | int _arm_smmlar(int _Rn, int _Rm, int _Ra) |
_arm_smmls | SMMLS | int _arm_smmls(int _Rn, int _Rm, int _Ra) |
_arm_smmlsr | SMMLSR | int _arm_smmlsr(int _Rn, int _Rm, int _Ra) |
_arm_smmul | SMMUL | int _arm_smmul(int _Rn, int _Rm) |
_arm_smmulr | SMMULR | int _arm_smmulr(int _Rn, int _Rm) |
_arm_smlald | SMLALD | __int64 _arm_smlald(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlaldx | SMLALDX | __int64 _arm_smlaldx(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlsld | SMLSLD | __int64 _arm_smlsld(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smlsldx | SMLSLDX | __int64 _arm_smlsldx(__int64 _RdHiLo, _Rn int, _Rm int) |
_arm_smuad | SMUAD | int _arm_smuad(int _Rn, int _Rm) |
_arm_smuadx | SMUADX | int _arm_muadxs(int _Rn, int _Rm) |
_arm_smusd | SMUSD | int _arm_smusd(int _Rn, int _Rm) |
_arm_smusdx | SMUSDX | int _arm_smusdx(int _Rn, int _Rm) |
_arm_smull | SMULL | __int64 _arm_smull(_Rn int, _Rm int) |
_arm_umull | UMULL | __int64 _arm_umull tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
_arm_umaal | UMAAL | __int64 _arm_umaal tidak ditandatangani(_RdLo int yang tidak ditandatangani, _RdHi int yang tidak ditandatangani, _Rn _Rm int yang tidak ditandatangani) |
_arm_bfc | BFC | _arm_bfc int yang tidak ditandatangani(_Rd int yang tidak ditandatangani, _Lsb int yang tidak ditandatangani, _Width) |
_arm_bfi | BFI | _arm_bfi int yang tidak ditandatangani(_Rd int yang tidak ditandatangani, _Rn int yang tidak ditandatangani, _Lsb int yang tidak ditandatangani, _Width) |
_arm_rbit | RBIT | _arm_rbit int yang tidak ditandatangani(_Rm int yang tidak ditandatangani) |
_arm_sbfx | SBFX | int _arm_sbfx(_Rn int, _Lsb int yang tidak ditandatangani, _Width int yang tidak ditandatangani) |
_arm_ubfx | UBFX | _arm_ubfx int yang tidak ditandatangani(_Rn int yang tidak ditandatangani, _Lsb int yang tidak ditandatangani, _Width) |
_arm_sdiv | SDIV | int _arm_sdiv(int _Rn, int _Rm) |
_arm_udiv | UDIV | _arm_udiv int tidak ditandatangani(_Rn int yang tidak ditandatangani, _Rm int yang tidak ditandatangani) |
__Cps | CPS | __cps batal (_Ops int yang tidak ditandatangani, _Flags int yang tidak ditandatangani, _Mode) |
__dmb | DMB | __dmb batal (int _Type tidak ditandatangani )Menyisipkan operasi penghubung memori ke dalam aliran instruksi. Parameter _Type menentukan jenis pembatasan yang diterapkan hambatan.Untuk informasi selengkapnya tentang jenis pembatasan yang dapat diberlakukan, lihat Pembatasan Hambatan Memori. |
__dsb | DSB | __dsb batal (_Type int yang tidak ditandatangani) Menyisipkan operasi penghubung memori ke dalam aliran instruksi. Parameter _Type menentukan jenis pembatasan yang diterapkan hambatan.Untuk informasi selengkapnya tentang jenis pembatasan yang dapat diberlakukan, lihat Pembatasan Hambatan Memori. |
__isb | ISB | __isb batal(_Type int yang tidak ditandatangani) Menyisipkan operasi penghubung memori ke dalam aliran instruksi. Parameter _Type menentukan jenis pembatasan yang diterapkan hambatan.Untuk informasi selengkapnya tentang jenis pembatasan yang dapat diberlakukan, lihat Pembatasan Hambatan Memori. |
__Memancarkan | __emit batal(opcode __int32 tidak ditandatangani) Menyisipkan instruksi yang ditentukan ke dalam aliran instruksi yang dihasilkan oleh pengkompilasi. Nilai opcode harus berupa ekspresi konstanta yang diketahui pada waktu kompilasi. Ukuran kata instruksi adalah 16 bit dan 16 bit opcode yang paling signifikan diabaikan.Pengkompilasi tidak mencoba menginterpretasikan konten opcode dan tidak menjamin status CPU atau memori sebelum instruksi yang disisipkan dijalankan.Pengkompilasi mengasumsikan bahwa status CPU dan memori tidak berubah setelah instruksi yang disisipkan dijalankan. Oleh karena itu, instruksi yang melakukan status perubahan dapat berdampak merugikan pada kode normal yang dihasilkan oleh pengkompilasi. Untuk alasan ini, gunakan emit hanya untuk menyisipkan instruksi yang memengaruhi status CPU yang biasanya tidak diproses pengkompilasi—misalnya, status coprocessor—atau untuk mengimplementasikan fungsi yang dideklarasikan dengan menggunakan declspec(naked) . |
|
__hvc | HVC | __hvc int tidak ditandatangani(int tidak ditandatangani, ...) |
__iso_volatile_load16 | __int16 __iso_volatile_load16(const volatile __int16 *) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_load32 | __int32 __iso_volatile_load32(const volatile __int32 *) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_load64 | __int64 __iso_volatile_load64(const volatile __int64 *) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_load8 | __int8 __iso_volatile_load8(const volatil __int8 *) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_store16 | __iso_volatile_store16 batal (__int16 volatil *, __int16) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_store32 | __iso_volatile_store32 batal (__int32 volatil *, __int32) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_store64 | __iso_volatile_store64 batal (__int64 volatil *, __int64) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__iso_volatile_store8 | __iso_volatile_store8 batal (__int8 volatil *, __int8) Untuk informasi selengkapnya, lihat __iso_volatile_load/menyimpan intrinsik. |
|
__ldrexd | LDREXD | __int64 __ldrexd(const volatile __int64 *) |
__prefetch | PLD | void __cdecl __prefetch(const void *)PLD Memberikan petunjuk memori ke sistem bahwa memori di atau dekat alamat yang ditentukan dapat segera diakses. Beberapa sistem dapat memilih untuk mengoptimalkan pola akses memori tersebut untuk meningkatkan performa runtime. Namun, dari sudut pandang bahasa C++, fungsi tidak memiliki efek yang dapat diamati, dan mungkin tidak melakukan apa pun sama sekali. |
__rdpmccntr64 | __int64 __rdpmccntr64 tidak ditandatangani(batal) | |
__sev | SEV | __sev batal (batal) |
__static_assert | __static_assert batal(int, const char *) | |
__swi | SVC | __swi int tidak ditandatangani(int tidak ditandatangani, ...) |
__jerat | BKPT | int __trap(int, ...) |
__wfe | WFE | __wfe batal (batal) |
__wfi | WFI | __wfi batal (batal) |
_AddSatInt | QADD | int _AddSatInt(int, int) |
_CopyDoubleFromInt64 | _CopyDoubleFromInt64 ganda(__int64) | |
_CopyFloatFromInt32 | _CopyFloatFromInt32 float(__int32) | |
_CopyInt32FromFloat | __int32 _CopyInt32FromFloat(float) | |
_CopyInt64FromDouble | __int64 _CopyInt64FromDouble(ganda) | |
_CountLeadingOnes | _CountLeadingOnes int yang tidak ditandatangani(panjang tidak ditandatangani) | |
_CountLeadingOnes64 | _CountLeadingOnes64 int yang tidak ditandatangani(__int64 tidak ditandatangani) | |
_CountLeadingSigns | _CountLeadingSigns int tidak ditandatangani(panjang) | |
_CountLeadingSigns64 | _CountLeadingSigns64 int tidak ditandatangani(__int64) | |
_CountLeadingZeros | _CountLeadingZeros int yang tidak ditandatangani (panjang tidak ditandatangani) | |
_CountLeadingZeros64 | _CountLeadingZeros64 int yang tidak ditandatangani(__int64 yang tidak ditandatangani) | |
_CountTrailingZeros | _CountTrailingZeros tidak ditandatangani(panjang tidak ditandatangani) | |
_CountTrailingZeros64 | _CountTrailingZeros64 tidak ditandatangani(__int64 tidak ditandatangani) | |
_CountOneBits | _CountOneBits int yang tidak ditandatangani(panjang tidak ditandatangani) | |
_CountOneBits64 | _CountOneBits64 int yang tidak ditandatangani(__int64 yang tidak ditandatangani) | |
_DAddSatInt | QDADD | int _DAddSatInt(int, int) |
_DSubSatInt | QDSUB | int _DSubSatInt(int, int) |
_isunordered | int _isunordered(double, double) | |
_isunorderedf | int _isunorderedf(float, float) | |
_MoveFromCoprocessor | MRC | int _MoveFromCoprocessor tidak ditandatangani(int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor2 | MRC2 | int _MoveFromCoprocessor2 tidak ditandatangani(int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveFromCoprocessor, _MoveFromCoprocessor2. |
_MoveFromCoprocessor64 | MRRC | __int64 _MoveFromCoprocessor64 tidak ditandatangani(int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveFromCoprocessor64. |
_MoveToCoprocessor | MCR | _MoveToCoprocessor batal(int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor2 | MCR2 | _MoveToCoprocessor2 batal(int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveToCoprocessor, _MoveToCoprocessor2. |
_MoveToCoprocessor64 | MCRR | _MoveToCoprocessor64 batal(__int64 tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani, int tidak ditandatangani) Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor. Untuk informasi selengkapnya, lihat _MoveToCoprocessor64. |
_MulHigh | _MulHigh panjang(panjang, panjang) | |
_MulUnsignedHigh | _MulUnsignedHigh panjang yang tidak ditandatangani(panjang tidak ditandatangani, panjang tidak ditandatangani) | |
_ReadBankedReg | MRS | int _ReadBankedReg(int _Reg) |
_ReadStatusReg | MRS | int _ReadStatusReg(int) |
_SubSatInt | QSUB | int _SubSatInt(int, int) |
_WriteBankedReg | MSR | _WriteBankedReg batal(_Value int, _Reg int) |
_WriteStatusReg | MSR | _WriteStatusReg batal(int, int, int) |
Pembatasan Hambatan Memori
Fungsi __dmb
intrinsik (hambatan memori data), __dsb
(hambatan sinkronisasi data), dan __isb
(hambatan sinkronisasi instruksi) menggunakan nilai yang telah ditentukan sebelumnya berikut untuk menentukan pembatasan hambatan memori dalam hal domain berbagi dan jenis akses yang terpengaruh oleh operasi.
Nilai Pembatasan | Deskripsi |
---|---|
_ARM_BARRIER_SY | Sistem lengkap, baca dan tulis. |
_ARM_BARRIER_ST | Sistem penuh, hanya menulis. |
_ARM_BARRIER_ISH | Inner sharable, membaca dan menulis. |
_ARM_BARRIER_ISHST | Inner sharable, hanya menulis. |
_ARM_BARRIER_NSH | Tidak dapat dibagikan, dibaca dan ditulis. |
_ARM_BARRIER_NSHST | Tidak dapat dibagikan, hanya menulis. |
_ARM_BARRIER_OSH | Outer sharable, membaca dan menulis. |
_ARM_BARRIER_OSHST | Outer sharable, hanya menulis. |
Untuk intrinsik __isb
, satu-satunya batasan yang saat ini valid adalah _ARM_BARRIER_SY; semua nilai lain dicadangkan oleh arsitektur.
__iso_volatile_load/menyimpan intrinsik
Fungsi intrinsik ini secara eksplisit melakukan beban dan penyimpanan yang tidak tunduk pada pengoptimalan pengkompilasi.
__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);
Parameter
Location
Alamat lokasi memori untuk dibaca atau ditulis.
Nilai
Nilai untuk menulis ke lokasi memori yang ditentukan (hanya menyimpan intrinsik).
Mengembalikan nilai (hanya intrinsik beban)
Nilai lokasi memori yang ditentukan oleh Location
.
Keterangan
Anda dapat menggunakan __iso_volatile_load8/16/32/64
intrinsik dan __iso_volatile_store8/16/32/64
untuk secara eksplisit melakukan akses memori yang tidak tunduk pada pengoptimalan pengkompilasi. Kompiler tidak dapat menghapus, mensinthetisasi, atau mengubah urutan relatif operasi ini, tetapi tidak menghasilkan hambatan memori perangkat keras implisit. Oleh karena itu, perangkat keras mungkin masih menyusun ulang akses memori yang dapat diamati di beberapa utas. Lebih tepatnya, intrinsik ini setara dengan ekspresi berikut seperti yang dikompilasi di bawah /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;
Perhatikan bahwa intrinsik mengambil pointer volatil untuk mengakomodasi variabel volatil. Namun, tidak ada persyaratan atau rekomendasi untuk menggunakan pointer volatil sebagai argumen. Semantik operasi ini sama persis jika jenis reguler dan non-volatil digunakan.
Untuk informasi selengkapnya tentang argumen baris perintah /volatile:iso , lihat /volatile (Interpretasi Kata Kunci volatil).
_MoveFromCoprocessor, _MoveFromCoprocessor2
Fungsi intrinsik ini membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor.
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
);
Parameter
coproc
Nomor coprocessor dalam rentang 0 hingga 15.
opcode1
Opcode khusus coprocessor dalam rentang 0 hingga 7
crn
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan operan pertama ke instruksi.
crm
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan sumber tambahan atau operand tujuan.
opcode2
Opcode khusus coprocessor tambahan dalam rentang 0 hingga 7.
Nilai hasil
Nilai yang dibaca dari coprocessor.
Keterangan
Nilai kelima parameter intrinsik harus berupa ekspresi konstan yang dikenal pada waktu kompilasi.
_MoveFromCoprocessor
menggunakan instruksi MRC; _MoveFromCoprocessor2
menggunakan MRC2. Parameter sesuai dengan bitfield yang dikodekan langsung ke dalam kata instruksi. Interpretasi parameter bergantung pada coprocessor. Untuk informasi selengkapnya, lihat manual untuk coprocessor yang dimaksud.
_MoveFromCoprocessor64
Membaca data dari coprocessor ARM dengan menggunakan instruksi transfer data coprocessor.
unsigned __int64 _MoveFromCoprocessor64(
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parameter
coproc
Nomor coprocessor dalam rentang 0 hingga 15.
opcode1
Opcode khusus coprocessor dalam rentang 0 hingga 15.
crm
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan sumber tambahan atau operand tujuan.
Nilai hasil
Nilai yang dibaca dari coprocessor.
Keterangan
Nilai ketiga parameter intrinsik harus berupa ekspresi konstan yang dikenal pada waktu kompilasi.
_MoveFromCoprocessor64
menggunakan instruksi MRRC. Parameter sesuai dengan bitfield yang dikodekan langsung ke dalam kata instruksi. Interpretasi parameter bergantung pada coprocessor. Untuk informasi selengkapnya, lihat manual untuk coprocessor yang dimaksud.
_MoveToCoprocessor, _MoveToCoprocessor2
Fungsi intrinsik ini menulis data ke coprocessor ARM dengan menggunakan instruksi transfer data coprocessor.
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
);
Parameter
value
Nilai yang akan ditulis ke coprocessor.
coproc
Nomor coprocessor dalam rentang 0 hingga 15.
opcode1
Opcode khusus coprocessor dalam rentang 0 hingga 7.
crn
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan operan pertama ke instruksi.
crm
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan sumber tambahan atau operand tujuan.
opcode2
Opcode khusus coprocessor tambahan dalam rentang 0 hingga 7.
Nilai hasil
Tidak ada.
Keterangan
coproc
Nilai parameter , , opcode1
crn
, crm
, dan opcode2
intrinsik harus berupa ekspresi konstan yang diketahui pada waktu kompilasi.
_MoveToCoprocessor
menggunakan instruksi MCR; _MoveToCoprocessor2
menggunakan MCR2. Parameter sesuai dengan bitfield yang dikodekan langsung ke dalam kata instruksi. Interpretasi parameter bergantung pada coprocessor. Untuk informasi selengkapnya, lihat manual untuk coprocessor yang dimaksud.
_MoveToCoprocessor64
Fungsi intrinsik ini menulis data ke coprocessor ARM dengan menggunakan instruksi transfer data coprocessor.
void _MoveFromCoprocessor64(
unsigned __int64 value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crm,
);
Parameter
coproc
Nomor coprocessor dalam rentang 0 hingga 15.
opcode1
Opcode khusus coprocessor dalam rentang 0 hingga 15.
crm
Nomor register coprocessor, dalam rentang 0 hingga 15, yang menentukan sumber tambahan atau operand tujuan.
Nilai hasil
Tidak ada.
Keterangan
coproc
Nilai parameter , opcode1
, dan crm
intrinsik harus berupa ekspresi konstan yang dikenal pada waktu kompilasi.
_MoveFromCoprocessor64
menggunakan instruksi MCRR. Parameter sesuai dengan bitfield yang dikodekan langsung ke dalam kata instruksi. Interpretasi parameter bergantung pada coprocessor. Untuk informasi selengkapnya, lihat manual untuk coprocessor yang dimaksud.
Dukungan ARM untuk Intrinsik dari Arsitektur Lain
Tabel berikut mencantumkan intrinsik dari arsitektur lain yang didukung pada platform ARM. Jika perilaku intrinsik pada ARM berbeda dari perilakunya pada arsitektur perangkat keras lainnya, detail tambahan dicatat.
Nama Fungsi | Prototipe Fungsi |
---|---|
__assume | __assume batal (int) |
__code_seg | __code_seg void(const char *) |
__debugbreak | __cdecl __debugbreak batal (batal) |
__fastfail | __declspec(noreturn) __fastfail batal (int tidak ditandatangani) |
__nop | void __nop(void) Note: Pada platform ARM, fungsi ini menghasilkan instruksi NOP jika diimplementasikan dalam arsitektur target; jika tidak, instruksi alternatif yang tidak mengubah status program atau CPU dihasilkan—misalnya, MOV r8, r8 . Ini secara fungsional setara dengan __nop intrinsik untuk arsitektur perangkat keras lainnya. Karena instruksi yang tidak berpengaruh pada status program atau CPU mungkin diabaikan oleh arsitektur target sebagai pengoptimalan, instruksi tidak selalu menggunakan siklus CPU. Oleh karena itu, jangan gunakan __nop intrinsik untuk memanipulasi waktu eksekusi urutan kode kecuali Anda yakin tentang bagaimana CPU akan berperilaku. Sebagai gantinya, Anda dapat menggunakan __nop intrinsik untuk menyelaraskan instruksi berikutnya ke alamat batas 32-bit tertentu. |
__hasil | void __yield(void) Catatan: Pada platform ARM, fungsi ini menghasilkan instruksi YIELD, yang menunjukkan bahwa utas melakukan tugas yang dapat ditangguhkan sementara dari eksekusi—misalnya, spinlock—tanpa memengaruhi program. Ini memungkinkan CPU untuk menjalankan tugas lain selama siklus eksekusi yang jika tidak akan terbuang-. |
_AddressOfReturnAddress | void * _AddressOfReturnAddress(void) |
_BitScanForward | _BitScanForward karakter yang tidak ditandatangani (panjang * _Index, _Mask panjang yang tidak ditandatangani) |
_BitScanReverse | _BitScanReverse karakter yang tidak ditandatangani (panjang * _Index, _Mask panjang yang tidak ditandatangani) |
_bittest | karakter yang tidak ditandatangani _bittest(kontra panjang *, panjang) |
_bittestandcomplement | karakter tidak ditandatangani _bittestandcomplement(panjang *, panjang) |
_bittestandreset | karakter yang tidak ditandatangani _bittestandreset(panjang *, panjang) |
_bittestandset | karakter tidak ditandatangani _bittestandset(panjang *, panjang) |
_byteswap_uint64 | __int64 __cdecl _byteswap_uint64 tidak ditandatangani(__int64 tidak ditandatangani) |
_byteswap_ulong | __cdecl _byteswap_ulong panjang yang tidak ditandatangani(panjang tidak ditandatangani) |
_byteswap_ushort | __cdecl _byteswap_ushort pendek yang tidak ditandatangani(pendek tidak ditandatangani) |
_disable | void __cdecl _disable(void) Note: Pada platform ARM, fungsi ini menghasilkan instruksi CPSID; hanya tersedia sebagai intrinsik. |
_enable | void __cdecl _enable(void) Note: Pada platform ARM, fungsi ini menghasilkan instruksi CPSIE; hanya tersedia sebagai intrinsik. |
_lrotl | __cdecl _lrotl panjang yang tidak ditandatangani(panjang tidak ditandatangani, int) |
_lrotr | __cdecl _lrotr panjang yang tidak ditandatangani(panjang tidak ditandatangani, int) |
_ReadBarrier | _ReadBarrier batal (batal) |
_ReadWriteBarrier | _ReadWriteBarrier batal (batal) |
_ReturnAddress | void * _ReturnAddress(void) |
_rotl | __cdecl _rotl int yang tidak ditandatangani(_Value int yang tidak ditandatangani, _Shift int) |
_rotl16 | _rotl16 pendek yang tidak ditandatangani(_Value pendek yang tidak ditandatangani, karakter yang tidak ditandatangani _Shift) |
_rotl64 | __int64 __cdecl _rotl64 tidak ditandatangani(__int64 _Value yang tidak ditandatangani, _Shift int) |
_rotl8 | _rotl8 karakter yang tidak ditandatangani(_Value karakter yang tidak ditandatangani, _Shift karakter yang tidak ditandatangani) |
_rotr | __cdecl _rotr int yang tidak ditandatangani(_Value int yang tidak ditandatangani, _Shift int) |
_rotr16 | _rotr16 pendek yang tidak ditandatangani(_Value pendek yang tidak ditandatangani, _Shift karakter tidak ditandatangani) |
_rotr64 | __int64 __cdecl _rotr64 yang tidak ditandatangani(__int64 _Value yang tidak ditandatangani, _Shift int) |
_rotr8 | _rotr8 karakter yang tidak ditandatangani(_Value karakter yang tidak ditandatangani, _Shift karakter yang tidak ditandatangani) |
_setjmpex | __cdecl _setjmpex int(jmp_buf) |
_WriteBarrier | _WriteBarrier batal (batal) |
Intrinsik yang saling mengunci
Intrinsik yang saling diblokir adalah sekumpulan intrinsik yang digunakan untuk melakukan operasi baca-ubah-tulis atomik. Beberapa dari mereka umum untuk semua platform. Mereka terdaftar secara terpisah di sini karena ada sejumlah besar dari mereka, tetapi karena definisi mereka sebagian besar redundan, lebih mudah untuk memikirkannya secara umum. Nama mereka dapat digunakan untuk mendapatkan perilaku yang tepat.
Tabel berikut ini meringkas dukungan ARM dari intrinsik interlock non-bittest. Setiap sel dalam tabel sesuai dengan nama yang diturunkan dengan menambahkan nama operasi di sel paling kiri baris dan nama jenis di sel paling atas kolom ke _Interlocked
. Misalnya, sel di persimpangan Xor
baris dan 8
kolom sesuai dengan _InterlockedXor8
dan didukung sepenuhnya. Sebagian besar fungsi yang didukung menawarkan akhiran opsional ini: _acq
, , _rel
dan _nf
. Akhiran _acq
menunjukkan semantik "akuisisi" dan _rel
akhiran menunjukkan semantik "rilis". Akhiran _nf
atau "tanpa pagar" unik untuk ARM dan dibahas di bagian berikutnya.
Operasi | 8 | 16 | 32 | 64 | P |
---|---|---|---|---|---|
Menambahkan | Tidak | Tidak | Penuh | Penuh | Tidak |
Dan | Penuh | Penuh | Penuh | Penuh | Tidak |
BandingkanExchange | Penuh | Penuh | Penuh | Penuh | Penuh |
Keputusan | Tidak | Penuh | Penuh | Penuh | Tidak |
Exchange | Sebagian | Sebagian | Sebagian | Sebagian | Sebagian |
ExchangeAdd | Penuh | Penuh | Penuh | Penuh | Tidak |
Peningkatan | Tidak | Penuh | Penuh | Penuh | Tidak |
Atau | Penuh | Penuh | Penuh | Penuh | Tidak |
Xor | Penuh | Penuh | Penuh | Penuh | Tidak |
Kunci:
Penuh: mendukung formulir biasa,
_acq
,_rel
, dan_nf
.Parsial: mendukung formulir biasa,
_acq
, dan_nf
.Tidak ada: Tidak didukung
Akhiran _nf (tanpa pagar)
Akhiran _nf
atau "tanpa pagar" menunjukkan bahwa operasi tidak berperilaku sebagai penghapus memori apa pun, berbeda dengan tiga bentuk lainnya (polos, _acq
, dan _rel
), yang semuanya berperilaku sebagai semacam penghapus. Salah satu kemungkinan penggunaan _nf
formulir adalah mempertahankan penghitung statistik yang diperbarui oleh beberapa utas secara bersamaan tetapi nilainya tidak digunakan saat beberapa utas dijalankan.
Daftar intrinsik yang saling mengunci
Nama Fungsi | Prototipe Fungsi |
---|---|
_InterlockedAdd | _InterlockedAdd panjang(_volatile panjang *, panjang) |
_InterlockedAdd64 | __int64 _InterlockedAdd64(__int64 volatil *, __int64) |
_InterlockedAdd64_acq | __int64 _InterlockedAdd64_acq(__int64 volatil *, __int64) |
_InterlockedAdd64_nf | __int64 _InterlockedAdd64_nf(__int64 volatil *, __int64) |
_InterlockedAdd64_rel | __int64 _InterlockedAdd64_rel(__int64 volatil *, __int64) |
_InterlockedAdd_acq | _InterlockedAdd_acq panjang (volatil panjang *, panjang) |
_InterlockedAdd_nf | _InterlockedAdd_nf panjang (volatil panjang *, panjang) |
_InterlockedAdd_rel | _InterlockedAdd_rel panjang (volatil panjang *, panjang) |
_InterlockedAnd | _InterlockedAnd panjang (volatil panjang *, panjang) |
_InterlockedAnd16 | _InterlockedAnd16 pendek (volatil pendek *, pendek) |
_InterlockedAnd16_acq | _InterlockedAnd16_acq pendek (volatil pendek *, pendek) |
_InterlockedAnd16_nf | _InterlockedAnd16_nf pendek (volatil pendek *, pendek) |
_InterlockedAnd16_rel | _InterlockedAnd16_rel pendek (volatil pendek *, pendek) |
_InterlockedAnd64 | __int64 _InterlockedAnd64(__int64 volatil *, __int64) |
_InterlockedAnd64_acq | __int64 _InterlockedAnd64_acq(__int64 volatil *, __int64) |
_InterlockedAnd64_nf | __int64 _InterlockedAnd64_nf(__int64 volatil *, __int64) |
_InterlockedAnd64_rel | __int64 _InterlockedAnd64_rel(__int64 volatil *, __int64) |
_InterlockedAnd8 | char _InterlockedAnd8(char volatile *, char) |
_InterlockedAnd8_acq | char _InterlockedAnd8_acq(char volatile *, char) |
_InterlockedAnd8_nf | char _InterlockedAnd8_nf(char volatile *, char) |
_InterlockedAnd8_rel | char _InterlockedAnd8_rel(char volatile *, char) |
_InterlockedAnd_acq | _InterlockedAnd_acq panjang (volatil panjang *, panjang) |
_InterlockedAnd_nf | _InterlockedAnd_nf panjang (volatil panjang *, panjang) |
_InterlockedAnd_rel | _InterlockedAnd_rel panjang (volatil panjang *, panjang) |
_InterlockedCompareExchange | __cdecl _InterlockedCompareExchange panjang (volatil panjang *, panjang, panjang) |
_InterlockedCompareExchange16 | _InterlockedCompareExchange16 pendek (volatil pendek *, pendek, pendek) |
_InterlockedCompareExchange16_acq | _InterlockedCompareExchange16_acq pendek (volatil pendek *, pendek, pendek) |
_InterlockedCompareExchange16_nf | _InterlockedCompareExchange16_nf pendek (volatil pendek *, pendek, pendek) |
_InterlockedCompareExchange16_rel | _InterlockedCompareExchange16_rel pendek(volatile pendek *, pendek, pendek) |
_InterlockedCompareExchange64 | __int64 _InterlockedCompareExchange64(__int64 volatil *, __int64, __int64) |
_InterlockedCompareExchange64_acq | __int64 _InterlockedCompareExchange64_acq(__int64 volatil *, __int64, __int64) |
_InterlockedCompareExchange64_nf | __int64 _InterlockedCompareExchange64_nf(__int64 volatil *, __int64, __int64) |
_InterlockedCompareExchange64_rel | __int64 _InterlockedCompareExchange64_rel(__int64 volatil *, __int64, __int64) |
_InterlockedCompareExchange8 | char _InterlockedCompareExchange8(char volatile *, char, char) |
_InterlockedCompareExchange8_acq | char _InterlockedCompareExchange8_acq(char volatile *, char, char) |
_InterlockedCompareExchange8_nf | char _InterlockedCompareExchange8_nf(char volatile *, char, char) |
_InterlockedCompareExchange8_rel | char _InterlockedCompareExchange8_rel(char volatile *, char, char) |
_InterlockedCompareExchangePointer | void * _InterlockedCompareExchangePointer(batal * volatil *, batal *, batal *) |
_InterlockedCompareExchangePointer_acq | void * _InterlockedCompareExchangePointer_acq(void * volatile *, void *, void *) |
_InterlockedCompareExchangePointer_nf | void * _InterlockedCompareExchangePointer_nf(void * volatile *, void *, void *) |
_InterlockedCompareExchangePointer_rel | void * _InterlockedCompareExchangePointer_rel(batal * volatil *, batal *, batal *) |
_InterlockedCompareExchange_acq | _InterlockedCompareExchange_acq panjang (volatil panjang *, panjang, panjang) |
_InterlockedCompareExchange_nf | _InterlockedCompareExchange_nf panjang (volatil panjang *, panjang, panjang) |
_InterlockedCompareExchange_rel | _InterlockedCompareExchange_rel panjang (volatil panjang *, panjang, panjang) |
_InterlockedDecrement | __cdecl _InterlockedDecrement panjang (volatil panjang *) |
_InterlockedDecrement16 | _InterlockedDecrement16 pendek(volatile pendek *) |
_InterlockedDecrement16_acq | _InterlockedDecrement16_acq pendek(volatile pendek *) |
_InterlockedDecrement16_nf | _InterlockedDecrement16_nf pendek (volatil pendek *) |
_InterlockedDecrement16_rel | _InterlockedDecrement16_rel pendek(volatile pendek *) |
_InterlockedDecrement64 | __int64 _InterlockedDecrement64(__int64 volatil *) |
_InterlockedDecrement64_acq | __int64 _InterlockedDecrement64_acq(__int64 volatil *) |
_InterlockedDecrement64_nf | __int64 _InterlockedDecrement64_nf(__int64 volatil *) |
_InterlockedDecrement64_rel | __int64 _InterlockedDecrement64_rel(__int64 volatil *) |
_InterlockedDecrement_acq | _InterlockedDecrement_acq panjang (volatil panjang *) |
_InterlockedDecrement_nf | _InterlockedDecrement_nf panjang (volatil panjang *) |
_InterlockedDecrement_rel | _InterlockedDecrement_rel panjang (volatil panjang *) |
_InterlockedExchange | __cdecl _InterlockedExchange panjang (volatil panjang * _Target, panjang) |
_InterlockedExchange16 | _InterlockedExchange16 pendek (volatil pendek * _Target, pendek) |
_InterlockedExchange16_acq | _InterlockedExchange16_acq pendek (volatil pendek * _Target, pendek) |
_InterlockedExchange16_nf | _InterlockedExchange16_nf pendek (volatil pendek * _Target, pendek) |
_InterlockedExchange64 | __int64 _InterlockedExchange64(__int64 volatil * _Target, __int64) |
_InterlockedExchange64_acq | __int64 _InterlockedExchange64_acq(__int64 volatil * _Target, __int64) |
_InterlockedExchange64_nf | __int64 _InterlockedExchange64_nf(__int64 volatil * _Target, __int64) |
_InterlockedExchange8 | char _InterlockedExchange8(char volatile * _Target, char) |
_InterlockedExchange8_acq | char _InterlockedExchange8_acq(char volatile * _Target, char) |
_InterlockedExchange8_nf | char _InterlockedExchange8_nf(char volatile * _Target, char) |
_InterlockedExchangeAdd | __cdecl _InterlockedExchangeAdd panjang (volatil panjang *, panjang) |
_InterlockedExchangeAdd16 | _InterlockedExchangeAdd16 pendek (volatil pendek *, pendek) |
_InterlockedExchangeAdd16_acq | _InterlockedExchangeAdd16_acq pendek (volatil pendek *, pendek) |
_InterlockedExchangeAdd16_nf | _InterlockedExchangeAdd16_nf pendek (volatil pendek *, pendek) |
_InterlockedExchangeAdd16_rel | _InterlockedExchangeAdd16_rel pendek (volatil pendek *, pendek) |
_InterlockedExchangeAdd64 | __int64 _InterlockedExchangeAdd64(__int64 volatil *, __int64) |
_InterlockedExchangeAdd64_acq | __int64 _InterlockedExchangeAdd64_acq(__int64 volatil *, __int64) |
_InterlockedExchangeAdd64_nf | __int64 _InterlockedExchangeAdd64_nf(__int64 volatil *, __int64) |
_InterlockedExchangeAdd64_rel | __int64 _InterlockedExchangeAdd64_rel(__int64 volatil *, __int64) |
_InterlockedExchangeAdd8 | char _InterlockedExchangeAdd8(char volatile *, char) |
_InterlockedExchangeAdd8_acq | char _InterlockedExchangeAdd8_acq(char volatile *, char) |
_InterlockedExchangeAdd8_nf | char _InterlockedExchangeAdd8_nf(char volatile *, char) |
_InterlockedExchangeAdd8_rel | char _InterlockedExchangeAdd8_rel(char volatile *, char) |
_InterlockedExchangeAdd_acq | _InterlockedExchangeAdd_acq panjang (volatil panjang *, panjang) |
_InterlockedExchangeAdd_nf | _InterlockedExchangeAdd_nf panjang (volatil panjang *, panjang) |
_InterlockedExchangeAdd_rel | _InterlockedExchangeAdd_rel panjang (volatil panjang *, panjang) |
_InterlockedExchangePointer | void * _InterlockedExchangePointer(void * volatil * _Target, batal *) |
_InterlockedExchangePointer_acq | void * _InterlockedExchangePointer_acq(batal * volatil * _Target, batal *) |
_InterlockedExchangePointer_nf | void * _InterlockedExchangePointer_nf(batal * volatil * _Target, batal *) |
_InterlockedExchange_acq | _InterlockedExchange_acq panjang (volatil panjang * _Target, panjang) |
_InterlockedExchange_nf | _InterlockedExchange_nf panjang (volatil panjang * _Target, panjang) |
_InterlockedIncrement | __cdecl _InterlockedIncrement panjang (volatil panjang *) |
_InterlockedIncrement16 | _InterlockedIncrement16 pendek (volatil pendek *) |
_InterlockedIncrement16_acq | _InterlockedIncrement16_acq pendek(volatile pendek *) |
_InterlockedIncrement16_nf | _InterlockedIncrement16_nf pendek (volatil pendek *) |
_InterlockedIncrement16_rel | _InterlockedIncrement16_rel pendek (volatil pendek *) |
_InterlockedIncrement64 | __int64 _InterlockedIncrement64(__int64 volatil *) |
_InterlockedIncrement64_acq | __int64 _InterlockedIncrement64_acq(__int64 volatil *) |
_InterlockedIncrement64_nf | __int64 _InterlockedIncrement64_nf(__int64 volatil *) |
_InterlockedIncrement64_rel | __int64 _InterlockedIncrement64_rel(__int64 volatil *) |
_InterlockedIncrement_acq | _InterlockedIncrement_acq panjang (volatil panjang *) |
_InterlockedIncrement_nf | _InterlockedIncrement_nf panjang (volatil panjang *) |
_InterlockedIncrement_rel | _InterlockedIncrement_rel panjang (volatil panjang *) |
_InterlockedOr | _InterlockedOr panjang (volatil panjang *, panjang) |
_InterlockedOr16 | _InterlockedOr16 pendek (volatil pendek *, pendek) |
_InterlockedOr16_acq | _InterlockedOr16_acq pendek (volatil pendek *, pendek) |
_InterlockedOr16_nf | _InterlockedOr16_nf pendek (volatil pendek *, pendek) |
_InterlockedOr16_rel | _InterlockedOr16_rel pendek (volatil pendek *, pendek) |
_InterlockedOr64 | __int64 _InterlockedOr64(__int64 volatil *, __int64) |
_InterlockedOr64_acq | __int64 _InterlockedOr64_acq(__int64 volatil *, __int64) |
_InterlockedOr64_nf | __int64 _InterlockedOr64_nf(__int64 volatil *, __int64) |
_InterlockedOr64_rel | __int64 _InterlockedOr64_rel(__int64 volatil *, __int64) |
_InterlockedOr8 | char _InterlockedOr8(char volatile *, char) |
_InterlockedOr8_acq | char _InterlockedOr8_acq(char volatile *, char) |
_InterlockedOr8_nf | char _InterlockedOr8_nf(char volatile *, char) |
_InterlockedOr8_rel | char _InterlockedOr8_rel(char volatile *, char) |
_InterlockedOr_acq | _InterlockedOr_acq panjang (volatil panjang *, panjang) |
_InterlockedOr_nf | _InterlockedOr_nf panjang (volatil panjang *, panjang) |
_InterlockedOr_rel | _InterlockedOr_rel panjang (volatil panjang *, panjang) |
_InterlockedXor | _InterlockedXor panjang (volatil panjang *, panjang) |
_InterlockedXor16 | _InterlockedXor16 pendek (volatil pendek *, pendek) |
_InterlockedXor16_acq | _InterlockedXor16_acq pendek (volatil pendek *, pendek) |
_InterlockedXor16_nf | _InterlockedXor16_nf pendek (volatil pendek *, pendek) |
_InterlockedXor16_rel | _InterlockedXor16_rel pendek (volatil pendek *, pendek) |
_InterlockedXor64 | __int64 _InterlockedXor64(__int64 volatil *, __int64) |
_InterlockedXor64_acq | __int64 _InterlockedXor64_acq(__int64 volatil *, __int64) |
_InterlockedXor64_nf | __int64 _InterlockedXor64_nf(__int64 volatil *, __int64) |
_InterlockedXor64_rel | __int64 _InterlockedXor64_rel(__int64 volatil *, __int64) |
_InterlockedXor8 | char _InterlockedXor8(char volatile *, char) |
_InterlockedXor8_acq | char _InterlockedXor8_acq(char volatile *, char) |
_InterlockedXor8_nf | char _InterlockedXor8_nf(char volatile *, char) |
_InterlockedXor8_rel | char _InterlockedXor8_rel(char volatile *, char) |
_InterlockedXor_acq | _InterlockedXor_acq panjang (volatil panjang *, panjang) |
_InterlockedXor_nf | _InterlockedXor_nf panjang (volatil panjang *, panjang) |
_InterlockedXor_rel | _InterlockedXor_rel panjang (volatil panjang *, panjang) |
_interlockedbittest intrinsik
Intrinsik uji bit yang saling di-interlock biasa untuk semua platform. ARM menambahkan _acq
_rel
, , dan _nf
varian, yang hanya memodifikasi semantik penghalus operasi, seperti yang dijelaskan dalam akhiran _nf (tanpa pagar) sebelumnya dalam artikel ini.
Nama Fungsi | Prototipe Fungsi |
---|---|
_interlockedbittestandreset | karakter tidak ditandatangani _interlockedbittestandreset(volatil panjang *, panjang) |
_interlockedbittestandreset_acq | karakter yang tidak ditandatangani _interlockedbittestandreset_acq(volatil panjang *, panjang) |
_interlockedbittestandreset_nf | karakter yang tidak ditandatangani _interlockedbittestandreset_nf(volatil panjang *, panjang) |
_interlockedbittestandreset_rel | karakter tidak ditandatangani _interlockedbittestandreset_rel(volatil panjang *, panjang) |
_interlockedbittestandset | karakter yang tidak ditandatangani _interlockedbittestandset(volatil panjang *, panjang) |
_interlockedbittestandset_acq | _interlockedbittestandset_acq karakter yang tidak ditandatangani (volatil panjang *, panjang) |
_interlockedbittestandset_nf | karakter yang tidak ditandatangani _interlockedbittestandset_nf(volatil panjang *, panjang) |
_interlockedbittestandset_rel | _interlockedbittestandset_rel karakter yang tidak ditandatangani (volatil panjang *, panjang) |
Lihat juga
Intrinsik pengkompilasi
Intrinsik ARM64
Referensi perakitan ARM
Referensi bahasa C++