سؤال

SPARC الجمعية خاصة, كيف ألغي في فروع مختلفة من العادية الفروع ؟

اعتقدت دائما أن إلغاء تعليمات فرع مطلوب عندما كنت في حاجة لملء نوب تأخير فتحة فرع التعليمات.إلا أنني لا أعتقد أنني على حق في هذا الجزء ، لأنه يمكنك ملء نوب من دون إلغاء الفرع.

هل كانت مفيدة؟

المحلول

والتعليمة فرع ألغت يتسبب في التعليم في فتحة تأخير - تعليمات بعد فرع - بأن يتجاهلك الآخرون إذا لم تتخذ السلطة

.

وماذا سيكون هذا مهم؟ لأن عادة، يتم تنفيذ تعليمات بعد الفرع، حتى إذا أخذ الفرع. وذلك لأن هناك نوعان من عدادات برنامج، وأجهزة الكمبيوتر ومجلس الشعب. PC، مما يدل على تعليمات قيد التنفيذ، يتم تحديث لمجلس الشعب، وهو PC + 4، في نفس الوقت الذي يتم تحديثه مجلس الشعب إلى الهدف من تعليم فرع. ذلك بسبب توقيت هذه الأحداث، التعليمة التالية لابد من تحميلها. بدلا من مجرد رمي دورة بعيدا، انها أكثر ربحية لاستخدام تلك الدورة ما اذا كنا نستطيع. كنا ثم جعل مجرد أن جزءا تعليمات من الحلقة.

loop:   someOp                
        someOtherOp
        branch      loop      ;
        delayslotOp           ; will actually be executed, before someOp, after branch

وإذا لم نتمكن من استخدام فتحة تعليمات بعد الفرع، ثم نحن عصا نوب هناك، والقيام بأي شيء في تلك الدورة.

وهكذا فلماذا لديك تعليمات مختلفة مع خيارات فرع ألغت وغير ألغت؟ ليعطينا اختيار ما يحدث على الخروج من الحلقة. إذا حققنا الجزء فتحة تأخير النشاط حلقة، قد أننا لا نريد أن المرجع المنفذة لدى خروجه من الحلقة. لذلك، نضيف "، و" إلى نهاية التعليمة فرع.

هذه الصفحة لديها بعض الأمثلة لطيفة.

نصائح أخرى

وفقا SPARC العمارة دليل (v9):

3.2.3 التحكم في نقل

[...]

معظم التحكم-نقل تعليمات المتأخرة ؛ أي أن تعليمات على الفور بعد التحكم في نقل التعليمات في التسلسل المنطقي أرسلت قبل مراقبة نقل إلى عنوان الهدف هو الانتهاء.

[...]

التعليمات التالية تأخر التحكم في نقل ما يسمى التعليم a تأخير التعليمات.قليلا في تأخر التحكم-نقل التعليمات (إن إلغاء بت) يمكن أن يسبب التأخير تعليمات تلغى (أن هو أن يكون لديها أي تأثير) إذا كان فرع لا يؤخذ.

6.3.4 التحكم-نقل تعليمات (CTIs)

[...]

البرمجة ملاحظة:في إلغاء بعض الشيء يزيد من احتمال أن مترجم يمكن العثور على تعليمات مفيدة لملء تأخير فتحة بعد فرع ، مما يقلل من عدد التعليمات المنفذة من قبل البرنامج.على سبيل المثال إلغاء بت يمكن أن تستخدم لنقل تعليمات من خلال حلقة لملء تأخير فتحة الفرع أن يغلق حلقة.وبالمثل ، فإن إلغاء بت يمكن أن تستخدم لنقل تعليمات إما من "آخر" أو "ثم" فرع من "ifthen آخر" البرنامج كتلة تأخير فتحة الفرع أن يختار بينهما.منذ مجموعة كاملة من توفر الشروط, مترجم ترتيب المدونة (ربما عكس معنى الشرط) بحيث تعليمات إما من "آخر" فرع أو "ثم" فرع يمكن نقلها إلى تأخير فتحة.

يظهر التعليمات البرمجية التالي فرعين في أول واحد التأخير تعليمات دائما أعدم في الثاني التأخير التعليمات يلغى إذا كان فرع لا يؤخذ:

cmp   %i3, %i0
ble   %icc, -0x5c
ld    [%l0 - 0x4], %i5  ; executed whether the branch is taken or not

...

cmp   %l1, 0x80
bl,a  %icc, +0x40
ld    [%fp + 0x7c7], %g2    ; annulled if the branch is not taken, executed otherwise
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top