Fu, Chao-Ying wrote:

>   I attached a diff file for 14 files of the new structures
> and documents.  You and other maintainers are welcome to
> check it.  Thanks a lot!

Thank you for posting this.

Things about which I am clueless:

What is the difference between a _Fract type and an _Accum type?  I'm
gathering that _Fract types have no integer part, i.e., they always
represent a number between (-1,1), whereas _Accum types contain both an
integer and a fractional part.  Is there any other difference?

Substantive issues:

+  unsigned saturating_flag : 1; /* FIXME.  This new flag increases the
size of
+                                  tree_common by a full word.  */

We need to fix that, if it's true.  Grab a bit out of tree_base::spare,
if need be.

+  /* Fixed-point types. */
+  if (targetm.fixed_point_supported_p ())

I thought there was an emulation library for fixed-point operations?
So, why would this be supported only on some targets?  Is there a harm
in supporting it everywhere?  If there is, should it be enabled
per-target, or via a configure-time option?

I don't see any constant-folding code for fixed-point; is there no need
for that?  Is it somewhere else in the codebase?

Stylistic points:

Every function needs a comment saying what it does, what every argument
is, and what the return value is.  You have some new functions that are
missing comments.

+   fixed-point <- real,

Please write as "real to fixed point" to avoid ambiguity with the errors.

+DEF_RTL_EXPR(FIXED_ALL, "fixed_all", "e", RTX_UNARY)

Why FIXED_ALL?  That doesn't seem mnemonic.

> +      sat_short_fract_type_node = make_sat_signed_fract_type 
> (SHORT_FRACT_TYPE_SIZE);
> +      sat_fract_type_node = make_sat_signed_fract_type (FRACT_TYPE_SIZE);
> +      sat_long_fract_type_node = make_sat_signed_fract_type 
> (LONG_FRACT_TYPE_SIZE);
> +      sat_long_long_fract_type_node = make_sat_signed_fract_type 
> (LONG_LONG_FRACT_TYPE_SIZE);

Can we macroize some of this goo?  There are several places in the patch
where you have very long sequences of types, modes, etc.  I would hope
that by naming things consistently, we might be able to compact this a
lot, and reduce the chance that we've got something wrong in just one
place.  Like:

  #define MAKE_FIXED_TYPE_NODE(KIND, WIDTH, SAT) \
     set_##WIDTH_##KIND_type_node = make_##SAT_...

and then:

  #define MAKE_FIXED_TYPE_NODE_FAMILY(KIND) \
    MAKE_FIXED_TYPE_NODE(_short, KIND); \
    MAKE_FIXED_TYPE_NODE(_, KIND); \
    MAKE_FIXED_TYPE_NODE(_long, KIND); \
    MAKE_FIXED_TYPE_NODE(_long_long, KIND);

and then:

  MAKE_FIXED_TYPE_NODE_FAMILY(sat, fract);
  MAKE_FIXED_TYPE_NODE_FAMILY(sat, accum);

etc.

That's not right, but you get the idea. :-)

Thanks,

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713

Reply via email to