Revision: 10032
Author: [email protected]
Date: Fri Nov 18 06:09:41 2011
Log: Remove more superfluous write barriers.
Review URL: http://codereview.chromium.org/8595008
http://code.google.com/p/v8/source/detail?r=10032
Modified:
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/src/spaces.cc
=======================================
--- /branches/bleeding_edge/src/objects.cc Thu Nov 17 09:05:12 2011
+++ /branches/bleeding_edge/src/objects.cc Fri Nov 18 06:09:41 2011
@@ -9962,8 +9962,8 @@
set(j, temp);
if (this != numbers) {
temp = numbers->get(i);
- numbers->set(i, numbers->get(j));
- numbers->set(j, temp);
+ numbers->set(i, Smi::cast(numbers->get(j)));
+ numbers->set(j, Smi::cast(temp));
}
}
=======================================
--- /branches/bleeding_edge/src/runtime.cc Tue Nov 15 05:48:40 2011
+++ /branches/bleeding_edge/src/runtime.cc Fri Nov 18 06:09:41 2011
@@ -1794,11 +1794,14 @@
JSFunction::cast(constructor)->initial_map() == map) {
// If we still have the original map, set in-object properties
directly.
regexp->InObjectPropertyAtPut(JSRegExp::kSourceFieldIndex, source);
- // TODO(lrn): Consider skipping write barrier on booleans as well.
- // Both true and false should be in oldspace at all times.
- regexp->InObjectPropertyAtPut(JSRegExp::kGlobalFieldIndex, global);
- regexp->InObjectPropertyAtPut(JSRegExp::kIgnoreCaseFieldIndex,
ignoreCase);
- regexp->InObjectPropertyAtPut(JSRegExp::kMultilineFieldIndex,
multiline);
+ // Both true and false are immovable immortal objects so no need for
write
+ // barrier.
+ regexp->InObjectPropertyAtPut(
+ JSRegExp::kGlobalFieldIndex, global, SKIP_WRITE_BARRIER);
+ regexp->InObjectPropertyAtPut(
+ JSRegExp::kIgnoreCaseFieldIndex, ignoreCase, SKIP_WRITE_BARRIER);
+ regexp->InObjectPropertyAtPut(
+ JSRegExp::kMultilineFieldIndex, multiline, SKIP_WRITE_BARRIER);
regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex,
Smi::FromInt(0),
SKIP_WRITE_BARRIER); // It's a Smi.
=======================================
--- /branches/bleeding_edge/src/spaces.cc Wed Nov 16 14:25:56 2011
+++ /branches/bleeding_edge/src/spaces.cc Fri Nov 18 06:09:41 2011
@@ -1658,14 +1658,14 @@
// field and a next pointer, we give it a filler map that gives it the
// correct size.
if (size_in_bytes > FreeSpace::kHeaderSize) {
- set_map(heap->raw_unchecked_free_space_map());
+ set_map_unsafe(heap->raw_unchecked_free_space_map());
// Can't use FreeSpace::cast because it fails during deserialization.
FreeSpace* this_as_free_space = reinterpret_cast<FreeSpace*>(this);
this_as_free_space->set_size(size_in_bytes);
} else if (size_in_bytes == kPointerSize) {
- set_map(heap->raw_unchecked_one_pointer_filler_map());
+ set_map_unsafe(heap->raw_unchecked_one_pointer_filler_map());
} else if (size_in_bytes == 2 * kPointerSize) {
- set_map(heap->raw_unchecked_two_pointer_filler_map());
+ set_map_unsafe(heap->raw_unchecked_two_pointer_filler_map());
} else {
UNREACHABLE();
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev