x86 मशीन कोड (SSE2 के साथ), 36 बाइट्स
; bool CirclesOverlap(double x1, double y1, double r1,
; double x2, double y2, double r2);
F2 0F 5C C3 subsd xmm0, xmm3 ; x1 - x2
F2 0F 5C CC subsd xmm1, xmm4 ; y1 - y2
F2 0F 58 D5 addsd xmm2, xmm5 ; r1 + r2
F2 0F 59 C0 mulsd xmm0, xmm0 ; (x1 - x2)^2
F2 0F 59 C9 mulsd xmm1, xmm1 ; (y1 - y2)^2
F2 0F 59 D2 mulsd xmm2, xmm2 ; (r1 + r2)^2
F2 0F 58 C1 addsd xmm0, xmm1 ; (x1 - x2)^2 + (y1 - y2)^2
66 0F 2F D0 comisd xmm2, xmm0
0F 97 C0 seta al ; ((r1 + r2)^2) > ((x1 - x2)^2 + (y1 - y2)^2)
C3 ret
उपरोक्त फ़ंक्शन दो हलकों (x- और y- केंद्र बिंदु और एक त्रिज्या के y- निर्देशांक) के विवरणों को स्वीकार करता है, और एक बूलियन मान देता है जो यह संकेत देता है कि वे प्रतिच्छेद करते हैं या नहीं।
यह एक वेक्टर कॉलिंग कन्वेंशन का उपयोग करता है, जहां पैरामीटर SIMD रजिस्टरों में पारित किए जाते हैं। X86-32 और 64-बिट विंडोज पर, यह __vectorcallकॉलिंग कन्वेंशन है । 64-बिट यूनिक्स / लिनक्स / ग्नू पर, यह मानक सिस्टम वी एएमडी 64 कॉलिंग कन्वेंशन है ।
वापसी मूल्य कम बाइट में छोड़ दिया EAXजाता है, जैसा कि सभी x86 कॉलिंग कन्वेंशन के साथ मानक है।
यह कोड 32-बिट और 64-बिट x86 प्रोसेसर पर समान रूप से अच्छी तरह से काम करता है, जब तक कि वे SSE2 निर्देश सेट (जो इंटेल पेंटियम 4 और बाद में, या एएमडी एथलॉन 64 और बाद में होगा) का समर्थन करते हैं।
AVX संस्करण, अभी भी 36 बाइट्स
यदि आप AVX को लक्षित कर रहे थे , तो आप शायद निर्देशों में VEX उपसर्ग जोड़ना चाहेंगे। यह बाइट काउंट को नहीं बदलता है; निर्देशों को एन्कोड करने के लिए उपयोग किए जाने वाले वास्तविक बाइट्स:
; bool CirclesOverlap(double x1, double y1, double r1,
; double x2, double y2, double r2);
C5 FB 5C C3 vsubsd xmm0, xmm0, xmm3 ; x1 - x2
C5 F3 5C CC vsubsd xmm1, xmm1, xmm4 ; y1 - y2
C5 EB 58 D5 vaddsd xmm2, xmm2, xmm5 ; r1 + r2
C5 FB 59 C0 vmulsd xmm0, xmm0, xmm0 ; (x1 - x2)^2
C5 F3 59 C9 vmulsd xmm1, xmm1, xmm1 ; (y1 - y2)^2
C5 EB 59 D2 vmulsd xmm2, xmm2, xmm2 ; (r1 + r2)^2
C5 FB 58 C1 vaddsd xmm0, xmm0, xmm1 ; (x1 - x2)^2 + (y1 - y2)^2
C5 F9 2F D0 vcomisd xmm2, xmm0
0F 97 C0 seta al ; ((r1 + r2)^2) > ((x1 - x2)^2 + (y1 - y2)^2)
C3 ret
AVX निर्देशों में तीन ऑपरेंड लेने का लाभ है, जिससे आप गैर-विनाशकारी संचालन कर सकते हैं, लेकिन यह वास्तव में हमें यहां किसी भी कोड को कॉम्पैक्ट करने में मदद नहीं करता है। हालाँकि, VEX उपसर्गों के साथ और उसके बिना निर्देशों को मिलाने के उप-इष्टतम कोड हो सकता है, इसलिए आप आम तौर पर सभी AVX निर्देशों के साथ रहना चाहते हैं यदि आप AVX को लक्षित कर रहे हैं, और इस मामले में, यह आपके बाइट की गिनती को भी नुकसान नहीं पहुंचाता है।