summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2004-06-04 18:10:50 -0400
committerAli Saidi <saidi@eecs.umich.edu>2004-06-04 18:10:50 -0400
commite44fc6db33743bd0b28260052b5ed71d8ca88c59 (patch)
tree75b571e3a800790e3867c6057d311dfc3ba0913b /arch
parentdf45c7b404edf00ec76da655dd5b7c77ea21fc62 (diff)
downloadgem5-e44fc6db33743bd0b28260052b5ed71d8ca88c59.tar.xz
Added ctlz and cttz instructions to isa_desc for use in the PAL code.
--HG-- extra : convert_revision : 74dec35113b795e792b7fc03947a05349a4ff669
Diffstat (limited to 'arch')
-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();