X86: Make merge and pick work with high bytes. Fix a sizing issue in pick.
--HG-- extra : convert_revision : 4ddc2ca8c23bb7e90a646329ebf27a013ac5e3d6
This commit is contained in:
parent
0d31a41304
commit
fad96cd0fc
1 changed files with 13 additions and 8 deletions
|
@ -92,9 +92,12 @@ namespace X86ISA
|
|||
|
||||
inline uint64_t merge(uint64_t into, uint64_t val, int size) const
|
||||
{
|
||||
X86IntReg reg;
|
||||
reg = into;
|
||||
//FIXME This needs to be handle high bytes as well
|
||||
X86IntReg reg = into;
|
||||
if(_destRegIdx[0] & (1 << 6))
|
||||
{
|
||||
reg.H = val;
|
||||
return reg;
|
||||
}
|
||||
switch(size)
|
||||
{
|
||||
case 1:
|
||||
|
@ -117,18 +120,20 @@ namespace X86ISA
|
|||
return reg;
|
||||
}
|
||||
|
||||
inline uint64_t pick(uint64_t from, int size)
|
||||
inline uint64_t pick(uint64_t from, int idx, int size) const
|
||||
{
|
||||
X86IntReg reg;
|
||||
reg = from;
|
||||
X86IntReg reg = from;
|
||||
DPRINTF(X86, "Picking with size %d\n", size);
|
||||
if(_srcRegIdx[idx] & (1 << 6))
|
||||
return reg.H;
|
||||
switch(size)
|
||||
{
|
||||
case 1:
|
||||
return reg.L;
|
||||
case 2:
|
||||
return reg.E;
|
||||
case 4:
|
||||
return reg.X;
|
||||
case 4:
|
||||
return reg.E;
|
||||
case 8:
|
||||
return reg.R;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue