Aracılığıyla paylaş


ARM64 iç bilgileri

Microsoft C++ derleyicisi (MSVC), ARM64 mimarisinde aşağıdaki iç bilgileri kullanılabilir hale getirir. ARM hakkında daha fazla bilgi için ARM Geliştirici Belgeleri web sitesinin Mimari ve Yazılım Geliştirme Araçları bölümlerine bakın.

NEON

ARM64 için NEON vektör yönerge kümesi uzantıları Tek Yönerge Birden Çok Veri (SIMD) özellikleri sağlar. Bunlar, x86 ve x64 mimari işlemcileri için ortak olan MMX ve SSE vektör yönerge kümelerindekilere benzer.

NEON iç bilgileri, üst bilgi dosyasında arm64_neon.hsağlandığı gibi desteklenir. NEON iç bilgileri için MSVC desteği ARM Infocenter web sitesindeki ARM NEON İç Başvurusu'nda belgelenen ARM64 derleyicisine benzer.

ARM64'e özgü iç bilgi listesi

ARM64'e özgü iç bilgiler, üst bilgi dosyasında intrin.hbelirtildiği gibi desteklenir.

İşlev Adı Talimat İşlev Prototipi
__kırmak BRK void __break(int)
__addx18byte void __addx18byte(işaretsiz uzun, imzasız karakter)
__addx18word void __addx18word(işaretsiz uzun, işaretsiz kısa)
__addx18dword void __addx18dword(işaretsiz uzun, işaretsiz uzun)
__addx18qword void __addx18qword(işaretsiz uzun, imzasız __int64)
__cas8 CASB unsigned __int8 __cas8(unsigned __int8 volatile* _Target, unsigned __int8 _Comp, unsigned __int8 _Value)
__cas16 NAKİT unsigned __int16 __cas16(unsigned __int16 volatile* _Target, unsigned __int16 _Comp, unsigned __int16 _Value)
__cas32 CAS unsigned __int32 __cas32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value)
__cas64 CAS unsigned __int64 __cas64(unsigned __int64 volatile* _Target, unsigned __int64 _Comp, unsigned __int64 _Value)
__casa8 CASAB unsigned __int8 __casa8(unsigned __int8 volatile* _Target, unsigned __int8 _Comp, unsigned __int8 _Value)
__casa16 CASAH unsigned __int16 __casa16(unsigned __int16 volatile* _Target, unsigned __int16 _Comp, unsigned __int16 _Value)
__casa32 CASA unsigned __int32 __casa32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value)
__casa64 CASA unsigned __int64 __casa64(unsigned __int64 volatile* _Target, unsigned __int64 _Comp, unsigned __int64 _Value)
__casl8 CASLB unsigned __int8 __casl8(unsigned __int8 volatile* _Target, unsigned __int8 _Comp, unsigned __int8 _Value)
__casl16 CASLH unsigned __int16 __casl16(unsigned __int16 volatile* _Target, unsigned __int16 _Comp, unsigned __int16 _Value)
__casl32 CASL unsigned __int32 __casl32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value)
__casl64 CASL unsigned __int64 __casl64(unsigned __int64 volatile* _Target, unsigned __int64 _Comp, unsigned __int64 _Value)
__casal8 CASALB unsigned __int8 __casal8(unsigned __int8 volatile* _Target, unsigned __int8 _Comp, unsigned __int8 _Value)
__casal16 CASALH unsigned __int16 __casal16(unsigned __int16 volatile* _Target, unsigned __int16 _Comp, unsigned __int16 _Value)
__casal32 CASAL unsigned __int32 __casal32(unsigned __int32 volatile* _Target, unsigned __int32 _Comp, unsigned __int32 _Value)
__casal64 CASAL unsigned __int64 __casal64(unsigned __int64 volatile* _Target, unsigned __int64 _Comp, unsigned __int64 _Value)
__crc32b CRC32B unsigned __int32 __crc32b(unsigned __int32, unsigned __int32)
__crc32h CRC32H unsigned __int32 __crc32h(unsigned __int32, unsigned __int32)
__crc32w CRC32W unsigned __int32 __crc32w(unsigned __int32, unsigned __int32)
__crc32d CRC32X unsigned __int32 __crc32d(unsigned __int32, unsigned __int64)
__crc32cb CRC32CB unsigned __int32 __crc32cb(unsigned __int32, unsigned __int32)
__crc32ch CRC32CH unsigned __int32 __crc32ch(unsigned __int32, unsigned __int32)
__crc32cw CRC32CW unsigned __int32 __crc32cw(unsigned __int32, unsigned __int32)
__crc32cd CRC32CX imzasız __int32 __crc32cd(imzasız __int32, imzasız __int64)
__dmb DMB void __dmb(unsigned int _Type)

Yönerge akışına bir bellek engeli işlemi ekler. parametresi _Type , engelin uyguladığı kısıtlama türünü belirtir.

