result = vml (matrix[0], vector);
result = vmla (result, matrix[1], vector);
result = vmla (result, matrix[2], vector);
result = vmla (result, matrix[3], vector);
यह अनुक्रम काम नहीं करेगा, हालांकि।
result.x = vector.x * (matrix[0][0] + matrix[1][0] + matrix[2][0] + matrix[3][0]);
...
सही क्रम होगा:: समस्या जम जाता है कि एक्स घटक केवल मैट्रिक्स पंक्तियों के द्वारा ठीक किया एक्स और के रूप में व्यक्त किया जा सकता है
result = vml (matrix[0], vector.xxxx);
result = vmla(result, matrix[1], vector.yyyy);
...
नीयन और एसएसई में फ़ील्ड के लिए अंतर्निहित चयन नहीं है (इसके लिए प्रति वेक्टर रजिस्टर में निर्देश इंकोडिंग में 8 बिट्स की आवश्यकता होगी)। उदाहरण के लिए जीएलएसएल/एचएलएसएल में इस प्रकार की सुविधाएं हैं, इसलिए अधिकांश जीपीयू भी हैं। इस लक्ष्य को हासिल करने के लिए
वैकल्पिक तरीका होगा:
result.x = dp4(vector, matrix[0]);
result.y = dp4(vector, matrix[1]);
... // और हां, मैट्रिक्स इस एक ही परिणाम
mul उपज के लिए स्थानांतरित किया जाएगा, MADD, MADD, मैड अनुक्रम आमतौर पर पसंद किया जाता है क्योंकि इसे लक्षित रजिस्टर फ़ील्ड के लिए लेखन मास्क की आवश्यकता नहीं होती है।
अन्यथा कोड अच्छा दिखता है। =)
जीसीसी दस्तावेज़ (और जीसीसी इंट्रिनिक्स पर आधारित अंतर्दृष्टि के लिए वास्तविक दृश्य दस्तावेज़) बहुत स्पष्ट हैं ... यदि आपको कोई सभ्य उत्तर नहीं मिलता है, तो मैं बस एक संकलन करने का सुझाव दूंगा कुछ कॉल और उत्पादन के असेंबली पर एक नज़र डालने। इससे आपको एक बहुत अच्छा विचार मिलना चाहिए (भले ही यह जाने का आदर्श तरीका है)। –