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

Side by Side Diff: src/ia32/virtual-frame-ia32.cc

Issue 146077: Removed static type inference and add a dynamic test for string addition. (Closed)
Patch Set: And it lints too. Created 11 years, 6 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
OLDNEW
1 // Copyright 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 // want it. 211 // want it.
212 if (!fresh.reg().is(backing_element.reg())) { 212 if (!fresh.reg().is(backing_element.reg())) {
213 __ mov(fresh.reg(), backing_element.reg()); 213 __ mov(fresh.reg(), backing_element.reg());
214 } 214 }
215 } else { 215 } else {
216 ASSERT(backing_element.is_memory()); 216 ASSERT(backing_element.is_memory());
217 __ mov(fresh.reg(), Operand(ebp, fp_relative(element.index()))); 217 __ mov(fresh.reg(), Operand(ebp, fp_relative(element.index())));
218 } 218 }
219 } 219 }
220 } 220 }
221 // No need to set the copied flag---there are no copies. 221 // No need to set the copied flag---there are no copies of
222 222 // copies or constants so the original was not copied.
Erik Corry 2009/06/24 11:46:35 Copies of copies?
Lasse Reichstein 2009/06/24 12:33:07 Bad merge. I'll restore the original.
223 // Backwards jump targets can never know the type of a value.
224 elements_[i].set_static_type(StaticType::unknown());
225 } else { 223 } else {
226 // Clear the copy flag of non-constant, non-copy elements. 224 // Clear the copy flag of non-constant, non-copy elements.
227 // They cannot be copied because copies are not allowed. 225 // They cannot be copied because copies are not allowed.
228 // The copy flag is not relied on before the end of this loop, 226 // The copy flag is not relied on before the end of this loop,
229 // including when registers are spilled. 227 // including when registers are spilled.
230 elements_[i].clear_copied(); 228 elements_[i].clear_copied();
231 } 229 }
232 } 230 }
233 } 231 }
234 232
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 FrameElement element = elements_.RemoveLast(); 990 FrameElement element = elements_.RemoveLast();
993 int index = element_count(); 991 int index = element_count();
994 ASSERT(element.is_valid()); 992 ASSERT(element.is_valid());
995 993
996 bool pop_needed = (stack_pointer_ == index); 994 bool pop_needed = (stack_pointer_ == index);
997 if (pop_needed) { 995 if (pop_needed) {
998 stack_pointer_--; 996 stack_pointer_--;
999 if (element.is_memory()) { 997 if (element.is_memory()) {
1000 Result temp = cgen()->allocator()->Allocate(); 998 Result temp = cgen()->allocator()->Allocate();
1001 ASSERT(temp.is_valid()); 999 ASSERT(temp.is_valid());
1002 temp.set_static_type(element.static_type());
1003 __ pop(temp.reg()); 1000 __ pop(temp.reg());
1004 return temp; 1001 return temp;
1005 } 1002 }
1006 1003
1007 __ add(Operand(esp), Immediate(kPointerSize)); 1004 __ add(Operand(esp), Immediate(kPointerSize));
1008 } 1005 }
1009 ASSERT(!element.is_memory()); 1006 ASSERT(!element.is_memory());
1010 1007
1011 // The top element is a register, constant, or a copy. Unuse 1008 // The top element is a register, constant, or a copy. Unuse
1012 // registers and follow copies to their backing store. 1009 // registers and follow copies to their backing store.
(...skipping 11 matching lines...) Expand all
1024 // Memory elements could only be the backing store of a copy. 1021 // Memory elements could only be the backing store of a copy.
1025 // Allocate the original to a register. 1022 // Allocate the original to a register.
1026 ASSERT(index <= stack_pointer_); 1023 ASSERT(index <= stack_pointer_);
1027 Result temp = cgen()->allocator()->Allocate(); 1024 Result temp = cgen()->allocator()->Allocate();
1028 ASSERT(temp.is_valid()); 1025 ASSERT(temp.is_valid());
1029 Use(temp.reg(), index); 1026 Use(temp.reg(), index);
1030 FrameElement new_element = 1027 FrameElement new_element =
1031 FrameElement::RegisterElement(temp.reg(), FrameElement::SYNCED); 1028 FrameElement::RegisterElement(temp.reg(), FrameElement::SYNCED);
1032 // Preserve the copy flag on the element. 1029 // Preserve the copy flag on the element.
1033 if (element.is_copied()) new_element.set_copied(); 1030 if (element.is_copied()) new_element.set_copied();
1034 new_element.set_static_type(element.static_type());
1035 elements_[index] = new_element; 1031 elements_[index] = new_element;
1036 __ mov(temp.reg(), Operand(ebp, fp_relative(index))); 1032 __ mov(temp.reg(), Operand(ebp, fp_relative(index)));
1037 return Result(temp.reg(), element.static_type()); 1033 return Result(temp.reg());
1038 } else if (element.is_register()) { 1034 } else if (element.is_register()) {
1039 return Result(element.reg(), element.static_type()); 1035 return Result(element.reg());
1040 } else { 1036 } else {
1041 ASSERT(element.is_constant()); 1037 ASSERT(element.is_constant());
1042 return Result(element.handle()); 1038 return Result(element.handle());
1043 } 1039 }
1044 } 1040 }
1045 1041
1046 1042
1047 void VirtualFrame::EmitPop(Register reg) { 1043 void VirtualFrame::EmitPop(Register reg) {
1048 ASSERT(stack_pointer_ == element_count() - 1); 1044 ASSERT(stack_pointer_ == element_count() - 1);
1049 stack_pointer_--; 1045 stack_pointer_--;
(...skipping 30 matching lines...) Expand all
1080 ASSERT(stack_pointer_ == element_count() - 1); 1076 ASSERT(stack_pointer_ == element_count() - 1);
1081 elements_.Add(FrameElement::MemoryElement()); 1077 elements_.Add(FrameElement::MemoryElement());
1082 stack_pointer_++; 1078 stack_pointer_++;
1083 __ push(immediate); 1079 __ push(immediate);
1084 } 1080 }
1085 1081
1086 1082
1087 #undef __ 1083 #undef __
1088 1084
1089 } } // namespace v8::internal 1085 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698