LevyHsu created this revision.
LevyHsu added reviewers: craig.topper, jrtc27, kito-cheng, asb, Jim.
LevyHsu added projects: clang, LLVM.
Herald added subscribers: vkmr, frasercrmck, evandro, luismarques, apazos, 
sameer.abuasal, usaxena95, s.egerton, benna, psnobl, kadircet, jocewei, PkmX, 
arphaman, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, 
shiva0217, niosHD, sabuasal, simoncook, johnrusso, rbar, mgorny.
LevyHsu requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang-tools-extra.

RV32/64:

  grev
  grevi
  gorc
  gorci
  shfl
  shfli
  unshfl
  unshfli

RV64 ONLY:

  grevw
  greviw
  gorcw
  gorciw
  shflw
  shfli     (For non-existing shfliw)
  unshfli   (For non-existing unshfliw)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D100831

Files:
  .gitignore
  clang-tools-extra/clang-include-fixer/find-all-symbols/STLPostfixHeaderMap.cpp
  clang-tools-extra/clangd/index/CanonicalIncludes.cpp
  clang/lib/Headers/CMakeLists.txt
  clang/lib/Headers/riscv_zbp_intrin.h
  clang/lib/Headers/rvintrin.h
  clang/test/CodeGen/RISCV/rvb-intrinsics/rvintrin.c

