[CALU] Re: ISA-Encoding-neu

  • From: Günther Wimpassinger <e0525147@xxxxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Sun, 18 Apr 2010 17:39:02 +0200

Zitat von Elshuber Martin <e9825286@xxxxxxxxxxxxxxxxxxxx>:

Meine Votes zu den offenen Punkten

offene fragen + voting:
  wie dird das immediate bei den ld,st erweitert?
    a) signed
    b) unsigned
    a:
    b: martin, guenther
    weisnicht:
Ich würde alle Immediates unsigned (zero) erweitern, außer:
- Branch/Call Immediates (siehe unten)
- LDC Immediate

  sprünge relativ oder absolut?
   a) absolut: +die zieladresse ist schon nach dem decoding bekannt,
+vereinfacht static branch prediction enorm, -unser proz kann max
2^12=4048 instructionen addressieren
   b) relativ: +fast belibig grosser instruction mem, -alu zur
berechnung der zieladdresse nötig (wahrschneinlich +2 cycles),
-wahrscheinlich an BTB zu branch prediction nötig

[Anmerkung guenther: Wir haben sowieso einen eigenen Adder der den PC
um 3 Byte (oder 1 Instruktion) erhöht. In diesen können wir auch die
Immediates der Branch Instructions reinführen und MUXen, je nachdem ob
der Branch ausgeführt werden soll, oder nicht, wird 3 oder Immediate
addiert. Sprungadressen in Registern würde ich jedoch absolut lassen.
Die haben ja sowieso 32bit. Was aber bedeutet, dass Immediates in den
Branch Instructions signed sein muessen.]

  votes:
    a: martin
    b: guenther
    weisnicht:
  zusätzliche befehele:
   mov rd,ra
    votes:
      ja: martin, guenther
      nein:
      weisnicht:
   ce (convert endianess)
     votes:
       ja: martin
       nein:
    weisnicht: guenther (ich habe nichts dagegen)
   clz (count leading zeros)
     votes:
       ja:
       nein:
       weisnicht: martin, guenther
  setx: (das oben beschriebene predicate ding)
     votes:
        ja:
       nein: guenther (gefühlsmäßig)
       weisnicht: martin

ich hoffe ich habe nichts falsch gemacht

Ich habe bis jetzt keine Fehler gefunden. Hab mich auch an einem
Übersichtsdiagramm für den Datenpfad versucht, das zwar noch nicht
fertig ist, mir aber einige Punkte aufgefallen sind.

Bei den Operationen (Die Angaben in den Klammern sind die
Bitpositionen, uimm5=Unsigned Immediate 5bit)
LSx, ASx, ROLx wird immer Register "ra" (#4..#7) verschoben. Entweder
um "rb" (#8..#11) oder um "uimm5" (#8..#12).
OR,NOR,XOR,AND verschiebt auch eine "1" um "uimm5" (#8..#12) Bits.

Jedoch wird bei den Operationen
LDx, STx das Register "rofs" (#8..#11) verschoben.

--------------------

Weitere Fragen:
 Schiebeoperationen bei denen die zwei Quelloperanden Register sind
(rb,ra) schieben wie folgt:   a) rd = ra <shift_op> (rb mod 32) ;-- Bei
einem Shift um 32bit
                                    ;-- ändert sich nichts   b) rd =
ra <shift_op> rb          ;-- Bei einem Shift um mehr als 32bit
                                    ;-- ist rd=0
Vote:
  a) guenther
  b)
  x)



Other related posts: