xref: /freebsd/contrib/llvm-project/clang/include/clang/Basic/BuiltinsRISCV.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1//==- BuiltinsRISCV.td - RISC-V Builtin function database ---*- tablegen -*-==//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines the RISC-V-specific builtin function database.
10//
11//===----------------------------------------------------------------------===//
12
13include "clang/Basic/BuiltinsBase.td"
14
15class RISCVBuiltin<string prototype, string features = ""> : TargetBuiltin {
16  let Spellings = ["__builtin_riscv_" # NAME];
17  let Prototype = prototype;
18  let Features = features;
19}
20
21let Attributes = [NoThrow, Const] in {
22//===----------------------------------------------------------------------===//
23// Zbb extension.
24//===----------------------------------------------------------------------===//
25def orc_b_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb">;
26def orc_b_64 : RISCVBuiltin<"uint64_t(uint64_t)", "zbb,64bit">;
27def clz_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb|xtheadbb">;
28def clz_64 : RISCVBuiltin<"unsigned int(uint64_t)", "zbb|xtheadbb,64bit">;
29def ctz_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb">;
30def ctz_64 : RISCVBuiltin<"unsigned int(uint64_t)", "zbb,64bit">;
31
32//===----------------------------------------------------------------------===//
33// Zbc or Zbkc extension.
34//===----------------------------------------------------------------------===//
35def clmul_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc|zbkc">;
36def clmul_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc|zbkc,64bit">;
37def clmulh_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc|zbkc,32bit">;
38def clmulh_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc|zbkc,64bit">;
39def clmulr_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc,32bit">;
40def clmulr_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc,64bit">;
41
42//===----------------------------------------------------------------------===//
43// Zbkx extension.
44//===----------------------------------------------------------------------===//
45let Features = "zbkx,32bit" in {
46def xperm4_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
47def xperm8_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
48} // Features = "zbkx,32bit"
49
50let Features = "zbkx,64bit" in {
51def xperm4_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
52def xperm8_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
53} // Features = "zbkx,64bit"
54
55//===----------------------------------------------------------------------===//
56// Zbkb extension.
57//===----------------------------------------------------------------------===//
58def brev8_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb">;
59def brev8_64 : RISCVBuiltin<"uint64_t(uint64_t)", "zbkb,64bit">;
60def zip_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb,32bit">;
61def unzip_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb,32bit">;
62
63//===----------------------------------------------------------------------===//
64// Zknd extension.
65//===----------------------------------------------------------------------===//
66let Features = "zknd,32bit" in {
67def aes32dsi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
68def aes32dsmi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
69} // Features = "zknd,32bit"
70
71let Features = "zknd,64bit" in {
72def aes64ds : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
73def aes64dsm : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
74def aes64im : RISCVBuiltin<"uint64_t(uint64_t)">;
75} // Features = "zknd,64bit"
76
77//===----------------------------------------------------------------------===//
78// Zknd & Zkne extension.
79//===----------------------------------------------------------------------===//
80let Features = "zknd|zkne,64bit" in {
81def aes64ks1i : RISCVBuiltin<"uint64_t(uint64_t, _Constant unsigned int)">;
82def aes64ks2 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
83} // Features = "zknd|zkne,64bit"
84
85//===----------------------------------------------------------------------===//
86// Zkne extension.
87//===----------------------------------------------------------------------===//
88let Features = "zkne,32bit" in {
89def aes32esi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
90def aes32esmi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
91} // Features = "zkne,32bit"
92
93let Features = "zkne,64bit" in {
94def aes64es : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
95def aes64esm : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
96} // Features = "zkne,64bit"
97
98//===----------------------------------------------------------------------===//
99// Zknh extension.
100//===----------------------------------------------------------------------===//
101let Features = "zknh" in {
102def sha256sig0 : RISCVBuiltin<"unsigned int(unsigned int)">;
103def sha256sig1 : RISCVBuiltin<"unsigned int(unsigned int)">;
104def sha256sum0 : RISCVBuiltin<"unsigned int(unsigned int)">;
105def sha256sum1 : RISCVBuiltin<"unsigned int(unsigned int)">;
106} // Features = "zknh"
107
108let Features = "zknh,32bit" in {
109def sha512sig0h : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
110def sha512sig0l : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
111def sha512sig1h : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
112def sha512sig1l : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
113def sha512sum0r : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
114def sha512sum1r : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
115} // Features = "zknh,32bit"
116
117let Features = "zknh,64bit" in {
118def sha512sig0 : RISCVBuiltin<"uint64_t(uint64_t)">;
119def sha512sig1 : RISCVBuiltin<"uint64_t(uint64_t)">;
120def sha512sum0 : RISCVBuiltin<"uint64_t(uint64_t)">;
121def sha512sum1 : RISCVBuiltin<"uint64_t(uint64_t)">;
122} // Features = "zknh,64bit"
123
124//===----------------------------------------------------------------------===//
125// Zksed extension.
126//===----------------------------------------------------------------------===//
127let Features = "zksed" in {
128def sm4ed : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int )">;
129def sm4ks : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
130} // Features = "zksed"
131
132//===----------------------------------------------------------------------===//
133// Zksh extension.
134//===----------------------------------------------------------------------===//
135let Features = "zksh" in {
136def sm3p0 : RISCVBuiltin<"unsigned int(unsigned int)">;
137def sm3p1 : RISCVBuiltin<"unsigned int(unsigned int)">;
138} // Features = "zksh"
139
140} // Attributes = [Const, NoThrow]
141
142//===----------------------------------------------------------------------===//
143// Zihintntl extension.
144//===----------------------------------------------------------------------===//
145let Features = "zihintntl", Attributes = [CustomTypeChecking] in {
146def ntl_load : RISCVBuiltin<"void(...)">;
147def ntl_store : RISCVBuiltin<"void(...)">;
148} // Features = "zihintntl", Attributes = [CustomTypeChecking]
149