diff options
author | Yang Rong <rong.r.yang@intel.com> | 2015-05-14 20:48:58 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2015-05-15 13:14:09 +0800 |
commit | 0170037efb7719564ea6de25050174a69bebdffb (patch) | |
tree | c1a65126d232da27d5829ff1716f063e912f3557 | |
parent | 6d8a396839c815973ffcb3eb7d9179e60f90d18b (diff) |
CHV: Fix a chv long convert bug.
When convert byte/short/int to long, the temp regiser type signed
or not is decided by src type, not dst type.
Signed-off-by: Yang Rong <rong.r.yang@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@intel.com>
-rw-r--r-- | backend/src/backend/gen_insn_selection.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp index f340b367..7d4ea007 100644 --- a/backend/src/backend/gen_insn_selection.cpp +++ b/backend/src/backend/gen_insn_selection.cpp @@ -4168,15 +4168,15 @@ namespace gbe unpacked = GenRegister::retype(unpacked, GEN_TYPE_F); } else if(srcFamily == FAMILY_DWORD) { unpacked = sel.unpacked_ud(sel.reg(FAMILY_QWORD, sel.isScalarReg(insn.getSrc(0)))); - unpacked = GenRegister::retype(unpacked, dstType == TYPE_U64 ? GEN_TYPE_UD : GEN_TYPE_D); + unpacked = GenRegister::retype(unpacked, srcType == TYPE_U32 ? GEN_TYPE_UD : GEN_TYPE_D); } else if(srcFamily == FAMILY_WORD) { unpacked = sel.unpacked_uw(sel.reg(FAMILY_QWORD, sel.isScalarReg(insn.getSrc(0)))); - unpacked = GenRegister::retype(unpacked, dstType == TYPE_U64 ? GEN_TYPE_UW : GEN_TYPE_W); + unpacked = GenRegister::retype(unpacked, srcType == TYPE_U16 ? GEN_TYPE_UW : GEN_TYPE_W); } else if(srcFamily == FAMILY_BYTE) { GenRegister tmp = sel.selReg(sel.reg(FAMILY_WORD, sel.isScalarReg(insn.getSrc(0)))); - tmp = GenRegister::retype(tmp, dstType == TYPE_U64 ? GEN_TYPE_UW : GEN_TYPE_W); + tmp = GenRegister::retype(tmp, srcType == TYPE_U8 ? GEN_TYPE_UW : GEN_TYPE_W); unpacked = sel.unpacked_uw(sel.reg(FAMILY_QWORD, sel.isScalarReg(insn.getSrc(0)))); - unpacked = GenRegister::retype(unpacked, dstType == TYPE_U64 ? GEN_TYPE_UW : GEN_TYPE_W); + unpacked = GenRegister::retype(unpacked, srcType == TYPE_U8 ? GEN_TYPE_UW : GEN_TYPE_W); sel.MOV(tmp, src); unpacked_src = tmp; } else |