OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 : graph()->GetConstantUndefined(); | 757 : graph()->GetConstantUndefined(); |
758 } | 758 } |
759 | 759 |
760 | 760 |
761 Handle<Code> CompareNilICStub::GenerateCode() { | 761 Handle<Code> CompareNilICStub::GenerateCode() { |
762 return DoGenerateCode(this); | 762 return DoGenerateCode(this); |
763 } | 763 } |
764 | 764 |
765 | 765 |
766 template <> | 766 template <> |
767 HValue* CodeStubGraphBuilder<UnaryOpStub>::BuildCodeInitializedStub() { | |
768 UnaryOpStub* stub = casted_stub(); | |
769 Handle<Type> type = stub->GetType(graph()->isolate()); | |
770 HValue* input = GetParameter(0); | |
771 | |
772 // Prevent unwanted HChange being inserted to ensure that the stub | |
773 // deopts on newly encountered types. | |
774 if (!type->Maybe(Type::Double())) { | |
775 input = AddInstruction(new(zone()) | |
776 HForceRepresentation(input, Representation::Smi())); | |
777 } | |
778 | |
779 if (!type->Is(Type::Number())) { | |
780 // If we expect to see other things than Numbers, we will create a generic | |
781 // stub, which handles all numbers and calls into the runtime for the rest. | |
782 IfBuilder if_number(this); | |
783 if_number.If<HIsNumberAndBranch>(input); | |
784 if_number.Then(); | |
785 HInstruction* res = BuildUnaryMathOp(input, type, stub->operation()); | |
786 if_number.Return(AddInstruction(res)); | |
787 if_number.Else(); | |
788 AddInstruction(new(zone()) HPushArgument(GetParameter(0))); | |
789 if_number.Return(AddInstruction(new(zone()) HCallConstantFunction( | |
790 stub->ToJSFunction(isolate()), 1))); | |
791 if_number.End(); | |
792 return graph()->GetConstantUndefined(); | |
793 } | |
794 | |
795 return AddInstruction(BuildUnaryMathOp(input, type, stub->operation())); | |
796 } | |
797 | |
798 | |
799 Handle<Code> UnaryOpStub::GenerateCode() { | |
800 return DoGenerateCode(this); | |
801 } | |
802 | |
803 | |
804 template <> | |
805 HValue* CodeStubGraphBuilder<ToBooleanStub>::BuildCodeInitializedStub() { | 767 HValue* CodeStubGraphBuilder<ToBooleanStub>::BuildCodeInitializedStub() { |
806 ToBooleanStub* stub = casted_stub(); | 768 ToBooleanStub* stub = casted_stub(); |
807 | 769 |
808 IfBuilder if_true(this); | 770 IfBuilder if_true(this); |
809 if_true.If<HBranch>(GetParameter(0), stub->GetTypes()); | 771 if_true.If<HBranch>(GetParameter(0), stub->GetTypes()); |
810 if_true.Then(); | 772 if_true.Then(); |
811 if_true.Return(graph()->GetConstant1()); | 773 if_true.Return(graph()->GetConstant1()); |
812 if_true.Else(); | 774 if_true.Else(); |
813 if_true.End(); | 775 if_true.End(); |
814 return graph()->GetConstant0(); | 776 return graph()->GetConstant0(); |
815 } | 777 } |
816 | 778 |
817 | 779 |
818 Handle<Code> ToBooleanStub::GenerateCode() { | 780 Handle<Code> ToBooleanStub::GenerateCode() { |
819 return DoGenerateCode(this); | 781 return DoGenerateCode(this); |
820 } | 782 } |
821 | 783 |
822 | 784 |
823 } } // namespace v8::internal | 785 } } // namespace v8::internal |
OLD | NEW |