Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(586)

Side by Side Diff: src/ia32/lithium-ia32.h

Issue 5990005: Optimize instanceof further... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ia32/lithium-codegen-ia32.cc ('k') | src/ia32/lithium-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // LBitI 56 // LBitI
57 // LBoundsCheck 57 // LBoundsCheck
58 // LCmpID 58 // LCmpID
59 // LCmpIDAndBranch 59 // LCmpIDAndBranch
60 // LCmpJSObjectEq 60 // LCmpJSObjectEq
61 // LCmpJSObjectEqAndBranch 61 // LCmpJSObjectEqAndBranch
62 // LCmpT 62 // LCmpT
63 // LDivI 63 // LDivI
64 // LInstanceOf 64 // LInstanceOf
65 // LInstanceOfAndBranch 65 // LInstanceOfAndBranch
66 // LInstanceOfKnownGlobal
66 // LLoadKeyedFastElement 67 // LLoadKeyedFastElement
67 // LLoadKeyedGeneric 68 // LLoadKeyedGeneric
68 // LModI 69 // LModI
69 // LMulI 70 // LMulI
70 // LPower 71 // LPower
71 // LShiftI 72 // LShiftI
72 // LSubI 73 // LSubI
73 // LCallConstantFunction 74 // LCallConstantFunction
74 // LCallFunction 75 // LCallFunction
75 // LCallGlobal 76 // LCallGlobal
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 V(DivI) \ 201 V(DivI) \
201 V(DoubleToI) \ 202 V(DoubleToI) \
202 V(FunctionLiteral) \ 203 V(FunctionLiteral) \
203 V(Gap) \ 204 V(Gap) \
204 V(GlobalObject) \ 205 V(GlobalObject) \
205 V(GlobalReceiver) \ 206 V(GlobalReceiver) \
206 V(Goto) \ 207 V(Goto) \
207 V(FixedArrayLength) \ 208 V(FixedArrayLength) \
208 V(InstanceOf) \ 209 V(InstanceOf) \
209 V(InstanceOfAndBranch) \ 210 V(InstanceOfAndBranch) \
211 V(InstanceOfKnownGlobal) \
210 V(Integer32ToDouble) \ 212 V(Integer32ToDouble) \
211 V(IsNull) \ 213 V(IsNull) \
212 V(IsNullAndBranch) \ 214 V(IsNullAndBranch) \
213 V(IsObject) \ 215 V(IsObject) \
214 V(IsObjectAndBranch) \ 216 V(IsObjectAndBranch) \
215 V(IsSmi) \ 217 V(IsSmi) \
216 V(IsSmiAndBranch) \ 218 V(IsSmiAndBranch) \
217 V(JSArrayLength) \ 219 V(JSArrayLength) \
218 V(HasInstanceType) \ 220 V(HasInstanceType) \
219 V(HasInstanceTypeAndBranch) \ 221 V(HasInstanceTypeAndBranch) \
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 1003
1002 int true_block_id() const { return true_block_id_; } 1004 int true_block_id() const { return true_block_id_; }
1003 int false_block_id() const { return false_block_id_; } 1005 int false_block_id() const { return false_block_id_; }
1004 1006
1005 private: 1007 private:
1006 int true_block_id_; 1008 int true_block_id_;
1007 int false_block_id_; 1009 int false_block_id_;
1008 }; 1010 };
1009 1011
1010 1012
1013 class LInstanceOfKnownGlobal: public LUnaryOperation {
1014 public:
1015 LInstanceOfKnownGlobal(LOperand* left, LOperand* temp)
1016 : LUnaryOperation(left), temp_(temp) { }
1017
1018 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
1019 "instance-of-known-global")
1020 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
1021
1022 Handle<JSFunction> function() const { return hydrogen()->function(); }
1023 LOperand* temp() const { return temp_; }
1024
1025 private:
1026 LOperand* temp_;
1027 };
1028
1029
1011 class LBoundsCheck: public LBinaryOperation { 1030 class LBoundsCheck: public LBinaryOperation {
1012 public: 1031 public:
1013 LBoundsCheck(LOperand* index, LOperand* length) 1032 LBoundsCheck(LOperand* index, LOperand* length)
1014 : LBinaryOperation(index, length) { } 1033 : LBinaryOperation(index, length) { }
1015 1034
1016 LOperand* index() const { return left(); } 1035 LOperand* index() const { return left(); }
1017 LOperand* length() const { return right(); } 1036 LOperand* length() const { return right(); }
1018 1037
1019 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 1038 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check")
1020 }; 1039 };
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 2114
2096 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY }; 2115 enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2097 2116
2098 // By default we assume that instruction sequences generated for calls 2117 // By default we assume that instruction sequences generated for calls
2099 // cannot deoptimize eagerly and we do not attach environment to this 2118 // cannot deoptimize eagerly and we do not attach environment to this
2100 // instruction. 2119 // instruction.
2101 LInstruction* MarkAsCall( 2120 LInstruction* MarkAsCall(
2102 LInstruction* instr, 2121 LInstruction* instr,
2103 HInstruction* hinstr, 2122 HInstruction* hinstr,
2104 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY); 2123 CanDeoptimize can_deoptimize = CANNOT_DEOPTIMIZE_EAGERLY);
2124 LInstruction* MarkAsSaveDoubles(LInstruction* instr);
2105 2125
2106 LInstruction* SetInstructionPendingDeoptimizationEnvironment( 2126 LInstruction* SetInstructionPendingDeoptimizationEnvironment(
2107 LInstruction* instr, int ast_id); 2127 LInstruction* instr, int ast_id);
2108 void ClearInstructionPendingDeoptimizationEnvironment(); 2128 void ClearInstructionPendingDeoptimizationEnvironment();
2109 2129
2110 LEnvironment* CreateEnvironment(HEnvironment* hydrogen_env); 2130 LEnvironment* CreateEnvironment(HEnvironment* hydrogen_env);
2111 2131
2112 // Temporary operand that may be a memory location. 2132 // Temporary operand that may be a memory location.
2113 LOperand* Temp(); 2133 LOperand* Temp();
2114 // Temporary operand that must be in a register. 2134 // Temporary operand that must be in a register.
(...skipping 26 matching lines...) Expand all
2141 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2161 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
2142 }; 2162 };
2143 2163
2144 #undef DECLARE_HYDROGEN_ACCESSOR 2164 #undef DECLARE_HYDROGEN_ACCESSOR
2145 #undef DECLARE_INSTRUCTION 2165 #undef DECLARE_INSTRUCTION
2146 #undef DECLARE_CONCRETE_INSTRUCTION 2166 #undef DECLARE_CONCRETE_INSTRUCTION
2147 2167
2148 } } // namespace v8::internal 2168 } } // namespace v8::internal
2149 2169
2150 #endif // V8_IA32_LITHIUM_IA32_H_ 2170 #endif // V8_IA32_LITHIUM_IA32_H_
OLDNEW
« no previous file with comments | « src/ia32/lithium-codegen-ia32.cc ('k') | src/ia32/lithium-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698