X86: Implement a microop that moves sign bits.
This commit is contained in:
parent
4c23e631f2
commit
90786e43fc
1 changed files with 17 additions and 0 deletions
|
@ -330,6 +330,23 @@ let {{
|
|||
}
|
||||
'''
|
||||
|
||||
class Movsign(MediaOp):
|
||||
def __init__(self, dest, src, \
|
||||
size = None, destSize = None, srcSize = None, ext = None):
|
||||
super(Movsign, self).__init__(dest, src,\
|
||||
"InstRegIndex(0)", size, destSize, srcSize, ext)
|
||||
code = '''
|
||||
int items = sizeof(FloatRegBits) / srcSize;
|
||||
uint64_t result = 0;
|
||||
int offset = (ext & 0x1) ? items : 0;
|
||||
for (int i = 0; i < items; i++) {
|
||||
uint64_t picked =
|
||||
bits(FpSrcReg1.uqw, (i + 1) * 8 * srcSize - 1);
|
||||
result = insertBits(result, i + offset, i + offset, picked);
|
||||
}
|
||||
DestReg = DestReg | result;
|
||||
'''
|
||||
|
||||
class Unpack(MediaOp):
|
||||
code = '''
|
||||
assert(srcSize == destSize);
|
||||
|
|
Loading…
Reference in a new issue