This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Float commands for 64bit data


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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]