On Fri, 21 May 2010, Khem Raj wrote:

On Fri, May 21, 2010 at 6:40 AM, Vitus Jensen <[email protected]> wrote:
On Fri, 21 May 2010, Vitus Jensen wrote:
On Fri, 21 May 2010, Vitus Jensen wrote:
 On Wed, 19 May 2010, Koen Kooi wrote:
  On 19-05-10 17:46, Vitus Jensen wrote:
  On Wed, 19 May 2010, Vitus Jensen wrote:
  On Wed, 19 May 2010, Gary Thomas wrote:
   On 05/19/2010 03:38 AM, Vitus Jensen wrote:

...

  So currently .dev should be unbuildable for ppc users?  Without
  selecting a non-default compiler that is.
  I thought I pinned powerpc at 4.1.1, but it turns out that it was
only
  for ppc405:
  ANGSTROM_GCC_VERSION_ppc405         ?= "4.1.1"
  Feel free to send patches to add that for other ppc platforms.

 I'd loved to but it should be a usable version for ppc603e.  We have
used
 ELDK gcc 3.3.3 in the past so that version would be a known good one.

 [stable/2009]
 4.2.4  wrong result
 4.1.1  wrong result (see first posting)
 3.3.3  doesn't compile, obstack macro problem
 3.3.4  doesn't compile, signal.h stack_t problem

 [org.openembedded.dev]
 4.3.3  doesn't compile
 4.1.1  doesn't compile
 4.2.4  doesn't compile, libstdc++ problem

 All compilations in the .dev branch used MACHINE=n1200, in stable I used
 our bluepro.  Always a clean build of meta-toolchain.  I know that there
 are currently problems in .dev so I will wait/monitor the list and try
 to get 3.3.3 and something newer than 4.3.3. to compile.

Faster than thought: 4.4.4 compiles for n1200 (ppc603e) on .dev and
produces correct output.  (double)(long long)10 equals 10.0.

Only at -O2 and -O3, at those levels the internal function __floatdidf isn't
called (previously it was only -O3).

I dont think thats the case. It always generates the call to __floatdidf

Well, it generates the call to __floatdidf from inside cast() but that function is never called from main but replaced with the precomputed result. See attached assembler output, there is no call to _Z4castx.


At -O1 and below it is called and
still produces incorrect results :-( Oh well, I give up for now.


All I have to test is qemu running OE/ppc603e. So i tried this test on qemu/uclibc and it seems to work for me at O1/O2/O3 using gcc 4.4.4 and minimal-uclibc distro. I would also try with eglibc but I need to build it.

Hmm, I'm using angstrom with glibc. And I'm testing on the real device and saw that -mhard-float is implied by mcpu=603e. Using the FPU would certainly explain differences between qemu and the real thing. But __floatdidf is hard to understand, all macro. Is it really using the FPU?

Vitus

PS, to crosscheck: is there a HOWTO for qemu and oe/ppc? And qemu_0.12.4 doesn't build here.

--
Vitus Jensen, Hannover, Germany, Universe (current)
pgp public key available from keyservers
	.file	"cast.cpp"
	.gnu_attribute 4, 1
	.gnu_attribute 8, 1
	.gnu_attribute 12, 2
	.globl __floatdidf
	.section	".text"
	.align 2
	.globl _Z4castx
	.type	_Z4castx, @function
_Z4castx:
.LFB12:
	mflr 0
.LCFI0:
	stwu 1,-16(1)
.LCFI1:
	stw 0,20(1)
.LCFI2:
	bl __floatdidf
	lwz 0,20(1)
	addi 1,1,16
	mtlr 0
	blr
.LFE12:
	.size	_Z4castx, .-_Z4castx
	.align 2
	.globl main
	.type	main, @function
main:
.LFB13:
	mflr 0
.LCFI3:
	lis 9,....@ha
	stwu 1,-16(1)
.LCFI4:
	lis 3,....@ha
	lfs 1,....@l(9)
	la 3,....@l(3)
	li 5,0
	li 6,10
	stw 0,20(1)
.LCFI5:
	creqv 6,6,6
	bl printf
	lwz 0,20(1)
	li 3,0
	addi 1,1,16
	mtlr 0
	blr
.LFE13:
	.size	main, .-main
	.section	.rodata.cst4,"aM",@progbits,4
	.align 2
.LC2:
	.4byte	1092616192
	.section	.rodata.str1.4,"aMS",@progbits,1
	.align 2
.LC0:
	.string	"%lld == %f\n"
	.section	.eh_frame,"a",@progbits
.Lframe1:
	.4byte	.LECIE1-.LSCIE1
.LSCIE1:
	.4byte	0x0
	.byte	0x1
	.globl __gxx_personality_v0
	.string	"zP"
	.uleb128 0x1
	.sleb128 -4
	.byte	0x41
	.uleb128 0x5
	.byte	0x0
	.4byte	__gxx_personality_v0
	.byte	0xc
	.uleb128 0x1
	.uleb128 0x0
	.align 2
.LECIE1:
.LSFDE3:
	.4byte	.LEFDE3-.LASFDE3
.LASFDE3:
	.4byte	.LASFDE3-.Lframe1
	.4byte	.LFB13
	.4byte	.LFE13-.LFB13
	.uleb128 0x0
	.byte	0x4
	.4byte	.LCFI4-.LFB13
	.byte	0xe
	.uleb128 0x10
	.byte	0x4
	.4byte	.LCFI5-.LCFI4
	.byte	0x5
	.uleb128 0x41
	.uleb128 0xffffffffffffffff
	.align 2
.LEFDE3:
	.ident	"GCC: (GNU) 4.4.4"
	.section	.note.GNU-stack,"",@progbits
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel

Reply via email to