Support 64 or 80 bit long double for i960

Jim Wilson wilson@cygnus.com
Wed Feb 10 12:43:00 GMT 1999


	Jim, I thought and think about the problem.  I believe it would be nice
	to have infrastructure to switch the long double size (and may be double
	for processors with supporting 128 bit floating point numbers) with the
	aid of a compiler option.  But it looks like that the fixing the problem
	in real.c requires more one day.  So I'd prefer to make a configure
	option and return back in the future.

Are you working on this?  I just checked and see that it is still broken.
I'd suggest just disabling the change for now.  I've attached a patch for
comment.  If you write a configure patch, it can be re-enabled then.  It
can also be re-enabled by hand for testing.  Meanwhile, we shouldn't leave
it broken.

	By the way the documentation defines LONG_DOUBLE_TYPE_SIZE as simply C
	expression (not preprocessor expression).  It should be fix too.  I
	could solve the problem after 5th Febrary or may be early.

The documention should only be used as a guide to help interpret the source.
It should not be regarded as definitive.  I suspect that the few documentation
entries have tried to get this distinction right.  And the ones that did get
it right at first could now be wrong if the source code has changed.  I use
grep to find these kinds of problems.


Wed Feb 10 12:38:40 1999  Jim Wilson  <wilson@cygnus.com>

	* i960/i960.h (OVERRIDE_OPTIONS): Warn if -mlong-double-64 is used.
	(LONG_DOUBLE_TYPE_SIZE): Undef then unconditionally define to 96.

Index: i960.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/i960/i960.h,v
retrieving revision 1.22
diff -p -r1.22 i960.h
*** i960.h	1999/01/19 12:02:58	1.22
--- i960.h	1999/02/10 20:33:02
*************** extern int target_flags;
*** 321,326 ****
--- 321,329 ----
        flag_signed_char = 1;					\
        target_flags |= TARGET_FLAG_CLEAN_LINKAGE;		\
      }								\
+   /* ??? See the LONG_DOUBLE_TYPE_SIZE definition below.  */	\
+   if (TARGET_LONG_DOUBLE_64)					\
+     warning ("The -mlong-double-64 option does not work yet.", 0);\
    i960_initialize ();						\
  }
  
*************** extern int target_flags;
*** 368,373 ****
--- 371,380 ----
  /* Width in bits of a long double.  Define to 96, and let
     ROUND_TYPE_ALIGN adjust the alignment for speed. */
  #define	LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96)
+ 
+ /* ??? This must be a constant, because real.c and real.h test it with #if.  */
+ #undef LONG_DOUBLE_TYPE_SIZE
+ #define LONG_DOUBLE_TYPE_SIZE 96
  
  /* Define this to set long double type size to use in libgcc2.c, which can
     not depend on target_flags.  */


More information about the Gcc-patches mailing list