|
From: | Alexander Graf |
Subject: | Re: [Qemu-devel] Incorrect handling of PPC64 rldcl insn |
Date: | Mon, 06 May 2013 19:47:25 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:10.0.3) Gecko/20120306 Thunderbird/10.0.3 |
On 05/06/2013 07:00 PM, Torbjorn Granlund wrote:
I could finally make Debian GNU/Linux install and run under qemu-system-ppc64. I used Debian 7.0.0 and qemu from the main git repo, updated a few days ago. While Debian runs well and not too slowly, GMP fails badly under all ABIs, and in many different ways. I have isolated the first problem. Test case: #include<stdio.h> int main () { unsigned long r; asm ("rldcl\t%0, %1, %2, 0" : "=r" (r) : "r" (0xcafebabedeadbeeful), "r" (16)); printf ("%lx\n", r); return 0; } Expected output: babedeadbeefcafe Output under qemu: 0 I have single stepped in gdb to determine that it is indeed rldcl that misbehaves.
Thanks a lot for the bug report and test case! Please CC qemu-ppc whenever you find issues or have patches for PPC. That makes filtering for important mails a lot easier.
Does the patch below fix the issue for you? Alex diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 0886f4d..a018616 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c@@ -1733,8 +1733,6 @@ static inline void gen_rldnm(DisasContext *ctx, uint32_t mb, uint32_t me)
{ TCGv t0; - mb = MB(ctx->opcode); - me = ME(ctx->opcode); t0 = tcg_temp_new(); tcg_gen_andi_tl(t0, cpu_gpr[rB(ctx->opcode)], 0x3f); tcg_gen_rotl_tl(t0, cpu_gpr[rS(ctx->opcode)], t0);
[Prev in Thread] | Current Thread | [Next in Thread] |