2016-04-23 4 views
5

मेरा प्रश्न अर्थ जो ऐसे vmin *, VCVTT *, VGETEXT *, VREDUCE * के रूप में एसएई नियंत्रण (सभी अपवाद को रोकें), की अनुमति देने के गोलाई बिना EVEX एन्कोड पैक रेग-रेग निर्देश चिंताओं, VRANGE * आदि इंटेल केवल 512 बिट वेक्टर लंबाई के साथ SAE- जागरूकता घोषित करता है, उदाहरण के लिएAVX512 वेक्टर लंबाई और SAE नियंत्रण

VMINPD xmm1 {k1}{z}, xmm2, xmm3 
VMINPD ymm1 {k1}{z}, ymm2, ymm3 
VMINPD zmm1 {k1}{z}, zmm2, zmm3{sae} 

लेकिन मैं एक कारण है कि एसएई निर्देश जहां XMM या YMM रजिस्टरों उपयोग किया जाता है के लिए लागू नहीं किया जा सका नहीं दिख रहा।

Intel Instruction Set Extensions Programming Reference तालिका 4-7 की 4.6.4 अध्याय में कहते हैं अर्थ बिट EVEX.b गोलाई के बिना दिए गए निर्देशों में यह बताता है कि कि एसएई लागू किया जाता है, और बिट्स स्पष्ट वेक्टर लंबाई निर्दिष्ट EVEX.L'L:

00b: 128bit (XMM) 
01b: 256bit (YMM) 
10b: 512bit (ZMM) 
11b: reserved 

इसलिए उनका संयोजन कानूनी होना चाहिए।

हालांकि एनएएसएम असेंबल vminpd zmm1,zmm2,zmm3,{sae} 62F1ED185DCB, यानी EVEX.L'L = 00b, EVEX.b = 1, जो NDISASM 2.12 से वापस disassembled है vminpd xmm1,xmm2,xmm3

