Bagikan melalui


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.hheader . 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 _Typetidak 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)

[Kembali ke atas]

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

coprocNilai parameter , , opcode1crn, 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

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

[Kembali ke atas]

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, , _reldan _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)

[Kembali ke atas]

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

[Kembali ke atas]

Lihat juga

Intrinsik pengkompilasi
Intrinsik ARM64
Referensi perakitan ARM
Referensi bahasa C++