diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2001-11-11 11:02:26 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2001-11-11 06:02:26 -0500 |
commit | 04050c690de7b72c52895edb922c807279cac4b1 (patch) | |
tree | 7505cb28fd2ea0a6dee73c00724fe0ab8515303b /gcc/expmed.c | |
parent | d746694a4593b1401b9638d605f59083d488af1e (diff) | |
download | gcc-04050c690de7b72c52895edb922c807279cac4b1.zip gcc-04050c690de7b72c52895edb922c807279cac4b1.tar.gz gcc-04050c690de7b72c52895edb922c807279cac4b1.tar.bz2 |
expmed.c (extract_bit_field): No longer pass in alignment.
* expmed.c (extract_bit_field): No longer pass in alignment.
(extract_fixed_bit_field, extract_split_bit_field): Likewise.
(store_bit_field, store_fixed_bit_field, store_split_bit_field):
Likewise.
* expr.c (store_constructor, store_constructor_field): Likewise.
(store_field, emit_group_load, emit_group_store): Likewise.
* expr.h (emit_group_load, emit_group_store): Delete ALIGN parm.
(store_bit_field, extract_bit_field): Likewise.
* calls.c, expr.c, function.c: Change calls to above functions.
* ifcvt.c, stmt.c: Likewise.
From-SVN: r46926
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r-- | gcc/expmed.c | 205 |
1 files changed, 79 insertions, 126 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c index 9435a62..42394a9 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -36,23 +36,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA static void store_fixed_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, - unsigned HOST_WIDE_INT, rtx, - unsigned int)); + unsigned HOST_WIDE_INT, rtx)); static void store_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, - unsigned HOST_WIDE_INT, rtx, - unsigned int)); + unsigned HOST_WIDE_INT, rtx)); static rtx extract_fixed_bit_field PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, - rtx, int, unsigned int)); + rtx, int)); static rtx mask_rtx PARAMS ((enum machine_mode, int, int, int)); static rtx lshift_value PARAMS ((enum machine_mode, rtx, int, int)); static rtx extract_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, - unsigned HOST_WIDE_INT, int, - unsigned int)); + unsigned HOST_WIDE_INT, int)); static void do_cmp_and_jump PARAMS ((rtx, rtx, enum rtx_code, enum machine_mode, rtx)); @@ -289,13 +286,12 @@ mode_for_extraction (pattern, opno) else, we use the mode of operand 3. */ rtx -store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) +store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; enum machine_mode fieldmode; rtx value; - unsigned int align; HOST_WIDE_INT total_size; { unsigned int unit @@ -306,11 +302,6 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) enum machine_mode op_mode = mode_for_extraction (EP_insv, 3); - /* It is wrong to have align==0, since every object is aligned at - least at a bit boundary. This usually means a bug elsewhere. */ - if (align == 0) - abort (); - /* Discount the part of the structure before the desired byte. We need to know how many bytes are safe to reference after it. */ if (total_size >= 0) @@ -347,9 +338,9 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) && (GET_CODE (op0) != MEM ? (GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode)) - : (! SLOW_UNALIGNED_ACCESS (fieldmode, align) + : (! SLOW_UNALIGNED_ACCESS (fieldmode, MEM_ALIGN (op0)) || (offset * BITS_PER_UNIT % bitsize == 0 - && align % GET_MODE_BITSIZE (fieldmode) == 0)))) + && MEM_ALIGN (op0) % GET_MODE_BITSIZE (fieldmode) == 0)))) { if (GET_MODE (op0) != fieldmode) { @@ -472,10 +463,10 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) if I is 1, use the next to lowest word; and so on. */ unsigned int wordnum = (backwards ? nwords - i - 1 : i); unsigned int bit_offset = (backwards - ? MAX ((int) bitsize - ((int) i + 1) - * BITS_PER_WORD, - 0) - : (int) i * BITS_PER_WORD); + ? MAX ((int) bitsize - ((int) i + 1) + * BITS_PER_WORD, + 0) + : (int) i * BITS_PER_WORD); store_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), @@ -484,7 +475,7 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) (GET_MODE (value) == VOIDmode ? fieldmode : GET_MODE (value))), - align, total_size); + total_size); } return value; } @@ -519,9 +510,7 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) offset = 0; } else - { - op0 = protect_from_queue (op0, 1); - } + op0 = protect_from_queue (op0, 1); /* If VALUE is a floating-point mode, access it as an integer of the corresponding size. This can occur on a machine with 64 bit registers @@ -574,19 +563,19 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) if (GET_MODE (op0) == BLKmode || GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode)) bestmode - = get_best_mode (bitsize, bitnum, align, maxmode, + = get_best_mode (bitsize, bitnum, MEM_ALIGN (op0), maxmode, MEM_VOLATILE_P (op0)); else bestmode = GET_MODE (op0); if (bestmode == VOIDmode - || (SLOW_UNALIGNED_ACCESS (bestmode, align) - && GET_MODE_BITSIZE (bestmode) > align)) + || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (op0)) + && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (op0))) goto insv_loses; - /* Adjust address to point to the containing unit of that mode. */ + /* Adjust address to point to the containing unit of that mode. + Compute offset as multiple of this unit, counting in bytes. */ unit = GET_MODE_BITSIZE (bestmode); - /* Compute offset as multiple of this unit, counting in bytes. */ offset = (bitnum / unit) * GET_MODE_SIZE (bestmode); bitpos = bitnum % unit; op0 = adjust_address (op0, bestmode, offset); @@ -595,7 +584,7 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) the unit. */ tempreg = copy_to_reg (op0); store_bit_field (tempreg, bitsize, bitpos, fieldmode, value, - align, total_size); + total_size); emit_move_insn (op0, tempreg); return value; } @@ -638,7 +627,8 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) if we must narrow it, be sure we do it correctly. */ if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (maxmode)) - value1 = simplify_gen_subreg (maxmode, value1, GET_MODE (value1), 0); + value1 = simplify_gen_subreg (maxmode, value1, + GET_MODE (value1), 0); else value1 = gen_lowpart (maxmode, value1); } @@ -664,13 +654,13 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) else { delete_insns_since (last); - store_fixed_bit_field (op0, offset, bitsize, bitpos, value, align); + store_fixed_bit_field (op0, offset, bitsize, bitpos, value); } } else insv_loses: /* Insv is not available; store using shifts and boolean ops. */ - store_fixed_bit_field (op0, offset, bitsize, bitpos, value, align); + store_fixed_bit_field (op0, offset, bitsize, bitpos, value); return value; } @@ -682,16 +672,14 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) (If OP0 is a register, it may be a full word or a narrower mode, but BITPOS still counts within a full word, which is significant on bigendian machines.) - STRUCT_ALIGN is the alignment the structure is known to have. Note that protect_from_queue has already been done on OP0 and VALUE. */ static void -store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) +store_fixed_bit_field (op0, offset, bitsize, bitpos, value) rtx op0; unsigned HOST_WIDE_INT offset, bitsize, bitpos; rtx value; - unsigned int struct_align; { enum machine_mode mode; unsigned int total_bits = BITS_PER_WORD; @@ -699,9 +687,6 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) int all_zero = 0; int all_one = 0; - if (! SLOW_UNALIGNED_ACCESS (word_mode, struct_align)) - struct_align = BIGGEST_ALIGNMENT; - /* There is a case not handled here: a structure with a known alignment of just a halfword and a field split across two aligned halfwords within the structure. @@ -716,8 +701,7 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) { - store_split_bit_field (op0, bitsize, bitpos, - value, BITS_PER_WORD); + store_split_bit_field (op0, bitsize, bitpos, value); return; } } @@ -733,16 +717,14 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (word_mode)) mode = word_mode; mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, - struct_align, mode, - GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0)); + MEM_ALIGN (op0), mode, MEM_VOLATILE_P (op0)); if (mode == VOIDmode) { /* The only way this should occur is if the field spans word boundaries. */ - store_split_bit_field (op0, - bitsize, bitpos + offset * BITS_PER_UNIT, - value, struct_align); + store_split_bit_field (op0, bitsize, bitpos + offset * BITS_PER_UNIT, + value); return; } @@ -856,17 +838,14 @@ store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) BITSIZE is the field width; BITPOS the position of its first bit (within the word). VALUE is the value to store. - ALIGN is the known alignment of OP0. - This is also the size of the memory objects to be used. This does not yet handle fields wider than BITS_PER_WORD. */ static void -store_split_bit_field (op0, bitsize, bitpos, value, align) +store_split_bit_field (op0, bitsize, bitpos, value) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; rtx value; - unsigned int align; { unsigned int unit; unsigned int bitsdone = 0; @@ -876,7 +855,7 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else - unit = MIN (align, BITS_PER_WORD); + unit = MIN (MEM_ALIGN (op0), BITS_PER_WORD); /* If VALUE is a constant other than a CONST_INT, get it into a register in WORD_MODE. If we can do this using gen_lowpart_common, do so. Note @@ -932,18 +911,10 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) else /* The args are chosen so that the last part includes the lsb. Give extract_bit_field the value it needs (with - endianness compensation) to fetch the piece we want. - - ??? We have no idea what the alignment of VALUE is, so - we have to use a guess. */ - part - = extract_fixed_bit_field - (word_mode, value, 0, thissize, - total_bits - bitsize + bitsdone, NULL_RTX, 1, - GET_MODE (value) == VOIDmode - ? UNITS_PER_WORD - : (GET_MODE (value) == BLKmode - ? 1 : GET_MODE_ALIGNMENT (GET_MODE (value)))); + endianness compensation) to fetch the piece we want. */ + part = extract_fixed_bit_field (word_mode, value, 0, thissize, + total_bits - bitsize + bitsdone, + NULL_RTX, 1); } else { @@ -953,13 +924,8 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) >> bitsdone) & (((HOST_WIDE_INT) 1 << thissize) - 1)); else - part - = extract_fixed_bit_field - (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1, - GET_MODE (value) == VOIDmode - ? UNITS_PER_WORD - : (GET_MODE (value) == BLKmode - ? 1 : GET_MODE_ALIGNMENT (GET_MODE (value)))); + part = extract_fixed_bit_field (word_mode, value, 0, thissize, + bitsdone, NULL_RTX, 1); } /* If OP0 is a register, then handle OFFSET here. @@ -985,8 +951,8 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) /* OFFSET is in UNITs, and UNIT is in bits. store_fixed_bit_field wants offset in bytes. */ - store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, - thissize, thispos, part, align); + store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, thissize, + thispos, part); bitsdone += thissize; } } @@ -1003,7 +969,6 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) TMODE is the mode the caller would like the value to have; but the value may be returned with type MODE instead. - ALIGN is the alignment that STR_RTX is known to have. TOTAL_SIZE is the size in bytes of the containing structure, or -1 if varying. @@ -1014,14 +979,13 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) rtx extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, - target, mode, tmode, align, total_size) + target, mode, tmode, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; int unsignedp; rtx target; enum machine_mode mode, tmode; - unsigned int align; HOST_WIDE_INT total_size; { unsigned int unit @@ -1111,9 +1075,9 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), GET_MODE_BITSIZE (GET_MODE (op0)))) || (GET_CODE (op0) == MEM - && (! SLOW_UNALIGNED_ACCESS (mode, align) + && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (op0)) || (offset * BITS_PER_UNIT % bitsize == 0 - && align % bitsize == 0)))) + && MEM_ALIGN (op0) % bitsize == 0)))) && ((bitsize >= BITS_PER_WORD && bitsize == GET_MODE_BITSIZE (mode) && bitpos % BITS_PER_WORD == 0) || (mode_for_size (bitsize, GET_MODE_CLASS (tmode), 0) != BLKmode @@ -1192,7 +1156,7 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, = extract_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), bitnum + bit_offset, 1, target_part, mode, - word_mode, align, total_size); + word_mode, total_size); if (target_part == 0) abort (); @@ -1211,11 +1175,11 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, total_words = GET_MODE_SIZE (GET_MODE (target)) / UNITS_PER_WORD; for (i = nwords; i < total_words; i++) - { - int wordnum = WORDS_BIG_ENDIAN ? total_words - i - 1 : i; - rtx target_part = operand_subword (target, wordnum, 1, VOIDmode); - emit_move_insn (target_part, const0_rtx); - } + emit_move_insn + (operand_subword (target, + WORDS_BIG_ENDIAN ? total_words - i - 1 : i, + 1, VOIDmode), + const0_rtx); } return target; } @@ -1259,9 +1223,7 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, offset = 0; } else - { - op0 = protect_from_queue (str_rtx, 1); - } + op0 = protect_from_queue (str_rtx, 1); /* Now OFFSET is nonzero only for memory operands. */ @@ -1303,14 +1265,15 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) - bestmode = get_best_mode (bitsize, bitnum, align, maxmode, + bestmode = get_best_mode (bitsize, bitnum, + MEM_ALIGN (xop0), maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode - || (SLOW_UNALIGNED_ACCESS (bestmode, align) - && GET_MODE_BITSIZE (bestmode) > align)) + || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (xop0)) + && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (xop0))) goto extzv_loses; /* Compute offset as multiple of this unit, @@ -1390,13 +1353,13 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, - bitpos, target, 1, align); + bitpos, target, 1); } } else - extzv_loses: - target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, - bitpos, target, 1, align); + extzv_loses: + target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, + bitpos, target, 1); } else { @@ -1432,14 +1395,15 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) - bestmode = get_best_mode (bitsize, bitnum, align, maxmode, + bestmode = get_best_mode (bitsize, bitnum, + MEM_ALIGN (xop0), maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode - || (SLOW_UNALIGNED_ACCESS (bestmode, align) - && GET_MODE_BITSIZE (bestmode) > align)) + || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (xop0)) + && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (xop0))) goto extv_loses; /* Compute offset as multiple of this unit, @@ -1518,13 +1482,13 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, - bitpos, target, 0, align); + bitpos, target, 0); } } else - extv_loses: - target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, - bitpos, target, 0, align); + extv_loses: + target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, + bitpos, target, 0); } if (target == spec_target) return target; @@ -1564,18 +1528,15 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, UNSIGNEDP is nonzero for an unsigned bit field (don't sign-extend value). If TARGET is nonzero, attempts to store the value there and return TARGET, but this is not guaranteed. - If TARGET is not used, create a pseudo-reg of mode TMODE for the value. - - ALIGN is the alignment that STR_RTX is known to have. */ + If TARGET is not used, create a pseudo-reg of mode TMODE for the value. */ static rtx extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, - target, unsignedp, align) + target, unsignedp) enum machine_mode tmode; rtx op0, target; unsigned HOST_WIDE_INT offset, bitsize, bitpos; int unsignedp; - unsigned int align; { unsigned int total_bits = BITS_PER_WORD; enum machine_mode mode; @@ -1584,8 +1545,7 @@ extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, { /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) - return extract_split_bit_field (op0, bitsize, bitpos, - unsignedp, align); + return extract_split_bit_field (op0, bitsize, bitpos, unsignedp); } else { @@ -1593,16 +1553,15 @@ extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, includes the entire field. If such a mode would be larger than a word, we won't be doing the extraction the normal way. */ - mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, align, - word_mode, - GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0)); + mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, + MEM_ALIGN (op0), word_mode, MEM_VOLATILE_P (op0)); if (mode == VOIDmode) /* The only way this should occur is if the field spans word boundaries. */ return extract_split_bit_field (op0, bitsize, bitpos + offset * BITS_PER_UNIT, - unsignedp, align); + unsignedp); total_bits = GET_MODE_BITSIZE (mode); @@ -1628,12 +1587,9 @@ extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, mode = GET_MODE (op0); if (BYTES_BIG_ENDIAN) - { - /* BITPOS is the distance between our msb and that of OP0. - Convert it to the distance from the lsb. */ - - bitpos = total_bits - bitsize - bitpos; - } + /* BITPOS is the distance between our msb and that of OP0. + Convert it to the distance from the lsb. */ + bitpos = total_bits - bitsize - bitpos; /* Now BITPOS is always the distance between the field's lsb and that of OP0. We have reduced the big-endian case to the little-endian case. */ @@ -1694,7 +1650,8 @@ extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, if (GET_MODE_BITSIZE (mode) != (bitsize + bitpos)) { - tree amount = build_int_2 (GET_MODE_BITSIZE (mode) - (bitsize + bitpos), 0); + tree amount + = build_int_2 (GET_MODE_BITSIZE (mode) - (bitsize + bitpos), 0); /* Maybe propagate the target for the shift. */ /* But not if we will return the result--could confuse integrate.c. */ rtx subtarget = (target != 0 && GET_CODE (target) == REG @@ -1784,17 +1741,13 @@ lshift_value (mode, value, bitpos, bitsize) OP0 is the REG, SUBREG or MEM rtx for the first of the two words. BITSIZE is the field width; BITPOS, position of its first bit, in the word. - UNSIGNEDP is 1 if should zero-extend the contents; else sign-extend. - - ALIGN is the known alignment of OP0. This is also the size of the - memory objects to be used. */ + UNSIGNEDP is 1 if should zero-extend the contents; else sign-extend. */ static rtx -extract_split_bit_field (op0, bitsize, bitpos, unsignedp, align) +extract_split_bit_field (op0, bitsize, bitpos, unsignedp) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; int unsignedp; - unsigned int align; { unsigned int unit; unsigned int bitsdone = 0; @@ -1806,7 +1759,7 @@ extract_split_bit_field (op0, bitsize, bitpos, unsignedp, align) if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else - unit = MIN (align, BITS_PER_WORD); + unit = MIN (MEM_ALIGN (op0), BITS_PER_WORD); while (bitsdone < bitsize) { @@ -1851,7 +1804,7 @@ extract_split_bit_field (op0, bitsize, bitpos, unsignedp, align) extract_fixed_bit_field wants offset in bytes. */ part = extract_fixed_bit_field (word_mode, word, offset * unit / BITS_PER_UNIT, - thissize, thispos, 0, 1, align); + thissize, thispos, 0, 1); bitsdone += thissize; /* Shift this part into place for the result. */ |