summaryrefslogtreecommitdiff
path: root/libgfortran/generated/cshift0_r8.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2012-04-10 15:39:22 +0000
committerMichael Matz <matz@gcc.gnu.org>2012-04-10 15:39:22 +0000
commitb43645b85249fcae9071fc4bcc1e9b54c15b313f (patch)
tree669ecf00bcc15e616e0b3f79d838b063f7331a93 /libgfortran/generated/cshift0_r8.c
parentca18edc55f1c23fcaa06aabe07460f4bb56f937f (diff)
cshift0.m4 (cshift0_'rtype_code`): Guard use of modulo.
* m4/cshift0.m4 (cshift0_'rtype_code`): Guard use of modulo. * generated/cshift0_c10.c: Regenerated. * generated/cshift0_c16.c: Regenerated. * generated/cshift0_c4.c: Regenerated. * generated/cshift0_c8.c: Regenerated. * generated/cshift0_i16.c: Regenerated. * generated/cshift0_i1.c: Regenerated. * generated/cshift0_i2.c: Regenerated. * generated/cshift0_i4.c: Regenerated. * generated/cshift0_i8.c: Regenerated. * generated/cshift0_r10.c: Regenerated. * generated/cshift0_r16.c: Regenerated. * generated/cshift0_r4.c: Regenerated. * generated/cshift0_r8.c: Regenerated. From-SVN: r186283
Diffstat (limited to 'libgfortran/generated/cshift0_r8.c')
-rw-r--r--libgfortran/generated/cshift0_r8.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libgfortran/generated/cshift0_r8.c b/libgfortran/generated/cshift0_r8.c
index a3f747993c9..73afb8a43e0 100644
--- a/libgfortran/generated/cshift0_r8.c
+++ b/libgfortran/generated/cshift0_r8.c
@@ -97,9 +97,13 @@ cshift0_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array, ptrdiff_t shift,
rptr = ret->base_addr;
sptr = array->base_addr;
- shift = len == 0 ? 0 : shift % (ptrdiff_t)len;
- if (shift < 0)
- shift += len;
+ /* Avoid the costly modulo for trivially in-bound shifts. */
+ if (shift < 0 || shift >= len)
+ {
+ shift = len == 0 ? 0 : shift % (ptrdiff_t)len;
+ if (shift < 0)
+ shift += len;
+ }
while (rptr)
{