Uygulanabilecek kısıtlama türleri hakkında daha fazla bilgi için bkz . Bellek engeli kısıtlamaları.
__dsb DSB void __dsb(unsigned int _Type)

Yönerge akışına bir bellek engeli işlemi ekler. parametresi _Type , engelin uyguladığı kısıtlama türünü belirtir.

Uygulanabilecek kısıtlama türleri hakkında daha fazla bilgi için bkz . Bellek engeli kısıtlamaları.
__isb ISB void __isb(unsigned int _Type)

Yönerge akışına bir bellek engeli işlemi ekler. parametresi _Type , engelin uyguladığı kısıtlama türünü belirtir.

Uygulanabilecek kısıtlama türleri hakkında daha fazla bilgi için bkz . Bellek engeli kısıtlamaları.
__getReg imzasız __int64 __getReg(int)
__getRegFp double __getRegFp(int)
__getCallerReg imzasız __int64 __getCallerReg(int)
__getCallerRegFp double __getCallerRegFp(int)
__hvc HVC unsigned int __hvc(unsigned int, ...)
__hlt HLT int __hlt(unsigned int, ...)
__incx18byte void __incx18byte(işaretsiz uzun)
__incx18word void __incx18word(işaretsiz uzun)
__incx18dword void __incx18dword(işaretsiz uzun)
__incx18qword void __incx18qword(işaretsiz uzun)
__iso_volatile_load16 __int16 __iso_volatile_load16(const volatile __int16 *)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_load32 __int32 __iso_volatile_load32(const volatile __int32 *)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_load64 __int64 __iso_volatile_load64(const volatile __int64 *)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_load8 __int8 __iso_volatile_load8(const volatile __int8 *)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_store16 void __iso_volatile_store16(geçici __int16 *, __int16)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_store32 void __iso_volatile_store32(geçici __int32 *, __int32)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_store64 void __iso_volatile_store64(geçici __int64 *, __int64)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__iso_volatile_store8 void __iso_volatile_store8(geçici __int8 *, __int8)

Daha fazla bilgi için bkz . __iso_volatile_load/iç bilgileri depolama.
__ldar8 LDARB unsigned __int8 __ldar8(unsigned __int8 volatile* _Target)
__ldar16 LDARH unsigned __int16 __ldar16(unsigned __int16 volatile* _Target)
__ldar32 LDAR unsigned __int32 __ldar32(unsigned __int32 volatile* _Target)
__ldar64 LDAR unsigned __int64 __ldar64(unsigned __int64 volatile* _Target)
__ldapr8 LDAPRB unsigned __int8 __ldapr8(unsigned __int8 volatile* _Target)
__ldapr16 LDAPRH unsigned __int16 __ldapr16(unsigned __int16 volatile* _Target)
__ldapr32 LDAPR unsigned __int32 __ldapr32(unsigned __int32 volatile* _Target)
__ldapr64 LDAPR unsigned __int64 __ldapr64(unsigned __int64 volatile* _Target)
__mulh __int64 __mulh(__int64, __int64)
__prefetch PRFM void __cdecl __prefetch(const void *)

Belirtilen adreste veya yakınında bulunan belleğe yakında erişilebileceği sisteme yönelik ön işlemle PLDL1KEEP birlikte bir PRFM bellek ipucu sağlar. Bazı sistemler çalışma zamanı performansını artırmak için bu bellek erişim deseni için iyileştirmeyi seçebilir. Ancak, C++ dili açısından işlevin gözlemlenebilir bir etkisi yoktur ve hiçbir şey yapamaz.
__prefetch2 PRFM void __cdecl __prefetch(const void *, uint8_t prfop)

