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 >