On 10/23/2017 11:08 AM, Richard Sandiford wrote: > Similar to the previous store_bit_field patch, but for extractions > rather than insertions. The patch splits out the extraction-as-subreg > handling into a new function (extract_bit_field_as_subreg), both for > ease of writing and because a later patch will add another caller. > > The simplify_gen_subreg overload is temporary; it goes away > in a later patch. > > > 2017-10-23 Richard Sandiford <richard.sandif...@linaro.org> > Alan Hayward <alan.hayw...@arm.com> > David Sherwood <david.sherw...@arm.com> > > gcc/ > * rtl.h (simplify_gen_subreg): Add a temporary overload that > accepts poly_uint64 offsets. > * expmed.h (extract_bit_field): Take bitsize and bitnum as > poly_uint64s rather than unsigned HOST_WIDE_INTs. > * expmed.c (lowpart_bit_field_p): Likewise. > (extract_bit_field_as_subreg): New function, split out from... > (extract_bit_field_1): ...here. Take bitsize and bitnum as > poly_uint64s rather than unsigned HOST_WIDE_INTs. For vector > extractions, check that BITSIZE matches the size of the extracted > value and that BITNUM is an exact multiple of that size. > If all else fails, try forcing the value into memory if > BITNUM is variable, and adjusting the address so that the > offset is constant. Split the part that can only handle constant > bitsize and bitnum out into... > (extract_integral_bit_field): ...this new function. > (extract_bit_field): Take bitsize and bitnum as poly_uint64s > rather than unsigned HOST_WIDE_INTs. OK.
jeff