Float commands for 64bit data

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

 



Hi

Is there a flag to tell gcc NOT to use float assembler commands
for 64bit data? We have problems that the generated code contains
float commands while the target (partially) has no float support.

To make it clear: This is not about the soft-float library which would
emulate float commands. We don't want gcc to even generate
those unless it really is about float operations.

Here's one example (for PPC603), but there also are others:

inline uint64 GetSystemTicks()
{
	union {
		uint64 s;
		struct {
			uint32 high;
			uint32 low;
		} m;
	} result;

	uint32 tmp=0;
	asm volatile (
		"mftbu 	%0" "\n\t"
		"mftb 	%1" "\n\t"
		"mftbu	%2" "\n\t"
		"cmpw	%3,%4" "\n\t"
		"beq	0f" "\n\t"
		"mftbu 	%0" "\n\t"
		"mftb 	%1" "\n\t"
	"0:"	 
		: "=r" (result.m.high), "=r" (result.m.low), "=r" (tmp)
		: "0" (result.m.high), "2" (tmp));

	return result.s;
}

...(snip)...
	mr 0,10			 # tmp120,
	stw 0,8(31)		 # result.m.high, tmp120
	stw 9,12(31)		 # result.m.low, tmp121
	stw 11,16(31)		 # tmp, tmp122
->	lfd 0,8(31)		 # result.s, result.s
->	stfd 0,24(31)		 #, result.s
	lwz 9,24(31)		 #, <result>
	lwz 10,28(31)		 #, <result>
	mr 3,9			 # <result>, <result>
	mr 4,10			 # <result>, <result>
	lwz 11,0(1)		 #,
	lwz 31,-4(11)		 #,
	mr 1,11			 #,
	blr			 #

The float commands are simply used for moving 64 bit of data around.
That may be faster than 2x32 but not working here. I'm interested in
workarounds for various gcc versions (2.95, 3.4, 4.x).

Thanks

bye   Fabi



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux