x86 মেশিন কোড (এসএসই 2 সহ), 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- স্থানাঙ্কের বিন্দু এবং একটি ব্যাসার্ধ) এবং একটি বুলিয়ান মান প্রদান করে যা তারা ছেদ করে কিনা তা নির্দেশ করে।
এটি ভেক্টর কলিং কনভেনশন ব্যবহার করে, যেখানে প্যারামিটারগুলি সিমডি রেজিস্টারে পাস করা হয়। X86-32 এবং 64-বিট উইন্ডোতে, এটি __vectorcall
কলিং কনভেনশন । -৪-বিট ইউনিক্স / লিনাক্স / গনুতে এটি স্ট্যান্ডার্ড সিস্টেম ভি এমডি 64 কলিং কনভেনশন ।
ফেরতের মানটি নিম্ন বাইটে ছেড়ে যায় EAX
, যেমনটি সমস্ত x86 কলিং কনভেনশনগুলির সাথে প্রমিত।
এই কোডটি 32-বিট এবং 64-বিট x86 প্রসেসরের উপর সমানভাবে কাজ করে, যতক্ষণ না তারা এসএসই 2 নির্দেশিকা সেট সমর্থন করে (যা ইন্টেল পেন্টিয়াম 4 এবং তার পরে, বা এএমডি অ্যাথলন 64 এবং তার পরে হবে)।
AVX সংস্করণ, এখনও 36 বাইট
আপনি যদি এভিএক্সকে লক্ষ্য করে রাখছিলেন তবে আপনি সম্ভবত নির্দেশাবলীতে একটি ভেক্স প্রেফিক্স যুক্ত করতে চান। এটি বাইট গণনা পরিবর্তন করে না; নির্দেশাবলী এনকোড করতে ব্যবহৃত প্রকৃত বাইটগুলি:
; 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 নির্দেশাবলী গ্রহণ সুবিধা আছে তিনটি অপারেন্ড , আপনাকে অ-ধ্বংসাত্মক ক্রিয়াকলাপ করার অনুমতি দেয় তবে এটি আমাদের কোডটি এখানে কমপ্যাক্ট করতে সত্যিই সহায়তা করে না। তবে, ভেক্স প্রিফিক্সগুলির সাথে বা তার বাইরে নির্দেশাবলীর মিশ্রণের ফলে উপ-অনুকূল কোড তৈরি হতে পারে, সুতরাং আপনি সাধারণত অ্যাভিএক্সকে লক্ষ্য করে নিলে সমস্ত অ্যাভিএক্স নির্দেশাবলীর সাথে লেগে থাকতে চান এবং এই ক্ষেত্রে এটি আপনার বাইট গণনাতেও ক্ষতি করে না।