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

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

Issue 125085: Fix ambiguous method errors by explicitly passing reloc info. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' 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 | Annotate | Revision Log
« src/arm/codegen-arm.cc ('K') | « src/arm/debug-arm.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 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 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 if (type == StackFrame::EXIT_DEBUG) { 335 if (type == StackFrame::EXIT_DEBUG) {
336 // This code intentionally clobbers r2 and r3. 336 // This code intentionally clobbers r2 and r3.
337 const int kCallerSavedSize = kNumJSCallerSaved * kPointerSize; 337 const int kCallerSavedSize = kNumJSCallerSaved * kPointerSize;
338 const int kOffset = ExitFrameConstants::kDebugMarkOffset - kCallerSavedSize; 338 const int kOffset = ExitFrameConstants::kDebugMarkOffset - kCallerSavedSize;
339 add(r3, fp, Operand(kOffset)); 339 add(r3, fp, Operand(kOffset));
340 CopyRegistersFromStackToMemory(r3, r2, kJSCallerSaved); 340 CopyRegistersFromStackToMemory(r3, r2, kJSCallerSaved);
341 } 341 }
342 #endif 342 #endif
343 343
344 // Clear top frame. 344 // Clear top frame.
345 mov(r3, Operand(0)); 345 mov(r3, Operand(0, RelocInfo::NONE));
346 mov(ip, Operand(ExternalReference(Top::k_c_entry_fp_address))); 346 mov(ip, Operand(ExternalReference(Top::k_c_entry_fp_address)));
347 str(r3, MemOperand(ip)); 347 str(r3, MemOperand(ip));
348 348
349 // Restore current context from top and clear it in debug mode. 349 // Restore current context from top and clear it in debug mode.
350 mov(ip, Operand(ExternalReference(Top::k_context_address))); 350 mov(ip, Operand(ExternalReference(Top::k_context_address)));
351 ldr(cp, MemOperand(ip)); 351 ldr(cp, MemOperand(ip));
352 #ifdef DEBUG 352 #ifdef DEBUG
353 str(r3, MemOperand(ip)); 353 str(r3, MemOperand(ip));
354 #endif 354 #endif
355 355
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 ASSERT(StackHandlerConstants::kNextOffset == 0); 574 ASSERT(StackHandlerConstants::kNextOffset == 0);
575 push(r1); 575 push(r1);
576 // Link this handler as the new current one. 576 // Link this handler as the new current one.
577 str(sp, MemOperand(r3)); 577 str(sp, MemOperand(r3));
578 } else { 578 } else {
579 // Must preserve r0-r4, r5-r7 are available. 579 // Must preserve r0-r4, r5-r7 are available.
580 ASSERT(try_location == IN_JS_ENTRY); 580 ASSERT(try_location == IN_JS_ENTRY);
581 // The frame pointer does not point to a JS frame so we save NULL 581 // The frame pointer does not point to a JS frame so we save NULL
582 // for fp. We expect the code throwing an exception to check fp 582 // for fp. We expect the code throwing an exception to check fp
583 // before dereferencing it to restore the context. 583 // before dereferencing it to restore the context.
584 mov(ip, Operand(0)); // To save a NULL frame pointer. 584 mov(ip, Operand(0, RelocInfo::NONE)); // To save a NULL frame pointer.
585 mov(r6, Operand(StackHandler::ENTRY)); 585 mov(r6, Operand(StackHandler::ENTRY));
586 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize 586 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize
587 && StackHandlerConstants::kFPOffset == 2 * kPointerSize 587 && StackHandlerConstants::kFPOffset == 2 * kPointerSize
588 && StackHandlerConstants::kPCOffset == 3 * kPointerSize); 588 && StackHandlerConstants::kPCOffset == 3 * kPointerSize);
589 stm(db_w, sp, r6.bit() | ip.bit() | lr.bit()); 589 stm(db_w, sp, r6.bit() | ip.bit() | lr.bit());
590 // Save the current handler as the next handler. 590 // Save the current handler as the next handler.
591 mov(r7, Operand(ExternalReference(Top::k_handler_address))); 591 mov(r7, Operand(ExternalReference(Top::k_handler_address)));
592 ldr(r6, MemOperand(r7)); 592 ldr(r6, MemOperand(r7));
593 ASSERT(StackHandlerConstants::kNextOffset == 0); 593 ASSERT(StackHandlerConstants::kNextOffset == 0);
594 push(r6); 594 push(r6);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 Label same_contexts; 677 Label same_contexts;
678 678
679 ASSERT(!holder_reg.is(scratch)); 679 ASSERT(!holder_reg.is(scratch));
680 ASSERT(!holder_reg.is(ip)); 680 ASSERT(!holder_reg.is(ip));
681 ASSERT(!scratch.is(ip)); 681 ASSERT(!scratch.is(ip));
682 682
683 // Load current lexical context from the stack frame. 683 // Load current lexical context from the stack frame.
684 ldr(scratch, MemOperand(fp, StandardFrameConstants::kContextOffset)); 684 ldr(scratch, MemOperand(fp, StandardFrameConstants::kContextOffset));
685 // In debug mode, make sure the lexical context is set. 685 // In debug mode, make sure the lexical context is set.
686 #ifdef DEBUG 686 #ifdef DEBUG
687 cmp(scratch, Operand(0)); 687 cmp(scratch, Operand(0, RelocInfo::NONE));
688 Check(ne, "we should not have an empty lexical context"); 688 Check(ne, "we should not have an empty lexical context");
689 #endif 689 #endif
690 690
691 // Load the global context of the current context. 691 // Load the global context of the current context.
692 int offset = Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize; 692 int offset = Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize;
693 ldr(scratch, FieldMemOperand(scratch, offset)); 693 ldr(scratch, FieldMemOperand(scratch, offset));
694 ldr(scratch, FieldMemOperand(scratch, GlobalObject::kGlobalContextOffset)); 694 ldr(scratch, FieldMemOperand(scratch, GlobalObject::kGlobalContextOffset));
695 695
696 // Check the context is a global context. 696 // Check the context is a global context.
697 if (FLAG_debug_code) { 697 if (FLAG_debug_code) {
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 #endif 992 #endif
993 mov(r0, Operand(p0)); 993 mov(r0, Operand(p0));
994 push(r0); 994 push(r0);
995 mov(r0, Operand(Smi::FromInt(p1 - p0))); 995 mov(r0, Operand(Smi::FromInt(p1 - p0)));
996 push(r0); 996 push(r0);
997 CallRuntime(Runtime::kAbort, 2); 997 CallRuntime(Runtime::kAbort, 2);
998 // will not return here 998 // will not return here
999 } 999 }
1000 1000
1001 } } // namespace v8::internal 1001 } } // namespace v8::internal
OLDNEW
« src/arm/codegen-arm.cc ('K') | « src/arm/debug-arm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698