मैं एसएसई (2/3) रजिस्टरों में संकलन समय निरंतर फ्लोट लोड करने का एक प्रभावी तरीका जानने का प्रयास कर रहा हूं। मैंने इस तरह के सरल कोड करने की कोशिश की है,लोड एसएसई रजिस्टरों में निरंतर फ्लोट
const __m128 x = { 1.0f, 2.0f, 3.0f, 4.0f };
लेकिन यह स्मृति से 4 movss निर्देश उत्पन्न करता है!
movss xmm0,dword ptr [[email protected] (14048E534h)]
movss xmm1,dword ptr [[email protected] (14048E530h)]
movaps xmm6,xmm12
shufps xmm6,xmm12,0C6h
movss dword ptr [rsp],xmm0
movss xmm0,dword ptr [[email protected] (14048E52Ch)]
movss dword ptr [rsp+4],xmm1
movss xmm1,dword ptr [[email protected] (14048E528h)]
.. में और स्मृति से बाहर ... (?!?!)
इस हालांकि कर जो scalars लोड
float Align(16) myfloat4[4] = { 1.0f, 2.0f, 3.0f, 4.0f, }; // out in global scope
उत्पन्न करता है।
movaps xmm5,xmmword ptr [::myarray4 (140512050h)]
आदर्श रूप में, यह अच्छा होगा यदि मैं स्थिरांक उनके एक तरह से स्पर्श स्मृति को भी यह स्पष्ट नहीं होगा और सिर्फ तत्काल शैली के निर्देश के साथ यह करना है हो सकता है (उदाहरण के लिए स्थिरांक अनुदेश ही में संकलित)।
धन्यवाद
इस जैसे
उच्च प्रदर्शन एसएसई/2 कोड के लिए, मैं अत्यधिक जीसीसी/आईसीसी का उपयोग करने का सुझाव देता हूं। इस बारे में अधिक जानकारी के लिए इसे पढ़ें - http://www.liranuna.com/sse-intrinsics-optimizations-in-popular-compilers/ – LiraNuna