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

Side by Side Diff: src/stub-cache.cc

Issue 6696042: Adding 'isolates' argument to LOG to get rid of multiple TLS fetches in profiling. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/isolates
Patch Set: Created 9 years, 9 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
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // name specific if there are global objects involved. 119 // name specific if there are global objects involved.
120 Code::Flags flags = 120 Code::Flags flags =
121 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT); 121 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT);
122 Object* code = receiver->map()->FindInCodeCache(cache_name, flags); 122 Object* code = receiver->map()->FindInCodeCache(cache_name, flags);
123 if (code->IsUndefined()) { 123 if (code->IsUndefined()) {
124 LoadStubCompiler compiler; 124 LoadStubCompiler compiler;
125 { MaybeObject* maybe_code = 125 { MaybeObject* maybe_code =
126 compiler.CompileLoadNonexistent(cache_name, receiver, last); 126 compiler.CompileLoadNonexistent(cache_name, receiver, last);
127 if (!maybe_code->ToObject(&code)) return maybe_code; 127 if (!maybe_code->ToObject(&code)) return maybe_code;
128 } 128 }
129 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name)); 129 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cach e_name));
130 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code))); 130 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code)));
131 Object* result; 131 Object* result;
132 { MaybeObject* maybe_result = 132 { MaybeObject* maybe_result =
133 receiver->UpdateMapCodeCache(cache_name, Code::cast(code)); 133 receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
134 if (!maybe_result->ToObject(&result)) return maybe_result; 134 if (!maybe_result->ToObject(&result)) return maybe_result;
135 } 135 }
136 } 136 }
137 return code; 137 return code;
138 } 138 }
139 139
140 140
141 MaybeObject* StubCache::ComputeLoadField(String* name, 141 MaybeObject* StubCache::ComputeLoadField(String* name,
142 JSObject* receiver, 142 JSObject* receiver,
143 JSObject* holder, 143 JSObject* holder,
144 int field_index) { 144 int field_index) {
145 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 145 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
146 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD); 146 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
147 Object* code = receiver->map()->FindInCodeCache(name, flags); 147 Object* code = receiver->map()->FindInCodeCache(name, flags);
148 if (code->IsUndefined()) { 148 if (code->IsUndefined()) {
149 LoadStubCompiler compiler; 149 LoadStubCompiler compiler;
150 { MaybeObject* maybe_code = 150 { MaybeObject* maybe_code =
151 compiler.CompileLoadField(receiver, holder, field_index, name); 151 compiler.CompileLoadField(receiver, holder, field_index, name);
152 if (!maybe_code->ToObject(&code)) return maybe_code; 152 if (!maybe_code->ToObject(&code)) return maybe_code;
153 } 153 }
154 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 154 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name ));
155 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 155 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
156 Object* result; 156 Object* result;
157 { MaybeObject* maybe_result = 157 { MaybeObject* maybe_result =
158 receiver->UpdateMapCodeCache(name, Code::cast(code)); 158 receiver->UpdateMapCodeCache(name, Code::cast(code));
159 if (!maybe_result->ToObject(&result)) return maybe_result; 159 if (!maybe_result->ToObject(&result)) return maybe_result;
160 } 160 }
161 } 161 }
162 return code; 162 return code;
163 } 163 }
164 164
165 165
166 MaybeObject* StubCache::ComputeLoadCallback(String* name, 166 MaybeObject* StubCache::ComputeLoadCallback(String* name,
167 JSObject* receiver, 167 JSObject* receiver,
168 JSObject* holder, 168 JSObject* holder,
169 AccessorInfo* callback) { 169 AccessorInfo* callback) {
170 ASSERT(v8::ToCData<Address>(callback->getter()) != 0); 170 ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
171 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 171 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
172 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS); 172 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
173 Object* code = receiver->map()->FindInCodeCache(name, flags); 173 Object* code = receiver->map()->FindInCodeCache(name, flags);
174 if (code->IsUndefined()) { 174 if (code->IsUndefined()) {
175 LoadStubCompiler compiler; 175 LoadStubCompiler compiler;
176 { MaybeObject* maybe_code = 176 { MaybeObject* maybe_code =
177 compiler.CompileLoadCallback(name, receiver, holder, callback); 177 compiler.CompileLoadCallback(name, receiver, holder, callback);
178 if (!maybe_code->ToObject(&code)) return maybe_code; 178 if (!maybe_code->ToObject(&code)) return maybe_code;
179 } 179 }
180 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 180 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name ));
181 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 181 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
182 Object* result; 182 Object* result;
183 { MaybeObject* maybe_result = 183 { MaybeObject* maybe_result =
184 receiver->UpdateMapCodeCache(name, Code::cast(code)); 184 receiver->UpdateMapCodeCache(name, Code::cast(code));
185 if (!maybe_result->ToObject(&result)) return maybe_result; 185 if (!maybe_result->ToObject(&result)) return maybe_result;
186 } 186 }
187 } 187 }
188 return code; 188 return code;
189 } 189 }
190 190
191 191
192 MaybeObject* StubCache::ComputeLoadConstant(String* name, 192 MaybeObject* StubCache::ComputeLoadConstant(String* name,
193 JSObject* receiver, 193 JSObject* receiver,
194 JSObject* holder, 194 JSObject* holder,
195 Object* value) { 195 Object* value) {
196 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 196 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
197 Code::Flags flags = 197 Code::Flags flags =
198 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION); 198 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
199 Object* code = receiver->map()->FindInCodeCache(name, flags); 199 Object* code = receiver->map()->FindInCodeCache(name, flags);
200 if (code->IsUndefined()) { 200 if (code->IsUndefined()) {
201 LoadStubCompiler compiler; 201 LoadStubCompiler compiler;
202 { MaybeObject* maybe_code = 202 { MaybeObject* maybe_code =
203 compiler.CompileLoadConstant(receiver, holder, value, name); 203 compiler.CompileLoadConstant(receiver, holder, value, name);
204 if (!maybe_code->ToObject(&code)) return maybe_code; 204 if (!maybe_code->ToObject(&code)) return maybe_code;
205 } 205 }
206 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 206 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name ));
207 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 207 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
208 Object* result; 208 Object* result;
209 { MaybeObject* maybe_result = 209 { MaybeObject* maybe_result =
210 receiver->UpdateMapCodeCache(name, Code::cast(code)); 210 receiver->UpdateMapCodeCache(name, Code::cast(code));
211 if (!maybe_result->ToObject(&result)) return maybe_result; 211 if (!maybe_result->ToObject(&result)) return maybe_result;
212 } 212 }
213 } 213 }
214 return code; 214 return code;
215 } 215 }
216 216
217 217
218 MaybeObject* StubCache::ComputeLoadInterceptor(String* name, 218 MaybeObject* StubCache::ComputeLoadInterceptor(String* name,
219 JSObject* receiver, 219 JSObject* receiver,
220 JSObject* holder) { 220 JSObject* holder) {
221 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 221 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
222 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR); 222 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
223 Object* code = receiver->map()->FindInCodeCache(name, flags); 223 Object* code = receiver->map()->FindInCodeCache(name, flags);
224 if (code->IsUndefined()) { 224 if (code->IsUndefined()) {
225 LoadStubCompiler compiler; 225 LoadStubCompiler compiler;
226 { MaybeObject* maybe_code = 226 { MaybeObject* maybe_code =
227 compiler.CompileLoadInterceptor(receiver, holder, name); 227 compiler.CompileLoadInterceptor(receiver, holder, name);
228 if (!maybe_code->ToObject(&code)) return maybe_code; 228 if (!maybe_code->ToObject(&code)) return maybe_code;
229 } 229 }
230 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 230 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name ));
231 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 231 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
232 Object* result; 232 Object* result;
233 { MaybeObject* maybe_result = 233 { MaybeObject* maybe_result =
234 receiver->UpdateMapCodeCache(name, Code::cast(code)); 234 receiver->UpdateMapCodeCache(name, Code::cast(code));
235 if (!maybe_result->ToObject(&result)) return maybe_result; 235 if (!maybe_result->ToObject(&result)) return maybe_result;
236 } 236 }
237 } 237 }
238 return code; 238 return code;
239 } 239 }
240 240
(...skipping 13 matching lines...) Expand all
254 Object* code = receiver->map()->FindInCodeCache(name, flags); 254 Object* code = receiver->map()->FindInCodeCache(name, flags);
255 if (code->IsUndefined()) { 255 if (code->IsUndefined()) {
256 LoadStubCompiler compiler; 256 LoadStubCompiler compiler;
257 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver, 257 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver,
258 holder, 258 holder,
259 cell, 259 cell,
260 name, 260 name,
261 is_dont_delete); 261 is_dont_delete);
262 if (!maybe_code->ToObject(&code)) return maybe_code; 262 if (!maybe_code->ToObject(&code)) return maybe_code;
263 } 263 }
264 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 264 PROFILE(isolate_,CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name ));
265 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 265 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
266 Object* result; 266 Object* result;
267 { MaybeObject* maybe_result = 267 { MaybeObject* maybe_result =
268 receiver->UpdateMapCodeCache(name, Code::cast(code)); 268 receiver->UpdateMapCodeCache(name, Code::cast(code));
269 if (!maybe_result->ToObject(&result)) return maybe_result; 269 if (!maybe_result->ToObject(&result)) return maybe_result;
270 } 270 }
271 } 271 }
272 return code; 272 return code;
273 } 273 }
274 274
275 275
276 MaybeObject* StubCache::ComputeKeyedLoadField(String* name, 276 MaybeObject* StubCache::ComputeKeyedLoadField(String* name,
277 JSObject* receiver, 277 JSObject* receiver,
278 JSObject* holder, 278 JSObject* holder,
279 int field_index) { 279 int field_index) {
280 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 280 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
281 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD); 281 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
282 Object* code = receiver->map()->FindInCodeCache(name, flags); 282 Object* code = receiver->map()->FindInCodeCache(name, flags);
283 if (code->IsUndefined()) { 283 if (code->IsUndefined()) {
284 KeyedLoadStubCompiler compiler; 284 KeyedLoadStubCompiler compiler;
285 { MaybeObject* maybe_code = 285 { MaybeObject* maybe_code =
286 compiler.CompileLoadField(name, receiver, holder, field_index); 286 compiler.CompileLoadField(name, receiver, holder, field_index);
287 if (!maybe_code->ToObject(&code)) return maybe_code; 287 if (!maybe_code->ToObject(&code)) return maybe_code;
288 } 288 }
289 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 289 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
290 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 290 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
291 Object* result; 291 Object* result;
292 { MaybeObject* maybe_result = 292 { MaybeObject* maybe_result =
293 receiver->UpdateMapCodeCache(name, Code::cast(code)); 293 receiver->UpdateMapCodeCache(name, Code::cast(code));
294 if (!maybe_result->ToObject(&result)) return maybe_result; 294 if (!maybe_result->ToObject(&result)) return maybe_result;
295 } 295 }
296 } 296 }
297 return code; 297 return code;
298 } 298 }
299 299
300 300
301 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name, 301 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name,
302 JSObject* receiver, 302 JSObject* receiver,
303 JSObject* holder, 303 JSObject* holder,
304 Object* value) { 304 Object* value) {
305 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 305 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
306 Code::Flags flags = 306 Code::Flags flags =
307 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION); 307 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
308 Object* code = receiver->map()->FindInCodeCache(name, flags); 308 Object* code = receiver->map()->FindInCodeCache(name, flags);
309 if (code->IsUndefined()) { 309 if (code->IsUndefined()) {
310 KeyedLoadStubCompiler compiler; 310 KeyedLoadStubCompiler compiler;
311 { MaybeObject* maybe_code = 311 { MaybeObject* maybe_code =
312 compiler.CompileLoadConstant(name, receiver, holder, value); 312 compiler.CompileLoadConstant(name, receiver, holder, value);
313 if (!maybe_code->ToObject(&code)) return maybe_code; 313 if (!maybe_code->ToObject(&code)) return maybe_code;
314 } 314 }
315 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 315 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
316 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 316 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
317 Object* result; 317 Object* result;
318 { MaybeObject* maybe_result = 318 { MaybeObject* maybe_result =
319 receiver->UpdateMapCodeCache(name, Code::cast(code)); 319 receiver->UpdateMapCodeCache(name, Code::cast(code));
320 if (!maybe_result->ToObject(&result)) return maybe_result; 320 if (!maybe_result->ToObject(&result)) return maybe_result;
321 } 321 }
322 } 322 }
323 return code; 323 return code;
324 } 324 }
325 325
326 326
327 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name, 327 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name,
328 JSObject* receiver, 328 JSObject* receiver,
329 JSObject* holder) { 329 JSObject* holder) {
330 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 330 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
331 Code::Flags flags = 331 Code::Flags flags =
332 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR); 332 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
333 Object* code = receiver->map()->FindInCodeCache(name, flags); 333 Object* code = receiver->map()->FindInCodeCache(name, flags);
334 if (code->IsUndefined()) { 334 if (code->IsUndefined()) {
335 KeyedLoadStubCompiler compiler; 335 KeyedLoadStubCompiler compiler;
336 { MaybeObject* maybe_code = 336 { MaybeObject* maybe_code =
337 compiler.CompileLoadInterceptor(receiver, holder, name); 337 compiler.CompileLoadInterceptor(receiver, holder, name);
338 if (!maybe_code->ToObject(&code)) return maybe_code; 338 if (!maybe_code->ToObject(&code)) return maybe_code;
339 } 339 }
340 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 340 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
341 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 341 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
342 Object* result; 342 Object* result;
343 { MaybeObject* maybe_result = 343 { MaybeObject* maybe_result =
344 receiver->UpdateMapCodeCache(name, Code::cast(code)); 344 receiver->UpdateMapCodeCache(name, Code::cast(code));
345 if (!maybe_result->ToObject(&result)) return maybe_result; 345 if (!maybe_result->ToObject(&result)) return maybe_result;
346 } 346 }
347 } 347 }
348 return code; 348 return code;
349 } 349 }
350 350
351 351
352 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name, 352 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name,
353 JSObject* receiver, 353 JSObject* receiver,
354 JSObject* holder, 354 JSObject* holder,
355 AccessorInfo* callback) { 355 AccessorInfo* callback) {
356 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 356 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
357 Code::Flags flags = 357 Code::Flags flags =
358 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 358 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
359 Object* code = receiver->map()->FindInCodeCache(name, flags); 359 Object* code = receiver->map()->FindInCodeCache(name, flags);
360 if (code->IsUndefined()) { 360 if (code->IsUndefined()) {
361 KeyedLoadStubCompiler compiler; 361 KeyedLoadStubCompiler compiler;
362 { MaybeObject* maybe_code = 362 { MaybeObject* maybe_code =
363 compiler.CompileLoadCallback(name, receiver, holder, callback); 363 compiler.CompileLoadCallback(name, receiver, holder, callback);
364 if (!maybe_code->ToObject(&code)) return maybe_code; 364 if (!maybe_code->ToObject(&code)) return maybe_code;
365 } 365 }
366 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 366 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
367 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 367 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
368 Object* result; 368 Object* result;
369 { MaybeObject* maybe_result = 369 { MaybeObject* maybe_result =
370 receiver->UpdateMapCodeCache(name, Code::cast(code)); 370 receiver->UpdateMapCodeCache(name, Code::cast(code));
371 if (!maybe_result->ToObject(&result)) return maybe_result; 371 if (!maybe_result->ToObject(&result)) return maybe_result;
372 } 372 }
373 } 373 }
374 return code; 374 return code;
375 } 375 }
376 376
377 377
378 378
379 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name, 379 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name,
380 JSArray* receiver) { 380 JSArray* receiver) {
381 Code::Flags flags = 381 Code::Flags flags =
382 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 382 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
383 ASSERT(receiver->IsJSObject()); 383 ASSERT(receiver->IsJSObject());
384 Object* code = receiver->map()->FindInCodeCache(name, flags); 384 Object* code = receiver->map()->FindInCodeCache(name, flags);
385 if (code->IsUndefined()) { 385 if (code->IsUndefined()) {
386 KeyedLoadStubCompiler compiler; 386 KeyedLoadStubCompiler compiler;
387 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name); 387 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name);
388 if (!maybe_code->ToObject(&code)) return maybe_code; 388 if (!maybe_code->ToObject(&code)) return maybe_code;
389 } 389 }
390 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 390 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
391 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 391 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
392 Object* result; 392 Object* result;
393 { MaybeObject* maybe_result = 393 { MaybeObject* maybe_result =
394 receiver->UpdateMapCodeCache(name, Code::cast(code)); 394 receiver->UpdateMapCodeCache(name, Code::cast(code));
395 if (!maybe_result->ToObject(&result)) return maybe_result; 395 if (!maybe_result->ToObject(&result)) return maybe_result;
396 } 396 }
397 } 397 }
398 return code; 398 return code;
399 } 399 }
400 400
401 401
402 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name, 402 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name,
403 String* receiver) { 403 String* receiver) {
404 Code::Flags flags = 404 Code::Flags flags =
405 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 405 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
406 Map* map = receiver->map(); 406 Map* map = receiver->map();
407 Object* code = map->FindInCodeCache(name, flags); 407 Object* code = map->FindInCodeCache(name, flags);
408 if (code->IsUndefined()) { 408 if (code->IsUndefined()) {
409 KeyedLoadStubCompiler compiler; 409 KeyedLoadStubCompiler compiler;
410 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name); 410 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name);
411 if (!maybe_code->ToObject(&code)) return maybe_code; 411 if (!maybe_code->ToObject(&code)) return maybe_code;
412 } 412 }
413 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 413 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
414 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 414 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
415 Object* result; 415 Object* result;
416 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code)); 416 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code));
417 if (!maybe_result->ToObject(&result)) return maybe_result; 417 if (!maybe_result->ToObject(&result)) return maybe_result;
418 } 418 }
419 } 419 }
420 return code; 420 return code;
421 } 421 }
422 422
423 423
424 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype( 424 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype(
425 String* name, 425 String* name,
426 JSFunction* receiver) { 426 JSFunction* receiver) {
427 Code::Flags flags = 427 Code::Flags flags =
428 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 428 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
429 Object* code = receiver->map()->FindInCodeCache(name, flags); 429 Object* code = receiver->map()->FindInCodeCache(name, flags);
430 if (code->IsUndefined()) { 430 if (code->IsUndefined()) {
431 KeyedLoadStubCompiler compiler; 431 KeyedLoadStubCompiler compiler;
432 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name); 432 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name);
433 if (!maybe_code->ToObject(&code)) return maybe_code; 433 if (!maybe_code->ToObject(&code)) return maybe_code;
434 } 434 }
435 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 435 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , name));
436 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 436 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
437 Object* result; 437 Object* result;
438 { MaybeObject* maybe_result = 438 { MaybeObject* maybe_result =
439 receiver->UpdateMapCodeCache(name, Code::cast(code)); 439 receiver->UpdateMapCodeCache(name, Code::cast(code));
440 if (!maybe_result->ToObject(&result)) return maybe_result; 440 if (!maybe_result->ToObject(&result)) return maybe_result;
441 } 441 }
442 } 442 }
443 return code; 443 return code;
444 } 444 }
445 445
446 446
447 MaybeObject* StubCache::ComputeKeyedLoadSpecialized(JSObject* receiver) { 447 MaybeObject* StubCache::ComputeKeyedLoadSpecialized(JSObject* receiver) {
448 // Using NORMAL as the PropertyType for array element loads is a misuse. The 448 // Using NORMAL as the PropertyType for array element loads is a misuse. The
449 // generated stub always accesses fast elements, not slow-mode fields, but 449 // generated stub always accesses fast elements, not slow-mode fields, but
450 // some property type is required for the stub lookup. Note that overloading 450 // some property type is required for the stub lookup. Note that overloading
451 // the NORMAL PropertyType is only safe as long as no stubs are generated for 451 // the NORMAL PropertyType is only safe as long as no stubs are generated for
452 // other keyed field loads. This is guaranteed to be the case since all field 452 // other keyed field loads. This is guaranteed to be the case since all field
453 // keyed loads that are not array elements go through a generic builtin stub. 453 // keyed loads that are not array elements go through a generic builtin stub.
454 Code::Flags flags = 454 Code::Flags flags =
455 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, NORMAL); 455 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, NORMAL);
456 String* name = isolate_->heap()->KeyedLoadSpecialized_symbol(); 456 String* name = isolate_->heap()->KeyedLoadSpecialized_symbol();
457 Object* code = receiver->map()->FindInCodeCache(name, flags); 457 Object* code = receiver->map()->FindInCodeCache(name, flags);
458 if (code->IsUndefined()) { 458 if (code->IsUndefined()) {
459 KeyedLoadStubCompiler compiler; 459 KeyedLoadStubCompiler compiler;
460 { MaybeObject* maybe_code = compiler.CompileLoadSpecialized(receiver); 460 { MaybeObject* maybe_code = compiler.CompileLoadSpecialized(receiver);
461 if (!maybe_code->ToObject(&code)) return maybe_code; 461 if (!maybe_code->ToObject(&code)) return maybe_code;
462 } 462 }
463 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), 0)); 463 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code) , 0));
464 Object* result; 464 Object* result;
465 { MaybeObject* maybe_result = 465 { MaybeObject* maybe_result =
466 receiver->UpdateMapCodeCache(name, Code::cast(code)); 466 receiver->UpdateMapCodeCache(name, Code::cast(code));
467 if (!maybe_result->ToObject(&result)) return maybe_result; 467 if (!maybe_result->ToObject(&result)) return maybe_result;
468 } 468 }
469 } 469 }
470 return code; 470 return code;
471 } 471 }
472 472
473 473
474 MaybeObject* StubCache::ComputeStoreField(String* name, 474 MaybeObject* StubCache::ComputeStoreField(String* name,
475 JSObject* receiver, 475 JSObject* receiver,
476 int field_index, 476 int field_index,
477 Map* transition, 477 Map* transition,
478 StrictModeFlag strict_mode) { 478 StrictModeFlag strict_mode) {
479 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 479 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
480 Code::Flags flags = Code::ComputeMonomorphicFlags( 480 Code::Flags flags = Code::ComputeMonomorphicFlags(
481 Code::STORE_IC, type, strict_mode); 481 Code::STORE_IC, type, strict_mode);
482 Object* code = receiver->map()->FindInCodeCache(name, flags); 482 Object* code = receiver->map()->FindInCodeCache(name, flags);
483 if (code->IsUndefined()) { 483 if (code->IsUndefined()) {
484 StoreStubCompiler compiler(strict_mode); 484 StoreStubCompiler compiler(strict_mode);
485 { MaybeObject* maybe_code = 485 { MaybeObject* maybe_code =
486 compiler.CompileStoreField(receiver, field_index, transition, name); 486 compiler.CompileStoreField(receiver, field_index, transition, name);
487 if (!maybe_code->ToObject(&code)) return maybe_code; 487 if (!maybe_code->ToObject(&code)) return maybe_code;
488 } 488 }
489 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 489 PROFILE(isolate_,CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), nam e));
490 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 490 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
491 Object* result; 491 Object* result;
492 { MaybeObject* maybe_result = 492 { MaybeObject* maybe_result =
493 receiver->UpdateMapCodeCache(name, Code::cast(code)); 493 receiver->UpdateMapCodeCache(name, Code::cast(code));
494 if (!maybe_result->ToObject(&result)) return maybe_result; 494 if (!maybe_result->ToObject(&result)) return maybe_result;
495 } 495 }
496 } 496 }
497 return code; 497 return code;
498 } 498 }
499 499
500 500
501 MaybeObject* StubCache::ComputeKeyedStoreSpecialized( 501 MaybeObject* StubCache::ComputeKeyedStoreSpecialized(
502 JSObject* receiver, 502 JSObject* receiver,
503 StrictModeFlag strict_mode) { 503 StrictModeFlag strict_mode) {
504 Code::Flags flags = 504 Code::Flags flags =
505 Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, NORMAL, strict_mode); 505 Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, NORMAL, strict_mode);
506 String* name = isolate_->heap()->KeyedStoreSpecialized_symbol(); 506 String* name = isolate_->heap()->KeyedStoreSpecialized_symbol();
507 Object* code = receiver->map()->FindInCodeCache(name, flags); 507 Object* code = receiver->map()->FindInCodeCache(name, flags);
508 if (code->IsUndefined()) { 508 if (code->IsUndefined()) {
509 KeyedStoreStubCompiler compiler(strict_mode); 509 KeyedStoreStubCompiler compiler(strict_mode);
510 { MaybeObject* maybe_code = compiler.CompileStoreSpecialized(receiver); 510 { MaybeObject* maybe_code = compiler.CompileStoreSpecialized(receiver);
511 if (!maybe_code->ToObject(&code)) return maybe_code; 511 if (!maybe_code->ToObject(&code)) return maybe_code;
512 } 512 }
513 PROFILE(CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, Code::cast(code), 0)); 513 PROFILE(isolate_,CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, Code::cast(code ), 0));
514 Object* result; 514 Object* result;
515 { MaybeObject* maybe_result = 515 { MaybeObject* maybe_result =
516 receiver->UpdateMapCodeCache(name, Code::cast(code)); 516 receiver->UpdateMapCodeCache(name, Code::cast(code));
517 if (!maybe_result->ToObject(&result)) return maybe_result; 517 if (!maybe_result->ToObject(&result)) return maybe_result;
518 } 518 }
519 } 519 }
520 return code; 520 return code;
521 } 521 }
522 522
523 523
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 if (code->IsUndefined()) { 616 if (code->IsUndefined()) {
617 ExternalArrayStubCompiler compiler; 617 ExternalArrayStubCompiler compiler;
618 { MaybeObject* maybe_code = 618 { MaybeObject* maybe_code =
619 is_store ? 619 is_store ?
620 compiler.CompileKeyedStoreStub(receiver, array_type, flags) : 620 compiler.CompileKeyedStoreStub(receiver, array_type, flags) :
621 compiler.CompileKeyedLoadStub(receiver, array_type, flags); 621 compiler.CompileKeyedLoadStub(receiver, array_type, flags);
622 if (!maybe_code->ToObject(&code)) return maybe_code; 622 if (!maybe_code->ToObject(&code)) return maybe_code;
623 } 623 }
624 Code::cast(code)->set_external_array_type(array_type); 624 Code::cast(code)->set_external_array_type(array_type);
625 if (is_store) { 625 if (is_store) {
626 PROFILE( 626 PROFILE(isolate_,
627 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_STORE_IC_TAG, 627 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_STORE_IC_TAG,
628 Code::cast(code), 0)); 628 Code::cast(code), 0));
629 } else { 629 } else {
630 PROFILE( 630 PROFILE(isolate_,
631 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG, 631 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG,
632 Code::cast(code), 0)); 632 Code::cast(code), 0));
633 } 633 }
634 Object* result; 634 Object* result;
635 { MaybeObject* maybe_result = 635 { MaybeObject* maybe_result =
636 receiver->map()->UpdateCodeCache(name, Code::cast(code)); 636 receiver->map()->UpdateCodeCache(name, Code::cast(code));
637 if (!maybe_result->ToObject(&result)) return maybe_result; 637 if (!maybe_result->ToObject(&result)) return maybe_result;
638 } 638 }
639 } 639 }
640 return code; 640 return code;
(...skipping 13 matching lines...) Expand all
654 StrictModeFlag strict_mode) { 654 StrictModeFlag strict_mode) {
655 Code::Flags flags = Code::ComputeMonomorphicFlags( 655 Code::Flags flags = Code::ComputeMonomorphicFlags(
656 Code::STORE_IC, NORMAL, strict_mode); 656 Code::STORE_IC, NORMAL, strict_mode);
657 Object* code = receiver->map()->FindInCodeCache(name, flags); 657 Object* code = receiver->map()->FindInCodeCache(name, flags);
658 if (code->IsUndefined()) { 658 if (code->IsUndefined()) {
659 StoreStubCompiler compiler(strict_mode); 659 StoreStubCompiler compiler(strict_mode);
660 { MaybeObject* maybe_code = 660 { MaybeObject* maybe_code =
661 compiler.CompileStoreGlobal(receiver, cell, name); 661 compiler.CompileStoreGlobal(receiver, cell, name);
662 if (!maybe_code->ToObject(&code)) return maybe_code; 662 if (!maybe_code->ToObject(&code)) return maybe_code;
663 } 663 }
664 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 664 PROFILE(isolate_,CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), nam e));
665 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 665 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
666 Object* result; 666 Object* result;
667 { MaybeObject* maybe_result = 667 { MaybeObject* maybe_result =
668 receiver->UpdateMapCodeCache(name, Code::cast(code)); 668 receiver->UpdateMapCodeCache(name, Code::cast(code));
669 if (!maybe_result->ToObject(&result)) return maybe_result; 669 if (!maybe_result->ToObject(&result)) return maybe_result;
670 } 670 }
671 } 671 }
672 return code; 672 return code;
673 } 673 }
674 674
675 675
676 MaybeObject* StubCache::ComputeStoreCallback( 676 MaybeObject* StubCache::ComputeStoreCallback(
677 String* name, 677 String* name,
678 JSObject* receiver, 678 JSObject* receiver,
679 AccessorInfo* callback, 679 AccessorInfo* callback,
680 StrictModeFlag strict_mode) { 680 StrictModeFlag strict_mode) {
681 ASSERT(v8::ToCData<Address>(callback->setter()) != 0); 681 ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
682 Code::Flags flags = Code::ComputeMonomorphicFlags( 682 Code::Flags flags = Code::ComputeMonomorphicFlags(
683 Code::STORE_IC, CALLBACKS, strict_mode); 683 Code::STORE_IC, CALLBACKS, strict_mode);
684 Object* code = receiver->map()->FindInCodeCache(name, flags); 684 Object* code = receiver->map()->FindInCodeCache(name, flags);
685 if (code->IsUndefined()) { 685 if (code->IsUndefined()) {
686 StoreStubCompiler compiler(strict_mode); 686 StoreStubCompiler compiler(strict_mode);
687 { MaybeObject* maybe_code = 687 { MaybeObject* maybe_code =
688 compiler.CompileStoreCallback(receiver, callback, name); 688 compiler.CompileStoreCallback(receiver, callback, name);
689 if (!maybe_code->ToObject(&code)) return maybe_code; 689 if (!maybe_code->ToObject(&code)) return maybe_code;
690 } 690 }
691 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 691 PROFILE(isolate_,CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), nam e));
692 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 692 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
693 Object* result; 693 Object* result;
694 { MaybeObject* maybe_result = 694 { MaybeObject* maybe_result =
695 receiver->UpdateMapCodeCache(name, Code::cast(code)); 695 receiver->UpdateMapCodeCache(name, Code::cast(code));
696 if (!maybe_result->ToObject(&result)) return maybe_result; 696 if (!maybe_result->ToObject(&result)) return maybe_result;
697 } 697 }
698 } 698 }
699 return code; 699 return code;
700 } 700 }
701 701
702 702
703 MaybeObject* StubCache::ComputeStoreInterceptor( 703 MaybeObject* StubCache::ComputeStoreInterceptor(
704 String* name, 704 String* name,
705 JSObject* receiver, 705 JSObject* receiver,
706 StrictModeFlag strict_mode) { 706 StrictModeFlag strict_mode) {
707 Code::Flags flags = Code::ComputeMonomorphicFlags( 707 Code::Flags flags = Code::ComputeMonomorphicFlags(
708 Code::STORE_IC, INTERCEPTOR, strict_mode); 708 Code::STORE_IC, INTERCEPTOR, strict_mode);
709 Object* code = receiver->map()->FindInCodeCache(name, flags); 709 Object* code = receiver->map()->FindInCodeCache(name, flags);
710 if (code->IsUndefined()) { 710 if (code->IsUndefined()) {
711 StoreStubCompiler compiler(strict_mode); 711 StoreStubCompiler compiler(strict_mode);
712 { MaybeObject* maybe_code = 712 { MaybeObject* maybe_code =
713 compiler.CompileStoreInterceptor(receiver, name); 713 compiler.CompileStoreInterceptor(receiver, name);
714 if (!maybe_code->ToObject(&code)) return maybe_code; 714 if (!maybe_code->ToObject(&code)) return maybe_code;
715 } 715 }
716 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 716 PROFILE(isolate_,CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), nam e));
717 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 717 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
718 Object* result; 718 Object* result;
719 { MaybeObject* maybe_result = 719 { MaybeObject* maybe_result =
720 receiver->UpdateMapCodeCache(name, Code::cast(code)); 720 receiver->UpdateMapCodeCache(name, Code::cast(code));
721 if (!maybe_result->ToObject(&result)) return maybe_result; 721 if (!maybe_result->ToObject(&result)) return maybe_result;
722 } 722 }
723 } 723 }
724 return code; 724 return code;
725 } 725 }
726 726
727 727
728 MaybeObject* StubCache::ComputeKeyedStoreField(String* name, 728 MaybeObject* StubCache::ComputeKeyedStoreField(String* name,
729 JSObject* receiver, 729 JSObject* receiver,
730 int field_index, 730 int field_index,
731 Map* transition, 731 Map* transition,
732 StrictModeFlag strict_mode) { 732 StrictModeFlag strict_mode) {
733 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 733 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
734 Code::Flags flags = Code::ComputeMonomorphicFlags( 734 Code::Flags flags = Code::ComputeMonomorphicFlags(
735 Code::KEYED_STORE_IC, type, strict_mode); 735 Code::KEYED_STORE_IC, type, strict_mode);
736 Object* code = receiver->map()->FindInCodeCache(name, flags); 736 Object* code = receiver->map()->FindInCodeCache(name, flags);
737 if (code->IsUndefined()) { 737 if (code->IsUndefined()) {
738 KeyedStoreStubCompiler compiler(strict_mode); 738 KeyedStoreStubCompiler compiler(strict_mode);
739 { MaybeObject* maybe_code = 739 { MaybeObject* maybe_code =
740 compiler.CompileStoreField(receiver, field_index, transition, name); 740 compiler.CompileStoreField(receiver, field_index, transition, name);
741 if (!maybe_code->ToObject(&code)) return maybe_code; 741 if (!maybe_code->ToObject(&code)) return maybe_code;
742 } 742 }
743 PROFILE(CodeCreateEvent( 743 PROFILE(isolate_,
744 Logger::KEYED_STORE_IC_TAG, Code::cast(code), name)); 744 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
745 Code::cast(code), name));
745 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code))); 746 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code)));
746 Object* result; 747 Object* result;
747 { MaybeObject* maybe_result = 748 { MaybeObject* maybe_result =
748 receiver->UpdateMapCodeCache(name, Code::cast(code)); 749 receiver->UpdateMapCodeCache(name, Code::cast(code));
749 if (!maybe_result->ToObject(&result)) return maybe_result; 750 if (!maybe_result->ToObject(&result)) return maybe_result;
750 } 751 }
751 } 752 }
752 return code; 753 return code;
753 } 754 }
754 755
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 if (!function->is_compiled()) return Failure::InternalError(); 794 if (!function->is_compiled()) return Failure::InternalError();
794 // Compile the stub - only create stubs for fully compiled functions. 795 // Compile the stub - only create stubs for fully compiled functions.
795 CallStubCompiler compiler( 796 CallStubCompiler compiler(
796 argc, in_loop, kind, extra_ic_state, cache_holder); 797 argc, in_loop, kind, extra_ic_state, cache_holder);
797 { MaybeObject* maybe_code = 798 { MaybeObject* maybe_code =
798 compiler.CompileCallConstant(object, holder, function, name, check); 799 compiler.CompileCallConstant(object, holder, function, name, check);
799 if (!maybe_code->ToObject(&code)) return maybe_code; 800 if (!maybe_code->ToObject(&code)) return maybe_code;
800 } 801 }
801 Code::cast(code)->set_check_type(check); 802 Code::cast(code)->set_check_type(check);
802 ASSERT_EQ(flags, Code::cast(code)->flags()); 803 ASSERT_EQ(flags, Code::cast(code)->flags());
803 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 804 PROFILE(isolate_,
805 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
804 Code::cast(code), name)); 806 Code::cast(code), name));
805 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 807 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
806 Object* result; 808 Object* result;
807 { MaybeObject* maybe_result = 809 { MaybeObject* maybe_result =
808 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 810 map_holder->UpdateMapCodeCache(name, Code::cast(code));
809 if (!maybe_result->ToObject(&result)) return maybe_result; 811 if (!maybe_result->ToObject(&result)) return maybe_result;
810 } 812 }
811 } 813 }
812 return code; 814 return code;
813 } 815 }
(...skipping 29 matching lines...) Expand all
843 CallStubCompiler compiler( 845 CallStubCompiler compiler(
844 argc, in_loop, kind, Code::kNoExtraICState, cache_holder); 846 argc, in_loop, kind, Code::kNoExtraICState, cache_holder);
845 { MaybeObject* maybe_code = 847 { MaybeObject* maybe_code =
846 compiler.CompileCallField(JSObject::cast(object), 848 compiler.CompileCallField(JSObject::cast(object),
847 holder, 849 holder,
848 index, 850 index,
849 name); 851 name);
850 if (!maybe_code->ToObject(&code)) return maybe_code; 852 if (!maybe_code->ToObject(&code)) return maybe_code;
851 } 853 }
852 ASSERT_EQ(flags, Code::cast(code)->flags()); 854 ASSERT_EQ(flags, Code::cast(code)->flags());
853 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 855 PROFILE(isolate_,
856 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
854 Code::cast(code), name)); 857 Code::cast(code), name));
855 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 858 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
856 Object* result; 859 Object* result;
857 { MaybeObject* maybe_result = 860 { MaybeObject* maybe_result =
858 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 861 map_holder->UpdateMapCodeCache(name, Code::cast(code));
859 if (!maybe_result->ToObject(&result)) return maybe_result; 862 if (!maybe_result->ToObject(&result)) return maybe_result;
860 } 863 }
861 } 864 }
862 return code; 865 return code;
863 } 866 }
(...skipping 24 matching lines...) Expand all
888 argc); 891 argc);
889 Object* code = map_holder->map()->FindInCodeCache(name, flags); 892 Object* code = map_holder->map()->FindInCodeCache(name, flags);
890 if (code->IsUndefined()) { 893 if (code->IsUndefined()) {
891 CallStubCompiler compiler( 894 CallStubCompiler compiler(
892 argc, NOT_IN_LOOP, kind, Code::kNoExtraICState, cache_holder); 895 argc, NOT_IN_LOOP, kind, Code::kNoExtraICState, cache_holder);
893 { MaybeObject* maybe_code = 896 { MaybeObject* maybe_code =
894 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name); 897 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name);
895 if (!maybe_code->ToObject(&code)) return maybe_code; 898 if (!maybe_code->ToObject(&code)) return maybe_code;
896 } 899 }
897 ASSERT_EQ(flags, Code::cast(code)->flags()); 900 ASSERT_EQ(flags, Code::cast(code)->flags());
898 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 901 PROFILE(isolate_,
902 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
899 Code::cast(code), name)); 903 Code::cast(code), name));
900 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 904 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
901 Object* result; 905 Object* result;
902 { MaybeObject* maybe_result = 906 { MaybeObject* maybe_result =
903 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 907 map_holder->UpdateMapCodeCache(name, Code::cast(code));
904 if (!maybe_result->ToObject(&result)) return maybe_result; 908 if (!maybe_result->ToObject(&result)) return maybe_result;
905 } 909 }
906 } 910 }
907 return code; 911 return code;
908 } 912 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 // internal error which will make sure we do not update any 949 // internal error which will make sure we do not update any
946 // caches. 950 // caches.
947 if (!function->is_compiled()) return Failure::InternalError(); 951 if (!function->is_compiled()) return Failure::InternalError();
948 CallStubCompiler compiler( 952 CallStubCompiler compiler(
949 argc, in_loop, kind, Code::kNoExtraICState, cache_holder); 953 argc, in_loop, kind, Code::kNoExtraICState, cache_holder);
950 { MaybeObject* maybe_code = 954 { MaybeObject* maybe_code =
951 compiler.CompileCallGlobal(receiver, holder, cell, function, name); 955 compiler.CompileCallGlobal(receiver, holder, cell, function, name);
952 if (!maybe_code->ToObject(&code)) return maybe_code; 956 if (!maybe_code->ToObject(&code)) return maybe_code;
953 } 957 }
954 ASSERT_EQ(flags, Code::cast(code)->flags()); 958 ASSERT_EQ(flags, Code::cast(code)->flags());
955 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 959 PROFILE(isolate_,
960 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
956 Code::cast(code), name)); 961 Code::cast(code), name));
957 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 962 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
958 Object* result; 963 Object* result;
959 { MaybeObject* maybe_result = 964 { MaybeObject* maybe_result =
960 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 965 map_holder->UpdateMapCodeCache(name, Code::cast(code));
961 if (!maybe_result->ToObject(&result)) return maybe_result; 966 if (!maybe_result->ToObject(&result)) return maybe_result;
962 } 967 }
963 } 968 }
964 return code; 969 return code;
965 } 970 }
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 MaybeObject* StoreCallbackProperty(RUNTIME_CALLING_CONVENTION) { 1284 MaybeObject* StoreCallbackProperty(RUNTIME_CALLING_CONVENTION) {
1280 RUNTIME_GET_ISOLATE; 1285 RUNTIME_GET_ISOLATE;
1281 JSObject* recv = JSObject::cast(args[0]); 1286 JSObject* recv = JSObject::cast(args[0]);
1282 AccessorInfo* callback = AccessorInfo::cast(args[1]); 1287 AccessorInfo* callback = AccessorInfo::cast(args[1]);
1283 Address setter_address = v8::ToCData<Address>(callback->setter()); 1288 Address setter_address = v8::ToCData<Address>(callback->setter());
1284 v8::AccessorSetter fun = FUNCTION_CAST<v8::AccessorSetter>(setter_address); 1289 v8::AccessorSetter fun = FUNCTION_CAST<v8::AccessorSetter>(setter_address);
1285 ASSERT(fun != NULL); 1290 ASSERT(fun != NULL);
1286 Handle<String> name = args.at<String>(2); 1291 Handle<String> name = args.at<String>(2);
1287 Handle<Object> value = args.at<Object>(3); 1292 Handle<Object> value = args.at<Object>(3);
1288 HandleScope scope(isolate); 1293 HandleScope scope(isolate);
1289 LOG(ApiNamedPropertyAccess("store", recv, *name)); 1294 LOG(isolate,ApiNamedPropertyAccess("store", recv, *name));
1290 CustomArguments custom_args(isolate, callback->data(), recv, recv); 1295 CustomArguments custom_args(isolate, callback->data(), recv, recv);
1291 v8::AccessorInfo info(custom_args.end()); 1296 v8::AccessorInfo info(custom_args.end());
1292 { 1297 {
1293 // Leaving JavaScript. 1298 // Leaving JavaScript.
1294 VMState state(isolate, EXTERNAL); 1299 VMState state(isolate, EXTERNAL);
1295 ExternalCallbackScope call_scope(isolate, setter_address); 1300 ExternalCallbackScope call_scope(isolate, setter_address);
1296 fun(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), info); 1301 fun(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), info);
1297 } 1302 }
1298 RETURN_IF_SCHEDULED_EXCEPTION(isolate); 1303 RETURN_IF_SCHEDULED_EXCEPTION(isolate);
1299 return *value; 1304 return *value;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 MaybeObject* KeyedLoadPropertyWithInterceptor(RUNTIME_CALLING_CONVENTION) { 1461 MaybeObject* KeyedLoadPropertyWithInterceptor(RUNTIME_CALLING_CONVENTION) {
1457 RUNTIME_GET_ISOLATE; 1462 RUNTIME_GET_ISOLATE;
1458 JSObject* receiver = JSObject::cast(args[0]); 1463 JSObject* receiver = JSObject::cast(args[0]);
1459 ASSERT(Smi::cast(args[1])->value() >= 0); 1464 ASSERT(Smi::cast(args[1])->value() >= 0);
1460 uint32_t index = Smi::cast(args[1])->value(); 1465 uint32_t index = Smi::cast(args[1])->value();
1461 return receiver->GetElementWithInterceptor(receiver, index); 1466 return receiver->GetElementWithInterceptor(receiver, index);
1462 } 1467 }
1463 1468
1464 1469
1465 MaybeObject* StubCompiler::CompileCallInitialize(Code::Flags flags) { 1470 MaybeObject* StubCompiler::CompileCallInitialize(Code::Flags flags) {
1466 HandleScope scope; 1471 HandleScope scope(isolate());
1467 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1472 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1468 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1473 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1469 if (kind == Code::CALL_IC) { 1474 if (kind == Code::CALL_IC) {
1470 CallIC::GenerateInitialize(masm(), argc); 1475 CallIC::GenerateInitialize(masm(), argc);
1471 } else { 1476 } else {
1472 KeyedCallIC::GenerateInitialize(masm(), argc); 1477 KeyedCallIC::GenerateInitialize(masm(), argc);
1473 } 1478 }
1474 Object* result; 1479 Object* result;
1475 { MaybeObject* maybe_result = 1480 { MaybeObject* maybe_result =
1476 GetCodeWithFlags(flags, "CompileCallInitialize"); 1481 GetCodeWithFlags(flags, "CompileCallInitialize");
1477 if (!maybe_result->ToObject(&result)) return maybe_result; 1482 if (!maybe_result->ToObject(&result)) return maybe_result;
1478 } 1483 }
1479 COUNTERS->call_initialize_stubs()->Increment(); 1484 COUNTERS->call_initialize_stubs()->Increment();
1480 Code* code = Code::cast(result); 1485 Code* code = Code::cast(result);
1481 USE(code); 1486 USE(code);
1482 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG), 1487 PROFILE(isolate(),
1488 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG),
1483 code, code->arguments_count())); 1489 code, code->arguments_count()));
1484 GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, Code::cast(code))); 1490 GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, Code::cast(code)));
1485 return result; 1491 return result;
1486 } 1492 }
1487 1493
1488 1494
1489 MaybeObject* StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) { 1495 MaybeObject* StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) {
1490 HandleScope scope; 1496 HandleScope scope(isolate());
1491 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1497 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1492 // The code of the PreMonomorphic stub is the same as the code 1498 // The code of the PreMonomorphic stub is the same as the code
1493 // of the Initialized stub. They just differ on the code object flags. 1499 // of the Initialized stub. They just differ on the code object flags.
1494 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1500 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1495 if (kind == Code::CALL_IC) { 1501 if (kind == Code::CALL_IC) {
1496 CallIC::GenerateInitialize(masm(), argc); 1502 CallIC::GenerateInitialize(masm(), argc);
1497 } else { 1503 } else {
1498 KeyedCallIC::GenerateInitialize(masm(), argc); 1504 KeyedCallIC::GenerateInitialize(masm(), argc);
1499 } 1505 }
1500 Object* result; 1506 Object* result;
1501 { MaybeObject* maybe_result = 1507 { MaybeObject* maybe_result =
1502 GetCodeWithFlags(flags, "CompileCallPreMonomorphic"); 1508 GetCodeWithFlags(flags, "CompileCallPreMonomorphic");
1503 if (!maybe_result->ToObject(&result)) return maybe_result; 1509 if (!maybe_result->ToObject(&result)) return maybe_result;
1504 } 1510 }
1505 COUNTERS->call_premonomorphic_stubs()->Increment(); 1511 COUNTERS->call_premonomorphic_stubs()->Increment();
1506 Code* code = Code::cast(result); 1512 Code* code = Code::cast(result);
1507 USE(code); 1513 USE(code);
1508 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG), 1514 PROFILE(isolate(),
1515 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG),
1509 code, code->arguments_count())); 1516 code, code->arguments_count()));
1510 GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, Code::cast(code))); 1517 GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, Code::cast(code)));
1511 return result; 1518 return result;
1512 } 1519 }
1513 1520
1514 1521
1515 MaybeObject* StubCompiler::CompileCallNormal(Code::Flags flags) { 1522 MaybeObject* StubCompiler::CompileCallNormal(Code::Flags flags) {
1516 HandleScope scope; 1523 HandleScope scope(isolate());
1517 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1524 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1518 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1525 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1519 if (kind == Code::CALL_IC) { 1526 if (kind == Code::CALL_IC) {
1520 CallIC::GenerateNormal(masm(), argc); 1527 CallIC::GenerateNormal(masm(), argc);
1521 } else { 1528 } else {
1522 KeyedCallIC::GenerateNormal(masm(), argc); 1529 KeyedCallIC::GenerateNormal(masm(), argc);
1523 } 1530 }
1524 Object* result; 1531 Object* result;
1525 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallNormal"); 1532 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallNormal");
1526 if (!maybe_result->ToObject(&result)) return maybe_result; 1533 if (!maybe_result->ToObject(&result)) return maybe_result;
1527 } 1534 }
1528 COUNTERS->call_normal_stubs()->Increment(); 1535 COUNTERS->call_normal_stubs()->Increment();
1529 Code* code = Code::cast(result); 1536 Code* code = Code::cast(result);
1530 USE(code); 1537 USE(code);
1531 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG), 1538 PROFILE(isolate(),
1539 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG),
1532 code, code->arguments_count())); 1540 code, code->arguments_count()));
1533 GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, Code::cast(code))); 1541 GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, Code::cast(code)));
1534 return result; 1542 return result;
1535 } 1543 }
1536 1544
1537 1545
1538 MaybeObject* StubCompiler::CompileCallMegamorphic(Code::Flags flags) { 1546 MaybeObject* StubCompiler::CompileCallMegamorphic(Code::Flags flags) {
1539 HandleScope scope; 1547 HandleScope scope(isolate());
1540 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1548 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1541 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1549 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1542 if (kind == Code::CALL_IC) { 1550 if (kind == Code::CALL_IC) {
1543 CallIC::GenerateMegamorphic(masm(), argc); 1551 CallIC::GenerateMegamorphic(masm(), argc);
1544 } else { 1552 } else {
1545 KeyedCallIC::GenerateMegamorphic(masm(), argc); 1553 KeyedCallIC::GenerateMegamorphic(masm(), argc);
1546 } 1554 }
1547 Object* result; 1555 Object* result;
1548 { MaybeObject* maybe_result = 1556 { MaybeObject* maybe_result =
1549 GetCodeWithFlags(flags, "CompileCallMegamorphic"); 1557 GetCodeWithFlags(flags, "CompileCallMegamorphic");
1550 if (!maybe_result->ToObject(&result)) return maybe_result; 1558 if (!maybe_result->ToObject(&result)) return maybe_result;
1551 } 1559 }
1552 COUNTERS->call_megamorphic_stubs()->Increment(); 1560 COUNTERS->call_megamorphic_stubs()->Increment();
1553 Code* code = Code::cast(result); 1561 Code* code = Code::cast(result);
1554 USE(code); 1562 USE(code);
1555 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG), 1563 PROFILE(isolate(),
1564 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG),
1556 code, code->arguments_count())); 1565 code, code->arguments_count()));
1557 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, Code::cast(code))); 1566 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, Code::cast(code)));
1558 return result; 1567 return result;
1559 } 1568 }
1560 1569
1561 1570
1562 MaybeObject* StubCompiler::CompileCallMiss(Code::Flags flags) { 1571 MaybeObject* StubCompiler::CompileCallMiss(Code::Flags flags) {
1563 HandleScope scope; 1572 HandleScope scope(isolate());
1564 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1573 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1565 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1574 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1566 if (kind == Code::CALL_IC) { 1575 if (kind == Code::CALL_IC) {
1567 CallIC::GenerateMiss(masm(), argc); 1576 CallIC::GenerateMiss(masm(), argc);
1568 } else { 1577 } else {
1569 KeyedCallIC::GenerateMiss(masm(), argc); 1578 KeyedCallIC::GenerateMiss(masm(), argc);
1570 } 1579 }
1571 Object* result; 1580 Object* result;
1572 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallMiss"); 1581 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallMiss");
1573 if (!maybe_result->ToObject(&result)) return maybe_result; 1582 if (!maybe_result->ToObject(&result)) return maybe_result;
1574 } 1583 }
1575 COUNTERS->call_megamorphic_stubs()->Increment(); 1584 COUNTERS->call_megamorphic_stubs()->Increment();
1576 Code* code = Code::cast(result); 1585 Code* code = Code::cast(result);
1577 USE(code); 1586 USE(code);
1578 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG), 1587 PROFILE(isolate(),
1588 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG),
1579 code, code->arguments_count())); 1589 code, code->arguments_count()));
1580 GDBJIT(AddCode(GDBJITInterface::CALL_MISS, Code::cast(code))); 1590 GDBJIT(AddCode(GDBJITInterface::CALL_MISS, Code::cast(code)));
1581 return result; 1591 return result;
1582 } 1592 }
1583 1593
1584 1594
1585 #ifdef ENABLE_DEBUGGER_SUPPORT 1595 #ifdef ENABLE_DEBUGGER_SUPPORT
1586 MaybeObject* StubCompiler::CompileCallDebugBreak(Code::Flags flags) { 1596 MaybeObject* StubCompiler::CompileCallDebugBreak(Code::Flags flags) {
1587 HandleScope scope; 1597 HandleScope scope(isolate());
1588 Debug::GenerateCallICDebugBreak(masm()); 1598 Debug::GenerateCallICDebugBreak(masm());
1589 Object* result; 1599 Object* result;
1590 { MaybeObject* maybe_result = 1600 { MaybeObject* maybe_result =
1591 GetCodeWithFlags(flags, "CompileCallDebugBreak"); 1601 GetCodeWithFlags(flags, "CompileCallDebugBreak");
1592 if (!maybe_result->ToObject(&result)) return maybe_result; 1602 if (!maybe_result->ToObject(&result)) return maybe_result;
1593 } 1603 }
1594 Code* code = Code::cast(result); 1604 Code* code = Code::cast(result);
1595 USE(code); 1605 USE(code);
1596 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1606 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1597 USE(kind); 1607 USE(kind);
1598 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_DEBUG_BREAK_TAG), 1608 PROFILE(isolate(),
1609 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_DEBUG_BREAK_TAG),
1599 code, code->arguments_count())); 1610 code, code->arguments_count()));
1600 return result; 1611 return result;
1601 } 1612 }
1602 1613
1603 1614
1604 MaybeObject* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) { 1615 MaybeObject* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) {
1605 HandleScope scope; 1616 HandleScope scope(isolate());
1606 // Use the same code for the the step in preparations as we do for 1617 // Use the same code for the the step in preparations as we do for
1607 // the miss case. 1618 // the miss case.
1608 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1619 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1609 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1620 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1610 if (kind == Code::CALL_IC) { 1621 if (kind == Code::CALL_IC) {
1611 CallIC::GenerateMiss(masm(), argc); 1622 CallIC::GenerateMiss(masm(), argc);
1612 } else { 1623 } else {
1613 KeyedCallIC::GenerateMiss(masm(), argc); 1624 KeyedCallIC::GenerateMiss(masm(), argc);
1614 } 1625 }
1615 Object* result; 1626 Object* result;
1616 { MaybeObject* maybe_result = 1627 { MaybeObject* maybe_result =
1617 GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn"); 1628 GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn");
1618 if (!maybe_result->ToObject(&result)) return maybe_result; 1629 if (!maybe_result->ToObject(&result)) return maybe_result;
1619 } 1630 }
1620 Code* code = Code::cast(result); 1631 Code* code = Code::cast(result);
1621 USE(code); 1632 USE(code);
1622 PROFILE(CodeCreateEvent( 1633 PROFILE(isolate(),
1634 CodeCreateEvent(
1623 CALL_LOGGER_TAG(kind, CALL_DEBUG_PREPARE_STEP_IN_TAG), 1635 CALL_LOGGER_TAG(kind, CALL_DEBUG_PREPARE_STEP_IN_TAG),
1624 code, 1636 code,
1625 code->arguments_count())); 1637 code->arguments_count()));
1626 return result; 1638 return result;
1627 } 1639 }
1628 #endif 1640 #endif
1629 1641
1630 #undef CALL_LOGGER_TAG 1642 #undef CALL_LOGGER_TAG
1631 1643
1632 MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags, 1644 MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 } 1679 }
1668 } 1680 }
1669 } 1681 }
1670 1682
1671 1683
1672 1684
1673 MaybeObject* LoadStubCompiler::GetCode(PropertyType type, String* name) { 1685 MaybeObject* LoadStubCompiler::GetCode(PropertyType type, String* name) {
1674 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type); 1686 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
1675 MaybeObject* result = GetCodeWithFlags(flags, name); 1687 MaybeObject* result = GetCodeWithFlags(flags, name);
1676 if (!result->IsFailure()) { 1688 if (!result->IsFailure()) {
1677 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, 1689 PROFILE(isolate(),
1690 CodeCreateEvent(Logger::LOAD_IC_TAG,
1678 Code::cast(result->ToObjectUnchecked()), 1691 Code::cast(result->ToObjectUnchecked()),
1679 name)); 1692 name));
1680 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, 1693 GDBJIT(AddCode(GDBJITInterface::LOAD_IC,
1681 name, 1694 name,
1682 Code::cast(result->ToObjectUnchecked()))); 1695 Code::cast(result->ToObjectUnchecked())));
1683 } 1696 }
1684 return result; 1697 return result;
1685 } 1698 }
1686 1699
1687 1700
1688 MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) { 1701 MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) {
1689 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, type); 1702 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, type);
1690 MaybeObject* result = GetCodeWithFlags(flags, name); 1703 MaybeObject* result = GetCodeWithFlags(flags, name);
1691 if (!result->IsFailure()) { 1704 if (!result->IsFailure()) {
1692 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, 1705 PROFILE(isolate(),
1706 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG,
1693 Code::cast(result->ToObjectUnchecked()), 1707 Code::cast(result->ToObjectUnchecked()),
1694 name)); 1708 name));
1695 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, 1709 GDBJIT(AddCode(GDBJITInterface::LOAD_IC,
1696 name, 1710 name,
1697 Code::cast(result->ToObjectUnchecked()))); 1711 Code::cast(result->ToObjectUnchecked())));
1698 } 1712 }
1699 return result; 1713 return result;
1700 } 1714 }
1701 1715
1702 1716
1703 MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) { 1717 MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) {
1704 Code::Flags flags = Code::ComputeMonomorphicFlags( 1718 Code::Flags flags = Code::ComputeMonomorphicFlags(
1705 Code::STORE_IC, type, strict_mode_); 1719 Code::STORE_IC, type, strict_mode_);
1706 MaybeObject* result = GetCodeWithFlags(flags, name); 1720 MaybeObject* result = GetCodeWithFlags(flags, name);
1707 if (!result->IsFailure()) { 1721 if (!result->IsFailure()) {
1708 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, 1722 PROFILE(isolate(),
1723 CodeCreateEvent(Logger::STORE_IC_TAG,
1709 Code::cast(result->ToObjectUnchecked()), 1724 Code::cast(result->ToObjectUnchecked()),
1710 name)); 1725 name));
1711 GDBJIT(AddCode(GDBJITInterface::STORE_IC, 1726 GDBJIT(AddCode(GDBJITInterface::STORE_IC,
1712 name, 1727 name,
1713 Code::cast(result->ToObjectUnchecked()))); 1728 Code::cast(result->ToObjectUnchecked())));
1714 } 1729 }
1715 return result; 1730 return result;
1716 } 1731 }
1717 1732
1718 1733
1719 MaybeObject* KeyedStoreStubCompiler::GetCode(PropertyType type, String* name) { 1734 MaybeObject* KeyedStoreStubCompiler::GetCode(PropertyType type, String* name) {
1720 Code::Flags flags = Code::ComputeMonomorphicFlags( 1735 Code::Flags flags = Code::ComputeMonomorphicFlags(
1721 Code::KEYED_STORE_IC, type, strict_mode_); 1736 Code::KEYED_STORE_IC, type, strict_mode_);
1722 MaybeObject* result = GetCodeWithFlags(flags, name); 1737 MaybeObject* result = GetCodeWithFlags(flags, name);
1723 if (!result->IsFailure()) { 1738 if (!result->IsFailure()) {
1724 PROFILE(CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, 1739 PROFILE(isolate(),
1740 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
1725 Code::cast(result->ToObjectUnchecked()), 1741 Code::cast(result->ToObjectUnchecked()),
1726 name)); 1742 name));
1727 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, 1743 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC,
1728 name, 1744 name,
1729 Code::cast(result->ToObjectUnchecked()))); 1745 Code::cast(result->ToObjectUnchecked())));
1730 } 1746 }
1731 return result; 1747 return result;
1732 } 1748 }
1733 1749
1734 1750
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 1812
1797 1813
1798 MaybeObject* ConstructStubCompiler::GetCode() { 1814 MaybeObject* ConstructStubCompiler::GetCode() {
1799 Code::Flags flags = Code::ComputeFlags(Code::STUB); 1815 Code::Flags flags = Code::ComputeFlags(Code::STUB);
1800 Object* result; 1816 Object* result;
1801 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ConstructStub"); 1817 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ConstructStub");
1802 if (!maybe_result->ToObject(&result)) return maybe_result; 1818 if (!maybe_result->ToObject(&result)) return maybe_result;
1803 } 1819 }
1804 Code* code = Code::cast(result); 1820 Code* code = Code::cast(result);
1805 USE(code); 1821 USE(code);
1806 PROFILE(CodeCreateEvent(Logger::STUB_TAG, code, "ConstructStub")); 1822 PROFILE(isolate(), CodeCreateEvent(Logger::STUB_TAG, code, "ConstructStub"));
1807 GDBJIT(AddCode(GDBJITInterface::STUB, "ConstructStub", Code::cast(code))); 1823 GDBJIT(AddCode(GDBJITInterface::STUB, "ConstructStub", Code::cast(code)));
1808 return result; 1824 return result;
1809 } 1825 }
1810 1826
1811 1827
1812 CallOptimization::CallOptimization(LookupResult* lookup) { 1828 CallOptimization::CallOptimization(LookupResult* lookup) {
1813 if (!lookup->IsProperty() || !lookup->IsCacheable() || 1829 if (!lookup->IsProperty() || !lookup->IsCacheable() ||
1814 lookup->type() != CONSTANT_FUNCTION) { 1830 lookup->type() != CONSTANT_FUNCTION) {
1815 Initialize(NULL); 1831 Initialize(NULL);
1816 } else { 1832 } else {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 } 1892 }
1877 1893
1878 1894
1879 MaybeObject* ExternalArrayStubCompiler::GetCode(Code::Flags flags) { 1895 MaybeObject* ExternalArrayStubCompiler::GetCode(Code::Flags flags) {
1880 Object* result; 1896 Object* result;
1881 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ExternalArrayStub"); 1897 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ExternalArrayStub");
1882 if (!maybe_result->ToObject(&result)) return maybe_result; 1898 if (!maybe_result->ToObject(&result)) return maybe_result;
1883 } 1899 }
1884 Code* code = Code::cast(result); 1900 Code* code = Code::cast(result);
1885 USE(code); 1901 USE(code);
1886 PROFILE(CodeCreateEvent(Logger::STUB_TAG, code, "ExternalArrayStub")); 1902 PROFILE(isolate(),CodeCreateEvent(Logger::STUB_TAG, code, "ExternalArrayStub") );
1887 return result; 1903 return result;
1888 } 1904 }
1889 1905
1890 1906
1891 } } // namespace v8::internal 1907 } } // namespace v8::internal
OLDNEW
« src/compiler.cc ('K') | « src/stub-cache.h ('k') | src/top.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698