Belirtilen adreste veya yakınında bulunan belleğe yakında erişilebilen sisteme sağlanan ön işlemle birlikte bir PRFM bellek ipucu sağlar. Bazı sistemler çalışma zamanı performansını artırmak için bu bellek erişim deseni için iyileştirmeyi seçebilir. Ancak, C++ dili açısından işlevin gözlemlenebilir bir etkisi yoktur ve hiçbir şey yapamaz.
__readx18byte unsigned char __readx18byte(unsigned long)
__readx18word unsigned short __readx18word(unsigned long)
__readx18dword işaretsiz uzun __readx18dword(işaretsiz uzun)
__readx18qword unsigned __int64 __readx18qword(unsigned long)
__setReg void __setReg(int, unsigned __int64)
__setRegFp void __setRegFp(int, double)
__setCallerReg void __setCallerReg(int, unsigned __int64)
__setCallerRegFp void __setCallerRegFp(int, double)
__sev SEV void __sev(void)
__static_assert void __static_assert(int, const char *)
__stlr8 STLRB void __stlr8(unsigned __int8 volatile* _Target, unsigned __int8 _Value)
__stlr16 STLRH void __stlr16(unsigned __int16 volatile* _Target, unsigned __int16 _Value)
__stlr32 STLR void __stlr32(unsigned __int32 volatile* _Target, unsigned __int32 _Value)
__stlr64 STLR void __stlr64(unsigned __int64 volatile* _Target, unsigned __int64 _Value)
__swp8 SWPB unsigned __int8 __swp8(unsigned __int8 volatile* _Target, unsigned __int8 _Value)
__swp16 SWPH unsigned __int16 __swp16(unsigned __int16 volatile* _Target, unsigned __int16 _Value)
__swp32 SWP unsigned __int32 __swp32(unsigned __int32 volatile* _Target, unsigned __int32 _Value)
__swp64 SWP unsigned __int64 __swp64(unsigned __int64 volatile* _Target, unsigned __int64 _Value)
__swpa8 SWPAB unsigned __int8 __swpa8(unsigned __int8 volatile* _Target, unsigned __int8 _Value)
__swpa16 SWPAH unsigned __int16 __swpa16(unsigned __int16 volatile* _Target, unsigned __int16 _Value)
__swpa32 SWPA unsigned __int32 __swpa32(unsigned __int32 volatile* _Target, unsigned __int32 _Value)
__swpa64 SWPA unsigned __int64 __swpa64(unsigned __int64 volatile* _Target, unsigned __int64 _Value)
__swpl8 SWPLB unsigned __int8 __swpl8(unsigned __int8 volatile* _Target, unsigned __int8 _Value)
__swpl16 SWPLH unsigned __int16 __swpl16(unsigned __int16 volatile* _Target, unsigned __int16 _Value)
__swpl32 SWPL unsigned __int32 __swpl32(unsigned __int32 volatile* _Target, unsigned __int32 _Value)
__swpl64 SWPL unsigned __int64 __swpl64(unsigned __int64 volatile* _Target, unsigned __int64 _Value)
__swpal8 SWPALB unsigned __int8 __swpal8(unsigned __int8 volatile* _Target, unsigned __int8 _Value)
__swpal16 SWPALH unsigned __int16 __swpal16(unsigned __int16 volatile* _Target, unsigned __int16 _Value)
__swpal32 SWPAL unsigned __int32 __swpal32(unsigned __int32 volatile* _Target, unsigned __int32 _Value)
__swpal64 SWPAL unsigned __int64 __swpal64(unsigned __int64 volatile* _Target, unsigned __int64 _Value)
__sys SYS unsigned int __sys(int, __int64)
__Svc SVC unsigned int __svc(unsigned int, ...)
__wfe WFE void __wfe(void)
__wfi WFI void __wfi(void)
__writex18byte void __writex18byte(işaretsiz uzun, işaretsiz karakter)
__writex18word void __writex18word(işaretsiz uzun, işaretsiz kısa)
__writex18dword void __writex18dword(işaretsiz uzun, işaretsiz uzun)
__writex18qword void __writex18qword(işaretsiz uzun, imzasız __int64)
__umulh unsigned __int64 __umulh(unsigned __int64, unsigned __int64)
_CopyDoubleFromInt64 double _CopyDoubleFromInt64(__int64)
_CopyFloatFromInt32 float _CopyFloatFromInt32(__int32)
_CopyInt32FromFloat __int32 _CopyInt32FromFloat(kayan)
_CopyInt64FromDouble __int64 _CopyInt64FromDouble(çift)
_CountLeadingOnes unsigned int _CountLeadingOnes(unsigned long)
_CountLeadingOnes64 unsigned int _CountLeadingOnes64(unsigned __int64)
_CountLeadingSigns unsigned int _CountLeadingSigns(long)
_CountLeadingSigns64 unsigned int _CountLeadingSigns64(__int64)
_CountLeadingZeros unsigned int _CountLeadingZeros(unsigned long)
_CountLeadingZeros64 unsigned int _CountLeadingZeros64(unsigned __int64)
_CountTrailingZeros unsigned int _CountTrailingZeros(unsigned long)
_CountTrailingZeros64 unsigned int _CountTrailingZeros64(unsigned __int64)
_CountOneBits unsigned int _CountOneBits(unsigned long)
_CountOneBits64 unsigned int _CountOneBits64(unsigned __int64)
_ReadStatusReg BAYAN __int64 _ReadStatusReg(int)
_WriteStatusReg MSR void _WriteStatusReg(int, __int64)

[En üste dön]

Bellek engeli kısıtlamaları

İç işlevler __dmb (veri bellek engeli), __dsb (veri eşitleme engeli) ve __isb (yönerge eşitleme engeli), paylaşım etki alanı ve işlemden etkilenen erişim türü açısından bellek engeli kısıtlamasını belirtmek için aşağıdaki önceden tanımlanmış değerleri kullanır.

