Annotation of GNUtools/cc/expmed.diff, revision 1.1

1.1     ! root        1: *** expmed.c   Fri Apr  8 10:07:44 1994
        !             2: --- expmed.c.next      Fri Apr  1 12:53:32 1994
        !             3: ***************
        !             4: *** 421,429 ****
        !             5:         /* If xop0 is a register, we need it in MAXMODE
        !             6:         to make it acceptable to the format of insv.  */
        !             7:         if (GET_CODE (xop0) == SUBREG)
        !             8: !      /* We can't just change the mode, because this might clobber op0,
        !             9: !         and we will need the original value of op0 if insv fails.  */
        !            10: !      xop0 = gen_rtx (SUBREG, maxmode, SUBREG_REG (xop0), SUBREG_WORD (xop0));
        !            11:         if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode)
        !            12:        xop0 = gen_rtx (SUBREG, maxmode, xop0, 0);
        !            13:   
        !            14: --- 421,427 ----
        !            15:         /* If xop0 is a register, we need it in MAXMODE
        !            16:         to make it acceptable to the format of insv.  */
        !            17:         if (GET_CODE (xop0) == SUBREG)
        !            18: !      PUT_MODE (xop0, maxmode);
        !            19:         if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode)
        !            20:        xop0 = gen_rtx (SUBREG, maxmode, xop0, 0);
        !            21:   
        !            22: ***************
        !            23: *** 517,533 ****
        !            24:     int all_zero = 0;
        !            25:     int all_one = 0;
        !            26:   
        !            27: -   /* If VALUE is a floating-point mode, access it as an integer of the
        !            28: -      corresponding size.  This can occur on a machine with 64 bit registers
        !            29: -      that uses SFmode for float.  This can also occur for unaligned float
        !            30: -      structure fields.  */
        !            31: -   if (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT)
        !            32: -     {
        !            33: -       if (GET_CODE (value) != REG)
        !            34: -      value = copy_to_reg (value);
        !            35: -       value = gen_rtx (SUBREG, word_mode, value, 0);
        !            36: -     }
        !            37: - 
        !            38:     /* There is a case not handled here:
        !            39:        a structure with a known alignment of just a halfword
        !            40:        and a field split across two aligned halfwords within the structure.
        !            41: --- 515,520 ----
        !            42: ***************
        !            43: *** 569,584 ****
        !            44:   
        !            45:         total_bits = GET_MODE_BITSIZE (mode);
        !            46:   
        !            47: -       /* Make sure bitpos is valid for the chosen mode.  Adjust BITPOS to
        !            48: -       be be in the range 0 to total_bits-1, and put any excess bytes in
        !            49: -       OFFSET.  */
        !            50: -       if (bitpos >= total_bits)
        !            51: -      {
        !            52: -        offset += (bitpos / total_bits) * (total_bits / BITS_PER_UNIT);
        !            53: -        bitpos -= ((bitpos / total_bits) * (total_bits / BITS_PER_UNIT)
        !            54: -                   * BITS_PER_UNIT);
        !            55: -      }
        !            56: - 
        !            57:         /* Get ref to an aligned byte, halfword, or word containing the field.
        !            58:         Adjust BITPOS to be position within a word,
        !            59:         and OFFSET to be the offset of that word.
        !            60: --- 556,561 ----
        !            61: ***************
        !            62: *** 633,638 ****
        !            63: --- 610,626 ----
        !            64:   
        !            65:         if (GET_MODE (value) != mode)
        !            66:        {
        !            67: +        /* If VALUE is a floating-point mode, access it as an integer
        !            68: +           of the corresponding size, then convert it.  This can occur on
        !            69: +           a machine with 64 bit registers that uses SFmode for float.  */
        !            70: +        if (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT)
        !            71: +          {
        !            72: +            if (GET_CODE (value) != REG)
        !            73: +              value = copy_to_reg (value);
        !            74: +            value
        !            75: +              = gen_rtx (SUBREG, word_mode, value, 0);
        !            76: +          }
        !            77: + 
        !            78:          if ((GET_CODE (value) == REG || GET_CODE (value) == SUBREG)
        !            79:              && GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (value)))
        !            80:            value = gen_lowpart (mode, value);
        !            81: ***************
        !            82: *** 703,709 ****
        !            83:       {
        !            84:         rtx word = gen_lowpart_common (word_mode, value);
        !            85:   
        !            86: !       if (word && (value != word))
        !            87:        value = word;
        !            88:         else
        !            89:        value = gen_lowpart_common (word_mode,
        !            90: --- 691,697 ----
        !            91:       {
        !            92:         rtx word = gen_lowpart_common (word_mode, value);
        !            93:   
        !            94: !       if (word)
        !            95:        value = word;
        !            96:         else
        !            97:        value = gen_lowpart_common (word_mode,
        !            98: ***************
        !            99: *** 733,751 ****
        !           100:                         >> (bitsize - bitsdone - thissize))
        !           101:                        & (((HOST_WIDE_INT) 1 << thissize) - 1));
        !           102:         else
        !           103: !      {
        !           104: !        /* The args are chosen so that the last part
        !           105: !           includes the lsb.  */
        !           106: !        int bit_offset = 0;
        !           107: !        /* If the value isn't in memory, then it must be right aligned
        !           108: !           if a register, so skip past the padding on the left.  If it
        !           109: !           is in memory, then there is no padding on the left.  */
        !           110: !        if (GET_CODE (value) != MEM)
        !           111: !          bit_offset = BITS_PER_WORD - bitsize;
        !           112: !        part = extract_fixed_bit_field (word_mode, value, 0, thissize,
        !           113: !                                        bit_offset + bitsdone,
        !           114: !                                        NULL_RTX, 1, align);
        !           115: !      }
        !           116:   #else
        !           117:         /* Fetch successively more significant portions.  */
        !           118:         if (GET_CODE (value) == CONST_INT)
        !           119: --- 721,731 ----
        !           120:                         >> (bitsize - bitsdone - thissize))
        !           121:                        & (((HOST_WIDE_INT) 1 << thissize) - 1));
        !           122:         else
        !           123: !      /* The args are chosen so that the last part
        !           124: !         includes the lsb.  */
        !           125: !      part = extract_fixed_bit_field (word_mode, value, 0, thissize,
        !           126: !                                      BITS_PER_WORD - bitsize + bitsdone,
        !           127: !                                      NULL_RTX, 1, align);
        !           128:   #else
        !           129:         /* Fetch successively more significant portions.  */
        !           130:         if (GET_CODE (value) == CONST_INT)
        !           131: ***************
        !           132: *** 757,776 ****
        !           133:   #endif
        !           134:   
        !           135:         /* If OP0 is a register, then handle OFFSET here.
        !           136: ! 
        !           137: !       When handling multiword bitfields, extract_bit_field may pass
        !           138: !       down a word_mode SUBREG of a larger REG for a bitfield that actually
        !           139: !       crosses a word boundary.  Thus, for a SUBREG, we must find
        !           140: !       the current word starting from the base register.  */
        !           141: !       if (GET_CODE (op0) == SUBREG)
        !           142:        {
        !           143: -        word = operand_subword (SUBREG_REG (op0),
        !           144: -                                SUBREG_WORD (op0) + offset, 1,
        !           145: -                                GET_MODE (SUBREG_REG (op0)));
        !           146: -        offset = 0;
        !           147: -      }
        !           148: -       else if (GET_CODE (op0) == REG)
        !           149: -      {
        !           150:          word = operand_subword (op0, offset, 1, GET_MODE (op0));
        !           151:          offset = 0;
        !           152:        }
        !           153: --- 737,745 ----
        !           154:   #endif
        !           155:   
        !           156:         /* If OP0 is a register, then handle OFFSET here.
        !           157: !       In the register case, UNIT must be a whole word.  */
        !           158: !       if (GET_CODE (op0) == SUBREG || GET_CODE (op0) == REG)
        !           159:        {
        !           160:          word = operand_subword (op0, offset, 1, GET_MODE (op0));
        !           161:          offset = 0;
        !           162:        }
        !           163: ***************
        !           164: *** 928,942 ****
        !           165:            emit_move_insn (target_part, result_part);
        !           166:        }
        !           167:   
        !           168: !       if (unsignedp)
        !           169: !      return target;
        !           170: !       /* Signed bit field: sign-extend with two arithmetic shifts.  */
        !           171: !       target = expand_shift (LSHIFT_EXPR, mode, target,
        !           172: !                           build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0),
        !           173: !                           NULL_RTX, 0);
        !           174: !       return expand_shift (RSHIFT_EXPR, mode, target,
        !           175: !                         build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0),
        !           176: !                         NULL_RTX, 0);
        !           177:       }
        !           178:     
        !           179:     /* From here on we know the desired field is smaller than a word
        !           180: --- 897,903 ----
        !           181:            emit_move_insn (target_part, result_part);
        !           182:        }
        !           183:   
        !           184: !       return target;
        !           185:       }
        !           186:     
        !           187:     /* From here on we know the desired field is smaller than a word
        !           188: ***************
        !           189: *** 1524,1543 ****
        !           190:         thissize = MIN (thissize, unit - thispos);
        !           191:   
        !           192:         /* If OP0 is a register, then handle OFFSET here.
        !           193: ! 
        !           194: !       When handling multiword bitfields, extract_bit_field may pass
        !           195: !       down a word_mode SUBREG of a larger REG for a bitfield that actually
        !           196: !       crosses a word boundary.  Thus, for a SUBREG, we must find
        !           197: !       the current word starting from the base register.  */
        !           198: !       if (GET_CODE (op0) == SUBREG)
        !           199:        {
        !           200: -        word = operand_subword_force (SUBREG_REG (op0),
        !           201: -                                      SUBREG_WORD (op0) + offset,
        !           202: -                                      GET_MODE (SUBREG_REG (op0)));
        !           203: -        offset = 0;
        !           204: -      }
        !           205: -       else if (GET_CODE (op0) == REG)
        !           206: -      {
        !           207:          word = operand_subword_force (op0, offset, GET_MODE (op0));
        !           208:          offset = 0;
        !           209:        }
        !           210: --- 1485,1493 ----
        !           211:         thissize = MIN (thissize, unit - thispos);
        !           212:   
        !           213:         /* If OP0 is a register, then handle OFFSET here.
        !           214: !       In the register case, UNIT must be a whole word.  */
        !           215: !       if (GET_CODE (op0) == SUBREG || GET_CODE (op0) == REG)
        !           216:        {
        !           217:          word = operand_subword_force (op0, offset, GET_MODE (op0));
        !           218:          offset = 0;
        !           219:        }
        !           220: ***************
        !           221: *** 1642,1655 ****
        !           222:   
        !           223:     op1 = expand_expr (amount, NULL_RTX, VOIDmode, 0);
        !           224:   
        !           225: - #if SHIFT_COUNT_TRUNCATED
        !           226: -   if (SHIFT_COUNT_TRUNCATED
        !           227: -       && GET_CODE (op1) == CONST_INT
        !           228: -       && (unsigned HOST_WIDE_INT) INTVAL (op1) >= GET_MODE_BITSIZE (mode))
        !           229: -     op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1)
        !           230: -                 % GET_MODE_BITSIZE (mode));
        !           231: - #endif
        !           232: - 
        !           233:     if (op1 == const0_rtx)
        !           234:       return shifted;
        !           235:   
        !           236: --- 1592,1597 ----

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.