4 changed files with 25 additions and 29 deletions
@ -1,14 +1,13 @@ |
|||||
// Zbb contains rev8 but not general grevi
|
// Zbb contains rev8 but not general grevi
|
||||
// Zbkb contains rev8 and brev8 (a.k.a. rev.b) but not general grevi
|
// Zbkb contains rev8 and brev8 (a.k.a. rev.b) but not general grevi
|
||||
int shamt = SHAMT; |
require(((SHAMT == xlen - 8) && (p->extension_enabled(EXT_ZBB) || p->extension_enabled(EXT_ZBKB))) //rev8
|
||||
require(((shamt == xlen - 8) && (p->extension_enabled(EXT_ZBB) || p->extension_enabled(EXT_ZBKB))) //rev8
|
|| ((SHAMT == 7) && p->extension_enabled(EXT_ZBKB))); // rev8.b
|
||||
|| ((shamt == 7) && p->extension_enabled(EXT_ZBKB))); // rev8.b
|
require(SHAMT < xlen); |
||||
require(shamt < xlen); |
|
||||
reg_t x = RS1; |
reg_t x = RS1; |
||||
if (shamt & 1) x = ((x & 0x5555555555555555LL) << 1) | ((x & 0xAAAAAAAAAAAAAAAALL) >> 1); |
if (SHAMT & 1) x = ((x & 0x5555555555555555LL) << 1) | ((x & 0xAAAAAAAAAAAAAAAALL) >> 1); |
||||
if (shamt & 2) x = ((x & 0x3333333333333333LL) << 2) | ((x & 0xCCCCCCCCCCCCCCCCLL) >> 2); |
if (SHAMT & 2) x = ((x & 0x3333333333333333LL) << 2) | ((x & 0xCCCCCCCCCCCCCCCCLL) >> 2); |
||||
if (shamt & 4) x = ((x & 0x0F0F0F0F0F0F0F0FLL) << 4) | ((x & 0xF0F0F0F0F0F0F0F0LL) >> 4); |
if (SHAMT & 4) x = ((x & 0x0F0F0F0F0F0F0F0FLL) << 4) | ((x & 0xF0F0F0F0F0F0F0F0LL) >> 4); |
||||
if (shamt & 8) x = ((x & 0x00FF00FF00FF00FFLL) << 8) | ((x & 0xFF00FF00FF00FF00LL) >> 8); |
if (SHAMT & 8) x = ((x & 0x00FF00FF00FF00FFLL) << 8) | ((x & 0xFF00FF00FF00FF00LL) >> 8); |
||||
if (shamt & 16) x = ((x & 0x0000FFFF0000FFFFLL) << 16) | ((x & 0xFFFF0000FFFF0000LL) >> 16); |
if (SHAMT & 16) x = ((x & 0x0000FFFF0000FFFFLL) << 16) | ((x & 0xFFFF0000FFFF0000LL) >> 16); |
||||
if (shamt & 32) x = ((x & 0x00000000FFFFFFFFLL) << 32) | ((x & 0xFFFFFFFF00000000LL) >> 32); |
if (SHAMT & 32) x = ((x & 0x00000000FFFFFFFFLL) << 32) | ((x & 0xFFFFFFFF00000000LL) >> 32); |
||||
WRITE_RD(sext_xlen(x)); |
WRITE_RD(sext_xlen(x)); |
||||
|
|||||
Loading…
Reference in new issue