Έχω μια ερώτηση σχετικά με το effective address calculation. Έστω ο παρακάτω
κώδικας (της άσκησης)
S.D F10 8 R1
DADDI R1 R1 #16
Η store θα κάνει το effective address calculation (memory[R1+8]) κατά το EX
στάδιό της σύμφωνα με την εκφώνηση. Έστω τώρα ότι η store περιμένει όρισμα
(F10), οπότε δεν μπορεί να αρχίσει να εκτελείται. Επίσης, έστω ότι δεν
υπάρχει εξάρτηση στον R1.
Η add δεν μπορεί να αρχίσει να εκτελείται, γιατί αν τελειώσει (WB) πριν τη
store, η store θα αποτύχει στο σωστό calculation του effective address
(R1+8).
Σωστά ως εδώ;
Όμως, στις περσινές λύσεις της άσκησης tomasulo (πρώτο μέρος, χωρίς ROB),
αυτό δε γίνεται. Στον κύκλο 10, η DADDUI γράφει αποτελέσμα στον R2, ενώ η
store που είναι πριν από αυτήν εκτελείται (EX) στον κύκλο 27. Αν σε εκείνον
τον κύκλο γίνει το effective address calculation (για το lea της store), η
σημασιολογία του προγράμματος δεν είναι ορθή. Από ότι καταλαβαίνω, το
effective address calculation (ο υπολογισμός R2+0 για αυτήν τη store) έγινε
κατά το IS. Έτσι δε δημιουργείται πρόβλημα με εντολές που ακολουθούν και
πειράζουν την τιμή του R2. Κατάλαβα λάθος;
Ζητώ προκαταβολικά συγγνώμη για την παιδαριώδη ερώτηση.
Ευχαριστώ για τυχόν διευκρίνηση