एनएएसएम vminpd ymm1,ymm2,ymm3,{sae} इकट्ठा करने के लिए मना कर दिया और NDISASM 62F1ED385DCB (disassembles के रूप में के रूप में EVEX.L'L = 01B, EVEX.b = 1) के रूप में vminpd xmm1,xmm2,xmm3

मुझे आश्चर्य है कि कैसे शूरवीरों लैंडिंग सीपीयू पर अमल करता है VMINPD ymm1, ymm2, ymm3{sae} (62F1ED385DCB के रूप में इकट्ठा किया, EVEX.L'L = 01B, EVEX.b = 1):

  1. सीपीयू एक अपवाद फेंकता है। इंटेल दस्तावेज़ तालिका 4-7 भ्रामक है।
  2. एसएई प्रभाव में है, सीपीयू केवल xmm के साथ काम करता है, जैसे स्केलर संचालन में। NASM और NDISASM सही करते हैं, इंटेल दस्तावेज़ गलत है।
  3. एसएई को नजरअंदाज कर दिया गया है, सीपीयू इंटेल डॉक में वीएमआईएनपीडी विनिर्देश के अनुसार 256 बिट्स के साथ काम करता है। NASM & एनडीआईएसएएसएम गलत हैं।
  4. एसईई प्रभाव में है, सीपीयू 256 बिट्स के साथ संचालित होता है जैसा कि निर्देश कोड में निर्दिष्ट है। NASM और NDISASM गलत हैं, इंटेल दस्तावेज़ को {sae} के साथ पूरक सजावट xmm/ymm निर्देशों की आवश्यकता है।
  5. एसईई प्रभाव में है, सीपीयू ईवीएक्सएक्सएल के बावजूद अंतर्निहित पूर्ण वेक्टर आकार 512 बिट्स के साथ काम करता है, जैसे स्थिर ग्राउंडिंग {er} की अनुमति है। एनडीआईएसएएसएम और इंटेल डॉक्टर तालिका 4-7 गलत हैं।

उत्तर

4

आपका VMINPD ymm1, ymm2, ymm3{sae} निर्देश अमान्य है। Intel Architecture Instruction Set Extensions Programming Reference (February 2016) में MINPD के लिए अनुदेश सेट संदर्भ के अनुसार केवल निम्नलिखित एन्कोडिंग अनुमति दी जाती है:

66 0F 5D /r     MINPD xmm1, xmm2/m128 
VEX.NDS.128.66.0F.WIG 5D /r VMINPD xmm1, xmm2, xmm3/m128 
VEX.NDS.256.66.0F.WIG 5D /r VMINPD ymm1, ymm2, ymm3/m256 
EVEX.NDS.128.66.0F.W1 5D /r VMINPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst 
EVEX.NDS.256.66.0F.W1 5D /r VMINPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst 
EVEX.NDS.512.66.0F.W1 5D /r VMINPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae} 

सूचना है कि केवल पिछले संस्करण एक {sae} प्रत्यय के साथ दिखाया गया है, जिसका अर्थ यह शिक्षा का ही रूप है आप इसे इसके साथ उपयोग करने की अनुमति है। सिर्फ इसलिए कि बिट्स किसी विशेष निर्देश को एन्कोड करने के लिए मौजूद हैं इसका मतलब यह मान्य नहीं है।

यह भी ध्यान दें कि धारा 4.6।3, EVEX में एसएई समर्थन, यह स्पष्ट करता है कि एसएई 128 बिट या 256-बिट वैक्टर पर लागू नहीं होता:

EVEX एन्कोडिंग प्रणाली के साथ एन्कोड करने की अर्थ गोलाई के बिना गणित फ्लोटिंग प्वाइंट निर्देश की अनुमति देता है एसईई विशेषता। यह क्षमता स्केलर और 512-बिट वेक्टर लंबाई पर लागू होती है, केवल पंजीकरण-से-रजिस्टर, सेटिंग EVEX.b. पर। जब EVEX.b सेट किया गया है, "सभी अपवादों को दबाएं" निहित है। [...]

मुझे यकीन है कि फिर भी है कि क्या अपने हाथ से तैयार अनुदेश, अमान्य Opcode अपवाद उत्पन्न होता अगर EVEX.b बिट बस नजरअंदाज कर दिया जाएगा नहीं कर रहा हूँ, या अगर EVEX.L'L बिट्स हो जाएगा अवहेलना करना। EVEX इनकोडिंग VMINPD निर्देश प्रकार E2 अपवाद वर्ग के हैं, और टेबल 4-17 के अनुसार, प्रकार E2 कक्षा अपवाद शर्तों, अनुदेश एक #UD अपवाद निम्नलिखित मामलों में से किसी में उत्पन्न कर सकते हैं:

  • राज्य आवश्यकता, तालिका 4-8 से मुलाकात नहीं की।
  • तालिका 4-9 में स्वतंत्र #UD स्थिति को ओपोड करें।
  • तालिका 4-10 में #UD स्थितियों को एन्कोडिंग करें।
  • तालिका 4-11 की ओपमास्क एन्कोडिंग #UD स्थिति।
  • यदि EVEX.L'L! = 10b (VL = 512)।

केवल कि पिछले कारण यहां लागू करने के लिए लगता है, लेकिन यह मतलब यह होगा कि अपनी शिक्षा के साथ या {sae} आपरिवर्तक के बिना #UD अपवाद उत्पन्न होगा। चूंकि यह निर्देश सारांश में अनुमत एन्कोडिंग का सीधे विरोध करता है, मुझे यकीन नहीं है कि क्या होगा।

+0

अच्छा बिंदु कि दस्तावेज़ कहते हैं कि आप एन्कोडिंग विवरणों के बावजूद इसे नहीं कर सकते हैं। हालांकि, मिस्टिकियल का जवाब बताता है कि EVEX.L'L EVEX.RC को ओवरलैप करता है, और EVEX.b चुनता है कि किसके बारे में उनका अर्थ है। –

+0

@ पीटरकॉर्डस, जैसा कि प्रश्न में बताया गया है, तालिका 4-7 उस व्याख्या के विपरीत है। यह कहता है कि "एफपी निर्देश डब्ल्यू/ओ अर्थात् राउंडिंग, #XF का कारण बन सकता है" कि EVEX.b EVEX.L'L निर्धारित करता है "वेयर कंट्रोल" का चयन करता है जबकि वेक्टर लंबाई और EVEX.RC लागू नहीं होता है। तालिका के अनुसार यह निर्देश प्रकार है जो 'पी 2 [6: 5] 'की व्याख्या निर्धारित करता है। तो उदाहरण के लिए 'वीएमआईएनपीडी वाईएम 1, वाईएम 2, [रैक्स] {1to8} 'में EVEX.b सेट है जबकि EVEX.L'L 01b है और EVEX.RC एन/ए है। ओपी समस्या यह है कि यह '{sae}' के लिए काम नहीं करता है। एन्कोडिंग वह चाहता है कि वह मौजूद है, लेकिन इसकी अनुमति नहीं है। –

+0

प्रारंभ में, मैं आपके उत्तर से दृढ़ता से असहमत था। लेकिन विस्तार से तालिका 4-7 के माध्यम से जाने के बाद, मैंने यह निर्धारित किया है कि पीडीएफ या तो अपूर्ण है या इसके विपरीत है। एफपी निर्देशों में "राउंडिंग अर्थशास्त्र" की अवधारणा है। लेकिन उस दस्तावेज़ में कोई सूची नहीं है जिसमें कहा गया है कि कौन से निर्देशों की कमी है। तालिका 4-7 में कहा गया है कि 'पी 2 [6: 5]' को एफपी निर्देशों के लिए हमेशा 'EVEX.L'L' के रूप में व्याख्या किया जाता है जिसमें "राउंडिंग सेमेन्टिक्स" की कमी होती है। – Mysticial

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