------- Additional Comments From schlie at comcast dot net  2005-02-13 00:10 
-------
Subject: Re:  [4.0 Regression] avr target build broken
 by recent 'DC' type update to libgcc2

Or simpler, for each target (as gcc libgcc2 has trouble figuring it out):

  #define CHAR_MODE QI
  #define SHORT_MODE HI
  #define INT_MODE HI
  #define LONG_MODE SI
  #define LLONG_MODE DI
  #define FLOAT_MODE SF
  #define DOUBLE_MODE SF
  #define LDOUBLE_MODE SF

 (where then if desired
  #define INT_TYPE_SIZE ( MODE_SIZE( INT_MODE ) * UNITS_PER_WORD )
  ...)

Then within libgcc2, simply replace all the error prone logic with:

  typedef          int   CHAR_T     __attribute__ ((mode (CHAR_MODE)));
  typedef          int   SHORT_T    __attribute__ ((mode (SHORT_MODE)));
  typedef          int   INT_T      __attribute__ ((mode (INT_MODE)));
  typedef          int   LONG_T     __attribute__ ((mode (LONG_MODE)));
  typedef          int   LLONG_T    __attribute__ ((mode (LLONG_MODE)));
  typedef          float FLOAT_T    __attribute__ ((mode (FLOAT_MODE)));
  typedef          float DOUBLE_T   __attribute__ ((mode (DOUBLE_MODE)));
  typedef          float LDOUBLE_T  __attribute__ ((mode (LDOUBLE_MODE)));
  typedef _Complex float CFLOAT_T   __attribute__ ((mode (FLOAT_MODE)));
  typedef _Complex float CDOUBLE_T  __attribute__ ((mode (DOUBLE_MODE)));
  typedef _Complex float CLDOUBLE_T __attribute__ ((mode (LDOUBLE_MODE)));

 (where then one could define macros to define correctly named built-ins:
  #define SYMBOL2(a,b)    a ## b
  #define SYMBOL3(a,b)    a ## b ## c

  extern CFLOAT_T SYMBOL3(__add,CFLOAT_MODE,3)( CFLOAT_T, CFLOAT_T );

  ... to define built-in functions with correct types and mode names. Which
  seems much preferred and less error prone than attempting to at best guess
  a targets defined supported type sizes and corresponding modes; and then
  use them to define built-in functions named after the wrong modes...)

... hypothetically.







-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19920

Reply via email to