summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2004-06-06 19:31:06 -0400
committerAli Saidi <saidi@eecs.umich.edu>2004-06-06 19:31:06 -0400
commit7b5cad8419a602620e35ea24355fed9795159c4c (patch)
treeb0b9642b403ac8f601c31fbc7f9b2f9ec56c2a2b
parentee65ee1604418bc0dba90e8fc022b61a59ad37e6 (diff)
parent401e5f29c75cc38038c58a7436e332154a944486 (diff)
downloadgem5-7b5cad8419a602620e35ea24355fed9795159c4c.tar.xz
Merge saidi@zizzer:/z/m5/Bitkeeper/linux/
into zeep.eecs.umich.edu:/z/saidi/work/m5 --HG-- extra : convert_revision : 9fa64783d4f5d03acff5d11cba61e46590d6a9dd
-rw-r--r--arch/alpha/isa_desc61
1 files changed, 59 insertions, 2 deletions
diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc
index 9fee12485..06a1081bc 100644
--- a/arch/alpha/isa_desc
+++ b/arch/alpha/isa_desc
@@ -2119,12 +2119,69 @@ decode OPCODE default Unknown::unknown() {
0x1c: decode INTFUNC {
0x00: decode RA { 31: sextb({{ Rc.sb = Rb_or_imm< 7:0>; }}); }
0x01: decode RA { 31: sextw({{ Rc.sw = Rb_or_imm<15:0>; }}); }
+ 0x32: ctlz({{
+ uint64_t count = 0;
+ uint64_t temp = Rb;
+ if (temp & ULL(0xffffffff00000000))
+ temp >>= 32;
+ else
+ count += 32;
+ if (temp & ULL(0xffff0000))
+ temp >>= 16;
+ else
+ count += 16;
+ if (temp & ULL(0xff00))
+ temp >>= 8;
+ else
+ count += 8;
+ if (temp & ULL(0xf0))
+ temp >>= 4;
+ else
+ count += 4;
+ if (temp & ULL(0xC))
+ temp >>= 2;
+ else
+ count += 2;
+ if (temp & ULL(0x2))
+ temp >>= 1;
+ else
+ count += 1;
+ if ((temp & ULL(0x1)) != 0x1)
+ count += 1;
+ Rc = count;
+ }}, IntAluOp);
+
+ 0x33: cttz({{
+ uint64_t count = 0;
+ uint64_t temp = Rb;
+ if (!(temp & ULL(0x00000000ffffffff))) {
+ temp >>= 32;
+ count += 32;
+ }
+ if (!(temp & ULL(0x0000ffff))) {
+ temp >>= 16;
+ count += 16;
+ }
+ if (!(temp & ULL(0x00ff))) {
+ temp >>= 8;
+ count += 8;
+ }
+ if (!(temp & ULL(0x0f))) {
+ temp >>= 4;
+ count += 4;
+ }
+ if (!(temp & ULL(0x3))) {
+ temp >>= 2;
+ count += 2;
+ }
+ if (!(temp & ULL(0x1)))
+ count += 1;
+ Rc = count;
+ }}, IntAluOp);
format FailUnimpl {
0x30: ctpop();
0x31: perr();
- 0x32: ctlz();
- 0x33: cttz();
0x34: unpkbw();
0x35: unpkbl();
0x36: pkwb();