Hi Nathan,

Thanks for your guide. When I debugged the exe file or make it ran on
8548 board, the vmhaddshs makes the exe file hang out. Could I compile
the source for 8540 (e500v1 instructions) only?

Thanks for your help,
Ha Luong

On Tue, Dec 16, 2008 at 9:45 PM, Nathan Froyd <froy...@codesourcery.com> wrote:
> On Tue, Dec 16, 2008 at 12:28:10PM +0700, Ha Luong wrote:
>> I used gcc-4.3.2 to compile the c source(*) and it generated
>> "vmhraddshs" instruction when I compiled with -mcpu=8540.
>> 000103A4: 11EB0321  vmhraddshs vr15,vr11,vr0,vr12
>
> You are running into the problem that the Altivec and SPE opcode spaces
> overlap, so the instructions that you see generated depend on what
> disassembler you use.  For example, compiling the assembler file test.s:
>
>        .text
>        .long 0x10074B20
>        .long 0x11eb0321
>
> with:
>
>  powerpc-linux-gnu-gcc -c -o test.o test.s
>
> and disassembling:
>
>  powerpc-linux-gnu-objdump -d test.o
>
> gives you:
>
> Disassembly of section .text:
>
> 00000000 <.text>:
>   0:   10 07 4b 20     vmhaddshs v0,v7,v9,v12
>   4:   11 eb 03 21     vmhraddshs v15,v11,v0,v12
>
> but if you tell objdump to disassemble e500 instructions instead (use -M
> e500x2 to include e500v2 instructions):
>
>  powerpc-linux-gnu-objdump -d -M e500 test.o
>
> you see:
>
> Disassembly of section .text:
>
> 00000000 <.text>:
>   0:   10 07 4b 20     evstddx r0,r7,r9
>   4:   11 eb 03 21     evstdd  r15,0(r11)
>
> The compiler is generating evstdd{,x} instructions, not vmhraddshs
> instructions.
>
> -Nathan
>

Reply via email to