सभी सीपीयू आर्किटेक्चर, जो मैंने सामना किया है, में सममित रजिस्ट्रार हैं - यानी आपके द्वारा पढ़ा जाने वाला मान वह मूल्य है जिसे आपने लिखा था।कोई प्रोसेसर में असममित रजिस्ट्रार क्यों नहीं हैं?
क्या असीमित रजिस्ट्रार रखने के लिए पंजीकरण-सीमित 16-बिट निर्देशों के लिए कोई मामला है?
उदा।
- रजिस्टर्स 0-6 फ़ंक्शन आमंत्रण के लिए "स्थानीय" हैं। इस फ़ंक्शन कॉल में लिखा गया मान वह मान है जिसे पढ़ा जाएगा। फ़ंक्शन कॉल के प्रत्येक स्तर का अपना रजिस्टर हार्डवेयर होता है, इसलिए स्थानीय रजिस्ट्रार पूरी तरह से सहेजे जाते हैं।
- रजिस्टर्स 7-9 "वैश्विक" हैं, शायद एसएमपी सीपीयू पर "थ्रेड लोकल" हैं।
- "कॉल" रजिस्टरों को लिखे गए मान 10-13 इस फंक्शन कॉल संदर्भ में से जो भी पढ़ा जाता है उसे प्रभावित नहीं करते हैं।
- "कॉल" रजिस्टरों से पढ़े गए मान 10-13 कॉलिंग फ़ंक्शन में लिखे गए मान हैं, यानी फ़ंक्शन के रजिस्टर तर्क अपरिवर्तनीय हैं।
- "वापसी" रजिस्टरों को लिखे गए मान 14-15 इस फ़ंक्शन कॉल संदर्भ में उनसे प्रभावित नहीं होते हैं।
- "वापसी" रजिस्टरों से पढ़े गए मान 14-15 फ़ंक्शन में लिखे गए मान हैं जो हाल ही में वर्तमान फ़ंक्शन पर लौट आए हैं।
प्रत्येक कार्य-स्तर के रजिस्टरों के पास अपना स्वयं का हार्डवेयर होता है, केवल कॉल के गहराई को हार्डवेयर से अधिक होने पर ही स्टैक तक फैलता है।
(local) (global) (call) (ret)
global regset 07 .. 09
.
.
.
. | |^^
. v v | |
regsetN-1 00 .. 06 10 .. 13 14 15
|^ |^ | | ^^
v| v| v v | |
fnN-1 RW RW RW RW RW RW
| |^^
v v | |
regsetN 00 .. 06 10 .. 13 14 15
|^ |^ | | ^^
v| v| v v | |
fnN RW RW RW RW RW RW
| |^^
v v | |
regsetN+1 00 .. 06 10 .. 13 14 15
|^ |^ | | ^^
v| v| v v | |
क्या इस तरह की एक योजना दो या अधिक रजिस्टरों द्वारा प्रत्येक फ़ंक्शन कॉल के भीतर रजिस्टर दबाव को कम करेगी?
मुझे उम्मीद नहीं है कि यह एक नया विचार है, लेकिन मुझे इसमें दिलचस्पी है कि यह किया गया है, और यदि नहीं, तो क्यों नहीं? यदि यह पागल विचार नहीं है, या पहले से ही किया गया है, तो मैं इसे एक एफपीजीए सीपीयू पर लागू कर सकता हूं।
क्या यह पंजीकरण बचत के लायक होने के लिए बहुत जटिल है?
क्या llvm-hardies एक प्रमुख कारण है कि यह नहीं किया जाता है?
पीएस मुझे पता है कि सुपर-स्केलर प्रोसेसर पहले से ही अधिक जटिल हैं, पंजीकरण-नामकरण योजनाओं आदि के साथ। मैं सिर्फ माइक्रोकंट्रोलर-क्लास आर्किटेक्चर के बारे में सोच रहा हूं।
अपडेट: ऐसा लगता है कि एसपीएआरसी आर्किटेक्चर ने ऐसा किया था। बाद में आईएसए डिजाइनरों द्वारा यह क्यों उपयोगी नहीं माना गया था?
जब कोई प्रक्रिया कहा जाता है, तो रजिस्टर विंडो सोलह रजिस्टरों द्वारा बदलती है, पुराने इनपुट रजिस्ट्रारों और पुराने स्थानीय रजिस्टरों को छुपाती है और पुराने आउटपुट को नए इनपुट रजिस्टरों को पंजीकृत करता है।
यह मेरे लिए स्पष्ट कारण है कि इस एक माइक्रो वास्तु (हार्डवेयर) स्तर पर लागू किए जाने की जरूरत नहीं है। यह डिजाइनरों द्वारा स्थापित एक सम्मेलन के रूप में आसानी से और सॉफ्टवेयर द्वारा पालन किया जा सकता है। मेरा मतलब है, मुझे लगता है कि आपको एक ऐसे रजिस्टर में लिखने के लिए हार्डवेयर-सहायता सुरक्षा * प्राप्त नहीं होगी, लेकिन इन निम्न स्तरों पर, आपको आमतौर पर इन प्रकार की सुरक्षा की गारंटी नहीं दी जाती है। इसके अलावा, आपके पास 16 रजिस्ट्रार होने के बाद, ऐसा लगता है कि आपको "रजिस्टर-सीमित" आईएसए के रूप में वर्गीकृत किया जाएगा। –
इसके अलावा, * आर्किटेक्चर हैं जो [रजिस्टर विंडो] को लागू करते हैं (https://en.wikipedia.org/wiki/Register_window), जो आप वर्णन कर रहे हैं उसके समान ही लगता है, बिल्कुल वही नहीं सोचा। –
आप सही हैं, हार्डवेयर होने की आवश्यकता क्यों नहीं है, यह सिर्फ एक आईएसए हो सकता है। "सुरक्षा" एक लक्ष्य नहीं थे, बस एक खुश संयोग। मुद्दा यह है कि एक फ़ंक्शन "कॉल रजिस्टर्स" (किसी फ़ंक्शन को कॉल करने से पहले) को तर्क लिखने के बिना मूल्य लिख सकता है, जिसे इसे स्वयं कहा जाता है, आदि, इस प्रकार आईएसए में रजिस्टर दबाव को आसान बनाते हैं। – fadedbee