2010-11-04 14 views
6

कैसे आप 86 में 128 बिट परमाणु संचालन को प्राप्त होगा?86 128 बिट परमाणु ऑप्स

इंटेल की सिस्टम प्रोग्रामिंग गाइड, भाग 1, 8.1 लॉक परमाणु संचालन गारंटीकृत 16-, 32-, और 64-बिट परमाणु संचालन निर्दिष्ट करता है। तो, क्या आप LOCK उपसर्ग के साथ 2 64-बिट ऑप्स करके 128-बिट परमाणु संचालन प्राप्त कर सकते हैं? कुछ की तरह ...

LOCK mov 64bits->addr 
LOCK mov 64bits->addr+64bits 

Aparently SSE 128 बिट XMM रजिस्टरों है। क्या आप इन रजिस्टरों का उपयोग करके 128-बिट तुलना-और-स्वैप कर सकते हैं?

+9

आप एक परमाणु 16-बाइट तुलना एक्सचेंज ('CMPXCHG16B') कर सकते हैं। –

+0

आप या 32-बिट x86 में ऐसा करने की कोशिश कर रहा, 64 में हैं? – user200783

+0

x86_64, 64-बिट मोड – brooksbp

उत्तर

9

LOCK उपसर्ग का उपयोग MOV निर्देश के साथ संयोजन में नहीं किया जा सकता है।

लॉक उपसर्ग केवल निम्नलिखित निर्देशों के लिए और केवल निर्देश जहां गंतव्य संकार्य एक स्मृति संकार्य है के यह रूप के लिए prepended जा सकता है: जोड़ें, एडीसी, और, बीटीसी, BTR, बीटीएस, CMPXCHG, CMPXCH8B, डीईसी, आईएनसी, एनईजी, नहीं, या, एसबीबी, एसयूबी, एक्सओआर, एक्सएडीडी, और एक्ससीएचजी। Intel Instruction Set Reference

ऐसा करने से एक अमान्य Opcode अपवाद उत्पन्न होगा। तो LOCK CMPXCHG16B यहां एकमात्र तरीका है।

+0

आप एक CMPXCHG पर 'लॉक 'उपसर्ग की ज़रूरत है? लगता है अनावश्यक .. – brooksbp

+0

के संबंध में इंटेल निर्देश सेट संदर्भ में एक 'लॉक' आवश्यक है। "इस निर्देश का उपयोग LOCK उपसर्ग के साथ किया जा सकता है ताकि निर्देश को परमाणु रूप से निष्पादित किया जा सके। प्रोसेसर की बस में इंटरफ़ेस को सरल बनाने के लिए, गंतव्य ऑपरेंड को तुलना के परिणाम के बिना एक लेखन चक्र प्राप्त होता है।" – bkausbk

+0

@brooksbp: वहाँ (https://stackoverflow.com/a/44273130/224132), जैसे [ 'lock' बिना' cmpxchg' के लिए उपयोग-मामले] कर रहे हैं एक एमएमआईओ पोर्ट के अलावा स्मृति पर उपयोग के लिए यूनिप्रोसेसर सिस्टम। यह स्मृति-गंतव्य 'ऐड' और अन्य निर्देशों के साथ संगत बनाता है जो समरूपता के अलावा स्पष्ट उपयोग करते हैं। –

संबंधित मुद्दे