5 #include "src/builtins/builtins-utils-gen.h" 6 #include "src/builtins/builtins.h" 7 #include "src/code-stub-assembler.h" 13 TF_BUILTIN(GlobalIsFinite, CodeStubAssembler) {
14 Node* context = Parameter(Descriptor::kContext);
16 Label return_true(
this), return_false(
this);
19 VARIABLE(var_num, MachineRepresentation::kTagged);
20 Label loop(
this, &var_num);
21 var_num.Bind(Parameter(Descriptor::kNumber));
25 Node* num = var_num.value();
28 GotoIf(TaggedIsSmi(num), &return_true);
31 Label if_numisheapnumber(
this),
32 if_numisnotheapnumber(
this, Label::kDeferred);
33 Branch(IsHeapNumber(num), &if_numisheapnumber, &if_numisnotheapnumber);
35 BIND(&if_numisheapnumber);
38 Node* num_value = LoadHeapNumberValue(num);
39 BranchIfFloat64IsNaN(Float64Sub(num_value, num_value), &return_false,
43 BIND(&if_numisnotheapnumber);
46 var_num.Bind(CallBuiltin(Builtins::kNonNumberToNumber, context, num));
52 Return(TrueConstant());
55 Return(FalseConstant());
59 TF_BUILTIN(GlobalIsNaN, CodeStubAssembler) {
60 Node* context = Parameter(Descriptor::kContext);
62 Label return_true(
this), return_false(
this);
65 VARIABLE(var_num, MachineRepresentation::kTagged);
66 Label loop(
this, &var_num);
67 var_num.Bind(Parameter(Descriptor::kNumber));
71 Node* num = var_num.value();
74 GotoIf(TaggedIsSmi(num), &return_false);
77 Label if_numisheapnumber(
this),
78 if_numisnotheapnumber(
this, Label::kDeferred);
79 Branch(IsHeapNumber(num), &if_numisheapnumber, &if_numisnotheapnumber);
81 BIND(&if_numisheapnumber);
84 Node* num_value = LoadHeapNumberValue(num);
85 BranchIfFloat64IsNaN(num_value, &return_true, &return_false);
88 BIND(&if_numisnotheapnumber);
91 var_num.Bind(CallBuiltin(Builtins::kNonNumberToNumber, context, num));
97 Return(TrueConstant());
100 Return(FalseConstant());