Index: clang/test/CodeGen/RISCV/rvb-intrinsics/rvintrin.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/RISCV/rvb-intrinsics/rvintrin.c
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -triple riscv32 -fsyntax-only \
+// RUN:   -target-feature +experimental-zbp %s
+// RUN: %clang_cc1 -triple riscv64 -fsyntax-only \
+// RUN:   -target-feature +experimental-zbp %s
+
+#include <rvintrin.h>
\ No newline at end of file
Index: clang/lib/Headers/rvintrin.h
===================================================================
--- /dev/null
+++ clang/lib/Headers/rvintrin.h
@@ -0,0 +1,26 @@
+/*===-------------------------- rvintrin.h ---------------------------------===
+ *
+ * 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 __RVINTRIN_H
+#define __RVINTRIN_H
+
+#define int_xlen_t long
+#define uint_xlen_t unsigned int_xlen_t
+
+#define __DEFAULT_FN_ATTRS                                                     \
+  __attribute__((__always_inline__, __artificial__, __nodebug__))
+
+#if defined(__riscv_zbp)
+#include "riscv_zbp_intrin.h"
+#endif
+
+#undef __DEFAULT_FN_ATTRS
+#undef uint_xlen_t
+#undef int_xlen_t
+#endif // __RVINTRIN_H
Index: clang/lib/Headers/riscv_zbp_intrin.h
===================================================================
--- /dev/null
+++ clang/lib/Headers/riscv_zbp_intrin.h
@@ -0,0 +1,79 @@
+/*===------------------------ riscv_zbp_intrin.h ---------------------------===
+ *
+ * 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 __RVINTRIN_H
+#error "Never use <riscv_zbp_intrin.h> directly; include <rvintrin.h> instead."
+#endif
+
+#ifndef __RISCV_ZBP_INTRIN_H
+#define __RISCV_ZBP_INTRIN_H
+
+#include <stdint.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+// Zbp
+static __inline__ int32_t __DEFAULT_FN_ATTRS _rv_grev_32(int32_t rs1, int32_t rs2) {
+  return __builtin_riscv_grev_32(rs1, rs2);
+}
+
+static __inline__ int32_t __DEFAULT_FN_ATTRS _rv_gorc_32(int32_t rs1, int32_t rs2) {
+  return __builtin_riscv_gorc_32(rs1, rs2);
+}
+
+static __inline__ int32_t __DEFAULT_FN_ATTRS _rv_shfl_32(int32_t rs1, int32_t rs2) {
+  return __builtin_riscv_shfl_32(rs1, rs2);
+}
+
+static __inline__ int32_t __DEFAULT_FN_ATTRS _rv_unshfl_32(int32_t rs1, int32_t rs2) {
+  return __builtin_riscv_unshfl_32(rs1, rs2);
+}
+
+static __inline__ int_xlen_t __DEFAULT_FN_ATTRS _rv_xperm_n(int_xlen_t rs1, int_xlen_t rs2) {
+  return __builtin_riscv_xperm_n(rs1, rs2);
+}
+
+static __inline__ int_xlen_t __DEFAULT_FN_ATTRS _rv_xperm_b(int_xlen_t rs1, int_xlen_t rs2) {
+  return __builtin_riscv_xperm_b(rs1, rs2);
+}
+
+static __inline__ int_xlen_t __DEFAULT_FN_ATTRS _rv_xperm_h(int_xlen_t rs1, int_xlen_t rs2) {
+  return __builtin_riscv_xperm_h(rs1, rs2);
+}
+
+// RV64 ONLY
+#if __riscv_xlen == 64
+static __inline__ int64_t __DEFAULT_FN_ATTRS _rv_grev_64(int64_t rs1, int64_t rs2) {
+  return __builtin_riscv_grev_64(rs1, rs2);
+}
+
+static __inline__ int64_t __DEFAULT_FN_ATTRS _rv_gorc_64(int64_t rs1, int64_t rs2) {
+  return __builtin_riscv_gorc_64(rs1, rs2);
+}
+
+static __inline__ int64_t __DEFAULT_FN_ATTRS _rv_shfl_64(int64_t rs1, int64_t rs2) {
+  return __builtin_riscv_shfl_64(rs1, rs2);
+}
+
+static __inline__ int64_t __DEFAULT_FN_ATTRS _rv_unshfl_64(int64_t rs1, int64_t rs2) {
+  return __builtin_riscv_unshfl_64(rs1, rs2);
+}
+
+static __inline__ int64_t __DEFAULT_FN_ATTRS _rv_xperm_w(int64_t rs1, int64_t rs2) {
+  return __builtin_riscv_xperm_w(rs1, rs2);
+}
+#endif // if __riscv_xlen == 64
+
+#if defined(__cplusplus)
+}
+#endif // if defined(__cplusplus)
+
+#endif // __RISCV_ZBP_INTRIN_H
Index: clang/lib/Headers/CMakeLists.txt
===================================================================
--- clang/lib/Headers/CMakeLists.txt
+++ clang/lib/Headers/CMakeLists.txt
@@ -97,6 +97,8 @@
   ptwriteintrin.h
   rdseedintrin.h
   rtmintrin.h
+  rvintrin.h
+  riscv_zbp_intrin.h
   serializeintrin.h
   sgxintrin.h
   s390intrin.h
Index: clang-tools-extra/clangd/index/CanonicalIncludes.cpp
===================================================================
--- clang-tools-extra/clangd/index/CanonicalIncludes.cpp
+++ clang-tools-extra/clangd/index/CanonicalIncludes.cpp
@@ -152,6 +152,8 @@
       {"include/prfchwintrin.h", "<x86intrin.h>"},
       {"include/rdseedintrin.h", "<x86intrin.h>"},
       {"include/rtmintrin.h", "<immintrin.h>"},
+      {"include/rvintrin.h", "<rvintrin.h>"},
+      {"include/riscv_zbp_intrin.h", "<riscv_zbp_intrin.h>"},
       {"include/shaintrin.h", "<immintrin.h>"},
       {"include/smmintrin.h", "<smmintrin.h>"},
       {"include/stdalign.h", "<cstdalign>"},
Index: clang-tools-extra/clang-include-fixer/find-all-symbols/STLPostfixHeaderMap.cpp
===================================================================
--- clang-tools-extra/clang-include-fixer/find-all-symbols/STLPostfixHeaderMap.cpp
+++ clang-tools-extra/clang-include-fixer/find-all-symbols/STLPostfixHeaderMap.cpp
@@ -57,6 +57,8 @@
       {"include/prfchwintrin.h$", "<x86intrin.h>"},
       {"include/rdseedintrin.h$", "<x86intrin.h>"},
       {"include/rtmintrin.h$", "<immintrin.h>"},
+      {"include/rvintrin.h$", "<rvintrin.h>"},
+      {"include/riscv_zbp_intrin.h$", "<riscv_zbp_intrin.h>"},
       {"include/shaintrin.h$", "<immintrin.h>"},
       {"include/smmintrin.h$", "<smmintrin.h>"},
       {"include/stdalign.h$", "<cstdalign>"},
Index: .gitignore
===================================================================
--- .gitignore
+++ .gitignore
@@ -68,3 +68,9 @@
 /clang/utils/analyzer/projects/*/RefScanBuildResults
 # automodapi puts generated documentation files here.
 /lldb/docs/python_api/
+
+_build/
+
+llvm/tools/clang
+
+utils/
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to