From: Charles Baylis <charles.bay...@linaro.org> gcc/ChangeLog:
<DATE> Charles Baylis <charles.bay...@linaro.org> * config/aarch64/arm_neon.h (__ST2_LANE_FUNC): Add explicit lane bounds check. (__ST3_LANE_FUNC): Likewise. (__ST4_LANE_FUNC): Likewise. gcc/testsuite/ChangeLog: <DATE> Charles Baylis <charles.bay...@linaro.org> * gcc.target/aarch64/simd/vst4_lane.c: New test. Change-Id: I6bceaeb7773bf20860daca4013ea1c4d2c06afa6 --- gcc/config/aarch64/arm_neon.h | 6 ++++++ gcc/testsuite/gcc.target/aarch64/simd/vst4_lane.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/vst4_lane.c diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 22df564..22c6d06 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -11181,6 +11181,8 @@ vst2_lane_ ## funcsuffix (ptrtype *__ptr, \ __temp.val[1] \ = vcombine_##funcsuffix (__b.val[1], \ vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \ + __builtin_aarch64_im_lane_boundsi (__c, \ + sizeof (__b.val[0]) / sizeof (*__ptr)); \ __o = __builtin_aarch64_set_qregoi##mode (__o, \ (signedtype) __temp.val[0], 0); \ __o = __builtin_aarch64_set_qregoi##mode (__o, \ @@ -11258,6 +11260,8 @@ vst3_lane_ ## funcsuffix (ptrtype *__ptr, \ (signedtype) __temp.val[1], 1); \ __o = __builtin_aarch64_set_qregci##mode (__o, \ (signedtype) __temp.val[2], 2); \ + __builtin_aarch64_im_lane_boundsi (__c, \ + sizeof (__b.val[0]) / sizeof (*__ptr)); \ __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \ __ptr, __o, __c); \ } @@ -11336,6 +11340,8 @@ vst4_lane_ ## funcsuffix (ptrtype *__ptr, \ (signedtype) __temp.val[2], 2); \ __o = __builtin_aarch64_set_qregxi##mode (__o, \ (signedtype) __temp.val[3], 3); \ + __builtin_aarch64_im_lane_boundsi (__c, \ + sizeof (__b.val[0]) / sizeof (*__ptr)); \ __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \ __ptr, __o, __c); \ } diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vst4_lane.c b/gcc/testsuite/gcc.target/aarch64/simd/vst4_lane.c new file mode 100644 index 0000000..6627ecf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/vst4_lane.c @@ -0,0 +1,14 @@ +/* Test error message when passing an invalid value as a lane index. */ + +/* { dg-do compile } */ + +#include <arm_neon.h> + +void +f_vst4_lane (int8_t * p, int8x8x4_t v) +{ + /* { dg-error "lane 8 out of range 0 - 7" "" { target *-*-* } 0 } */ + vst4_lane_s8 (p, v, 8); + return; +} + -- 1.9.1