34 if (Mips::BI__builtin_mips_addu_qb <= BuiltinID &&
35 BuiltinID <= Mips::BI__builtin_mips_lwx) {
37 return Diag(TheCall->
getBeginLoc(), diag::err_mips_builtin_requires_dsp);
40 if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID &&
41 BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) {
44 diag::err_mips_builtin_requires_dspr2);
47 if (Mips::BI__builtin_msa_add_a_b <= BuiltinID &&
48 BuiltinID <= Mips::BI__builtin_msa_xori_b) {
50 return Diag(TheCall->
getBeginLoc(), diag::err_mips_builtin_requires_msa);
66 unsigned i = 0, l = 0, u = 0, m = 0;
68 default:
return false;
69 case Mips::BI__builtin_mips_wrdsp: i = 1; l = 0; u = 63;
break;
70 case Mips::BI__builtin_mips_rddsp: i = 0; l = 0; u = 63;
break;
71 case Mips::BI__builtin_mips_append: i = 2; l = 0; u = 31;
break;
72 case Mips::BI__builtin_mips_balign: i = 2; l = 0; u = 3;
break;
73 case Mips::BI__builtin_mips_precr_sra_ph_w: i = 2; l = 0; u = 31;
break;
74 case Mips::BI__builtin_mips_precr_sra_r_ph_w: i = 2; l = 0; u = 31;
break;
75 case Mips::BI__builtin_mips_prepend: i = 2; l = 0; u = 31;
break;
79 case Mips::BI__builtin_msa_bclri_b:
80 case Mips::BI__builtin_msa_bnegi_b:
81 case Mips::BI__builtin_msa_bseti_b:
82 case Mips::BI__builtin_msa_sat_s_b:
83 case Mips::BI__builtin_msa_sat_u_b:
84 case Mips::BI__builtin_msa_slli_b:
85 case Mips::BI__builtin_msa_srai_b:
86 case Mips::BI__builtin_msa_srari_b:
87 case Mips::BI__builtin_msa_srli_b:
88 case Mips::BI__builtin_msa_srlri_b: i = 1; l = 0; u = 7;
break;
89 case Mips::BI__builtin_msa_binsli_b:
90 case Mips::BI__builtin_msa_binsri_b: i = 2; l = 0; u = 7;
break;
92 case Mips::BI__builtin_msa_bclri_h:
93 case Mips::BI__builtin_msa_bnegi_h:
94 case Mips::BI__builtin_msa_bseti_h:
95 case Mips::BI__builtin_msa_sat_s_h:
96 case Mips::BI__builtin_msa_sat_u_h:
97 case Mips::BI__builtin_msa_slli_h:
98 case Mips::BI__builtin_msa_srai_h:
99 case Mips::BI__builtin_msa_srari_h:
100 case Mips::BI__builtin_msa_srli_h:
101 case Mips::BI__builtin_msa_srlri_h: i = 1; l = 0; u = 15;
break;
102 case Mips::BI__builtin_msa_binsli_h:
103 case Mips::BI__builtin_msa_binsri_h: i = 2; l = 0; u = 15;
break;
107 case Mips::BI__builtin_msa_cfcmsa:
108 case Mips::BI__builtin_msa_ctcmsa: i = 0; l = 0; u = 31;
break;
109 case Mips::BI__builtin_msa_clei_u_b:
110 case Mips::BI__builtin_msa_clei_u_h:
111 case Mips::BI__builtin_msa_clei_u_w:
112 case Mips::BI__builtin_msa_clei_u_d:
113 case Mips::BI__builtin_msa_clti_u_b:
114 case Mips::BI__builtin_msa_clti_u_h:
115 case Mips::BI__builtin_msa_clti_u_w:
116 case Mips::BI__builtin_msa_clti_u_d:
117 case Mips::BI__builtin_msa_maxi_u_b:
118 case Mips::BI__builtin_msa_maxi_u_h:
119 case Mips::BI__builtin_msa_maxi_u_w:
120 case Mips::BI__builtin_msa_maxi_u_d:
121 case Mips::BI__builtin_msa_mini_u_b:
122 case Mips::BI__builtin_msa_mini_u_h:
123 case Mips::BI__builtin_msa_mini_u_w:
124 case Mips::BI__builtin_msa_mini_u_d:
125 case Mips::BI__builtin_msa_addvi_b:
126 case Mips::BI__builtin_msa_addvi_h:
127 case Mips::BI__builtin_msa_addvi_w:
128 case Mips::BI__builtin_msa_addvi_d:
129 case Mips::BI__builtin_msa_bclri_w:
130 case Mips::BI__builtin_msa_bnegi_w:
131 case Mips::BI__builtin_msa_bseti_w:
132 case Mips::BI__builtin_msa_sat_s_w:
133 case Mips::BI__builtin_msa_sat_u_w:
134 case Mips::BI__builtin_msa_slli_w:
135 case Mips::BI__builtin_msa_srai_w:
136 case Mips::BI__builtin_msa_srari_w:
137 case Mips::BI__builtin_msa_srli_w:
138 case Mips::BI__builtin_msa_srlri_w:
139 case Mips::BI__builtin_msa_subvi_b:
140 case Mips::BI__builtin_msa_subvi_h:
141 case Mips::BI__builtin_msa_subvi_w:
142 case Mips::BI__builtin_msa_subvi_d: i = 1; l = 0; u = 31;
break;
143 case Mips::BI__builtin_msa_binsli_w:
144 case Mips::BI__builtin_msa_binsri_w: i = 2; l = 0; u = 31;
break;
146 case Mips::BI__builtin_msa_bclri_d:
147 case Mips::BI__builtin_msa_bnegi_d:
148 case Mips::BI__builtin_msa_bseti_d:
149 case Mips::BI__builtin_msa_sat_s_d:
150 case Mips::BI__builtin_msa_sat_u_d:
151 case Mips::BI__builtin_msa_slli_d:
152 case Mips::BI__builtin_msa_srai_d:
153 case Mips::BI__builtin_msa_srari_d:
154 case Mips::BI__builtin_msa_srli_d:
155 case Mips::BI__builtin_msa_srlri_d: i = 1; l = 0; u = 63;
break;
156 case Mips::BI__builtin_msa_binsli_d:
157 case Mips::BI__builtin_msa_binsri_d: i = 2; l = 0; u = 63;
break;
159 case Mips::BI__builtin_msa_ceqi_b:
160 case Mips::BI__builtin_msa_ceqi_h:
161 case Mips::BI__builtin_msa_ceqi_w:
162 case Mips::BI__builtin_msa_ceqi_d:
163 case Mips::BI__builtin_msa_clti_s_b:
164 case Mips::BI__builtin_msa_clti_s_h:
165 case Mips::BI__builtin_msa_clti_s_w:
166 case Mips::BI__builtin_msa_clti_s_d:
167 case Mips::BI__builtin_msa_clei_s_b:
168 case Mips::BI__builtin_msa_clei_s_h:
169 case Mips::BI__builtin_msa_clei_s_w:
170 case Mips::BI__builtin_msa_clei_s_d:
171 case Mips::BI__builtin_msa_maxi_s_b:
172 case Mips::BI__builtin_msa_maxi_s_h:
173 case Mips::BI__builtin_msa_maxi_s_w:
174 case Mips::BI__builtin_msa_maxi_s_d:
175 case Mips::BI__builtin_msa_mini_s_b:
176 case Mips::BI__builtin_msa_mini_s_h:
177 case Mips::BI__builtin_msa_mini_s_w:
178 case Mips::BI__builtin_msa_mini_s_d: i = 1; l = -16; u = 15;
break;
180 case Mips::BI__builtin_msa_andi_b:
181 case Mips::BI__builtin_msa_nori_b:
182 case Mips::BI__builtin_msa_ori_b:
183 case Mips::BI__builtin_msa_shf_b:
184 case Mips::BI__builtin_msa_shf_h:
185 case Mips::BI__builtin_msa_shf_w:
186 case Mips::BI__builtin_msa_xori_b: i = 1; l = 0; u = 255;
break;
187 case Mips::BI__builtin_msa_bseli_b:
188 case Mips::BI__builtin_msa_bmnzi_b:
189 case Mips::BI__builtin_msa_bmzi_b: i = 2; l = 0; u = 255;
break;
192 case Mips::BI__builtin_msa_copy_s_b:
193 case Mips::BI__builtin_msa_copy_u_b:
194 case Mips::BI__builtin_msa_insve_b:
195 case Mips::BI__builtin_msa_splati_b: i = 1; l = 0; u = 15;
break;
196 case Mips::BI__builtin_msa_sldi_b: i = 2; l = 0; u = 15;
break;
198 case Mips::BI__builtin_msa_copy_s_h:
199 case Mips::BI__builtin_msa_copy_u_h:
200 case Mips::BI__builtin_msa_insve_h:
201 case Mips::BI__builtin_msa_splati_h: i = 1; l = 0; u = 7;
break;
202 case Mips::BI__builtin_msa_sldi_h: i = 2; l = 0; u = 7;
break;
204 case Mips::BI__builtin_msa_copy_s_w:
205 case Mips::BI__builtin_msa_copy_u_w:
206 case Mips::BI__builtin_msa_insve_w:
207 case Mips::BI__builtin_msa_splati_w: i = 1; l = 0; u = 3;
break;
208 case Mips::BI__builtin_msa_sldi_w: i = 2; l = 0; u = 3;
break;
210 case Mips::BI__builtin_msa_copy_s_d:
211 case Mips::BI__builtin_msa_copy_u_d:
212 case Mips::BI__builtin_msa_insve_d:
213 case Mips::BI__builtin_msa_splati_d: i = 1; l = 0; u = 1;
break;
214 case Mips::BI__builtin_msa_sldi_d: i = 2; l = 0; u = 1;
break;
217 case Mips::BI__builtin_msa_ldi_b: i = 0; l = -128; u = 255;
break;
218 case Mips::BI__builtin_msa_ldi_h:
219 case Mips::BI__builtin_msa_ldi_w:
220 case Mips::BI__builtin_msa_ldi_d: i = 0; l = -512; u = 511;
break;
221 case Mips::BI__builtin_msa_ld_b: i = 1; l = -512; u = 511; m = 1;
break;
222 case Mips::BI__builtin_msa_ld_h: i = 1; l = -1024; u = 1022; m = 2;
break;
223 case Mips::BI__builtin_msa_ld_w: i = 1; l = -2048; u = 2044; m = 4;
break;
224 case Mips::BI__builtin_msa_ld_d: i = 1; l = -4096; u = 4088; m = 8;
break;
225 case Mips::BI__builtin_msa_ldr_d: i = 1; l = -4096; u = 4088; m = 8;
break;
226 case Mips::BI__builtin_msa_ldr_w: i = 1; l = -2048; u = 2044; m = 4;
break;
227 case Mips::BI__builtin_msa_st_b: i = 2; l = -512; u = 511; m = 1;
break;
228 case Mips::BI__builtin_msa_st_h: i = 2; l = -1024; u = 1022; m = 2;
break;
229 case Mips::BI__builtin_msa_st_w: i = 2; l = -2048; u = 2044; m = 4;
break;
230 case Mips::BI__builtin_msa_st_d: i = 2; l = -4096; u = 4088; m = 8;
break;
231 case Mips::BI__builtin_msa_str_d: i = 2; l = -4096; u = 4088; m = 8;
break;
232 case Mips::BI__builtin_msa_str_w: i = 2; l = -2048; u = 2044; m = 4;
break;
245 Diag(AL.
getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;
267 Diag(
D->getLocation(), diag::warn_attribute_wrong_decl_type)
273 Diag(
D->getLocation(), diag::warn_interrupt_attribute_invalid)
279 Diag(
D->getLocation(), diag::warn_interrupt_attribute_invalid)
286 if (checkAttrMutualExclusion<Mips16Attr>(*
this,
D, AL))
289 MipsInterruptAttr::InterruptType
Kind;
290 if (!MipsInterruptAttr::ConvertStrToInterruptType(Str,
Kind)) {
291 Diag(AL.
getLoc(), diag::warn_attribute_type_not_supported)
292 << AL <<
"'" + std::string(Str) +
"'";
enum clang::sema::@1658::IndirectLocalPathEntry::EntryKind Kind
This file declares semantic analysis functions specific to MIPS.
Enumerates target-specific builtins in their own namespaces within namespace clang.
bool isRegularKeywordAttribute() const
SourceLocation getLoc() const
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
SourceLocation getBeginLoc() const LLVM_READONLY
Decl - This represents one declaration (or definition), e.g.
ParsedAttr - Represents a syntactic attribute.
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this attribute.
SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID, bool DeferHint=false)
Emit a diagnostic.
ASTContext & getASTContext() const
bool CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall)
bool CheckMipsBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall)
bool CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall)
void handleInterruptAttr(Decl *D, const ParsedAttr &AL)
Sema - This implements semantic analysis and AST building for C.
bool BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, unsigned Multiple)
BuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr TheCall is a constant expr...
bool BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError=true)
BuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr TheCall is a constant express...
bool checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation=nullptr)
Check if the argument E is a ASCII string literal.
Encodes a location in the source.
Exposes information about the current target.
virtual bool hasFeature(StringRef Feature) const
Determine whether the given target has the given feature.
The JSON file list parser is used to communicate input to InstallAPI.
@ ExpectedFunctionOrMethod
QualType getFunctionOrMethodResultType(const Decl *D)
bool isFuncOrMethodForAttrSubject(const Decl *D)
isFuncOrMethodForAttrSubject - Return true if the given decl has function type (function or function-...
bool hasFunctionProto(const Decl *D)
hasFunctionProto - Return true if the given decl has a argument information.
unsigned getFunctionOrMethodNumParams(const Decl *D)
getFunctionOrMethodNumParams - Return number of function or method parameters.