================
@@ -0,0 +1,245 @@
+/*===---- riscv_packed.h - RISC-V P intrinsics -----------------------------===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===-----------------------------------------------------------------------===
+ */
+
+#ifndef __RISCV_PACKED_H
+#define __RISCV_PACKED_H
+
+#include <stdint.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/* Packed SIMD Types */
+
+typedef int8_t int8x4_t __attribute__((vector_size(4)));
+typedef uint8_t uint8x4_t __attribute__((vector_size(4)));
+typedef int16_t int16x2_t __attribute__((vector_size(4)));
+typedef uint16_t uint16x2_t __attribute__((vector_size(4)));
+
+typedef int8_t int8x8_t __attribute__((vector_size(8)));
+typedef uint8_t uint8x8_t __attribute__((vector_size(8)));
+typedef int16_t int16x4_t __attribute__((vector_size(8)));
+typedef uint16_t uint16x4_t __attribute__((vector_size(8)));
+typedef int32_t int32x2_t __attribute__((vector_size(8)));
+typedef uint32_t uint32x2_t __attribute__((vector_size(8)));
+
+/* Packed Addition and Subtraction (32-bit) */
+
+static __inline__ int8x4_t __attribute__((__always_inline__, __nodebug__))
+__riscv_padd_i8x4(int8x4_t __rs1, int8x4_t __rs2) {
+  return __rs1 + __rs2;
+}
+
----------------
arichardson wrote:

```suggestion
#define _packed_op(name, ty, op) \
  static __inline__ ty __attribute__((__always_inline__, __nodebug__))
__riscv_##name(ty __rs1, ty __rs2) {
  return __rs1 op __rs2;
}

_packed_op(padd_i8x4, uint8x4_t, +)
_packed_op(padd_u8x4, int8x4_t, +)
...
_packed_op(psub_u16x2, uint8x4_t, -)
```

Would using a macro to avoid a lot of repetition be an option here? Could even 
make it more generic to support the shifts as well:

```suggestion
#define _packed_op(name, retty, ty1, ty2, op) \
  static __inline__ retty __attribute__((__always_inline__, __nodebug__))
__riscv_##name(ty1 __rs1, ty2 __rs2) {
  return __rs1 op __rs2;
}
#define _packed_addsub(name, ty, op) _packed_op(name, ty, ty, ty, op)
#define _packed_shift(name, ty, op) _packed_op(name, ty, ty, unsigned, op)

_packed_addsub(padd_i8x4, uint8x4_t, +)
_packed_addsub(padd_u8x4, int8x4_t, +)
...
...
_packed_shift(psra_s_i32x2, int32x2_t, >>)
```

https://github.com/llvm/llvm-project/pull/181115
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to