[12 p] Riippuvuudet. Oletetaan, että RISC-arkkitehtuurin konekielen
    ALU-käskyissä on kolme rekisterioperandia ja että tulos menee aina
    ensiksi mainittuun (vasemmanpuoliseen) rekisteriin. Arkkitehtuuri on
    toteutettu (tavanomaisesti, ei superskalaarina) liukuhihnoitettuna siten,
    että parhaimmassa tapauksessa joka syklillä (cycle) saadaan yksi
    konekäsky valmiiksi.
    Tarkastellaan seuraavaa kääntäjän generoimaa käskysarjaa:
    
	Load	R2, VarX   ; Regs(R2) <- Mem(VarX)
	Add	R5, R5, R2 ; Regs(R5) <- Regs (R5) + Regs(R2)  
	Move	R2, R6     ; Regs(R2) <- Regs (R6)
	Add	R3, R3, R2
	Mul	R3, R2, R5 
	Jnzer	R2, Loop
	Add	R3, R2, R5 
    Useat seikat edellämainitussa koodisegmentissä voivat hidastaa suorittimen
    toimintaa maksiminopeudesta.
    
      - [6 p] Kuvaile täsmällisesti allamainitut ongelmatyypit ja merkitse
        selkeällä tavalla kaikki kyseisen ongelmatyypin esiintymät em.
        käskysarjassa:
        
          - data-riippuvuudet (data dependencies)
          
- rakenteelliset riippuvuudet (structural dependencies)
          
- kontrolliriippuvuudet (control dependencies)
        
 Miten kustakin ongelmatyypistä aiheutuvaa ongelmia voidaan välttää
        tai niiden aiheuttamia suorituskykyä heikentäviä vaikutuksia
        vähentää?
 
- [3 p] Oletetaan nyt, että arkkitehtuuri toteutetaankin
        superskalaarina (superscalar). Kuvaile täsmällisesti
        allamainitut uudet ongelmatyypit ja merkitse selkeällä tavalla
        kaikki kyseisen ongelmatyypin esiintymät em. käskysarjassa.
        
          - kirjoitusriippuvuus (output dependencies)
          
- antiriippuvuus (antidependencies)
        
 Miten kustakin uudesta ongelmatyypistä aiheutuvaa ongelmia voidaan
        välttää tai niiden aiheuttamia suorituskykyä heikentäviä
        vaikutuksia vähentää?
 
- [3 p] Oletetaan nyt, että kyseiselle arkkitehtuurille on toteutettu
        funktionaalisesti oikein toimiva emulaattori. Emulaattori on toteutettu
        tavanomaisen von Neumann -arkkitehtuurin mukaisesti, joten siinä
        suoritetaan annettua konekielistä koodia yksi konekäsky kerrallaan.
        Mitkä kohtien (a) ja (b) käskyjen välisistä riippuvuuksista tulee
        emuloinnissa ottaa huomioon ja millä tavoin? Perustele vastauksesi.
Tee tarvittavat lisäoletukset ja kirjaa ne näkyviin.