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

Side by Side Diff: src/x64/lithium-x64.cc

Issue 6529024: X64 Crankshaft: Implement InstanceOf and InstanceOfKnownGlobal (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 10 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/x64/lithium-x64.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 HIsObject* compare = HIsObject::cast(v); 1074 HIsObject* compare = HIsObject::cast(v);
1075 ASSERT(compare->value()->representation().IsTagged()); 1075 ASSERT(compare->value()->representation().IsTagged());
1076 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value())); 1076 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()));
1077 } else if (v->IsCompareJSObjectEq()) { 1077 } else if (v->IsCompareJSObjectEq()) {
1078 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v); 1078 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v);
1079 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()), 1079 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()),
1080 UseRegisterAtStart(compare->right())); 1080 UseRegisterAtStart(compare->right()));
1081 } else if (v->IsInstanceOf()) { 1081 } else if (v->IsInstanceOf()) {
1082 HInstanceOf* instance_of = HInstanceOf::cast(v); 1082 HInstanceOf* instance_of = HInstanceOf::cast(v);
1083 LInstanceOfAndBranch* result = 1083 LInstanceOfAndBranch* result =
1084 new LInstanceOfAndBranch( 1084 new LInstanceOfAndBranch(UseFixed(instance_of->left(), rax),
1085 UseFixed(instance_of->left(), InstanceofStub::left()), 1085 UseFixed(instance_of->right(), rdx));
1086 UseFixed(instance_of->right(), InstanceofStub::right()));
1087 return MarkAsCall(result, instr); 1086 return MarkAsCall(result, instr);
1088 } else if (v->IsTypeofIs()) { 1087 } else if (v->IsTypeofIs()) {
1089 HTypeofIs* typeof_is = HTypeofIs::cast(v); 1088 HTypeofIs* typeof_is = HTypeofIs::cast(v);
1090 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); 1089 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()));
1091 } else if (v->IsIsConstructCall()) { 1090 } else if (v->IsIsConstructCall()) {
1092 return new LIsConstructCallAndBranch(TempRegister()); 1091 return new LIsConstructCallAndBranch(TempRegister());
1093 } else { 1092 } else {
1094 if (v->IsConstant()) { 1093 if (v->IsConstant()) {
1095 if (HConstant::cast(v)->handle()->IsTrue()) { 1094 if (HConstant::cast(v)->handle()->IsTrue()) {
1096 return new LGoto(instr->FirstSuccessor()->block_id()); 1095 return new LGoto(instr->FirstSuccessor()->block_id());
(...skipping 20 matching lines...) Expand all
1117 return DefineAsRegister(new LArgumentsLength(Use(length->value()))); 1116 return DefineAsRegister(new LArgumentsLength(Use(length->value())));
1118 } 1117 }
1119 1118
1120 1119
1121 LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) { 1120 LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) {
1122 return DefineAsRegister(new LArgumentsElements); 1121 return DefineAsRegister(new LArgumentsElements);
1123 } 1122 }
1124 1123
1125 1124
1126 LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { 1125 LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) {
1127 Abort("Unimplemented: %s", "DoInstanceOf"); 1126 LOperand* left = UseFixed(instr->left(), rax);
1128 return NULL; 1127 LOperand* right = UseFixed(instr->right(), rdx);
1128 LInstanceOf* result = new LInstanceOf(left, right);
1129 return MarkAsCall(DefineFixed(result, rax), instr);
1129 } 1130 }
1130 1131
1131 1132
1132 LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( 1133 LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
1133 HInstanceOfKnownGlobal* instr) { 1134 HInstanceOfKnownGlobal* instr) {
1134 Abort("Unimplemented: %s", "DoInstanceOfKnownGlobal"); 1135 LInstanceOfKnownGlobal* result =
1135 return NULL; 1136 new LInstanceOfKnownGlobal(UseRegisterAtStart(instr->value()));
1137 MarkAsSaveDoubles(result);
1138 return AssignEnvironment(AssignPointerMap(DefineFixed(result, rax)));
1136 } 1139 }
1137 1140
1138 1141
1139 LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) { 1142 LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) {
1140 Abort("Unimplemented: %s", "DoApplyArguments"); 1143 Abort("Unimplemented: %s", "DoApplyArguments");
1141 return NULL; 1144 return NULL;
1142 } 1145 }
1143 1146
1144 1147
1145 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) { 1148 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
1909 1912
1910 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { 1913 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) {
1911 HEnvironment* outer = current_block_->last_environment()->outer(); 1914 HEnvironment* outer = current_block_->last_environment()->outer();
1912 current_block_->UpdateEnvironment(outer); 1915 current_block_->UpdateEnvironment(outer);
1913 return NULL; 1916 return NULL;
1914 } 1917 }
1915 1918
1916 } } // namespace v8::internal 1919 } } // namespace v8::internal
1917 1920
1918 #endif // V8_TARGET_ARCH_X64 1921 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/lithium-x64.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698