diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-12-20 12:54:36 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-12-20 12:54:36 +0000 |
commit | fdbfe4e5523f9fe55b7759b2d16b1ce2704fd3ac (patch) | |
tree | 03c7742cd083bae688c146c6723fbcfedfd77164 /gcc/emit-rtl.c | |
parent | 91914e56a5e952cc87468bdd6d006e51eaa54294 (diff) | |
download | gcc-fdbfe4e5523f9fe55b7759b2d16b1ce2704fd3ac.zip gcc-fdbfe4e5523f9fe55b7759b2d16b1ce2704fd3ac.tar.gz gcc-fdbfe4e5523f9fe55b7759b2d16b1ce2704fd3ac.tar.bz2 |
poly_int: operand_subword
This patch makes operand_subword and operand_subword_force take
polynomial offsets. This is a fairly old-school interface and
these days should only be used when splitting multiword operations
into word operations. It still doesn't hurt to support polynomial
offsets and it helps make callers easier to write.
2017-12-20 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* rtl.h (operand_subword, operand_subword_force): Take the offset
as a poly_uint64 an unsigned int.
* emit-rtl.c (operand_subword, operand_subword_force): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r255883
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index f8d2f55..6f4dea3 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1705,7 +1705,8 @@ subreg_lowpart_p (const_rtx x) */ rtx -operand_subword (rtx op, unsigned int offset, int validate_address, machine_mode mode) +operand_subword (rtx op, poly_uint64 offset, int validate_address, + machine_mode mode) { if (mode == VOIDmode) mode = GET_MODE (op); @@ -1714,12 +1715,12 @@ operand_subword (rtx op, unsigned int offset, int validate_address, machine_mode /* If OP is narrower than a word, fail. */ if (mode != BLKmode - && (GET_MODE_SIZE (mode) < UNITS_PER_WORD)) + && maybe_lt (GET_MODE_SIZE (mode), UNITS_PER_WORD)) return 0; /* If we want a word outside OP, return zero. */ if (mode != BLKmode - && (offset + 1) * UNITS_PER_WORD > GET_MODE_SIZE (mode)) + && maybe_gt ((offset + 1) * UNITS_PER_WORD, GET_MODE_SIZE (mode))) return const0_rtx; /* Form a new MEM at the requested address. */ @@ -1753,7 +1754,7 @@ operand_subword (rtx op, unsigned int offset, int validate_address, machine_mode MODE is the mode of OP, in case it is CONST_INT. */ rtx -operand_subword_force (rtx op, unsigned int offset, machine_mode mode) +operand_subword_force (rtx op, poly_uint64 offset, machine_mode mode) { rtx result = operand_subword (op, offset, 1, mode); |