Merge saidi@zizzer:/z/m5/Bitkeeper/linux/
into zeep.eecs.umich.edu:/z/saidi/work/m5 --HG-- extra : convert_revision : 9fa64783d4f5d03acff5d11cba61e46590d6a9dd
This commit is contained in:
commit
7b5cad8419
1 changed files with 59 additions and 2 deletions
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue