diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2004-06-06 19:31:06 -0400 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2004-06-06 19:31:06 -0400 |
commit | 7b5cad8419a602620e35ea24355fed9795159c4c (patch) | |
tree | b0b9642b403ac8f601c31fbc7f9b2f9ec56c2a2b /arch/alpha | |
parent | ee65ee1604418bc0dba90e8fc022b61a59ad37e6 (diff) | |
parent | 401e5f29c75cc38038c58a7436e332154a944486 (diff) | |
download | gem5-7b5cad8419a602620e35ea24355fed9795159c4c.tar.xz |
Merge saidi@zizzer:/z/m5/Bitkeeper/linux/
into zeep.eecs.umich.edu:/z/saidi/work/m5
--HG--
extra : convert_revision : 9fa64783d4f5d03acff5d11cba61e46590d6a9dd
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/isa_desc | 61 |
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(); |