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

Side by Side Diff: src/x64/macro-assembler-x64.cc

Issue 260003006: Added a Isolate* parameter to Serializer::enabled(). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased. Feedback. Created 6 years, 7 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.cc ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "bootstrapper.h" 9 #include "bootstrapper.h"
10 #include "codegen.h" 10 #include "codegen.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 uint64_t r = static_cast<uint32_t>( 53 uint64_t r = static_cast<uint32_t>(
54 reinterpret_cast<intptr_t>(roots_register_value)); 54 reinterpret_cast<intptr_t>(roots_register_value));
55 delta = o - r; 55 delta = o - r;
56 } 56 }
57 return delta; 57 return delta;
58 } 58 }
59 59
60 60
61 Operand MacroAssembler::ExternalOperand(ExternalReference target, 61 Operand MacroAssembler::ExternalOperand(ExternalReference target,
62 Register scratch) { 62 Register scratch) {
63 if (root_array_available_ && !Serializer::enabled()) { 63 if (root_array_available_ && !Serializer::enabled(isolate())) {
64 int64_t delta = RootRegisterDelta(target); 64 int64_t delta = RootRegisterDelta(target);
65 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) { 65 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) {
66 return Operand(kRootRegister, static_cast<int32_t>(delta)); 66 return Operand(kRootRegister, static_cast<int32_t>(delta));
67 } 67 }
68 } 68 }
69 Move(scratch, target); 69 Move(scratch, target);
70 return Operand(scratch, 0); 70 return Operand(scratch, 0);
71 } 71 }
72 72
73 73
74 void MacroAssembler::Load(Register destination, ExternalReference source) { 74 void MacroAssembler::Load(Register destination, ExternalReference source) {
75 if (root_array_available_ && !Serializer::enabled()) { 75 if (root_array_available_ && !Serializer::enabled(isolate())) {
76 int64_t delta = RootRegisterDelta(source); 76 int64_t delta = RootRegisterDelta(source);
77 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) { 77 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) {
78 movp(destination, Operand(kRootRegister, static_cast<int32_t>(delta))); 78 movp(destination, Operand(kRootRegister, static_cast<int32_t>(delta)));
79 return; 79 return;
80 } 80 }
81 } 81 }
82 // Safe code. 82 // Safe code.
83 if (destination.is(rax)) { 83 if (destination.is(rax)) {
84 load_rax(source); 84 load_rax(source);
85 } else { 85 } else {
86 Move(kScratchRegister, source); 86 Move(kScratchRegister, source);
87 movp(destination, Operand(kScratchRegister, 0)); 87 movp(destination, Operand(kScratchRegister, 0));
88 } 88 }
89 } 89 }
90 90
91 91
92 void MacroAssembler::Store(ExternalReference destination, Register source) { 92 void MacroAssembler::Store(ExternalReference destination, Register source) {
93 if (root_array_available_ && !Serializer::enabled()) { 93 if (root_array_available_ && !Serializer::enabled(isolate())) {
94 int64_t delta = RootRegisterDelta(destination); 94 int64_t delta = RootRegisterDelta(destination);
95 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) { 95 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) {
96 movp(Operand(kRootRegister, static_cast<int32_t>(delta)), source); 96 movp(Operand(kRootRegister, static_cast<int32_t>(delta)), source);
97 return; 97 return;
98 } 98 }
99 } 99 }
100 // Safe code. 100 // Safe code.
101 if (source.is(rax)) { 101 if (source.is(rax)) {
102 store_rax(destination); 102 store_rax(destination);
103 } else { 103 } else {
104 Move(kScratchRegister, destination); 104 Move(kScratchRegister, destination);
105 movp(Operand(kScratchRegister, 0), source); 105 movp(Operand(kScratchRegister, 0), source);
106 } 106 }
107 } 107 }
108 108
109 109
110 void MacroAssembler::LoadAddress(Register destination, 110 void MacroAssembler::LoadAddress(Register destination,
111 ExternalReference source) { 111 ExternalReference source) {
112 if (root_array_available_ && !Serializer::enabled()) { 112 if (root_array_available_ && !Serializer::enabled(isolate())) {
113 int64_t delta = RootRegisterDelta(source); 113 int64_t delta = RootRegisterDelta(source);
114 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) { 114 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) {
115 leap(destination, Operand(kRootRegister, static_cast<int32_t>(delta))); 115 leap(destination, Operand(kRootRegister, static_cast<int32_t>(delta)));
116 return; 116 return;
117 } 117 }
118 } 118 }
119 // Safe code. 119 // Safe code.
120 Move(destination, source); 120 Move(destination, source);
121 } 121 }
122 122
123 123
124 int MacroAssembler::LoadAddressSize(ExternalReference source) { 124 int MacroAssembler::LoadAddressSize(ExternalReference source) {
125 if (root_array_available_ && !Serializer::enabled()) { 125 if (root_array_available_ && !Serializer::enabled(isolate())) {
126 // This calculation depends on the internals of LoadAddress. 126 // This calculation depends on the internals of LoadAddress.
127 // It's correctness is ensured by the asserts in the Call 127 // It's correctness is ensured by the asserts in the Call
128 // instruction below. 128 // instruction below.
129 int64_t delta = RootRegisterDelta(source); 129 int64_t delta = RootRegisterDelta(source);
130 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) { 130 if (delta != kInvalidRootRegisterDelta && is_int32(delta)) {
131 // Operand is leap(scratch, Operand(kRootRegister, delta)); 131 // Operand is leap(scratch, Operand(kRootRegister, delta));
132 // Opcodes : REX.W 8D ModRM Disp8/Disp32 - 4 or 7. 132 // Opcodes : REX.W 8D ModRM Disp8/Disp32 - 4 or 7.
133 int size = 4; 133 int size = 4;
134 if (!is_int8(static_cast<int32_t>(delta))) { 134 if (!is_int8(static_cast<int32_t>(delta))) {
135 size += 3; // Need full four-byte displacement in lea. 135 size += 3; // Need full four-byte displacement in lea.
136 } 136 }
137 return size; 137 return size;
138 } 138 }
139 } 139 }
140 // Size of movp(destination, src); 140 // Size of movp(destination, src);
141 return Assembler::kMoveAddressIntoScratchRegisterInstructionLength; 141 return Assembler::kMoveAddressIntoScratchRegisterInstructionLength;
142 } 142 }
143 143
144 144
145 void MacroAssembler::PushAddress(ExternalReference source) { 145 void MacroAssembler::PushAddress(ExternalReference source) {
146 int64_t address = reinterpret_cast<int64_t>(source.address()); 146 int64_t address = reinterpret_cast<int64_t>(source.address());
147 if (is_int32(address) && !Serializer::enabled()) { 147 if (is_int32(address) && !Serializer::enabled(isolate())) {
148 if (emit_debug_code()) { 148 if (emit_debug_code()) {
149 Move(kScratchRegister, kZapValue, Assembler::RelocInfoNone()); 149 Move(kScratchRegister, kZapValue, Assembler::RelocInfoNone());
150 } 150 }
151 Push(Immediate(static_cast<int32_t>(address))); 151 Push(Immediate(static_cast<int32_t>(address)));
152 return; 152 return;
153 } 153 }
154 LoadAddress(kScratchRegister, source); 154 LoadAddress(kScratchRegister, source);
155 Push(kScratchRegister); 155 Push(kScratchRegister);
156 } 156 }
157 157
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 bind(&done); 245 bind(&done);
246 } 246 }
247 } 247 }
248 248
249 249
250 void MacroAssembler::InNewSpace(Register object, 250 void MacroAssembler::InNewSpace(Register object,
251 Register scratch, 251 Register scratch,
252 Condition cc, 252 Condition cc,
253 Label* branch, 253 Label* branch,
254 Label::Distance distance) { 254 Label::Distance distance) {
255 if (Serializer::enabled()) { 255 if (Serializer::enabled(isolate())) {
256 // Can't do arithmetic on external references if it might get serialized. 256 // Can't do arithmetic on external references if it might get serialized.
257 // The mask isn't really an address. We load it as an external reference in 257 // The mask isn't really an address. We load it as an external reference in
258 // case the size of the new space is different between the snapshot maker 258 // case the size of the new space is different between the snapshot maker
259 // and the running system. 259 // and the running system.
260 if (scratch.is(object)) { 260 if (scratch.is(object)) {
261 Move(kScratchRegister, ExternalReference::new_space_mask(isolate())); 261 Move(kScratchRegister, ExternalReference::new_space_mask(isolate()));
262 andp(scratch, kScratchRegister); 262 andp(scratch, kScratchRegister);
263 } else { 263 } else {
264 Move(scratch, ExternalReference::new_space_mask(isolate())); 264 Move(scratch, ExternalReference::new_space_mask(isolate()));
265 andp(scratch, object); 265 andp(scratch, object);
(...skipping 4980 matching lines...) Expand 10 before | Expand all | Expand 10 after
5246 if (ms.shift() > 0) sarl(rdx, Immediate(ms.shift())); 5246 if (ms.shift() > 0) sarl(rdx, Immediate(ms.shift()));
5247 movl(rax, dividend); 5247 movl(rax, dividend);
5248 shrl(rax, Immediate(31)); 5248 shrl(rax, Immediate(31));
5249 addl(rdx, rax); 5249 addl(rdx, rax);
5250 } 5250 }
5251 5251
5252 5252
5253 } } // namespace v8::internal 5253 } } // namespace v8::internal
5254 5254
5255 #endif // V8_TARGET_ARCH_X64 5255 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/lithium-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698