• Home
  • Raw
  • Download

Lines Matching full:__

837 #define __ gasm()->  macro
852 auto if_true = __ MakeLabel<1>(); in LowerChangeBitToTagged()
853 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerChangeBitToTagged()
855 __ GotoIf(value, &if_true); in LowerChangeBitToTagged()
856 __ Goto(&done, __ FalseConstant()); in LowerChangeBitToTagged()
858 __ Bind(&if_true); in LowerChangeBitToTagged()
859 __ Goto(&done, __ TrueConstant()); in LowerChangeBitToTagged()
861 __ Bind(&done); in LowerChangeBitToTagged()
877 auto if_overflow = __ MakeDeferredLabel<1>(); in LowerChangeInt32ToTagged()
878 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerChangeInt32ToTagged()
880 Node* add = __ Int32AddWithOverflow(value, value); in LowerChangeInt32ToTagged()
881 Node* ovf = __ Projection(1, add); in LowerChangeInt32ToTagged()
882 __ GotoIf(ovf, &if_overflow); in LowerChangeInt32ToTagged()
883 __ Goto(&done, __ Projection(0, add)); in LowerChangeInt32ToTagged()
885 __ Bind(&if_overflow); in LowerChangeInt32ToTagged()
886 Node* number = AllocateHeapNumberWithValue(__ ChangeInt32ToFloat64(value)); in LowerChangeInt32ToTagged()
887 __ Goto(&done, number); in LowerChangeInt32ToTagged()
889 __ Bind(&done); in LowerChangeInt32ToTagged()
896 auto if_not_in_smi_range = __ MakeDeferredLabel<1>(); in LowerChangeUint32ToTagged()
897 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerChangeUint32ToTagged()
899 Node* check = __ Uint32LessThanOrEqual(value, SmiMaxValueConstant()); in LowerChangeUint32ToTagged()
900 __ GotoUnless(check, &if_not_in_smi_range); in LowerChangeUint32ToTagged()
901 __ Goto(&done, ChangeUint32ToSmi(value)); in LowerChangeUint32ToTagged()
903 __ Bind(&if_not_in_smi_range); in LowerChangeUint32ToTagged()
904 Node* number = AllocateHeapNumberWithValue(__ ChangeUint32ToFloat64(value)); in LowerChangeUint32ToTagged()
906 __ Goto(&done, number); in LowerChangeUint32ToTagged()
907 __ Bind(&done); in LowerChangeUint32ToTagged()
919 return __ WordEqual(value, __ TrueConstant()); in LowerChangeTaggedToBit()
925 auto if_smi = __ MakeDeferredLabel<1>(); in LowerTruncateTaggedToBit()
926 auto if_heapnumber = __ MakeDeferredLabel<1>(); in LowerTruncateTaggedToBit()
927 auto done = __ MakeLabel<6>(MachineRepresentation::kBit); in LowerTruncateTaggedToBit()
929 Node* zero = __ Int32Constant(0); in LowerTruncateTaggedToBit()
930 Node* fzero = __ Float64Constant(0.0); in LowerTruncateTaggedToBit()
933 __ GotoIf(__ WordEqual(value, __ FalseConstant()), &done, zero); in LowerTruncateTaggedToBit()
937 __ GotoIf(check_smi, &if_smi); in LowerTruncateTaggedToBit()
940 __ GotoIf(__ WordEqual(value, __ EmptyStringConstant()), &done, zero); in LowerTruncateTaggedToBit()
943 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerTruncateTaggedToBit()
947 __ LoadField(AccessBuilder::ForMapBitField(), value_map); in LowerTruncateTaggedToBit()
948 __ GotoUnless( in LowerTruncateTaggedToBit()
949 __ Word32Equal(__ Word32And(value_map_bitfield, in LowerTruncateTaggedToBit()
950 __ Int32Constant(1 << Map::kIsUndetectable)), in LowerTruncateTaggedToBit()
955 __ GotoIf(__ WordEqual(value_map, __ HeapNumberMapConstant()), in LowerTruncateTaggedToBit()
959 __ Goto(&done, __ Int32Constant(1)); in LowerTruncateTaggedToBit()
961 __ Bind(&if_heapnumber); in LowerTruncateTaggedToBit()
966 __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerTruncateTaggedToBit()
967 __ Goto(&done, __ Float64LessThan(fzero, __ Float64Abs(value_value))); in LowerTruncateTaggedToBit()
970 __ Bind(&if_smi); in LowerTruncateTaggedToBit()
973 __ Goto(&done, in LowerTruncateTaggedToBit()
974 __ Word32Equal(__ WordEqual(value, __ IntPtrConstant(0)), zero)); in LowerTruncateTaggedToBit()
977 __ Bind(&done); in LowerTruncateTaggedToBit()
984 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerChangeTaggedToInt32()
985 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerChangeTaggedToInt32()
988 __ GotoUnless(check, &if_not_smi); in LowerChangeTaggedToInt32()
989 __ Goto(&done, ChangeSmiToInt32(value)); in LowerChangeTaggedToInt32()
991 __ Bind(&if_not_smi); in LowerChangeTaggedToInt32()
993 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerChangeTaggedToInt32()
994 vfalse = __ ChangeFloat64ToInt32(vfalse); in LowerChangeTaggedToInt32()
995 __ Goto(&done, vfalse); in LowerChangeTaggedToInt32()
997 __ Bind(&done); in LowerChangeTaggedToInt32()
1004 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerChangeTaggedToUint32()
1005 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerChangeTaggedToUint32()
1008 __ GotoUnless(check, &if_not_smi); in LowerChangeTaggedToUint32()
1009 __ Goto(&done, ChangeSmiToInt32(value)); in LowerChangeTaggedToUint32()
1011 __ Bind(&if_not_smi); in LowerChangeTaggedToUint32()
1013 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerChangeTaggedToUint32()
1014 vfalse = __ ChangeFloat64ToUint32(vfalse); in LowerChangeTaggedToUint32()
1015 __ Goto(&done, vfalse); in LowerChangeTaggedToUint32()
1017 __ Bind(&done); in LowerChangeTaggedToUint32()
1028 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerChangeTaggedToTaggedSigned()
1029 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerChangeTaggedToTaggedSigned()
1032 __ GotoUnless(check, &if_not_smi); in LowerChangeTaggedToTaggedSigned()
1033 __ Goto(&done, value); in LowerChangeTaggedToTaggedSigned()
1035 __ Bind(&if_not_smi); in LowerChangeTaggedToTaggedSigned()
1037 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerChangeTaggedToTaggedSigned()
1038 vfalse = __ ChangeFloat64ToInt32(vfalse); in LowerChangeTaggedToTaggedSigned()
1040 __ Goto(&done, vfalse); in LowerChangeTaggedToTaggedSigned()
1042 __ Bind(&done); in LowerChangeTaggedToTaggedSigned()
1049 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerTruncateTaggedToFloat64()
1050 auto done = __ MakeLabel<2>(MachineRepresentation::kFloat64); in LowerTruncateTaggedToFloat64()
1053 __ GotoUnless(check, &if_not_smi); in LowerTruncateTaggedToFloat64()
1055 vtrue = __ ChangeInt32ToFloat64(vtrue); in LowerTruncateTaggedToFloat64()
1056 __ Goto(&done, vtrue); in LowerTruncateTaggedToFloat64()
1058 __ Bind(&if_not_smi); in LowerTruncateTaggedToFloat64()
1060 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerTruncateTaggedToFloat64()
1061 __ Goto(&done, vfalse); in LowerTruncateTaggedToFloat64()
1063 __ Bind(&done); in LowerTruncateTaggedToFloat64()
1071 Node* check = __ Uint32LessThan(index, limit); in LowerCheckBounds()
1072 __ DeoptimizeUnless(DeoptimizeReason::kOutOfBounds, check, frame_state); in LowerCheckBounds()
1085 __ MakeLabelFor(GraphAssemblerLabelType::kNonDeferred, map_count * 2); in LowerCheckMaps()
1086 auto migrate = __ MakeDeferredLabel<1>(); in LowerCheckMaps()
1089 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckMaps()
1093 Node* map = __ HeapConstant(maps[i]); in LowerCheckMaps()
1094 Node* check = __ WordEqual(value_map, map); in LowerCheckMaps()
1096 __ GotoUnless(check, &migrate); in LowerCheckMaps()
1097 __ Goto(&done); in LowerCheckMaps()
1099 __ GotoIf(check, &done); in LowerCheckMaps()
1104 __ Bind(&migrate); in LowerCheckMaps()
1108 __ LoadField(AccessBuilder::ForMapBitField3(), value_map); in LowerCheckMaps()
1109 Node* if_not_deprecated = __ WordEqual( in LowerCheckMaps()
1110 __ Word32And(bitfield3, __ Int32Constant(Map::Deprecated::kMask)), in LowerCheckMaps()
1111 __ Int32Constant(0)); in LowerCheckMaps()
1112 __ DeoptimizeIf(DeoptimizeReason::kWrongMap, if_not_deprecated, in LowerCheckMaps()
1120 __ Call(desc, __ CEntryStubConstant(1), value, in LowerCheckMaps()
1121 __ ExternalConstant(ExternalReference(id, isolate())), in LowerCheckMaps()
1122 __ Int32Constant(1), __ NoContextConstant()); in LowerCheckMaps()
1124 __ DeoptimizeIf(DeoptimizeReason::kInstanceMigrationFailed, check, in LowerCheckMaps()
1129 value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckMaps()
1133 Node* map = __ HeapConstant(maps[i]); in LowerCheckMaps()
1134 Node* check = __ WordEqual(value_map, map); in LowerCheckMaps()
1136 __ DeoptimizeUnless(DeoptimizeReason::kWrongMap, check, frame_state); in LowerCheckMaps()
1138 __ GotoIf(check, &done); in LowerCheckMaps()
1142 __ Goto(&done); in LowerCheckMaps()
1143 __ Bind(&done); in LowerCheckMaps()
1146 __ MakeLabelFor(GraphAssemblerLabelType::kNonDeferred, map_count); in LowerCheckMaps()
1149 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckMaps()
1152 Node* map = __ HeapConstant(maps[i]); in LowerCheckMaps()
1153 Node* check = __ WordEqual(value_map, map); in LowerCheckMaps()
1155 __ DeoptimizeUnless(DeoptimizeReason::kWrongMap, check, frame_state); in LowerCheckMaps()
1157 __ GotoIf(check, &done); in LowerCheckMaps()
1160 __ Goto(&done); in LowerCheckMaps()
1161 __ Bind(&done); in LowerCheckMaps()
1169 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerCheckNumber()
1170 auto done = __ MakeLabel<2>(); in LowerCheckNumber()
1173 __ GotoUnless(check0, &if_not_smi); in LowerCheckNumber()
1174 __ Goto(&done); in LowerCheckNumber()
1176 __ Bind(&if_not_smi); in LowerCheckNumber()
1177 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckNumber()
1178 Node* check1 = __ WordEqual(value_map, __ HeapNumberMapConstant()); in LowerCheckNumber()
1179 __ DeoptimizeUnless(DeoptimizeReason::kNotAHeapNumber, check1, frame_state); in LowerCheckNumber()
1180 __ Goto(&done); in LowerCheckNumber()
1182 __ Bind(&done); in LowerCheckNumber()
1190 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckReceiver()
1192 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerCheckReceiver()
1195 Node* check = __ Uint32LessThanOrEqual( in LowerCheckReceiver()
1196 __ Uint32Constant(FIRST_JS_RECEIVER_TYPE), value_instance_type); in LowerCheckReceiver()
1197 __ DeoptimizeUnless(DeoptimizeReason::kNotAJavaScriptObject, check, in LowerCheckReceiver()
1205 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckString()
1207 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerCheckString()
1209 Node* check = __ Uint32LessThan(value_instance_type, in LowerCheckString()
1210 __ Uint32Constant(FIRST_NONSTRING_TYPE)); in LowerCheckString()
1211 __ DeoptimizeUnless(DeoptimizeReason::kWrongInstanceType, check, frame_state); in LowerCheckString()
1219 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckInternalizedString()
1221 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerCheckInternalizedString()
1223 Node* check = __ Word32Equal( in LowerCheckInternalizedString()
1224 __ Word32And(value_instance_type, in LowerCheckInternalizedString()
1225 __ Int32Constant(kIsNotStringMask | kIsNotInternalizedMask)), in LowerCheckInternalizedString()
1226 __ Int32Constant(kInternalizedTag)); in LowerCheckInternalizedString()
1227 __ DeoptimizeUnless(DeoptimizeReason::kWrongInstanceType, check, frame_state); in LowerCheckInternalizedString()
1234 __ DeoptimizeUnless(DeoptimizeKind::kEager, DeoptimizeReason::kNoReason, in LowerCheckIf()
1244 Node* value = __ Int32AddWithOverflow(lhs, rhs); in LowerCheckedInt32Add()
1245 Node* check = __ Projection(1, value); in LowerCheckedInt32Add()
1246 __ DeoptimizeIf(DeoptimizeReason::kOverflow, check, frame_state); in LowerCheckedInt32Add()
1247 return __ Projection(0, value); in LowerCheckedInt32Add()
1255 Node* value = __ Int32SubWithOverflow(lhs, rhs); in LowerCheckedInt32Sub()
1256 Node* check = __ Projection(1, value); in LowerCheckedInt32Sub()
1257 __ DeoptimizeIf(DeoptimizeReason::kOverflow, check, frame_state); in LowerCheckedInt32Sub()
1258 return __ Projection(0, value); in LowerCheckedInt32Sub()
1266 auto if_not_positive = __ MakeDeferredLabel<1>(); in LowerCheckedInt32Div()
1267 auto if_is_minint = __ MakeDeferredLabel<1>(); in LowerCheckedInt32Div()
1268 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerCheckedInt32Div()
1269 auto minint_check_done = __ MakeLabel<2>(); in LowerCheckedInt32Div()
1271 Node* zero = __ Int32Constant(0); in LowerCheckedInt32Div()
1274 Node* check0 = __ Int32LessThan(zero, rhs); in LowerCheckedInt32Div()
1275 __ GotoUnless(check0, &if_not_positive); in LowerCheckedInt32Div()
1278 __ Goto(&done, __ Int32Div(lhs, rhs)); in LowerCheckedInt32Div()
1281 __ Bind(&if_not_positive); in LowerCheckedInt32Div()
1284 Node* check = __ Word32Equal(rhs, zero); in LowerCheckedInt32Div()
1285 __ DeoptimizeIf(DeoptimizeReason::kDivisionByZero, check, frame_state); in LowerCheckedInt32Div()
1288 check = __ Word32Equal(lhs, zero); in LowerCheckedInt32Div()
1289 __ DeoptimizeIf(DeoptimizeReason::kMinusZero, check, frame_state); in LowerCheckedInt32Div()
1293 Node* minint = __ Int32Constant(std::numeric_limits<int32_t>::min()); in LowerCheckedInt32Div()
1295 __ GotoIf(check1, &if_is_minint); in LowerCheckedInt32Div()
1296 __ Goto(&minint_check_done); in LowerCheckedInt32Div()
1298 __ Bind(&if_is_minint); in LowerCheckedInt32Div()
1300 Node* minusone = __ Int32Constant(-1); in LowerCheckedInt32Div()
1301 Node* is_minus_one = __ Word32Equal(rhs, minusone); in LowerCheckedInt32Div()
1302 __ DeoptimizeIf(DeoptimizeReason::kOverflow, is_minus_one, frame_state); in LowerCheckedInt32Div()
1303 __ Goto(&minint_check_done); in LowerCheckedInt32Div()
1305 __ Bind(&minint_check_done); in LowerCheckedInt32Div()
1307 __ Goto(&done, __ Int32Div(lhs, rhs)); in LowerCheckedInt32Div()
1310 __ Bind(&done); in LowerCheckedInt32Div()
1314 Node* check = __ Word32Equal(lhs, __ Int32Mul(rhs, value)); in LowerCheckedInt32Div()
1315 __ DeoptimizeUnless(DeoptimizeReason::kLostPrecision, check, frame_state); in LowerCheckedInt32Div()
1342 auto if_rhs_not_positive = __ MakeDeferredLabel<1>(); in LowerCheckedInt32Mod()
1343 auto if_lhs_negative = __ MakeDeferredLabel<1>(); in LowerCheckedInt32Mod()
1344 auto if_power_of_two = __ MakeLabel<1>(); in LowerCheckedInt32Mod()
1345 auto rhs_checked = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerCheckedInt32Mod()
1346 auto done = __ MakeLabel<3>(MachineRepresentation::kWord32); in LowerCheckedInt32Mod()
1348 Node* zero = __ Int32Constant(0); in LowerCheckedInt32Mod()
1351 Node* check0 = __ Int32LessThanOrEqual(rhs, zero); in LowerCheckedInt32Mod()
1352 __ GotoIf(check0, &if_rhs_not_positive); in LowerCheckedInt32Mod()
1353 __ Goto(&rhs_checked, rhs); in LowerCheckedInt32Mod()
1355 __ Bind(&if_rhs_not_positive); in LowerCheckedInt32Mod()
1359 Node* vtrue0 = __ Int32Sub(zero, rhs); in LowerCheckedInt32Mod()
1362 Node* check = __ Word32Equal(vtrue0, zero); in LowerCheckedInt32Mod()
1363 __ DeoptimizeIf(DeoptimizeReason::kDivisionByZero, check, frame_state); in LowerCheckedInt32Mod()
1364 __ Goto(&rhs_checked, vtrue0); in LowerCheckedInt32Mod()
1367 __ Bind(&rhs_checked); in LowerCheckedInt32Mod()
1371 Node* check1 = __ Int32LessThan(lhs, zero); in LowerCheckedInt32Mod()
1372 __ GotoIf(check1, &if_lhs_negative); in LowerCheckedInt32Mod()
1376 Node* one = __ Int32Constant(1); in LowerCheckedInt32Mod()
1377 Node* msk = __ Int32Sub(rhs, one); in LowerCheckedInt32Mod()
1380 Node* check2 = __ Word32Equal(__ Word32And(rhs, msk), zero); in LowerCheckedInt32Mod()
1381 __ GotoIf(check2, &if_power_of_two); in LowerCheckedInt32Mod()
1383 __ Goto(&done, __ Int32Mod(lhs, rhs)); in LowerCheckedInt32Mod()
1385 __ Bind(&if_power_of_two); in LowerCheckedInt32Mod()
1387 __ Goto(&done, __ Word32And(lhs, msk)); in LowerCheckedInt32Mod()
1390 __ Bind(&if_lhs_negative); in LowerCheckedInt32Mod()
1393 Node* vtrue1 = __ Int32Mod(lhs, rhs); in LowerCheckedInt32Mod()
1396 Node* check = __ Word32Equal(vtrue1, zero); in LowerCheckedInt32Mod()
1397 __ DeoptimizeIf(DeoptimizeReason::kMinusZero, check, frame_state); in LowerCheckedInt32Mod()
1398 __ Goto(&done, vtrue1); in LowerCheckedInt32Mod()
1401 __ Bind(&done); in LowerCheckedInt32Mod()
1410 Node* zero = __ Int32Constant(0); in LowerCheckedUint32Div()
1413 Node* check = __ Word32Equal(rhs, zero); in LowerCheckedUint32Div()
1414 __ DeoptimizeIf(DeoptimizeReason::kDivisionByZero, check, frame_state); in LowerCheckedUint32Div()
1417 Node* value = __ Uint32Div(lhs, rhs); in LowerCheckedUint32Div()
1420 check = __ Word32Equal(lhs, __ Int32Mul(rhs, value)); in LowerCheckedUint32Div()
1421 __ DeoptimizeUnless(DeoptimizeReason::kLostPrecision, check, frame_state); in LowerCheckedUint32Div()
1430 Node* zero = __ Int32Constant(0); in LowerCheckedUint32Mod()
1433 Node* check = __ Word32Equal(rhs, zero); in LowerCheckedUint32Mod()
1434 __ DeoptimizeIf(DeoptimizeReason::kDivisionByZero, check, frame_state); in LowerCheckedUint32Mod()
1437 return __ Uint32Mod(lhs, rhs); in LowerCheckedUint32Mod()
1446 Node* projection = __ Int32MulWithOverflow(lhs, rhs); in LowerCheckedInt32Mul()
1447 Node* check = __ Projection(1, projection); in LowerCheckedInt32Mul()
1448 __ DeoptimizeIf(DeoptimizeReason::kOverflow, check, frame_state); in LowerCheckedInt32Mul()
1450 Node* value = __ Projection(0, projection); in LowerCheckedInt32Mul()
1453 auto if_zero = __ MakeDeferredLabel<1>(); in LowerCheckedInt32Mul()
1454 auto check_done = __ MakeLabel<2>(); in LowerCheckedInt32Mul()
1455 Node* zero = __ Int32Constant(0); in LowerCheckedInt32Mul()
1456 Node* check_zero = __ Word32Equal(value, zero); in LowerCheckedInt32Mul()
1457 __ GotoIf(check_zero, &if_zero); in LowerCheckedInt32Mul()
1458 __ Goto(&check_done); in LowerCheckedInt32Mul()
1460 __ Bind(&if_zero); in LowerCheckedInt32Mul()
1462 Node* check_or = __ Int32LessThan(__ Word32Or(lhs, rhs), zero); in LowerCheckedInt32Mul()
1463 __ DeoptimizeIf(DeoptimizeReason::kMinusZero, check_or, frame_state); in LowerCheckedInt32Mul()
1464 __ Goto(&check_done); in LowerCheckedInt32Mul()
1466 __ Bind(&check_done); in LowerCheckedInt32Mul()
1477 Node* add = __ Int32AddWithOverflow(value, value); in LowerCheckedInt32ToTaggedSigned()
1478 Node* check = __ Projection(1, add); in LowerCheckedInt32ToTaggedSigned()
1479 __ DeoptimizeIf(DeoptimizeReason::kOverflow, check, frame_state); in LowerCheckedInt32ToTaggedSigned()
1480 return __ Projection(0, add); in LowerCheckedInt32ToTaggedSigned()
1486 Node* max_int = __ Int32Constant(std::numeric_limits<int32_t>::max()); in LowerCheckedUint32ToInt32()
1487 Node* is_safe = __ Uint32LessThanOrEqual(value, max_int); in LowerCheckedUint32ToInt32()
1488 __ DeoptimizeUnless(DeoptimizeReason::kLostPrecision, is_safe, frame_state); in LowerCheckedUint32ToInt32()
1495 Node* check = __ Uint32LessThanOrEqual(value, SmiMaxValueConstant()); in LowerCheckedUint32ToTaggedSigned()
1496 __ DeoptimizeUnless(DeoptimizeReason::kLostPrecision, check, frame_state); in LowerCheckedUint32ToTaggedSigned()
1502 Node* value32 = __ RoundFloat64ToInt32(value); in BuildCheckedFloat64ToInt32()
1503 Node* check_same = __ Float64Equal(value, __ ChangeInt32ToFloat64(value32)); in BuildCheckedFloat64ToInt32()
1504 __ DeoptimizeUnless(DeoptimizeReason::kLostPrecisionOrNaN, check_same, in BuildCheckedFloat64ToInt32()
1509 auto if_zero = __ MakeDeferredLabel<1>(); in BuildCheckedFloat64ToInt32()
1510 auto check_done = __ MakeLabel<2>(); in BuildCheckedFloat64ToInt32()
1512 Node* check_zero = __ Word32Equal(value32, __ Int32Constant(0)); in BuildCheckedFloat64ToInt32()
1513 __ GotoIf(check_zero, &if_zero); in BuildCheckedFloat64ToInt32()
1514 __ Goto(&check_done); in BuildCheckedFloat64ToInt32()
1516 __ Bind(&if_zero); in BuildCheckedFloat64ToInt32()
1518 Node* check_negative = __ Int32LessThan(__ Float64ExtractHighWord32(value), in BuildCheckedFloat64ToInt32()
1519 __ Int32Constant(0)); in BuildCheckedFloat64ToInt32()
1520 __ DeoptimizeIf(DeoptimizeReason::kMinusZero, check_negative, frame_state); in BuildCheckedFloat64ToInt32()
1521 __ Goto(&check_done); in BuildCheckedFloat64ToInt32()
1523 __ Bind(&check_done); in BuildCheckedFloat64ToInt32()
1539 __ DeoptimizeUnless(DeoptimizeReason::kNotASmi, check, frame_state); in LowerCheckedTaggedSignedToInt32()
1548 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerCheckedTaggedToInt32()
1549 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerCheckedTaggedToInt32()
1552 __ GotoUnless(check, &if_not_smi); in LowerCheckedTaggedToInt32()
1554 __ Goto(&done, ChangeSmiToInt32(value)); in LowerCheckedTaggedToInt32()
1558 __ Bind(&if_not_smi); in LowerCheckedTaggedToInt32()
1559 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerCheckedTaggedToInt32()
1560 Node* check_map = __ WordEqual(value_map, __ HeapNumberMapConstant()); in LowerCheckedTaggedToInt32()
1561 __ DeoptimizeUnless(DeoptimizeReason::kNotAHeapNumber, check_map, in LowerCheckedTaggedToInt32()
1563 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerCheckedTaggedToInt32()
1565 __ Goto(&done, vfalse); in LowerCheckedTaggedToInt32()
1567 __ Bind(&done); in LowerCheckedTaggedToInt32()
1573 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in BuildCheckedHeapNumberOrOddballToFloat64()
1574 Node* check_number = __ WordEqual(value_map, __ HeapNumberMapConstant()); in BuildCheckedHeapNumberOrOddballToFloat64()
1577 __ DeoptimizeUnless(DeoptimizeReason::kNotAHeapNumber, check_number, in BuildCheckedHeapNumberOrOddballToFloat64()
1582 auto check_done = __ MakeLabel<2>(); in BuildCheckedHeapNumberOrOddballToFloat64()
1584 __ GotoIf(check_number, &check_done); in BuildCheckedHeapNumberOrOddballToFloat64()
1588 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in BuildCheckedHeapNumberOrOddballToFloat64()
1590 __ Word32Equal(instance_type, __ Int32Constant(ODDBALL_TYPE)); in BuildCheckedHeapNumberOrOddballToFloat64()
1591 __ DeoptimizeUnless(DeoptimizeReason::kNotANumberOrOddball, check_oddball, in BuildCheckedHeapNumberOrOddballToFloat64()
1594 __ Goto(&check_done); in BuildCheckedHeapNumberOrOddballToFloat64()
1596 __ Bind(&check_done); in BuildCheckedHeapNumberOrOddballToFloat64()
1600 return __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in BuildCheckedHeapNumberOrOddballToFloat64()
1608 auto if_smi = __ MakeLabel<1>(); in LowerCheckedTaggedToFloat64()
1609 auto done = __ MakeLabel<2>(MachineRepresentation::kFloat64); in LowerCheckedTaggedToFloat64()
1612 __ GotoIf(check, &if_smi); in LowerCheckedTaggedToFloat64()
1618 __ Goto(&done, number); in LowerCheckedTaggedToFloat64()
1620 __ Bind(&if_smi); in LowerCheckedTaggedToFloat64()
1622 from_smi = __ ChangeInt32ToFloat64(from_smi); in LowerCheckedTaggedToFloat64()
1623 __ Goto(&done, from_smi); in LowerCheckedTaggedToFloat64()
1625 __ Bind(&done); in LowerCheckedTaggedToFloat64()
1634 __ DeoptimizeUnless(DeoptimizeReason::kNotASmi, check, frame_state); in LowerCheckedTaggedToTaggedSigned()
1644 __ DeoptimizeIf(DeoptimizeReason::kSmi, check, frame_state); in LowerCheckedTaggedToTaggedPointer()
1651 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerTruncateTaggedToWord32()
1652 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerTruncateTaggedToWord32()
1655 __ GotoUnless(check, &if_not_smi); in LowerTruncateTaggedToWord32()
1656 __ Goto(&done, ChangeSmiToInt32(value)); in LowerTruncateTaggedToWord32()
1658 __ Bind(&if_not_smi); in LowerTruncateTaggedToWord32()
1660 Node* vfalse = __ LoadField(AccessBuilder::ForHeapNumberValue(), value); in LowerTruncateTaggedToWord32()
1661 vfalse = __ TruncateFloat64ToWord32(vfalse); in LowerTruncateTaggedToWord32()
1662 __ Goto(&done, vfalse); in LowerTruncateTaggedToWord32()
1664 __ Bind(&done); in LowerTruncateTaggedToWord32()
1672 auto if_not_smi = __ MakeLabel<1>(); in LowerCheckedTruncateTaggedToWord32()
1673 auto done = __ MakeLabel<2>(MachineRepresentation::kWord32); in LowerCheckedTruncateTaggedToWord32()
1676 __ GotoUnless(check, &if_not_smi); in LowerCheckedTruncateTaggedToWord32()
1678 __ Goto(&done, ChangeSmiToInt32(value)); in LowerCheckedTruncateTaggedToWord32()
1682 __ Bind(&if_not_smi); in LowerCheckedTruncateTaggedToWord32()
1685 number = __ TruncateFloat64ToWord32(number); in LowerCheckedTruncateTaggedToWord32()
1686 __ Goto(&done, number); in LowerCheckedTruncateTaggedToWord32()
1688 __ Bind(&done); in LowerCheckedTruncateTaggedToWord32()
1695 auto if_smi = __ MakeDeferredLabel<1>(); in LowerObjectIsDetectableCallable()
1696 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsDetectableCallable()
1699 __ GotoIf(check, &if_smi); in LowerObjectIsDetectableCallable()
1701 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsDetectableCallable()
1703 __ LoadField(AccessBuilder::ForMapBitField(), value_map); in LowerObjectIsDetectableCallable()
1704 Node* vfalse = __ Word32Equal( in LowerObjectIsDetectableCallable()
1705 __ Int32Constant(1 << Map::kIsCallable), in LowerObjectIsDetectableCallable()
1706 __ Word32And(value_bit_field, in LowerObjectIsDetectableCallable()
1707 __ Int32Constant((1 << Map::kIsCallable) | in LowerObjectIsDetectableCallable()
1709 __ Goto(&done, vfalse); in LowerObjectIsDetectableCallable()
1711 __ Bind(&if_smi); in LowerObjectIsDetectableCallable()
1712 __ Goto(&done, __ Int32Constant(0)); in LowerObjectIsDetectableCallable()
1714 __ Bind(&done); in LowerObjectIsDetectableCallable()
1721 auto if_primitive = __ MakeDeferredLabel<2>(); in LowerObjectIsNonCallable()
1722 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsNonCallable()
1725 __ GotoIf(check0, &if_primitive); in LowerObjectIsNonCallable()
1727 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsNonCallable()
1729 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerObjectIsNonCallable()
1731 Node* check1 = __ Uint32LessThanOrEqual( in LowerObjectIsNonCallable()
1732 __ Uint32Constant(FIRST_JS_RECEIVER_TYPE), value_instance_type); in LowerObjectIsNonCallable()
1733 __ GotoUnless(check1, &if_primitive); in LowerObjectIsNonCallable()
1736 __ LoadField(AccessBuilder::ForMapBitField(), value_map); in LowerObjectIsNonCallable()
1737 Node* check2 = __ Word32Equal( in LowerObjectIsNonCallable()
1738 __ Int32Constant(0), in LowerObjectIsNonCallable()
1739 __ Word32And(value_bit_field, __ Int32Constant(1 << Map::kIsCallable))); in LowerObjectIsNonCallable()
1740 __ Goto(&done, check2); in LowerObjectIsNonCallable()
1742 __ Bind(&if_primitive); in LowerObjectIsNonCallable()
1743 __ Goto(&done, __ Int32Constant(0)); in LowerObjectIsNonCallable()
1745 __ Bind(&done); in LowerObjectIsNonCallable()
1752 auto if_smi = __ MakeLabel<1>(); in LowerObjectIsNumber()
1753 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsNumber()
1755 __ GotoIf(ObjectIsSmi(value), &if_smi); in LowerObjectIsNumber()
1756 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsNumber()
1757 __ Goto(&done, __ WordEqual(value_map, __ HeapNumberMapConstant())); in LowerObjectIsNumber()
1759 __ Bind(&if_smi); in LowerObjectIsNumber()
1760 __ Goto(&done, __ Int32Constant(1)); in LowerObjectIsNumber()
1762 __ Bind(&done); in LowerObjectIsNumber()
1769 auto if_smi = __ MakeDeferredLabel<1>(); in LowerObjectIsReceiver()
1770 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsReceiver()
1772 __ GotoIf(ObjectIsSmi(value), &if_smi); in LowerObjectIsReceiver()
1775 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsReceiver()
1777 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerObjectIsReceiver()
1778 Node* result = __ Uint32LessThanOrEqual( in LowerObjectIsReceiver()
1779 __ Uint32Constant(FIRST_JS_RECEIVER_TYPE), value_instance_type); in LowerObjectIsReceiver()
1780 __ Goto(&done, result); in LowerObjectIsReceiver()
1782 __ Bind(&if_smi); in LowerObjectIsReceiver()
1783 __ Goto(&done, __ Int32Constant(0)); in LowerObjectIsReceiver()
1785 __ Bind(&done); in LowerObjectIsReceiver()
1797 auto if_smi = __ MakeDeferredLabel<1>(); in LowerObjectIsString()
1798 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsString()
1801 __ GotoIf(check, &if_smi); in LowerObjectIsString()
1802 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsString()
1804 __ LoadField(AccessBuilder::ForMapInstanceType(), value_map); in LowerObjectIsString()
1805 Node* vfalse = __ Uint32LessThan(value_instance_type, in LowerObjectIsString()
1806 __ Uint32Constant(FIRST_NONSTRING_TYPE)); in LowerObjectIsString()
1807 __ Goto(&done, vfalse); in LowerObjectIsString()
1809 __ Bind(&if_smi); in LowerObjectIsString()
1810 __ Goto(&done, __ Int32Constant(0)); in LowerObjectIsString()
1812 __ Bind(&done); in LowerObjectIsString()
1819 auto if_smi = __ MakeDeferredLabel<1>(); in LowerObjectIsUndetectable()
1820 auto done = __ MakeLabel<2>(MachineRepresentation::kBit); in LowerObjectIsUndetectable()
1823 __ GotoIf(check, &if_smi); in LowerObjectIsUndetectable()
1825 Node* value_map = __ LoadField(AccessBuilder::ForMap(), value); in LowerObjectIsUndetectable()
1827 __ LoadField(AccessBuilder::ForMapBitField(), value_map); in LowerObjectIsUndetectable()
1828 Node* vfalse = __ Word32Equal( in LowerObjectIsUndetectable()
1829 __ Word32Equal(__ Int32Constant(0), in LowerObjectIsUndetectable()
1830 __ Word32And(value_bit_field, in LowerObjectIsUndetectable()
1831 __ Int32Constant(1 << Map::kIsUndetectable))), in LowerObjectIsUndetectable()
1832 __ Int32Constant(0)); in LowerObjectIsUndetectable()
1833 __ Goto(&done, vfalse); in LowerObjectIsUndetectable()
1835 __ Bind(&if_smi); in LowerObjectIsUndetectable()
1836 __ Goto(&done, __ Int32Constant(0)); in LowerObjectIsUndetectable()
1838 __ Bind(&done); in LowerObjectIsUndetectable()
1850 return __ Call(desc, __ HeapConstant(callable.code()), in LowerNewRestParameterElements()
1851 __ IntPtrConstant(formal_parameter_count), in LowerNewRestParameterElements()
1852 __ NoContextConstant()); in LowerNewRestParameterElements()
1864 return __ Call(desc, __ HeapConstant(callable.code()), in LowerNewUnmappedArgumentsElements()
1865 __ IntPtrConstant(formal_parameter_count), in LowerNewUnmappedArgumentsElements()
1866 __ NoContextConstant()); in LowerNewUnmappedArgumentsElements()
1873 __ LoadField(AccessBuilder::ForJSArrayBufferBitField(), value); in LowerArrayBufferWasNeutered()
1874 return __ Word32Equal( in LowerArrayBufferWasNeutered()
1875 __ Word32Equal( in LowerArrayBufferWasNeutered()
1876 __ Word32And(value_bit_field, in LowerArrayBufferWasNeutered()
1877 __ Int32Constant(JSArrayBuffer::WasNeutered::kMask)), in LowerArrayBufferWasNeutered()
1878 __ Int32Constant(0)), in LowerArrayBufferWasNeutered()
1879 __ Int32Constant(0)); in LowerArrayBufferWasNeutered()
1891 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, in LowerStringCharAt()
1892 __ NoContextConstant()); in LowerStringCharAt()
1905 return __ Call(desc, __ HeapConstant(callable.code()), receiver, position, in LowerStringCharCodeAt()
1906 __ NoContextConstant()); in LowerStringCharCodeAt()
1912 auto runtime_call = __ MakeDeferredLabel<2>(); in LowerStringFromCharCode()
1913 auto if_undefined = __ MakeDeferredLabel<1>(); in LowerStringFromCharCode()
1914 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerStringFromCharCode()
1917 Node* code = __ Word32And(value, __ Int32Constant(String::kMaxUtf16CodeUnit)); in LowerStringFromCharCode()
1920 Node* check0 = __ Int32LessThanOrEqual( in LowerStringFromCharCode()
1921 code, __ Int32Constant(String::kMaxOneByteCharCode)); in LowerStringFromCharCode()
1922 __ GotoUnless(check0, &runtime_call); in LowerStringFromCharCode()
1925 Node* cache = __ HeapConstant(factory()->single_character_string_cache()); in LowerStringFromCharCode()
1928 Node* index = machine()->Is32() ? code : __ ChangeUint32ToUint64(code); in LowerStringFromCharCode()
1933 __ LoadElement(AccessBuilder::ForFixedArrayElement(), cache, index); in LowerStringFromCharCode()
1935 Node* check1 = __ WordEqual(entry, __ UndefinedConstant()); in LowerStringFromCharCode()
1936 __ GotoIf(check1, &runtime_call); in LowerStringFromCharCode()
1937 __ Goto(&done, entry); in LowerStringFromCharCode()
1942 __ Bind(&runtime_call); in LowerStringFromCharCode()
1949 __ Call(desc, __ CEntryStubConstant(1), ChangeInt32ToSmi(code), in LowerStringFromCharCode()
1950 __ ExternalConstant(ExternalReference(id, isolate())), in LowerStringFromCharCode()
1951 __ Int32Constant(1), __ NoContextConstant()); in LowerStringFromCharCode()
1952 __ Goto(&done, vtrue1); in LowerStringFromCharCode()
1954 __ Bind(&done); in LowerStringFromCharCode()
1962 auto if_not_single_code = __ MakeDeferredLabel<1>(); in LowerStringFromCodePoint()
1963 auto if_not_one_byte = __ MakeDeferredLabel<1>(); in LowerStringFromCodePoint()
1964 auto cache_miss = __ MakeDeferredLabel<1>(); in LowerStringFromCodePoint()
1965 auto done = __ MakeLabel<4>(MachineRepresentation::kTagged); in LowerStringFromCodePoint()
1968 Node* check0 = __ Uint32LessThanOrEqual(code, __ Uint32Constant(0xFFFF)); in LowerStringFromCodePoint()
1969 __ GotoUnless(check0, &if_not_single_code); in LowerStringFromCodePoint()
1973 Node* check1 = __ Uint32LessThanOrEqual( in LowerStringFromCodePoint()
1974 code, __ Uint32Constant(String::kMaxOneByteCharCode)); in LowerStringFromCodePoint()
1975 __ GotoUnless(check1, &if_not_one_byte); in LowerStringFromCodePoint()
1978 Node* cache = __ HeapConstant(factory()->single_character_string_cache()); in LowerStringFromCodePoint()
1981 Node* index = machine()->Is32() ? code : __ ChangeUint32ToUint64(code); in LowerStringFromCodePoint()
1986 __ LoadElement(AccessBuilder::ForFixedArrayElement(), cache, index); in LowerStringFromCodePoint()
1988 Node* check2 = __ WordEqual(entry, __ UndefinedConstant()); in LowerStringFromCodePoint()
1989 __ GotoIf(check2, &cache_miss); in LowerStringFromCodePoint()
1992 __ Goto(&done, entry); in LowerStringFromCodePoint()
1994 __ Bind(&cache_miss); in LowerStringFromCodePoint()
1997 Node* vtrue2 = __ Allocate( in LowerStringFromCodePoint()
1998 NOT_TENURED, __ Int32Constant(SeqOneByteString::SizeFor(1))); in LowerStringFromCodePoint()
1999 __ StoreField(AccessBuilder::ForMap(), vtrue2, in LowerStringFromCodePoint()
2000 __ HeapConstant(factory()->one_byte_string_map())); in LowerStringFromCodePoint()
2001 __ StoreField(AccessBuilder::ForNameHashField(), vtrue2, in LowerStringFromCodePoint()
2002 __ IntPtrConstant(Name::kEmptyHashField)); in LowerStringFromCodePoint()
2003 __ StoreField(AccessBuilder::ForStringLength(), vtrue2, in LowerStringFromCodePoint()
2004 __ SmiConstant(1)); in LowerStringFromCodePoint()
2005 __ Store( in LowerStringFromCodePoint()
2008 __ IntPtrConstant(SeqOneByteString::kHeaderSize - kHeapObjectTag), in LowerStringFromCodePoint()
2012 __ StoreElement(AccessBuilder::ForFixedArrayElement(), cache, index, in LowerStringFromCodePoint()
2014 __ Goto(&done, vtrue2); in LowerStringFromCodePoint()
2018 __ Bind(&if_not_one_byte); in LowerStringFromCodePoint()
2021 Node* vfalse1 = __ Allocate( in LowerStringFromCodePoint()
2022 NOT_TENURED, __ Int32Constant(SeqTwoByteString::SizeFor(1))); in LowerStringFromCodePoint()
2023 __ StoreField(AccessBuilder::ForMap(), vfalse1, in LowerStringFromCodePoint()
2024 __ HeapConstant(factory()->string_map())); in LowerStringFromCodePoint()
2025 __ StoreField(AccessBuilder::ForNameHashField(), vfalse1, in LowerStringFromCodePoint()
2026 __ IntPtrConstant(Name::kEmptyHashField)); in LowerStringFromCodePoint()
2027 __ StoreField(AccessBuilder::ForStringLength(), vfalse1, in LowerStringFromCodePoint()
2028 __ SmiConstant(1)); in LowerStringFromCodePoint()
2029 __ Store( in LowerStringFromCodePoint()
2032 __ IntPtrConstant(SeqTwoByteString::kHeaderSize - kHeapObjectTag), in LowerStringFromCodePoint()
2034 __ Goto(&done, vfalse1); in LowerStringFromCodePoint()
2038 __ Bind(&if_not_single_code); in LowerStringFromCodePoint()
2047 Node* lead_offset = __ Int32Constant(0xD800 - (0x10000 >> 10)); in LowerStringFromCodePoint()
2051 __ Int32Add(__ Word32Shr(code, __ Int32Constant(10)), lead_offset); in LowerStringFromCodePoint()
2054 Node* trail = __ Int32Add(__ Word32And(code, __ Int32Constant(0x3FF)), in LowerStringFromCodePoint()
2055 __ Int32Constant(0xDC00)); in LowerStringFromCodePoint()
2058 code = __ Word32Or(__ Word32Shl(trail, __ Int32Constant(16)), lead); in LowerStringFromCodePoint()
2064 Node* vfalse0 = __ Allocate(NOT_TENURED, in LowerStringFromCodePoint()
2065 __ Int32Constant(SeqTwoByteString::SizeFor(2))); in LowerStringFromCodePoint()
2066 __ StoreField(AccessBuilder::ForMap(), vfalse0, in LowerStringFromCodePoint()
2067 __ HeapConstant(factory()->string_map())); in LowerStringFromCodePoint()
2068 __ StoreField(AccessBuilder::ForNameHashField(), vfalse0, in LowerStringFromCodePoint()
2069 __ IntPtrConstant(Name::kEmptyHashField)); in LowerStringFromCodePoint()
2070 __ StoreField(AccessBuilder::ForStringLength(), vfalse0, __ SmiConstant(2)); in LowerStringFromCodePoint()
2071 __ Store( in LowerStringFromCodePoint()
2074 __ IntPtrConstant(SeqTwoByteString::kHeaderSize - kHeapObjectTag), in LowerStringFromCodePoint()
2076 __ Goto(&done, vfalse0); in LowerStringFromCodePoint()
2079 __ Bind(&done); in LowerStringFromCodePoint()
2093 return __ Call(desc, __ HeapConstant(callable.code()), subject, search_string, in LowerStringIndexOf()
2094 position, __ NoContextConstant()); in LowerStringIndexOf()
2106 return __ Call(desc, __ HeapConstant(callable.code()), lhs, rhs, in LowerStringComparison()
2107 __ NoContextConstant()); in LowerStringComparison()
2129 Node* check = __ Word32Equal(__ Float64ExtractHighWord32(value), in LowerCheckFloat64Hole()
2130 __ Int32Constant(kHoleNanUpper32)); in LowerCheckFloat64Hole()
2131 __ DeoptimizeIf(DeoptimizeReason::kHole, check, frame_state); in LowerCheckFloat64Hole()
2138 Node* check = __ WordEqual(value, __ TheHoleConstant()); in LowerCheckTaggedHole()
2139 __ DeoptimizeIf(DeoptimizeReason::kHole, check, frame_state); in LowerCheckTaggedHole()
2146 auto if_is_hole = __ MakeDeferredLabel<1>(); in LowerConvertTaggedHoleToUndefined()
2147 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerConvertTaggedHoleToUndefined()
2149 Node* check = __ WordEqual(value, __ TheHoleConstant()); in LowerConvertTaggedHoleToUndefined()
2150 __ GotoIf(check, &if_is_hole); in LowerConvertTaggedHoleToUndefined()
2151 __ Goto(&done, value); in LowerConvertTaggedHoleToUndefined()
2153 __ Bind(&if_is_hole); in LowerConvertTaggedHoleToUndefined()
2154 __ Goto(&done, __ UndefinedConstant()); in LowerConvertTaggedHoleToUndefined()
2156 __ Bind(&done); in LowerConvertTaggedHoleToUndefined()
2161 Node* result = __ Allocate(NOT_TENURED, __ Int32Constant(HeapNumber::kSize)); in AllocateHeapNumberWithValue()
2162 __ StoreField(AccessBuilder::ForMap(), result, __ HeapNumberMapConstant()); in AllocateHeapNumberWithValue()
2163 __ StoreField(AccessBuilder::ForHeapNumberValue(), result, value); in AllocateHeapNumberWithValue()
2169 value = __ ChangeInt32ToInt64(value); in ChangeInt32ToSmi()
2171 return __ WordShl(value, SmiShiftBitsConstant()); in ChangeInt32ToSmi()
2176 value = __ ChangeUint32ToUint64(value); in ChangeUint32ToSmi()
2178 return __ WordShl(value, SmiShiftBitsConstant()); in ChangeUint32ToSmi()
2182 value = __ WordSar(value, SmiShiftBitsConstant()); in ChangeSmiToInt32()
2184 value = __ TruncateInt64ToInt32(value); in ChangeSmiToInt32()
2190 return __ WordEqual(__ WordAnd(value, __ IntPtrConstant(kSmiTagMask)), in ObjectIsSmi()
2191 __ IntPtrConstant(kSmiTag)); in ObjectIsSmi()
2195 return __ Int32Constant(Smi::kMaxValue); in SmiMaxValueConstant()
2199 return __ IntPtrConstant(kSmiShiftSize + kSmiTagSize); in SmiShiftBitsConstant()
2204 return __ ToNumber(value); in LowerPlainPrimitiveToNumber()
2210 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerPlainPrimitiveToWord32()
2211 auto if_to_number_smi = __ MakeLabel<1>(); in LowerPlainPrimitiveToWord32()
2212 auto done = __ MakeLabel<3>(MachineRepresentation::kWord32); in LowerPlainPrimitiveToWord32()
2215 __ GotoUnless(check0, &if_not_smi); in LowerPlainPrimitiveToWord32()
2216 __ Goto(&done, ChangeSmiToInt32(value)); in LowerPlainPrimitiveToWord32()
2218 __ Bind(&if_not_smi); in LowerPlainPrimitiveToWord32()
2219 Node* to_number = __ ToNumber(value); in LowerPlainPrimitiveToWord32()
2222 __ GotoIf(check1, &if_to_number_smi); in LowerPlainPrimitiveToWord32()
2223 Node* number = __ LoadField(AccessBuilder::ForHeapNumberValue(), to_number); in LowerPlainPrimitiveToWord32()
2224 __ Goto(&done, __ TruncateFloat64ToWord32(number)); in LowerPlainPrimitiveToWord32()
2226 __ Bind(&if_to_number_smi); in LowerPlainPrimitiveToWord32()
2227 __ Goto(&done, ChangeSmiToInt32(to_number)); in LowerPlainPrimitiveToWord32()
2229 __ Bind(&done); in LowerPlainPrimitiveToWord32()
2236 auto if_not_smi = __ MakeDeferredLabel<1>(); in LowerPlainPrimitiveToFloat64()
2237 auto if_to_number_smi = __ MakeLabel<1>(); in LowerPlainPrimitiveToFloat64()
2238 auto done = __ MakeLabel<3>(MachineRepresentation::kFloat64); in LowerPlainPrimitiveToFloat64()
2241 __ GotoUnless(check0, &if_not_smi); in LowerPlainPrimitiveToFloat64()
2243 __ Goto(&done, __ ChangeInt32ToFloat64(from_smi)); in LowerPlainPrimitiveToFloat64()
2245 __ Bind(&if_not_smi); in LowerPlainPrimitiveToFloat64()
2246 Node* to_number = __ ToNumber(value); in LowerPlainPrimitiveToFloat64()
2248 __ GotoIf(check1, &if_to_number_smi); in LowerPlainPrimitiveToFloat64()
2250 Node* number = __ LoadField(AccessBuilder::ForHeapNumberValue(), to_number); in LowerPlainPrimitiveToFloat64()
2251 __ Goto(&done, number); in LowerPlainPrimitiveToFloat64()
2253 __ Bind(&if_to_number_smi); in LowerPlainPrimitiveToFloat64()
2255 number_from_smi = __ ChangeInt32ToFloat64(number_from_smi); in LowerPlainPrimitiveToFloat64()
2256 __ Goto(&done, number_from_smi); in LowerPlainPrimitiveToFloat64()
2258 __ Bind(&done); in LowerPlainPrimitiveToFloat64()
2266 auto if_not_fixed_array = __ MakeDeferredLabel<1>(); in LowerEnsureWritableFastElements()
2267 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerEnsureWritableFastElements()
2270 Node* elements_map = __ LoadField(AccessBuilder::ForMap(), elements); in LowerEnsureWritableFastElements()
2273 Node* check = __ WordEqual(elements_map, __ FixedArrayMapConstant()); in LowerEnsureWritableFastElements()
2274 __ GotoUnless(check, &if_not_fixed_array); in LowerEnsureWritableFastElements()
2276 __ Goto(&done, elements); in LowerEnsureWritableFastElements()
2278 __ Bind(&if_not_fixed_array); in LowerEnsureWritableFastElements()
2285 Node* result = __ Call(desc, __ HeapConstant(callable.code()), object, in LowerEnsureWritableFastElements()
2286 __ NoContextConstant()); in LowerEnsureWritableFastElements()
2287 __ Goto(&done, result); in LowerEnsureWritableFastElements()
2289 __ Bind(&done); in LowerEnsureWritableFastElements()
2301 auto done = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerMaybeGrowFastElements()
2302 auto done_grow = __ MakeLabel<2>(MachineRepresentation::kTagged); in LowerMaybeGrowFastElements()
2303 auto if_grow = __ MakeDeferredLabel<1>(); in LowerMaybeGrowFastElements()
2304 auto if_not_grow = __ MakeLabel<1>(); in LowerMaybeGrowFastElements()
2307 ? __ Uint32LessThanOrEqual(length, index) in LowerMaybeGrowFastElements()
2308 : __ Word32Equal(length, index); in LowerMaybeGrowFastElements()
2309 __ GotoUnless(check0, &if_not_grow); in LowerMaybeGrowFastElements()
2313 __ LoadField(AccessBuilder::ForFixedArrayLength(), elements); in LowerMaybeGrowFastElements()
2317 Node* check1 = __ Uint32LessThan(index, elements_length); in LowerMaybeGrowFastElements()
2318 __ GotoUnless(check1, &if_grow); in LowerMaybeGrowFastElements()
2319 __ Goto(&done_grow, elements); in LowerMaybeGrowFastElements()
2321 __ Bind(&if_grow); in LowerMaybeGrowFastElements()
2332 Node* new_object = __ Call(desc, __ HeapConstant(callable.code()), object, in LowerMaybeGrowFastElements()
2333 ChangeInt32ToSmi(index), __ NoContextConstant()); in LowerMaybeGrowFastElements()
2338 __ DeoptimizeIf(DeoptimizeReason::kSmi, ObjectIsSmi(new_object), in LowerMaybeGrowFastElements()
2340 __ Goto(&done_grow, new_object); in LowerMaybeGrowFastElements()
2342 __ Bind(&done_grow); in LowerMaybeGrowFastElements()
2348 ChangeInt32ToSmi(__ Int32Add(index, __ Int32Constant(1))); in LowerMaybeGrowFastElements()
2351 __ StoreField(AccessBuilder::ForJSArrayLength(FAST_ELEMENTS), object, in LowerMaybeGrowFastElements()
2354 __ Goto(&done, done_grow.PhiAt(0)); in LowerMaybeGrowFastElements()
2357 __ Bind(&if_not_grow); in LowerMaybeGrowFastElements()
2363 Node* check1 = __ Uint32LessThan(index, length); in LowerMaybeGrowFastElements()
2364 __ DeoptimizeUnless(DeoptimizeReason::kOutOfBounds, check1, frame_state); in LowerMaybeGrowFastElements()
2366 __ Goto(&done, elements); in LowerMaybeGrowFastElements()
2368 __ Bind(&done); in LowerMaybeGrowFastElements()
2376 auto if_map_same = __ MakeDeferredLabel<1>(); in LowerTransitionElementsKind()
2377 auto done = __ MakeLabel<2>(); in LowerTransitionElementsKind()
2379 Node* source_map = __ HeapConstant(transition.source()); in LowerTransitionElementsKind()
2380 Node* target_map = __ HeapConstant(transition.target()); in LowerTransitionElementsKind()
2383 Node* object_map = __ LoadField(AccessBuilder::ForMap(), object); in LowerTransitionElementsKind()
2386 Node* check = __ WordEqual(object_map, source_map); in LowerTransitionElementsKind()
2387 __ GotoIf(check, &if_map_same); in LowerTransitionElementsKind()
2388 __ Goto(&done); in LowerTransitionElementsKind()
2390 __ Bind(&if_map_same); in LowerTransitionElementsKind()
2394 __ StoreField(AccessBuilder::ForMap(), object, target_map); in LowerTransitionElementsKind()
2402 __ Call(desc, __ CEntryStubConstant(1), object, target_map, in LowerTransitionElementsKind()
2403 __ ExternalConstant(ExternalReference(id, isolate())), in LowerTransitionElementsKind()
2404 __ Int32Constant(2), __ NoContextConstant()); in LowerTransitionElementsKind()
2408 __ Goto(&done); in LowerTransitionElementsKind()
2410 __ Bind(&done); in LowerTransitionElementsKind()
2422 __ Retain(buffer); in LowerLoadTypedElement()
2427 Node* storage = NumberMatcher(base).Is(0) ? external : __ UnsafePointerAdd( in LowerLoadTypedElement()
2431 return __ LoadElement(AccessBuilder::ForTypedArrayElement(array_type, true), in LowerLoadTypedElement()
2445 __ Retain(buffer); in LowerStoreTypedElement()
2450 Node* storage = NumberMatcher(base).Is(0) ? external : __ UnsafePointerAdd( in LowerStoreTypedElement()
2454 __ StoreElement(AccessBuilder::ForTypedArrayElement(array_type, true), in LowerStoreTypedElement()
2489 auto if_not_positive = __ MakeDeferredLabel<1>(); in LowerFloat64RoundUp()
2490 auto if_greater_than_two_52 = __ MakeDeferredLabel<1>(); in LowerFloat64RoundUp()
2491 auto if_less_than_minus_two_52 = __ MakeDeferredLabel<1>(); in LowerFloat64RoundUp()
2492 auto if_zero = __ MakeDeferredLabel<1>(); in LowerFloat64RoundUp()
2493 auto done_temp3 = __ MakeLabel<2>(MachineRepresentation::kFloat64); in LowerFloat64RoundUp()
2494 auto done = __ MakeLabel<6>(MachineRepresentation::kFloat64); in LowerFloat64RoundUp()
2496 Node* const zero = __ Float64Constant(0.0); in LowerFloat64RoundUp()
2497 Node* const two_52 = __ Float64Constant(4503599627370496.0E0); in LowerFloat64RoundUp()
2498 Node* const one = __ Float64Constant(1.0); in LowerFloat64RoundUp()
2500 Node* check0 = __ Float64LessThan(zero, input); in LowerFloat64RoundUp()
2501 __ GotoUnless(check0, &if_not_positive); in LowerFloat64RoundUp()
2503 Node* check1 = __ Float64LessThanOrEqual(two_52, input); in LowerFloat64RoundUp()
2504 __ GotoIf(check1, &if_greater_than_two_52); in LowerFloat64RoundUp()
2506 Node* temp1 = __ Float64Sub(__ Float64Add(two_52, input), two_52); in LowerFloat64RoundUp()
2507 __ GotoUnless(__ Float64LessThan(temp1, input), &done, temp1); in LowerFloat64RoundUp()
2508 __ Goto(&done, __ Float64Add(temp1, one)); in LowerFloat64RoundUp()
2511 __ Bind(&if_greater_than_two_52); in LowerFloat64RoundUp()
2512 __ Goto(&done, input); in LowerFloat64RoundUp()
2515 __ Bind(&if_not_positive); in LowerFloat64RoundUp()
2517 Node* check1 = __ Float64Equal(input, zero); in LowerFloat64RoundUp()
2518 __ GotoIf(check1, &if_zero); in LowerFloat64RoundUp()
2520 Node* const minus_two_52 = __ Float64Constant(-4503599627370496.0E0); in LowerFloat64RoundUp()
2521 Node* check2 = __ Float64LessThanOrEqual(input, minus_two_52); in LowerFloat64RoundUp()
2522 __ GotoIf(check2, &if_less_than_minus_two_52); in LowerFloat64RoundUp()
2525 Node* const minus_zero = __ Float64Constant(-0.0); in LowerFloat64RoundUp()
2526 Node* temp1 = __ Float64Sub(minus_zero, input); in LowerFloat64RoundUp()
2527 Node* temp2 = __ Float64Sub(__ Float64Add(two_52, temp1), two_52); in LowerFloat64RoundUp()
2528 Node* check3 = __ Float64LessThan(temp1, temp2); in LowerFloat64RoundUp()
2529 __ GotoUnless(check3, &done_temp3, temp2); in LowerFloat64RoundUp()
2530 __ Goto(&done_temp3, __ Float64Sub(temp2, one)); in LowerFloat64RoundUp()
2532 __ Bind(&done_temp3); in LowerFloat64RoundUp()
2534 __ Goto(&done, __ Float64Sub(minus_zero, temp3)); in LowerFloat64RoundUp()
2536 __ Bind(&if_less_than_minus_two_52); in LowerFloat64RoundUp()
2537 __ Goto(&done, input); in LowerFloat64RoundUp()
2539 __ Bind(&if_zero); in LowerFloat64RoundUp()
2540 __ Goto(&done, input); in LowerFloat64RoundUp()
2542 __ Bind(&done); in LowerFloat64RoundUp()
2547 Node* round_down = __ Float64RoundDown(value); in BuildFloat64RoundDown()
2579 auto if_not_positive = __ MakeDeferredLabel<1>(); in BuildFloat64RoundDown()
2580 auto if_greater_than_two_52 = __ MakeDeferredLabel<1>(); in BuildFloat64RoundDown()
2581 auto if_less_than_minus_two_52 = __ MakeDeferredLabel<1>(); in BuildFloat64RoundDown()
2582 auto if_temp2_lt_temp1 = __ MakeLabel<1>(); in BuildFloat64RoundDown()
2583 auto if_zero = __ MakeDeferredLabel<1>(); in BuildFloat64RoundDown()
2584 auto done = __ MakeLabel<7>(MachineRepresentation::kFloat64); in BuildFloat64RoundDown()
2586 Node* const zero = __ Float64Constant(0.0); in BuildFloat64RoundDown()
2587 Node* const two_52 = __ Float64Constant(4503599627370496.0E0); in BuildFloat64RoundDown()
2589 Node* check0 = __ Float64LessThan(zero, input); in BuildFloat64RoundDown()
2590 __ GotoUnless(check0, &if_not_positive); in BuildFloat64RoundDown()
2592 Node* check1 = __ Float64LessThanOrEqual(two_52, input); in BuildFloat64RoundDown()
2593 __ GotoIf(check1, &if_greater_than_two_52); in BuildFloat64RoundDown()
2595 Node* const one = __ Float64Constant(1.0); in BuildFloat64RoundDown()
2596 Node* temp1 = __ Float64Sub(__ Float64Add(two_52, input), two_52); in BuildFloat64RoundDown()
2597 __ GotoUnless(__ Float64LessThan(input, temp1), &done, temp1); in BuildFloat64RoundDown()
2598 __ Goto(&done, __ Float64Sub(temp1, one)); in BuildFloat64RoundDown()
2601 __ Bind(&if_greater_than_two_52); in BuildFloat64RoundDown()
2602 __ Goto(&done, input); in BuildFloat64RoundDown()
2605 __ Bind(&if_not_positive); in BuildFloat64RoundDown()
2607 Node* check1 = __ Float64Equal(input, zero); in BuildFloat64RoundDown()
2608 __ GotoIf(check1, &if_zero); in BuildFloat64RoundDown()
2610 Node* const minus_two_52 = __ Float64Constant(-4503599627370496.0E0); in BuildFloat64RoundDown()
2611 Node* check2 = __ Float64LessThanOrEqual(input, minus_two_52); in BuildFloat64RoundDown()
2612 __ GotoIf(check2, &if_less_than_minus_two_52); in BuildFloat64RoundDown()
2615 Node* const minus_zero = __ Float64Constant(-0.0); in BuildFloat64RoundDown()
2616 Node* temp1 = __ Float64Sub(minus_zero, input); in BuildFloat64RoundDown()
2617 Node* temp2 = __ Float64Sub(__ Float64Add(two_52, temp1), two_52); in BuildFloat64RoundDown()
2618 Node* check3 = __ Float64LessThan(temp2, temp1); in BuildFloat64RoundDown()
2619 __ GotoIf(check3, &if_temp2_lt_temp1); in BuildFloat64RoundDown()
2620 __ Goto(&done, __ Float64Sub(minus_zero, temp2)); in BuildFloat64RoundDown()
2622 __ Bind(&if_temp2_lt_temp1); in BuildFloat64RoundDown()
2623 __ Goto(&done, __ Float64Sub(__ Float64Constant(-1.0), temp2)); in BuildFloat64RoundDown()
2625 __ Bind(&if_less_than_minus_two_52); in BuildFloat64RoundDown()
2626 __ Goto(&done, input); in BuildFloat64RoundDown()
2628 __ Bind(&if_zero); in BuildFloat64RoundDown()
2629 __ Goto(&done, input); in BuildFloat64RoundDown()
2631 __ Bind(&done); in BuildFloat64RoundDown()
2668 auto if_is_half = __ MakeLabel<1>(); in LowerFloat64RoundTiesEven()
2669 auto done = __ MakeLabel<4>(MachineRepresentation::kFloat64); in LowerFloat64RoundTiesEven()
2672 Node* temp1 = __ Float64Sub(input, value); in LowerFloat64RoundTiesEven()
2674 Node* const half = __ Float64Constant(0.5); in LowerFloat64RoundTiesEven()
2675 Node* check0 = __ Float64LessThan(temp1, half); in LowerFloat64RoundTiesEven()
2676 __ GotoIf(check0, &done, value); in LowerFloat64RoundTiesEven()
2678 Node* const one = __ Float64Constant(1.0); in LowerFloat64RoundTiesEven()
2679 Node* check1 = __ Float64LessThan(half, temp1); in LowerFloat64RoundTiesEven()
2680 __ GotoUnless(check1, &if_is_half); in LowerFloat64RoundTiesEven()
2681 __ Goto(&done, __ Float64Add(value, one)); in LowerFloat64RoundTiesEven()
2683 __ Bind(&if_is_half); in LowerFloat64RoundTiesEven()
2684 Node* temp2 = __ Float64Mod(value, __ Float64Constant(2.0)); in LowerFloat64RoundTiesEven()
2685 Node* check2 = __ Float64Equal(temp2, __ Float64Constant(0.0)); in LowerFloat64RoundTiesEven()
2686 __ GotoIf(check2, &done, value); in LowerFloat64RoundTiesEven()
2687 __ Goto(&done, __ Float64Add(value, one)); in LowerFloat64RoundTiesEven()
2689 __ Bind(&done); in LowerFloat64RoundTiesEven()
2727 auto if_not_positive = __ MakeDeferredLabel<1>(); in LowerFloat64RoundTruncate()
2728 auto if_greater_than_two_52 = __ MakeDeferredLabel<1>(); in LowerFloat64RoundTruncate()
2729 auto if_less_than_minus_two_52 = __ MakeDeferredLabel<1>(); in LowerFloat64RoundTruncate()
2730 auto if_zero = __ MakeDeferredLabel<1>(); in LowerFloat64RoundTruncate()
2731 auto done_temp3 = __ MakeLabel<2>(MachineRepresentation::kFloat64); in LowerFloat64RoundTruncate()
2732 auto done = __ MakeLabel<6>(MachineRepresentation::kFloat64); in LowerFloat64RoundTruncate()
2734 Node* const zero = __ Float64Constant(0.0); in LowerFloat64RoundTruncate()
2735 Node* const two_52 = __ Float64Constant(4503599627370496.0E0); in LowerFloat64RoundTruncate()
2736 Node* const one = __ Float64Constant(1.0); in LowerFloat64RoundTruncate()
2738 Node* check0 = __ Float64LessThan(zero, input); in LowerFloat64RoundTruncate()
2739 __ GotoUnless(check0, &if_not_positive); in LowerFloat64RoundTruncate()
2741 Node* check1 = __ Float64LessThanOrEqual(two_52, input); in LowerFloat64RoundTruncate()
2742 __ GotoIf(check1, &if_greater_than_two_52); in LowerFloat64RoundTruncate()
2744 Node* temp1 = __ Float64Sub(__ Float64Add(two_52, input), two_52); in LowerFloat64RoundTruncate()
2745 __ GotoUnless(__ Float64LessThan(input, temp1), &done, temp1); in LowerFloat64RoundTruncate()
2746 __ Goto(&done, __ Float64Sub(temp1, one)); in LowerFloat64RoundTruncate()
2749 __ Bind(&if_greater_than_two_52); in LowerFloat64RoundTruncate()
2750 __ Goto(&done, input); in LowerFloat64RoundTruncate()
2753 __ Bind(&if_not_positive); in LowerFloat64RoundTruncate()
2755 Node* check1 = __ Float64Equal(input, zero); in LowerFloat64RoundTruncate()
2756 __ GotoIf(check1, &if_zero); in LowerFloat64RoundTruncate()
2758 Node* const minus_two_52 = __ Float64Constant(-4503599627370496.0E0); in LowerFloat64RoundTruncate()
2759 Node* check2 = __ Float64LessThanOrEqual(input, minus_two_52); in LowerFloat64RoundTruncate()
2760 __ GotoIf(check2, &if_less_than_minus_two_52); in LowerFloat64RoundTruncate()
2763 Node* const minus_zero = __ Float64Constant(-0.0); in LowerFloat64RoundTruncate()
2764 Node* temp1 = __ Float64Sub(minus_zero, input); in LowerFloat64RoundTruncate()
2765 Node* temp2 = __ Float64Sub(__ Float64Add(two_52, temp1), two_52); in LowerFloat64RoundTruncate()
2766 Node* check3 = __ Float64LessThan(temp1, temp2); in LowerFloat64RoundTruncate()
2767 __ GotoUnless(check3, &done_temp3, temp2); in LowerFloat64RoundTruncate()
2768 __ Goto(&done_temp3, __ Float64Sub(temp2, one)); in LowerFloat64RoundTruncate()
2770 __ Bind(&done_temp3); in LowerFloat64RoundTruncate()
2772 __ Goto(&done, __ Float64Sub(minus_zero, temp3)); in LowerFloat64RoundTruncate()
2774 __ Bind(&if_less_than_minus_two_52); in LowerFloat64RoundTruncate()
2775 __ Goto(&done, input); in LowerFloat64RoundTruncate()
2777 __ Bind(&if_zero); in LowerFloat64RoundTruncate()
2778 __ Goto(&done, input); in LowerFloat64RoundTruncate()
2780 __ Bind(&done); in LowerFloat64RoundTruncate()
2784 #undef __