qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Effective way to test PowerPC lwbrx instruction


From: Thomas Huth
Subject: Re: [Qemu-devel] Effective way to test PowerPC lwbrx instruction
Date: Thu, 25 Aug 2016 18:03:47 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2

On 25.08.2016 14:54, G 3 wrote:
> I'm chasing down a bug with QEMU that causes audio to fail on a Mac OS
> guest. In this file:
> https://github.com/nixxcode/AppleUSBAudio-273.4.1/blob/master/AppleUSBAudioClip.cpp
> is where a lot of assembly language code is located. I think one or more
> of the PowerPC instructions might be incorrectly implemented so I am
> checking each one that the file uses. Starting with lwbrx I made this
> program that gives this instruction sample inputs and checks them with
> real outputs. According to the program QEMU implements this instruction
> correctly. Does this program effectively check the lwbrx instruction or
> is it missing something?
...
>     // Go thru each rA value
>     for(rA = 0; rA <=12; rA=rA+4)
>     {
>         // set the correct answer array for each rA value
>         if(rA == 0)
>             answer_array = answer_array0;
>         else if(rA == 4)
>             answer_array = answer_array4;
>         else if(rA == 8)
>             answer_array = answer_array8;
>         else
>             answer_array = answer_array12;
> 
>         // Go thru each rB value
>         for(index = 0; index < rB_size; index++)
>         {
>             asm volatile("lwbrx %0, %1, %2" : "=r" (result) : "b%" (rA),
> "r" (&(rB[index])));

I think you're not testing the case where rA is r0 here (only where the
content of rA is 0) ... and rA == r0 is a special case for this
instruction, see the PowerISA for details. So you'd need a separate asm
volatile statement to test this.
(Also a question: What is the "%" here good for? I did not quite
understand why you're using that here)

 Thomas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]