मुझे कॉर्टेक्स-ए 9 कोर (वीएफपी निर्देशों की अनुमति) पर नियॉन रजिस्टरों (Q0 और Q3 कहें) में संग्रहीत मूल्यों की तुलना करने का सबसे तेज़ तरीका (निम्न चक्र गणना) खोजने में रूचि है।एआरएम नियॉन: 128 बिट मानों की तुलना
(1) VFP चल बिन्दु तुलना का उपयोग:
अब तक मैं निम्नलिखित है
vcmp.f64 d0, d6
vmrs APSR_nzcv, fpscr
vcmpeq.f64 d1, d7
vmrseq APSR_nzcv, fpscr
64 बिट "तैरता" अगर NaN के बराबर हैं, इस संस्करण काम नहीं करेगा।
(2) नियोन संकुचन और VFP तुलना का उपयोग (इस समय केवल एक बार और एक NaN-सुरक्षित तरीके से):
vceq.i32 q15, q0, q3
vmovn.i32 d31, q15
vshl.s16 d31, d31, #8
vcmp.f64 d31, d29
vmrs APSR_nzcv, fpscr
D29 रजिस्टर पहले से सही 16bit पैटर्न पहले से लोड:
vmov.i16 d29, #65280 ; 0xff00
मेरा प्रश्न है: क्या इससे कोई बेहतर है? क्या मैं इसे करने के कुछ स्पष्ट तरीके से देख रहा हूं?
पहले intruction "अधिलेखित कर देता है" पूरे प्रश्न 15 (अर्थात D30 और D31) है, जबकि दूसरा केवल एक _destination_ के रूप में D31 है, इसलिए कुछ जानकारी खो जाती है और तुलना हमेशा सही परिणाम नहीं होगा। – Mircea
जब आप vceq.i32 का उपयोग करते हैं, तो यह सभी 1 या सभी 0 को 4 32-बिट लेन में से प्रत्येक में रखता है। पहला निर्देश D30 और D31 से D31 में उपयोगी जानकारी को जोड़ता है (सभी 4 तुलनाओं के निचले 16-बिट)। दूसरा निर्देश निम्न 64-बिट्स की तुलना करता है जो सभी उपयोगी जानकारी है। – BitBank
पहला निर्देश (यानी vceq.i32) कुछ भी "गठबंधन" नहीं करता है। इसके अलावा, दूसरा एक इनपुट के रूप में D31 का उपयोग नहीं करता है ... – Mircea