1 |
commit: e485959b33e1abdfa16f05e800de9edaad924b09 |
2 |
Author: Aurelien Jarno <aurelien <AT> aurel32 <DOT> net> |
3 |
AuthorDate: Mon Dec 27 18:54:49 2010 +0000 |
4 |
Commit: Doug Goldstein <cardoe <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri May 27 18:02:02 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/qemu-kvm.git;a=commit;h=e485959b |
7 |
|
8 |
target-arm: fix bug in translation of REVSH |
9 |
|
10 |
The translation of REVSH shifted the low byte 8 steps left before performing |
11 |
an 8-bit sign extend, causing this part of the expression to alwas be 0. |
12 |
|
13 |
Reported-by: Johan Bengtsson <teofrastius <AT> gmail.com> |
14 |
Signed-off-by: Aurelien Jarno <aurelien <AT> aurel32.net> |
15 |
(cherry picked from commit 1a855029af40df40144a322bba0e1e61c68eed2a) |
16 |
|
17 |
Signed-off-by: Aurelien Jarno <aurelien <AT> aurel32.net> |
18 |
|
19 |
--- |
20 |
target-arm/translate.c | 10 +++------- |
21 |
1 files changed, 3 insertions(+), 7 deletions(-) |
22 |
|
23 |
diff --git a/target-arm/translate.c b/target-arm/translate.c |
24 |
index 6fcdd7e..cb19dd7 100644 |
25 |
--- a/target-arm/translate.c |
26 |
+++ b/target-arm/translate.c |
27 |
@@ -250,13 +250,9 @@ static void gen_rev16(TCGv var) |
28 |
/* Byteswap low halfword and sign extend. */ |
29 |
static void gen_revsh(TCGv var) |
30 |
{ |
31 |
- TCGv tmp = new_tmp(); |
32 |
- tcg_gen_shri_i32(tmp, var, 8); |
33 |
- tcg_gen_andi_i32(tmp, tmp, 0x00ff); |
34 |
- tcg_gen_shli_i32(var, var, 8); |
35 |
- tcg_gen_ext8s_i32(var, var); |
36 |
- tcg_gen_or_i32(var, var, tmp); |
37 |
- dead_tmp(tmp); |
38 |
+ tcg_gen_ext16u_i32(var, var); |
39 |
+ tcg_gen_bswap16_i32(var, var); |
40 |
+ tcg_gen_ext16s_i32(var, var); |
41 |
} |
42 |
|
43 |
/* Unsigned bitfield extract. */ |