aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorSrinath Parvathaneni <srinath.parvathaneni@arm.com>2020-04-23 10:53:59 +0100
committerSrinath Parvathaneni <srinath.parvathaneni@arm.com>2020-04-23 11:00:32 +0100
commitc6ffc89f6ef90707ac44240718e258c81f32c7e4 (patch)
tree2a83a8c2ac0ef227b275cc9a8a37b766feb02c5b /libgfortran
parent66c2273714eb14bf8f6ba052e8c0e26c25709bc9 (diff)
downloadgcc-c6ffc89f6ef90707ac44240718e258c81f32c7e4.zip
gcc-c6ffc89f6ef90707ac44240718e258c81f32c7e4.tar.gz
gcc-c6ffc89f6ef90707ac44240718e258c81f32c7e4.tar.bz2
Modify the MVE polymorphic variant arguments to match the MVE intrinsic definition.
When MVE intrinsic's are called, few implicit typecasting are done on the formal arguments to match the intrinsic parameters. But when same intrinsics are called through MVE polymorphic variants, _Generic feature used here does strict type checking and fails to match the exact intrinsic. This patch corrects the behaviour of polymorphic variants and match the expected intrinsic by explicitly typecasting the polymorphic variant's arguments. Please refer to M-profile Vector Extension (MVE) intrinsics [1] for more details. [1] https://developer.arm.com/architectures/instruction-sets/simd-isas/helium/mve-intrinsics Regression tested on arm-none-eabi and found no regressions. Ok for trunk? Thanks, Srinath. gcc/ChangeLog: 2020-04-23 Srinath Parvathaneni <srinath.parvathaneni@arm.com> * config/arm/arm_mve.h (__arm_vbicq_n_u16): Modify function parameter's datatype. (__arm_vbicq_n_s16): Likewise. (__arm_vbicq_n_u32): Likewise. (__arm_vbicq_n_s32): Likewise. (__arm_vbicq): Likewise. (__arm_vbicq_n_s16): Modify MVE polymorphic variant argument's datatype. (__arm_vbicq_n_s32): Likewise. (__arm_vbicq_n_u16): Likewise. (__arm_vbicq_n_u32): Likewise. (__arm_vdupq_m_n_s8): Likewise. (__arm_vdupq_m_n_s16): Likewise. (__arm_vdupq_m_n_s32): Likewise. (__arm_vdupq_m_n_u8): Likewise. (__arm_vdupq_m_n_u16): Likewise. (__arm_vdupq_m_n_u32): Likewise. (__arm_vdupq_m_n_f16): Likewise. (__arm_vdupq_m_n_f32): Likewise. (__arm_vldrhq_gather_offset_s16): Likewise. (__arm_vldrhq_gather_offset_s32): Likewise. (__arm_vldrhq_gather_offset_u16): Likewise. (__arm_vldrhq_gather_offset_u32): Likewise. (__arm_vldrhq_gather_offset_f16): Likewise. (__arm_vldrhq_gather_offset_z_s16): Likewise. (__arm_vldrhq_gather_offset_z_s32): Likewise. (__arm_vldrhq_gather_offset_z_u16): Likewise. (__arm_vldrhq_gather_offset_z_u32): Likewise. (__arm_vldrhq_gather_offset_z_f16): Likewise. (__arm_vldrhq_gather_shifted_offset_s16): Likewise. (__arm_vldrhq_gather_shifted_offset_s32): Likewise. (__arm_vldrhq_gather_shifted_offset_u16): Likewise. (__arm_vldrhq_gather_shifted_offset_u32): Likewise. (__arm_vldrhq_gather_shifted_offset_f16): Likewise. (__arm_vldrhq_gather_shifted_offset_z_s16): Likewise. (__arm_vldrhq_gather_shifted_offset_z_s32): Likewise. (__arm_vldrhq_gather_shifted_offset_z_u16): Likewise. (__arm_vldrhq_gather_shifted_offset_z_u32): Likewise. (__arm_vldrhq_gather_shifted_offset_z_f16): Likewise. (__arm_vldrwq_gather_offset_s32): Likewise. (__arm_vldrwq_gather_offset_u32): Likewise. (__arm_vldrwq_gather_offset_f32): Likewise. (__arm_vldrwq_gather_offset_z_s32): Likewise. (__arm_vldrwq_gather_offset_z_u32): Likewise. (__arm_vldrwq_gather_offset_z_f32): Likewise. (__arm_vldrwq_gather_shifted_offset_s32): Likewise. (__arm_vldrwq_gather_shifted_offset_u32): Likewise. (__arm_vldrwq_gather_shifted_offset_f32): Likewise. (__arm_vldrwq_gather_shifted_offset_z_s32): Likewise. (__arm_vldrwq_gather_shifted_offset_z_u32): Likewise. (__arm_vldrwq_gather_shifted_offset_z_f32): Likewise. (__arm_vdwdupq_x_n_u8): Likewise. (__arm_vdwdupq_x_n_u16): Likewise. (__arm_vdwdupq_x_n_u32): Likewise. (__arm_viwdupq_x_n_u8): Likewise. (__arm_viwdupq_x_n_u16): Likewise. (__arm_viwdupq_x_n_u32): Likewise. (__arm_vidupq_x_n_u8): Likewise. (__arm_vddupq_x_n_u8): Likewise. (__arm_vidupq_x_n_u16): Likewise. (__arm_vddupq_x_n_u16): Likewise. (__arm_vidupq_x_n_u32): Likewise. (__arm_vddupq_x_n_u32): Likewise. (__arm_vldrdq_gather_offset_s64): Likewise. (__arm_vldrdq_gather_offset_u64): Likewise. (__arm_vldrdq_gather_offset_z_s64): Likewise. (__arm_vldrdq_gather_offset_z_u64): Likewise. (__arm_vldrdq_gather_shifted_offset_s64): Likewise. (__arm_vldrdq_gather_shifted_offset_u64): Likewise. (__arm_vldrdq_gather_shifted_offset_z_s64): Likewise. (__arm_vldrdq_gather_shifted_offset_z_u64): Likewise. (__arm_vidupq_m_n_u8): Likewise. (__arm_vidupq_m_n_u16): Likewise. (__arm_vidupq_m_n_u32): Likewise. (__arm_vddupq_m_n_u8): Likewise. (__arm_vddupq_m_n_u16): Likewise. (__arm_vddupq_m_n_u32): Likewise. (__arm_vidupq_n_u16): Likewise. (__arm_vidupq_n_u32): Likewise. (__arm_vidupq_n_u8): Likewise. (__arm_vddupq_n_u16): Likewise. (__arm_vddupq_n_u32): Likewise. (__arm_vddupq_n_u8): Likewise. gcc/testsuite/ChangeLog: 2020-04-23 Srinath Parvathaneni <srinath.parvathaneni@arm.com> * gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u16.c: New test. * gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u8.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_s64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_z_s64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_z_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_s64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_z_s64.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_z_u64.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_f16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_s16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_f16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_s16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_f16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_s16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_u16.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_f16.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_s16.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_s32.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_u16.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_u32.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_f32.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_s32.c : Likewise. * gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_u32.c : Likewise.
Diffstat (limited to 'libgfortran')
0 files changed, 0 insertions, 0 deletions