Kısıtlama Değeri Açıklama
_ARM64_BARRIER_SY Tam sistem, okuma ve yazma işlemleri.
_ARM64_BARRIER_ST Tam sistem, yalnızca yazar.
_ARM64_BARRIER_LD Tam sistem, salt okunur.
_ARM64_BARRIER_ISH İç paylaşılabilir, okuma ve yazma işlemleri.
_ARM64_BARRIER_ISHST İç paylaşılabilir, yalnızca yazar.
_ARM64_BARRIER_ISHLD İç paylaşılabilir, salt okunur.
_ARM64_BARRIER_NSH Paylaşılamaz, okuma ve yazma işlemleri.
_ARM64_BARRIER_NSHST Paylaşılamaz, yalnızca yazar.
_ARM64_BARRIER_NSHLD Paylaşılamaz, salt okunur.
_ARM64_BARRIER_OSH Dış paylaşılabilir, okuma ve yazma işlemleri.
_ARM64_BARRIER_OSHST Dış paylaşılabilir, yalnızca yazar.
_ARM64_BARRIER_OSHLD Dış paylaşılabilir, salt okunur.

__isb İç için geçerli olan tek kısıtlama _ARM64_BARRIER_SY; diğer tüm değerler mimari tarafından ayrılmıştır.

__iso_volatile_load/iç bilgileri depolama

Bu iç işlevler, derleyici iyileştirmelerine tabi olmayan yükleri ve depoları açıkça gerçekleştirir.

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

Parametreler

Konum
Okuma veya yazma için bellek konumunun adresi.

Value
Belirtilen bellek konumuna yazacak değer (yalnızca iç bilgileri depola).

Dönüş değeri (yalnızca iç bilgileri yükle)

Konum tarafından belirtilen bellek konumunun değeri.

Açıklamalar

derleyici iyileştirmelerine tabi olmayan bellek erişimlerini açıkça gerçekleştirmek için ve __iso_volatile_store8/16/32/64 iç işlevlerini kullanabilirsiniz__iso_volatile_load8/16/32/64. Derleyici bu işlemlerin göreli sırasını kaldıramaz, sentezleyemez veya değiştiremez. Ancak örtük donanım bellek engelleri oluşturmaz. Bu nedenle, donanım yine de birden çok iş parçacığında gözlemlenebilir bellek erişimlerini yeniden sıralayabilir. Daha kesin olarak, bu iç öğeler /volatile:iso altında derlenen aşağıdaki ifadelerle eşdeğerdir.

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;

İçsel değerlerin geçici değişkenleri barındırmak için geçici işaretçiler almasına dikkat edin. Ancak değişken işaretçileri bağımsız değişken olarak kullanma gereksinimi veya önerisi yoktur. Normal, geçici olmayan bir tür kullanıldığında bu işlemlerin semantiği tam olarak aynıdır.

/volatile:iso komut satırı bağımsız değişkeni hakkında daha fazla bilgi için bkz. /volatile (geçici anahtar sözcük yorumlama).

Diğer mimarilerden gelen iç mimariler için ARM64 desteği

Aşağıdaki tabloda ARM64 platformlarında desteklenen diğer mimarilerden gelen iç öğeler listelenmiştir. ARM64'teki bir iç davranışın diğer donanım mimarilerindeki davranışından farklı olduğu durumlarda ek ayrıntılara dikkat edilir.

İşlev Adı İşlev Prototipi
__assume void __assume(int)
__code_seg void __code_seg(const char *)
__debugbreak void __cdecl __debugbreak(void)
__fastfail __declspec(noreturn) void __fastfail(unsigned int)
__nop void __nop(void)
__rekolte void __yield(void) Not: ARM64 platformlarında bu işlev YIELD yönergesini oluşturur. Bu yönerge, iş parçacığının programı olumsuz etkilemeden yürütmeden geçici olarak askıya alınabilecek bir görev (örneğin, bir spinlock) gerçekleştirdiğini gösterir. CPU'nın yürütme döngüleri sırasında başka görevleri yürütmesini sağlar ve aksi takdirde boşa gider.
_AddressOfReturnAddress void * _AddressOfReturnAddress(void)
_BitScanForward unsigned char _BitScanForward(unsigned long * _Index, unsigned long _Mask)
_BitScanForward64 unsigned char _BitScanForward64(unsigned long * _Index, unsigned __int64 _Mask)
_BitScanReverse unsigned char _BitScanReverse(unsigned long * _Index, unsigned long _Mask)
_BitScanReverse64 unsigned char _BitScanReverse64(unsigned long * _Index, unsigned __int64 _Mask)
_bittest unsigned char _bittest(long const *, long)
_bittest64 unsigned char _bittest64(__int64 const *, __int64)
_bittestandcomplement işaretsiz karakter _bittestandcomplement(uzun *, uzun)
_bittestandcomplement64 imzasız char _bittestandcomplement64(__int64 *, __int64)
_bittestandreset işaretsiz karakter _bittestandreset(uzun *, uzun)
_bittestandreset64 imzasız char _bittestandreset64(__int64 *, __int64)
_bittestandset işaretsiz karakter _bittestandset(uzun *, uzun)
_bittestandset64 işaretsiz karakter _bittestandset64(__int64 *, __int64)
_byteswap_uint64 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64)
_byteswap_ulong işaretsiz uzun __cdecl _byteswap_ulong(işaretsiz uzun)
_byteswap_ushort işaretsiz kısa __cdecl _byteswap_ushort(işaretsiz kısa)
_disable void __cdecl _disable(void) Not: ARM64 platformlarında bu işlev yönergeyi MSR DAIFCLR,#2oluşturur; yalnızca içsel olarak kullanılabilir.
_enable void __cdecl _enable(void) Not: ARM64 platformlarında bu işlev yönergeyi MSR DAIFSET,#2oluşturur; yalnızca içsel olarak kullanılabilir.
_lrotl unsigned long __cdecl _lrotl(unsigned long, int)
_lrotr unsigned long __cdecl _lrotr(unsigned long, int)
_ReadBarrier void _ReadBarrier(void)
_ReadWriteBarrier void _ReadWriteBarrier(void)
_ReturnAddress void * _ReturnAddress(void)
_rotl unsigned int __cdecl _rotl(unsigned int _Value, int _Shift)
_rotl16 unsigned short _rotl16(unsigned short _Value, unsigned char _Shift)
_rotl64 unsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift)
_rotl8 imzasız char _rotl8(imzasız karakter _Value, imzasız karakter _Shift)
_rotr unsigned int __cdecl _rotr(unsigned int _Value, int _Shift)
_rotr16 unsigned short _rotr16(unsigned short _Value, unsigned char _Shift)
_rotr64 unsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift)
_rotr8 unsigned char _rotr8(işaretsiz karakter _Value, imzasız char _Shift)
_setjmpex int __cdecl _setjmpex(jmp_buf)
_WriteBarrier void _WriteBarrier(void)

[En üste dön]

Birbirine kenetlenmiş içler

Birbirine kilitlenmiş iç öğeler, atomik okuma-değiştirme-yazma işlemlerini gerçekleştirmek için kullanılan bir dizi iç bilgidir. Bunlardan bazıları tüm platformlarda ortaktır. Bunlar burada ayrı olarak listelenir çünkü çok fazla sayıda vardır. Tanımları çoğunlukla yedekli olduğundan, bunları genel olarak düşünmek daha kolaydır. Adları, tam davranışları türetmek için kullanılabilir.

Aşağıdaki tabloda, bit testi olmayan birbirine bağlı içlerin ARM64 desteği özetlenmiştir. Tablodaki her hücre, satırın en soldaki hücresine işlem adı ve sütunun en üst hücresindeki tür adı öğesine _Interlockedeklenerek türetilen bir ada karşılık gelir. Örneğin, satırın ve sütunun kesişim noktasındaki Xor8 hücreye _InterlockedXor8 karşılık gelir ve tam olarak desteklenir. Desteklenen işlevlerin çoğu şu isteğe bağlı sonekleri sunar: _acq, _relve _nf. Sonek _acq bir "alma" semantiğini, sonek ise _rel "yayın" semantiğini gösterir. _nf veya "çit yok" soneki ARM ve ARM64 için benzersizdir ve sonraki bölümde ele alın almaktadır.

İşlem 8 16 32 64 128 P
Ekle Hiçbiri Hiçbiri Tam Tam Hiçbiri Hiçbiri
And Tam Tam Tam Tam Hiçbiri Hiçbiri
CompareExchange Tam Tam Tam Tam Tam Tam
Azaltma Hiçbiri Tam Tam Tam Hiçbiri Hiçbiri
Exchange Tam Tam Tam Tam Hiçbiri Tam
ExchangeAdd Tam Tam Tam Tam Hiçbiri Hiçbiri
Artış Hiçbiri Tam Tam Tam Hiçbiri Hiçbiri
Or Tam Tam Tam Tam Hiçbiri Hiçbiri
Xor Tam Tam Tam Tam Hiçbiri Hiçbiri

Anahtar:

  • Tam: düz, _acq, _relve _nf formlarını destekler.

  • Hiçbiri: Desteklenmez

_nf (çit yok) soneki

_nf veya "çit yok" soneki, işlemin diğer üç biçimden (düz, _acqve _rel) farklı olarak herhangi bir tür bellek engeli gibi davranmadığını ve bunların tümünün bir tür bariyer gibi davrandığını belirtir. Formların _nf olası bir kullanımı, aynı anda birden çok iş parçacığı tarafından güncelleştirilen ancak birden çok iş parçacığı yürütülürken değeri başka bir şekilde kullanılmayan bir istatistik sayacı tutmaktır.

Birbirine kenetlenmiş içlerin listesi

