From dbb413baafcb4c88e2b7843bb743f249a6bff62a Mon Sep 17 00:00:00 2001 From: Simon Hosie Date: Fri, 2 Feb 2024 13:36:05 -0800 Subject: [PATCH] helperrvv.h: add vcreate macros for older toolchains --- src/arch/helperrvv.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/arch/helperrvv.h b/src/arch/helperrvv.h index ef64ffe3..b524744c 100644 --- a/src/arch/helperrvv.h +++ b/src/arch/helperrvv.h @@ -65,6 +65,34 @@ //@#endif #endif +#if __riscv_v_intrinsic < 12000 +#define __riscv_vcreate_v_f32m1_f32m2(x, y) __riscv_vset(__riscv_vlmul_ext_v_f32m1_f32m2(x), 1, y) +#define __riscv_vcreate_v_f32m2_f32m4(x, y) __riscv_vset(__riscv_vlmul_ext_v_f32m2_f32m4(x), 1, y) +#define __riscv_vcreate_v_f32m4_f32m8(x, y) __riscv_vset(__riscv_vlmul_ext_v_f32m4_f32m8(x), 1, y) +#define __riscv_vcreate_v_f64m1_f64m2(x, y) __riscv_vset(__riscv_vlmul_ext_v_f64m1_f64m2(x), 1, y) +#define __riscv_vcreate_v_f64m2_f64m4(x, y) __riscv_vset(__riscv_vlmul_ext_v_f64m2_f64m4(x), 1, y) +#define __riscv_vcreate_v_f64m4_f64m8(x, y) __riscv_vset(__riscv_vlmul_ext_v_f64m4_f64m8(x), 1, y) +#define __riscv_vcreate_v_i32m1_i32m2(x, y) __riscv_vset(__riscv_vlmul_ext_v_i32m1_i32m2(x), 1, y) +#define __riscv_vcreate_v_i32m2_i32m4(x, y) __riscv_vset(__riscv_vlmul_ext_v_i32m2_i32m4(x), 1, y) +#define __riscv_vcreate_v_i32m4_i32m8(x, y) __riscv_vset(__riscv_vlmul_ext_v_i32m4_i32m8(x), 1, y) +#define __riscv_vcreate_v_u64m1_u64m2(x, y) __riscv_vset(__riscv_vlmul_ext_v_u64m1_u64m2(x), 1, y) +#define __riscv_vcreate_v_u64m2_u64m4(x, y) __riscv_vset(__riscv_vlmul_ext_v_u64m2_u64m4(x), 1, y) + +#define UNINITIALISED(T) __extension__({ \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ + T tmp; \ + tmp; \ + _Pragma("GCC diagnostic pop") \ + }) +#define __riscv_vcreate_v_f64m1x4(x, y, z, w) \ + __riscv_vset(__riscv_vset(__riscv_vset(__riscv_vset( \ + UNINITIALISED(vfloat64m1x4_t), 0, x), 1, y), 2, z), 3, w) +#define __riscv_vcreate_v_f64m2x4(x, y, z, w) \ + __riscv_vset(__riscv_vset(__riscv_vset(__riscv_vset( \ + UNINITIALISED(vfloat64m2x4_t), 0, x), 1, y), 2, z), 3, w) +#endif + //////////////////////////////////////////////////////////////////////////////// // RISC-V Vector Types ////////////////////////////////////////////////////////////////////////////////