[CALU]

  • From: Günther Wimpassinger <e0525147@xxxxxxxxxxxxxxxxxxxx>
  • To: "CALU G. Wimpassinger" <calu-ss2010-tuwien@xxxxxxxxxxxxx>
  • Date: Sun, 11 Apr 2010 05:09:04 +0200

Hi Kollegas,

hab mir unsere ISA mal genauer angesehen.

Also die MULI(S) sind absout sinnfrei, denn wir können nur mit Zahlen
0..15 oder -8..7 multiplizieren. Bei diesen Konstanten läßt sich das
immer mit 2-3 shift/sub/add Befehlen nachbauen (unsigned). Signed hab
ich nicht extra geprüft, sollte jedoch genau so sein.

Für die vorzeichenlose Division gilt das Selbe wie bei der
Multiplikaion mit Konstanten. Ausserdem benötigen * und / so viel Zeit,
dass ein extra MovI nicht sonderlich auffällt.

Ich würde in beiden Blöcken das I streichen und Mul/Div zusammenführen.
Dann untscheidet das "I" ob es sich um Mul oder Div handelt. Den
gewonnenen Platz würde ich wohl mit LoadByte und LoadHalfWord ergänzen.

AND/OR/NOR/XOR mit derart kurzen Immediates (ersten 5 Bits) halte ich
auch nicht besonders für sinnvoll. Ob die Einsparung etwas bringt, ist
ein anderer Fall. Eine andere Möglichkeit wäre natürlich bei
Immediate-Arithmetic-Instruction folgnedes Format zu wählen, wodurch
unsere Immediates um 4 bit länger würden (Sinnvoll?):
<pred> OP reg,imm

Semantisch:
reg:=reg op imm

Wie schon in einem vorigen E-Mail erwähnt brauchen wir lange, bis wir
ein Register mit 32bit gefüllt haben, wenn wir den Wert nicht aus dem
Datenspeicher holen können. Habe nichts unter 10 Instr. auf die
Schnelle gefunden.


Wie führen wir Instruktionen unbedingt aus? Damit noch weitere
Instruktionen ausgeführt werden, muss mindestens ein Pred-Regist auf 1
sein. D.h sobald alle Pred-Regs 0 sind, haben wir nur noch NOPs. D.h.
nach einem Reset sind alle Pred-Regs auf 1.

Meine Meinung: Der ASM-Programmierer/Compiler muss dafür sorgen, dass
soetwas nicht passieren kann.

Wird unser INTR-Flag ein Teil des Pred-Regs? Wenn nicht, brauchen wir
zusätzliche Befehle zum Setzen/Löschen von InterruptEnable.

Zu dem Scratchpad:
Da bin ich mir noch nicht ganz sicher, wie das funktionieren soll. Was
passiert bei einem Sprung auf eine Adresse die nicht im Scratchpad ist?
Was passiert, wenn die letzte "Zeile" Code aus dem Scratchpad
ausgeführt wurde?

Zu deinem Beispiel:
(Annahme p15=1)

pred (a==0), p0<UU>, p1<iUU> (p15)  -- p0=(a==0);
pred (b==0), p2<UU>, p3<iUU> (p15)  -- p2=(b==0);
pred (a==a), p4<UU>, p5<iUU> (p15)  -- p4=1;
pred (c==0), p4<UU>, p5<iUU> (p2)   -- wenn p2 dann p4=(c==0)
                                   -- p4=(b==0 ? c==0 : p4)

S1 (p0)
S2 (p4)
S3 (p5)



Other related posts:

  • » [CALU] - Günther Wimpassinger
  • » [CALU] - Günther Wimpassinger