İşlev Adı İşlev Prototipi
_InterlockedAdd long _InterlockedAdd(uzun _volatile *, uzun)
_InterlockedAdd64 __int64 _InterlockedAdd64(__int64 geçici *, __int64)
_InterlockedAdd64_acq __int64 _InterlockedAdd64_acq(__int64 geçici *, __int64)
_InterlockedAdd64_nf __int64 _InterlockedAdd64_nf(__int64 geçici *, __int64)
_InterlockedAdd64_rel __int64 _InterlockedAdd64_rel(__int64 geçici *, __int64)
_InterlockedAdd_acq long _InterlockedAdd_acq(uzun geçici *, uzun)
_InterlockedAdd_nf uzun _InterlockedAdd_nf(uzun geçici *, uzun)
_InterlockedAdd_rel long _InterlockedAdd_rel(uzun geçici *, uzun)
_InterlockedAnd long _InterlockedAnd(uzun geçici *, uzun)
_InterlockedAnd16 short _InterlockedAnd16(kısa geçici *, kısa)
_InterlockedAnd16_acq kısa _InterlockedAnd16_acq(kısa geçici *, kısa)
_InterlockedAnd16_nf kısa _InterlockedAnd16_nf(kısa geçici *, kısa)
_InterlockedAnd16_rel kısa _InterlockedAnd16_rel(kısa geçici *, kısa)
_InterlockedAnd64 __int64 _InterlockedAnd64(__int64 geçici *, __int64)
_InterlockedAnd64_acq __int64 _InterlockedAnd64_acq(__int64 geçici *, __int64)
_InterlockedAnd64_nf __int64 _InterlockedAnd64_nf(__int64 geçici *, __int64)
_InterlockedAnd64_rel __int64 _InterlockedAnd64_rel(__int64 geçici *, __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 uzun _InterlockedAnd_acq(uzun geçici *, uzun)
_InterlockedAnd_nf long _InterlockedAnd_nf(uzun geçici *, uzun)
_InterlockedAnd_rel long _InterlockedAnd_rel(uzun geçici *, uzun)
_InterlockedCompareExchange long __cdecl _InterlockedCompareExchange(uzun geçici *, uzun, uzun)
_InterlockedCompareExchange_acq long _InterlockedCompareExchange_acq(uzun geçici *, uzun, uzun)
_InterlockedCompareExchange_nf uzun _InterlockedCompareExchange_nf(uzun geçici *, uzun, uzun)
_InterlockedCompareExchange_rel long _InterlockedCompareExchange_rel(uzun geçici *, uzun, uzun)
_InterlockedCompareExchange16 kısa _InterlockedCompareExchange16(kısa geçici *, kısa, kısa)
_InterlockedCompareExchange16_acq kısa _InterlockedCompareExchange16_acq(kısa geçici *, kısa, kısa)
_InterlockedCompareExchange16_nf kısa _InterlockedCompareExchange16_nf(kısa geçici *, kısa, kısa)
_InterlockedCompareExchange16_rel kısa _InterlockedCompareExchange16_rel(kısa geçici *, kısa, kısa)
_InterlockedCompareExchange64 __int64 _InterlockedCompareExchange64(__int64 geçici *, __int64, __int64)
_InterlockedCompareExchange64_acq __int64 _InterlockedCompareExchange64_acq(__int64 geçici *, __int64, __int64)
_InterlockedCompareExchange64_nf __int64 _InterlockedCompareExchange64_nf(__int64 geçici *, __int64, __int64)
_InterlockedCompareExchange64_rel __int64 _InterlockedCompareExchange64_rel(__int64 geçici *, __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(void * volatile *, void *, void *)
_InterlockedCompareExchangePointer_acq void * _InterlockedCompareExchangePointer_acq(void * volatile *, void *, void *)
_InterlockedCompareExchangePointer_nf void * _InterlockedCompareExchangePointer_nf(void * volatile *, void *, void *)
_InterlockedCompareExchangePointer_rel void * _InterlockedCompareExchangePointer_rel(void * volatile *, void *, void *)
_InterlockedCompareExchange128 imzasız char _InterlockedCompareExchange128(__int64 geçici * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult)
_InterlockedCompareExchange128_acq imzasız char _InterlockedCompareExchange128_acq(__int64 geçici * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult)
_InterlockedCompareExchange128_nf imzasız char _InterlockedCompareExchange128_nf(__int64 geçici * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult)
_InterlockedCompareExchange128_rel unsigned char _InterlockedCompareExchange128_rel(__int64 geçici * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult)
_InterlockedDecrement long __cdecl _InterlockedDecrement(uzun geçici *)
_InterlockedDecrement16 kısa _InterlockedDecrement16(kısa geçici *)
_InterlockedDecrement16_acq kısa _InterlockedDecrement16_acq(kısa geçici *)
_InterlockedDecrement16_nf kısa _InterlockedDecrement16_nf(kısa geçici *)
_InterlockedDecrement16_rel kısa _InterlockedDecrement16_rel(kısa geçici *)
_InterlockedDecrement64 __int64 _InterlockedDecrement64(__int64 geçici *)
_InterlockedDecrement64_acq __int64 _InterlockedDecrement64_acq(__int64 geçici *)
_InterlockedDecrement64_nf __int64 _InterlockedDecrement64_nf(__int64 geçici *)
_InterlockedDecrement64_rel __int64 _InterlockedDecrement64_rel(__int64 geçici *)
_InterlockedDecrement_acq long _InterlockedDecrement_acq(long volatile *)
_InterlockedDecrement_nf long _InterlockedDecrement_nf(uzun geçici *)
_InterlockedDecrement_rel long _InterlockedDecrement_rel(long volatile *)
_InterlockedExchange long __cdecl _InterlockedExchange(uzun geçici * _Target, uzun)
_InterlockedExchange_acq long _InterlockedExchange_acq(uzun geçici * _Target, uzun)
_InterlockedExchange_nf long _InterlockedExchange_nf(uzun geçici * _Target, uzun)
_InterlockedExchange_rel long _InterlockedExchange_rel(uzun geçici * _Target, uzun)
_InterlockedExchange16 kısa _InterlockedExchange16(kısa geçici * _Target, kısa)
_InterlockedExchange16_acq kısa _InterlockedExchange16_acq(kısa geçici * _Target, kısa)
_InterlockedExchange16_nf short _InterlockedExchange16_nf(kısa geçici * _Target, kısa)
_InterlockedExchange16_rel short _InterlockedExchange16_rel(kısa geçici * _Target, kısa)
_InterlockedExchange64 __int64 _InterlockedExchange64(__int64 geçici * _Target, __int64)
_InterlockedExchange64_acq __int64 _InterlockedExchange64_acq(__int64 geçici * _Target, __int64)
_InterlockedExchange64_nf __int64 _InterlockedExchange64_nf(__int64 geçici * _Target, __int64)
_InterlockedExchange64_rel __int64 _InterlockedExchange64_rel(__int64 geçici * _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)
_InterlockedExchange8_rel char _InterlockedExchange8_rel(char volatile * _Target, char)
_InterlockedExchangeAdd long __cdecl _InterlockedExchangeAdd(uzun geçici *, uzun)
_InterlockedExchangeAdd16 kısa _InterlockedExchangeAdd16(kısa geçici *, kısa)
_InterlockedExchangeAdd16_acq kısa _InterlockedExchangeAdd16_acq(kısa geçici *, kısa)
_InterlockedExchangeAdd16_nf kısa _InterlockedExchangeAdd16_nf(kısa geçici *, kısa)
_InterlockedExchangeAdd16_rel kısa _InterlockedExchangeAdd16_rel(kısa geçici *, kısa)
_InterlockedExchangeAdd64 __int64 _InterlockedExchangeAdd64(__int64 geçici *, __int64)
_InterlockedExchangeAdd64_acq __int64 _InterlockedExchangeAdd64_acq(__int64 geçici *, __int64)
_InterlockedExchangeAdd64_nf __int64 _InterlockedExchangeAdd64_nf(__int64 geçici *, __int64)
_InterlockedExchangeAdd64_rel __int64 _InterlockedExchangeAdd64_rel(__int64 geçici *, __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 long _InterlockedExchangeAdd_acq(uzun geçici *, uzun)
_InterlockedExchangeAdd_nf uzun _InterlockedExchangeAdd_nf(uzun geçici *, uzun)
_InterlockedExchangeAdd_rel long _InterlockedExchangeAdd_rel(uzun geçici *, uzun)
_InterlockedExchangePointer void * _InterlockedExchangePointer(void * volatile * _Target, void *)
_InterlockedExchangePointer_acq void * _InterlockedExchangePointer_acq(void * volatile * _Target, void *)
_InterlockedExchangePointer_nf void * _InterlockedExchangePointer_nf(void * volatile * _Target, void *)
_InterlockedExchangePointer_rel void * _InterlockedExchangePointer_rel(void * volatile * _Target, void *)
_InterlockedIncrement long __cdecl _InterlockedIncrement(long volatile *)
_InterlockedIncrement16 kısa _InterlockedIncrement16(kısa geçici *)
_InterlockedIncrement16_acq kısa _InterlockedIncrement16_acq(kısa geçici *)
_InterlockedIncrement16_nf kısa _InterlockedIncrement16_nf(kısa geçici *)
_InterlockedIncrement16_rel short _InterlockedIncrement16_rel(kısa geçici *)
_InterlockedIncrement64 __int64 _InterlockedIncrement64(__int64 geçici *)
_InterlockedIncrement64_acq __int64 _InterlockedIncrement64_acq(__int64 geçici *)
_InterlockedIncrement64_nf __int64 _InterlockedIncrement64_nf(__int64 geçici *)
_InterlockedIncrement64_rel __int64 _InterlockedIncrement64_rel(__int64 geçici *)
_InterlockedIncrement_acq long _InterlockedIncrement_acq(uzun geçici *)
_InterlockedIncrement_nf uzun _InterlockedIncrement_nf(uzun geçici *)
_InterlockedIncrement_rel uzun _InterlockedIncrement_rel(uzun geçici *)
_InterlockedOr uzun _InterlockedOr(uzun geçici *, uzun)
_InterlockedOr16 kısa _InterlockedOr16(kısa geçici *, kısa)
_InterlockedOr16_acq short _InterlockedOr16_acq(kısa geçici *, kısa)
_InterlockedOr16_nf kısa _InterlockedOr16_nf(kısa geçici *, kısa)
_InterlockedOr16_rel kısa _InterlockedOr16_rel(kısa geçici *, kısa)
_InterlockedOr64 __int64 _InterlockedOr64(__int64 geçici *, __int64)
_InterlockedOr64_acq __int64 _InterlockedOr64_acq(__int64 geçici *, __int64)
_InterlockedOr64_nf __int64 _InterlockedOr64_nf(__int64 geçici *, __int64)
_InterlockedOr64_rel __int64 _InterlockedOr64_rel(__int64 geçici *, __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 uzun _InterlockedOr_acq(uzun geçici *, uzun)
_InterlockedOr_nf long _InterlockedOr_nf(uzun geçici *, uzun)
_InterlockedOr_rel uzun _InterlockedOr_rel(uzun geçici *, uzun)
_InterlockedXor long _InterlockedXor(uzun geçici *, uzun)
_InterlockedXor16 kısa _InterlockedXor16(kısa geçici *, kısa)
_InterlockedXor16_acq kısa _InterlockedXor16_acq(kısa geçici *, kısa)
_InterlockedXor16_nf kısa _InterlockedXor16_nf(kısa geçici *, kısa)
_InterlockedXor16_rel kısa _InterlockedXor16_rel(kısa geçici *, kısa)
_InterlockedXor64 __int64 _InterlockedXor64(__int64 geçici *, __int64)
_InterlockedXor64_acq __int64 _InterlockedXor64_acq(__int64 geçici *, __int64)
_InterlockedXor64_nf __int64 _InterlockedXor64_nf(__int64 geçici *, __int64)
_InterlockedXor64_rel __int64 _InterlockedXor64_rel(__int64 geçici *, __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 uzun _InterlockedXor_acq(uzun geçici *, uzun)
_InterlockedXor_nf long _InterlockedXor_nf(uzun geçici *, uzun)
_InterlockedXor_rel long _InterlockedXor_rel(uzun geçici *, uzun)

[En üste dön]

_interlockedbittest iç bilgileri

Düz kilitlenmiş bit testi iç özellikleri tüm platformlarda ortaktır. ARM64, bu makalenin önceki bölümlerinde _nf (çit yok) Soneki'nde açıklandığı gibi yalnızca bir işlemin bariyer semantiğini değiştiren , _relve _nf değişkenlerini ekler_acq.

İşlev Adı İşlev Prototipi
_interlockedbittestandreset işaretsiz char _interlockedbittestandreset(uzun geçici *, uzun)
_interlockedbittestandreset_acq işaretsiz char _interlockedbittestandreset_acq(uzun geçici *, uzun)
_interlockedbittestandreset_nf işaretsiz char _interlockedbittestandreset_nf(uzun geçici *, uzun)
_interlockedbittestandreset_rel işaretsiz char _interlockedbittestandreset_rel(uzun geçici *, uzun)
_interlockedbittestandreset64 işaretsiz char _interlockedbittestandreset64(__int64 geçici *, __int64)
_interlockedbittestandreset64_acq işaretsiz char _interlockedbittestandreset64_acq(__int64 geçici *, __int64)
_interlockedbittestandreset64_nf işaretsiz char _interlockedbittestandreset64_nf(__int64 geçici *, __int64)
_interlockedbittestandreset64_rel işaretsiz char _interlockedbittestandreset64_rel(__int64 geçici *, __int64)
_interlockedbittestandset işaretsiz char _interlockedbittestandset(uzun geçici *, uzun)
_interlockedbittestandset_acq işaretsiz char _interlockedbittestandset_acq(uzun geçici *, uzun)
_interlockedbittestandset_nf işaretsiz char _interlockedbittestandset_nf(uzun geçici *, uzun)
_interlockedbittestandset_rel işaretsiz char _interlockedbittestandset_rel(uzun geçici *, uzun)
_interlockedbittestandset64 işaretsiz char _interlockedbittestandset64(__int64 geçici *, __int64)
_interlockedbittestandset64_acq işaretsiz char _interlockedbittestandset64_acq(__int64 geçici *, __int64)
_interlockedbittestandset64_nf işaretsiz char _interlockedbittestandset64_nf(__int64 geçici *, __int64)
_interlockedbittestandset64_rel işaretsiz char _interlockedbittestandset64_rel(__int64 geçici *, __int64)

[En üste dön]

Ayrıca bkz.

Derleyici iç bilgileri
ARM iç bilgileri
ARM assembler başvurusu
C++ dil başvurusu