[CALU] Re: asmbin: LDC encoding

  • From: Martin Elshuber <e9825286@xxxxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Mon, 17 May 2010 11:28:41 +0200

Von der Idee her läuft das ganze so ab (a) Bits aus Maskieren und (b) an die richtige stelle schieben

zb: LDCs(V,RD) // V<-immediate Value, RD<-target register
Wenn du ins isa doc schaust siehst do wo die bits in die instruktion hingehören. das ist so kompliziert, weil es dadurch bei jedem immediate jedes bit an der gleicehn stelle steht, oder nicht vorhanden ist. Das vereinfacht das Decoding auf 0 plus den mux pro klasse Das decoding geschieht dan einfach durch die korrekte Verbindung der eingangssignale für das immediate decoding im "id_stage_arch.vhl"

zu den Zeilen
158) Die Bits 3..0 kommen an die stelle 11..8: (V&0xF) zum ausmaskieren und (8-0=8 Bits nach lenks schieben) 159) Das Bit 4 kommt an die stelle 13: (V&0x10) zum ausmaskieren und (13-4=9 Bits nach links schieben) 160) Das Bit 5 kommt an die stelle 12: (V&0x20) zum ausmaskieren und (11-5=5 Bits nach links schieben) 161) Das Bit 7..6 kommt an die stellen 15..14: (V&0xC0) zum ausmaskieren und (14-6=8 Bits nach links schieben) 162) Das Bit 11..8 kommt an die stellen 7..4: (V&0xF00) zum ausmaskieren und (4-8=-4 Bits nach links schieben<=>4 bits nach rechts) 163) Das Bit 12 kommt an die stelle 16: (V&0x100) zum ausmaskieren und (16-12=4 Bits nach links schieben)
164) rd steht ganz hinten

anm: 163 . Die beschreibung dieses bits fehlt noch im design dok.
anm: Alle restlichen bits werden von der Aufrufenden Funktion gesetzt

lg martin

Benedikt Huber wrote:
Hallo,
Ich bin gerade dabei, binsim auf die LDCs Variante umzustellen, und hab Probleme mit dem Assembler: Ich versteh diese Makro nicht, und es scheint die falschen Werte zuliefern (0x100 anstatt 0x10 fuer ldc r0, 16).

4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 157)#define LDCs(V,RD)\ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 158) ( ((V&0x000F)<<8) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 159) ((V&0x0010)<<9) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 160) ((V&0x0020)<<7) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 161) ((V&0x00C0)<<8) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 162) ((V&0x0F00)>>4) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 163) ((V&0x1000)<<4) | \ 4762b165 (Martin Elshuber 2010-05-14 00:19:53 +0200 164) (RD) )

Nur aus Interesse: wie genau kommst du auf diese Makros?

lg, benedikt



Other related posts: