Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: src/IceTargetLoweringMIPS32.cpp

Issue 2325703002: Subzero, MIPS32: Intrinsic calls for ABS.fmt and SQRT.fmt (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Set isScalarFloatingType condition Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // 1 //
2 // The Subzero Code Generator 2 // The Subzero Code Generator
3 // 3 //
4 // This file is distributed under the University of Illinois Open Source 4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details. 5 // License. See LICENSE.TXT for details.
6 // 6 //
7 //===----------------------------------------------------------------------===// 7 //===----------------------------------------------------------------------===//
8 /// 8 ///
9 /// \file 9 /// \file
10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost 10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost
(...skipping 2155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2166 llvm_unreachable("Invalid ICmp operator"); 2166 llvm_unreachable("Invalid ICmp operator");
2167 return; 2167 return;
2168 } 2168 }
2169 } 2169 }
2170 2170
2171 void TargetMIPS32::lowerInsertElement(const InstInsertElement *Instr) { 2171 void TargetMIPS32::lowerInsertElement(const InstInsertElement *Instr) {
2172 UnimplementedLoweringError(this, Instr); 2172 UnimplementedLoweringError(this, Instr);
2173 } 2173 }
2174 2174
2175 void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { 2175 void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) {
2176 Variable *Dest = Instr->getDest();
2177 Type DestTy = (Dest != nullptr) ? Dest->getType() : IceType_void;
Jim Stichnoth 2016/09/09 17:12:41 I would do it more like this: const Type DestTy
obucinac 2016/09/09 17:39:40 Done.
2176 switch (Instr->getIntrinsicInfo().ID) { 2178 switch (Instr->getIntrinsicInfo().ID) {
2177 case Intrinsics::AtomicCmpxchg: { 2179 case Intrinsics::AtomicCmpxchg: {
2178 UnimplementedLoweringError(this, Instr); 2180 UnimplementedLoweringError(this, Instr);
2179 return; 2181 return;
2180 } 2182 }
2181 case Intrinsics::AtomicFence: 2183 case Intrinsics::AtomicFence:
2182 UnimplementedLoweringError(this, Instr); 2184 UnimplementedLoweringError(this, Instr);
2183 return; 2185 return;
2184 case Intrinsics::AtomicFenceAll: 2186 case Intrinsics::AtomicFenceAll:
2185 // NOTE: FenceAll should prevent and load/store from being moved across the 2187 // NOTE: FenceAll should prevent and load/store from being moved across the
(...skipping 26 matching lines...) Expand all
2212 } 2214 }
2213 case Intrinsics::Ctlz: { 2215 case Intrinsics::Ctlz: {
2214 UnimplementedLoweringError(this, Instr); 2216 UnimplementedLoweringError(this, Instr);
2215 return; 2217 return;
2216 } 2218 }
2217 case Intrinsics::Cttz: { 2219 case Intrinsics::Cttz: {
2218 UnimplementedLoweringError(this, Instr); 2220 UnimplementedLoweringError(this, Instr);
2219 return; 2221 return;
2220 } 2222 }
2221 case Intrinsics::Fabs: { 2223 case Intrinsics::Fabs: {
2222 UnimplementedLoweringError(this, Instr); 2224 if (isScalarFloatingType(DestTy)) {
2225 Variable *T = makeReg(DestTy);
2226 if (DestTy == IceType_f32) {
2227 _abs_s(T, legalizeToReg(Instr->getArg(0)));
2228 } else {
2229 _abs_d(T, legalizeToReg(Instr->getArg(0)));
2230 }
2231 _mov(Dest, T);
2232 }
2223 return; 2233 return;
2224 } 2234 }
2225 case Intrinsics::Longjmp: { 2235 case Intrinsics::Longjmp: {
2226 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2); 2236 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2);
2227 Call->addArg(Instr->getArg(0)); 2237 Call->addArg(Instr->getArg(0));
2228 Call->addArg(Instr->getArg(1)); 2238 Call->addArg(Instr->getArg(1));
2229 lowerCall(Call); 2239 lowerCall(Call);
2230 return; 2240 return;
2231 } 2241 }
2232 case Intrinsics::Memcpy: { 2242 case Intrinsics::Memcpy: {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2272 return; 2282 return;
2273 } 2283 }
2274 case Intrinsics::Setjmp: { 2284 case Intrinsics::Setjmp: {
2275 InstCall *Call = 2285 InstCall *Call =
2276 makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1); 2286 makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1);
2277 Call->addArg(Instr->getArg(0)); 2287 Call->addArg(Instr->getArg(0));
2278 lowerCall(Call); 2288 lowerCall(Call);
2279 return; 2289 return;
2280 } 2290 }
2281 case Intrinsics::Sqrt: { 2291 case Intrinsics::Sqrt: {
2282 UnimplementedLoweringError(this, Instr); 2292 if (isScalarFloatingType(DestTy)) {
2293 Variable *T = makeReg(DestTy);
2294 if (DestTy == IceType_f32) {
2295 _sqrt_s(T, legalizeToReg(Instr->getArg(0)));
2296 } else {
2297 _sqrt_d(T, legalizeToReg(Instr->getArg(0)));
2298 }
2299 _mov(Dest, T);
2300 }
2283 return; 2301 return;
2284 } 2302 }
2285 case Intrinsics::Stacksave: { 2303 case Intrinsics::Stacksave: {
2286 UnimplementedLoweringError(this, Instr); 2304 UnimplementedLoweringError(this, Instr);
2287 return; 2305 return;
2288 } 2306 }
2289 case Intrinsics::Stackrestore: { 2307 case Intrinsics::Stackrestore: {
2290 UnimplementedLoweringError(this, Instr); 2308 UnimplementedLoweringError(this, Instr);
2291 return; 2309 return;
2292 } 2310 }
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
2729 Str << "\t.set\t" 2747 Str << "\t.set\t"
2730 << "nomips16\n"; 2748 << "nomips16\n";
2731 } 2749 }
2732 2750
2733 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; 2751 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM];
2734 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; 2752 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM];
2735 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; 2753 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM];
2736 2754
2737 } // end of namespace MIPS32 2755 } // end of namespace MIPS32
2738 } // end of namespace Ice 2756 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698