OLD | NEW |
1 //===- subzero/src/IceTargetLoweringMIPS32.cpp - MIPS32 lowering ----------===// | 1 //===- subzero/src/IceTargetLoweringMIPS32.cpp - MIPS32 lowering ----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 /// | 9 /// |
10 /// \file | 10 /// \file |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 } | 1003 } |
1004 case Intrinsics::Cttz: { | 1004 case Intrinsics::Cttz: { |
1005 UnimplementedLoweringError(this, Instr); | 1005 UnimplementedLoweringError(this, Instr); |
1006 return; | 1006 return; |
1007 } | 1007 } |
1008 case Intrinsics::Fabs: { | 1008 case Intrinsics::Fabs: { |
1009 UnimplementedLoweringError(this, Instr); | 1009 UnimplementedLoweringError(this, Instr); |
1010 return; | 1010 return; |
1011 } | 1011 } |
1012 case Intrinsics::Longjmp: { | 1012 case Intrinsics::Longjmp: { |
1013 InstCall *Call = makeHelperCall(H_call_longjmp, nullptr, 2); | 1013 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2); |
1014 Call->addArg(Instr->getArg(0)); | 1014 Call->addArg(Instr->getArg(0)); |
1015 Call->addArg(Instr->getArg(1)); | 1015 Call->addArg(Instr->getArg(1)); |
1016 lowerCall(Call); | 1016 lowerCall(Call); |
1017 return; | 1017 return; |
1018 } | 1018 } |
1019 case Intrinsics::Memcpy: { | 1019 case Intrinsics::Memcpy: { |
1020 // In the future, we could potentially emit an inline memcpy/memset, etc. | 1020 // In the future, we could potentially emit an inline memcpy/memset, etc. |
1021 // for intrinsic calls w/ a known length. | 1021 // for intrinsic calls w/ a known length. |
1022 InstCall *Call = makeHelperCall(H_call_memcpy, nullptr, 3); | 1022 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memcpy, nullptr, 3); |
1023 Call->addArg(Instr->getArg(0)); | 1023 Call->addArg(Instr->getArg(0)); |
1024 Call->addArg(Instr->getArg(1)); | 1024 Call->addArg(Instr->getArg(1)); |
1025 Call->addArg(Instr->getArg(2)); | 1025 Call->addArg(Instr->getArg(2)); |
1026 lowerCall(Call); | 1026 lowerCall(Call); |
1027 return; | 1027 return; |
1028 } | 1028 } |
1029 case Intrinsics::Memmove: { | 1029 case Intrinsics::Memmove: { |
1030 InstCall *Call = makeHelperCall(H_call_memmove, nullptr, 3); | 1030 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memmove, nullptr, 3); |
1031 Call->addArg(Instr->getArg(0)); | 1031 Call->addArg(Instr->getArg(0)); |
1032 Call->addArg(Instr->getArg(1)); | 1032 Call->addArg(Instr->getArg(1)); |
1033 Call->addArg(Instr->getArg(2)); | 1033 Call->addArg(Instr->getArg(2)); |
1034 lowerCall(Call); | 1034 lowerCall(Call); |
1035 return; | 1035 return; |
1036 } | 1036 } |
1037 case Intrinsics::Memset: { | 1037 case Intrinsics::Memset: { |
1038 // The value operand needs to be extended to a stack slot size because the | 1038 // The value operand needs to be extended to a stack slot size because the |
1039 // PNaCl ABI requires arguments to be at least 32 bits wide. | 1039 // PNaCl ABI requires arguments to be at least 32 bits wide. |
1040 Operand *ValOp = Instr->getArg(1); | 1040 Operand *ValOp = Instr->getArg(1); |
1041 assert(ValOp->getType() == IceType_i8); | 1041 assert(ValOp->getType() == IceType_i8); |
1042 Variable *ValExt = Func->makeVariable(stackSlotType()); | 1042 Variable *ValExt = Func->makeVariable(stackSlotType()); |
1043 lowerCast(InstCast::create(Func, InstCast::Zext, ValExt, ValOp)); | 1043 lowerCast(InstCast::create(Func, InstCast::Zext, ValExt, ValOp)); |
1044 InstCall *Call = makeHelperCall(H_call_memset, nullptr, 3); | 1044 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memset, nullptr, 3); |
1045 Call->addArg(Instr->getArg(0)); | 1045 Call->addArg(Instr->getArg(0)); |
1046 Call->addArg(ValExt); | 1046 Call->addArg(ValExt); |
1047 Call->addArg(Instr->getArg(2)); | 1047 Call->addArg(Instr->getArg(2)); |
1048 lowerCall(Call); | 1048 lowerCall(Call); |
1049 return; | 1049 return; |
1050 } | 1050 } |
1051 case Intrinsics::NaClReadTP: { | 1051 case Intrinsics::NaClReadTP: { |
1052 if (Ctx->getFlags().getUseSandboxing()) { | 1052 if (Ctx->getFlags().getUseSandboxing()) { |
1053 UnimplementedLoweringError(this, Instr); | 1053 UnimplementedLoweringError(this, Instr); |
1054 } else { | 1054 } else { |
1055 InstCall *Call = makeHelperCall(H_call_read_tp, Instr->getDest(), 0); | 1055 InstCall *Call = |
| 1056 makeHelperCall(RuntimeHelper::H_call_read_tp, Instr->getDest(), 0); |
1056 lowerCall(Call); | 1057 lowerCall(Call); |
1057 } | 1058 } |
1058 return; | 1059 return; |
1059 } | 1060 } |
1060 case Intrinsics::Setjmp: { | 1061 case Intrinsics::Setjmp: { |
1061 InstCall *Call = makeHelperCall(H_call_setjmp, Instr->getDest(), 1); | 1062 InstCall *Call = |
| 1063 makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1); |
1062 Call->addArg(Instr->getArg(0)); | 1064 Call->addArg(Instr->getArg(0)); |
1063 lowerCall(Call); | 1065 lowerCall(Call); |
1064 return; | 1066 return; |
1065 } | 1067 } |
1066 case Intrinsics::Sqrt: { | 1068 case Intrinsics::Sqrt: { |
1067 UnimplementedLoweringError(this, Instr); | 1069 UnimplementedLoweringError(this, Instr); |
1068 return; | 1070 return; |
1069 } | 1071 } |
1070 case Intrinsics::Stacksave: { | 1072 case Intrinsics::Stacksave: { |
1071 UnimplementedLoweringError(this, Instr); | 1073 UnimplementedLoweringError(this, Instr); |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 Str << "\t.set\t" | 1317 Str << "\t.set\t" |
1316 << "nomips16\n"; | 1318 << "nomips16\n"; |
1317 } | 1319 } |
1318 | 1320 |
1319 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; | 1321 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; |
1320 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; | 1322 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
1321 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; | 1323 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; |
1322 | 1324 |
1323 } // end of namespace MIPS32 | 1325 } // end of namespace MIPS32 |
1324 } // end of namespace Ice | 1326 } // end of namespace Ice |
OLD | NEW |