This is the mail archive of the gcc@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]

operand_subword question



Are there any ports where HOST_BITS_PER_WIDE_INT is 64, BITS_PER_WORD is 64
which also support 128bit long doubles?


The problem I'm running into is we want to extract word 1 out of something
like this:

(const_double:TF (const_int 0 [0x0]) 0 [0x0] 0 [0x0] -8070380146332326976 
[0x90004003ff7f23c0])


We get into this hunk of code:


  else if (HOST_BITS_PER_WIDE_INT >= BITS_PER_WORD
           && GET_MODE_CLASS (mode) == MODE_FLOAT
           && GET_MODE_BITSIZE (mode) > 64
           && GET_CODE (op) == CONST_DOUBLE)
  {
    long k[4];
    REAL_VALUE_TYPE rv;

    REAL_VALUE_FROM_CONST_DOUBLE (rv, op);
    REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, k);

    if (BITS_PER_WORD == 32)
      {
        val = k[i];
        val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
        return GEN_INT (val);
      }
    else
      abort ();

Since BITS_PER_WORD != 32, we abort.

I can certainly hack in a case for 64bit BITS_PER_WORD, but it seems extremely
odd that none of the other ports have run into problems in this area.

This happens when we try to initialize a "long double" field within a
structure.

Thoughts?
jeff




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]