[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] sparc smul problem
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] sparc smul problem |
Date: |
Tue, 2 Sep 2008 01:11:40 +0200 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
On Mon, Sep 01, 2008 at 10:05:45PM +0300, Blue Swirl wrote:
> On 9/1/08, Vince Weaver <address@hidden> wrote:
> > Hello!
> >
> > I've been stuck on this all weekend, as I can't find where the actual
> > problem is. I might be completely missing it, but I've tried a lot of things
> > and can't make it work.
> >
> > On SPARC, the "smul" instruction multiplies two numbers, puts the result in
> > the result register but also puts the top 32-bits of the 64-bit result into
> > the "Y" register.
> >
> > As the attached code shows, the value of "Y" is wrong. Somehow after the
> > multiply, the top 32 bits of the product rae all zeros. I've played around
> > with the code generated by translate.c, and it looks like the shift and
> > other instructions all work properly, but the 64-bit multiply the result is
> > somehow being truncated. But I've looked at the generated code (on x86_64)
> > and it looks like it is doing the right thing.
> >
> > So anyway, I'll have to take a look at this again later, but in case anyone
> > else wants to look at it in case I am missing anything obvious.
>
> It looks like TCG on i386 host generates incorrect code for mulu2_i32,
> I think the op should be imul (unsigned) instead of mul. This patch
> fixes the problem.
According to the IA-32 manual, mul (F7/4) corresponds to unsigned
multiplication, while imul (F7/5) corresponds to signed multiplication.
Therefore the patch does not looks correct.
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' address@hidden | address@hidden
`- people.debian.org/~aurel32 | www.aurel32.net