Πίσω

Παράδειγμα 3:


Το παράδειγμα αυτό είναι μια περίπτωση εξάρτησης δεδομένων σε συνδυασμό με εξάρτηση ελέγχου. Αποτελείται από τα αρχεία second1.s και second2.s.

Ο κώδικας του second1.s Ο κώδικας του second2.s
.data .data
.word 4,4 .word 4,4
.text .text
main: lw r1,$DATA(r0) main: lw r1,$DATA(r0)
lw r2,$DATA +4(r0) lw r2,$DATA +4(r0)
subi r3,r1,#2 subi r3,r1,#4
bnez r3,L1 bnez r3,L1
add r1,r0,r0 add r1,r0,r0
L1: subi r3,r2,#2 L1: subi r3,r2,#4
bnez r3,L2 bnez r3,L2
add r1,r0,r0 add r2,r0,r0
L2: sub r3,r1,r2 L2: sub r3,r1,r2




Οι τιμές των r1, r2 είναι τέτοιες ώστε να ακολουθούνται και οι δύο διακλαδώσεις. Η έκφραση aborted επιβεβαιώνει ότι οι εντολές add δεν εκτελούνται ποτέ.


Στο παράδειγμα second1 έχουμε κίνδυνο δεδομένων RAW ανάμεσα στις εντολές lw r1,$DATA(r0) και subi r3,r2,#2, ο οποίος αντιμετωπίζεται με προώθηση από το στάδιο ΜΕΜ της εντολής lw στο στάδιο ΕΧ της sub.




Έχουμε δύο καθυστερήσεις ενός κύκλου λόγω των εντολών διακλάδωσης bnez r3,L1 και bnez r3,L2 για κάθε φορά που εκτελείται η εκολουθία των εντολών.





Στο second2.s δεν ακολουθείται καμία από τις δύο συνθήκες διακλάδωσης. Γι' αυτό το λόγο και οι καθυστερήσεις συνολικά είναι δύο λιγότερες.