提交 733fef0e 编写于 作者: P pbrook

TCG: Use x86-64 zero extension instructions.

Signed-off-by: NPaul Brook <paul@codesourcery.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5180 c046a42c-6fe2-441c-8c8c-71466251a162
上级 b6d17150
...@@ -382,6 +382,12 @@ static inline void tgen_arithi32(TCGContext *s, int c, int r0, int32_t val) ...@@ -382,6 +382,12 @@ static inline void tgen_arithi32(TCGContext *s, int c, int r0, int32_t val)
if (val == (int8_t)val) { if (val == (int8_t)val) {
tcg_out_modrm(s, 0x83, c, r0); tcg_out_modrm(s, 0x83, c, r0);
tcg_out8(s, val); tcg_out8(s, val);
} else if (c == ARITH_AND && val == 0xffu) {
/* movzbl */
tcg_out_modrm(s, 0xb6 | P_EXT | P_REXB, r0, r0);
} else if (c == ARITH_AND && val == 0xffffu) {
/* movzwl */
tcg_out_modrm(s, 0xb7 | P_EXT, r0, r0);
} else { } else {
tcg_out_modrm(s, 0x81, c, r0); tcg_out_modrm(s, 0x81, c, r0);
tcg_out32(s, val); tcg_out32(s, val);
...@@ -393,6 +399,15 @@ static inline void tgen_arithi64(TCGContext *s, int c, int r0, int64_t val) ...@@ -393,6 +399,15 @@ static inline void tgen_arithi64(TCGContext *s, int c, int r0, int64_t val)
if (val == (int8_t)val) { if (val == (int8_t)val) {
tcg_out_modrm(s, 0x83 | P_REXW, c, r0); tcg_out_modrm(s, 0x83 | P_REXW, c, r0);
tcg_out8(s, val); tcg_out8(s, val);
} else if (c == ARITH_AND && val == 0xffu) {
/* movzbl */
tcg_out_modrm(s, 0xb6 | P_EXT | P_REXW, r0, r0);
} else if (c == ARITH_AND && val == 0xffffu) {
/* movzwl */
tcg_out_modrm(s, 0xb7 | P_EXT | P_REXW, r0, r0);
} else if (c == ARITH_AND && val == 0xffffffffu) {
/* 32-bit mov zero extends */
tcg_out_modrm(s, 0x8b, r0, r0);
} else if (val == (int32_t)val) { } else if (val == (int32_t)val) {
tcg_out_modrm(s, 0x81 | P_REXW, c, r0); tcg_out_modrm(s, 0x81 | P_REXW, c, r0);
tcg_out32(s, val); tcg_out32(s, val);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册