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.h
sağ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.h
belirtildiğ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,#2 oluşturur; yalnızca içsel olarak kullanılabilir. |
_enable | void __cdecl _enable(void) Not: ARM64 platformlarında bu işlev yönergeyi MSR DAIFSET,#2 oluş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 _Interlocked
eklenerek türetilen bir ada karşılık gelir. Örneğin, satırın ve sütunun kesişim noktasındaki Xor
8
hücreye _InterlockedXor8
karşılık gelir ve tam olarak desteklenir. Desteklenen işlevlerin çoğu şu isteğe bağlı sonekleri sunar: _acq
, _rel
ve _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
,_rel
ve_nf
formlarını destekler.Hiçbiri: Desteklenmez
_nf (çit yok) soneki
_nf
veya "çit yok" soneki, işlemin diğer üç biçimden (düz, _acq
ve _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 , _rel
ve _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