1096 {
1097 DeoptInstr* deopt_instr = nullptr;
1098 if (source_loc.IsConstant()) {
1099 intptr_t object_table_index = FindOrAddObjectInTable(source_loc.constant());
1100 deopt_instr = new (zone()) DeoptConstantInstr(object_table_index);
1101 } else if (source_loc.IsInvalid() &&
1102 value->definition()->IsMaterializeObject()) {
1103 const intptr_t index =
1104 FindMaterialization(
value->definition()->AsMaterializeObject());
1106 deopt_instr = new (zone()) DeoptMaterializedObjectRefInstr(index);
1107 } else {
1108 ASSERT(!source_loc.IsInvalid());
1110 switch (rep) {
1111 case kTagged:
1112 deopt_instr =
1113 new (zone()) DeoptWordInstr(ToCpuRegisterSource(source_loc));
1114 break;
1115#if defined(TARGET_ARCH_IS_64_BIT)
1116 case kUntagged:
1117#endif
1118 case kUnboxedInt64: {
1119 if (source_loc.IsPairLocation()) {
1120 PairLocation* pair = source_loc.AsPairLocation();
1121 deopt_instr =
1122 new (zone()) DeoptMintPairInstr(ToCpuRegisterSource(pair->At(0)),
1123 ToCpuRegisterSource(pair->At(1)));
1124 } else {
1125 ASSERT(!source_loc.IsPairLocation());
1126 deopt_instr =
1128 }
1129 break;
1130 }
1131#if defined(TARGET_ARCH_IS_32_BIT)
1132 case kUntagged:
1133#endif
1134 case kUnboxedInt32:
1135 deopt_instr =
1137 break;
1138 case kUnboxedUint32:
1139 deopt_instr =
1141 break;
1142 case kUnboxedFloat:
1145 break;
1146 case kUnboxedDouble:
1149 break;
1150 case kUnboxedFloat32x4:
1153 break;
1154 case kUnboxedFloat64x2:
1157 break;
1158 case kUnboxedInt32x4:
1161 break;
1162 default:
1164 break;
1165 }
1166 }
1167 ASSERT(dest_index == FrameSize());
1168 ASSERT(deopt_instr !=
nullptr);
1169 instructions_.Add(deopt_instr);
1170}
DeoptFpuInstr< DeoptInstr::kInt32x4, CatchEntryMove::SourceKind::kInt32x4Slot, simd128_value_t, Int32x4Ptr > DeoptInt32x4Instr
DeoptFpuInstr< DeoptInstr::kFloat64x2, CatchEntryMove::SourceKind::kFloat64x2Slot, simd128_value_t, Float64x2Ptr > DeoptFloat64x2Instr
DeoptIntInstr< DeoptInstr::kUint32, CatchEntryMove::SourceKind::kUint32Slot, uint32_t > DeoptUint32Instr
DeoptIntInstr< DeoptInstr::kInt32, CatchEntryMove::SourceKind::kInt32Slot, int32_t > DeoptInt32Instr
DeoptFpuInstr< DeoptInstr::kFloat32x4, CatchEntryMove::SourceKind::kFloat32x4Slot, simd128_value_t, Float32x4Ptr > DeoptFloat32x4Instr
DeoptFpuInstr< DeoptInstr::kDouble, CatchEntryMove::SourceKind::kDoubleSlot, double, DoublePtr > DeoptDoubleInstr
DeoptIntInstr< DeoptInstr::kMint, CatchEntryMove::SourceKind::kInt64Slot, int64_t > DeoptMintInstr
DeoptFpuInstr< DeoptInstr::kFloat, CatchEntryMove::SourceKind::kFloatSlot, float, DoublePtr > DeoptFloatInstr