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

Side by Side Diff: src/arm/assembler-arm.h

Issue 14188016: ARM: clean up code now that ARMv6 is the baseline. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 8 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 | « no previous file | src/arm/assembler-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 // Here we are patching the address in the constant pool, not the actual call 656 // Here we are patching the address in the constant pool, not the actual call
657 // instruction. The address in the constant pool is the same size as a 657 // instruction. The address in the constant pool is the same size as a
658 // pointer. 658 // pointer.
659 static const int kSpecialTargetSize = kPointerSize; 659 static const int kSpecialTargetSize = kPointerSize;
660 660
661 // Size of an instruction. 661 // Size of an instruction.
662 static const int kInstrSize = sizeof(Instr); 662 static const int kInstrSize = sizeof(Instr);
663 663
664 // Distance between start of patched return sequence and the emitted address 664 // Distance between start of patched return sequence and the emitted address
665 // to jump to. 665 // to jump to.
666 #ifdef USE_BLX
667 // Patched return sequence is: 666 // Patched return sequence is:
668 // ldr ip, [pc, #0] @ emited address and start 667 // ldr ip, [pc, #0] @ emited address and start
669 // blx ip 668 // blx ip
670 static const int kPatchReturnSequenceAddressOffset = 0 * kInstrSize; 669 static const int kPatchReturnSequenceAddressOffset = 0 * kInstrSize;
671 #else
672 // Patched return sequence is:
673 // mov lr, pc @ start of sequence
674 // ldr pc, [pc, #-4] @ emited address
675 static const int kPatchReturnSequenceAddressOffset = kInstrSize;
676 #endif
677 670
678 // Distance between start of patched debug break slot and the emitted address 671 // Distance between start of patched debug break slot and the emitted address
679 // to jump to. 672 // to jump to.
680 #ifdef USE_BLX
681 // Patched debug break slot code is: 673 // Patched debug break slot code is:
682 // ldr ip, [pc, #0] @ emited address and start 674 // ldr ip, [pc, #0] @ emited address and start
683 // blx ip 675 // blx ip
684 static const int kPatchDebugBreakSlotAddressOffset = 0 * kInstrSize; 676 static const int kPatchDebugBreakSlotAddressOffset = 0 * kInstrSize;
685 #else
686 // Patched debug break slot code is:
687 // mov lr, pc @ start of sequence
688 // ldr pc, [pc, #-4] @ emited address
689 static const int kPatchDebugBreakSlotAddressOffset = kInstrSize;
690 #endif
691 677
692 #ifdef USE_BLX
693 static const int kPatchDebugBreakSlotReturnOffset = 2 * kInstrSize; 678 static const int kPatchDebugBreakSlotReturnOffset = 2 * kInstrSize;
694 #else
695 static const int kPatchDebugBreakSlotReturnOffset = kInstrSize;
696 #endif
697 679
698 // Difference between address of current opcode and value read from pc 680 // Difference between address of current opcode and value read from pc
699 // register. 681 // register.
700 static const int kPcLoadDelta = 8; 682 static const int kPcLoadDelta = 8;
701 683
702 static const int kJSReturnSequenceInstructions = 4; 684 static const int kJSReturnSequenceInstructions = 4;
703 static const int kDebugBreakSlotInstructions = 3; 685 static const int kDebugBreakSlotInstructions = 3;
704 static const int kDebugBreakSlotLength = 686 static const int kDebugBreakSlotLength =
705 kDebugBreakSlotInstructions * kInstrSize; 687 kDebugBreakSlotInstructions * kInstrSize;
706 688
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 1105
1124 void pop() { 1106 void pop() {
1125 add(sp, sp, Operand(kPointerSize)); 1107 add(sp, sp, Operand(kPointerSize));
1126 } 1108 }
1127 1109
1128 // Jump unconditionally to given label. 1110 // Jump unconditionally to given label.
1129 void jmp(Label* L) { b(L, al); } 1111 void jmp(Label* L) { b(L, al); }
1130 1112
1131 static bool use_immediate_embedded_pointer_loads( 1113 static bool use_immediate_embedded_pointer_loads(
1132 const Assembler* assembler) { 1114 const Assembler* assembler) {
1133 #ifdef USE_BLX
1134 return CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) && 1115 return CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) &&
1135 (assembler == NULL || !assembler->predictable_code_size()); 1116 (assembler == NULL || !assembler->predictable_code_size());
1136 #else
1137 // If not using BLX, all loads from the constant pool cannot be immediate,
1138 // because the ldr pc, [pc + #xxxx] used for calls must be a single
1139 // instruction and cannot be easily distinguished out of context from
1140 // other loads that could use movw/movt.
1141 return false;
1142 #endif
1143 } 1117 }
1144 1118
1145 // Check the code size generated from label to here. 1119 // Check the code size generated from label to here.
1146 int SizeOfCodeGeneratedSince(Label* label) { 1120 int SizeOfCodeGeneratedSince(Label* label) {
1147 return pc_offset() - label->pos(); 1121 return pc_offset() - label->pos();
1148 } 1122 }
1149 1123
1150 // Check the number of instructions generated from label to here. 1124 // Check the number of instructions generated from label to here.
1151 int InstructionsGeneratedSince(Label* label) { 1125 int InstructionsGeneratedSince(Label* label) {
1152 return SizeOfCodeGeneratedSince(label) / kInstrSize; 1126 return SizeOfCodeGeneratedSince(label) / kInstrSize;
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1440 public: 1414 public:
1441 explicit EnsureSpace(Assembler* assembler) { 1415 explicit EnsureSpace(Assembler* assembler) {
1442 assembler->CheckBuffer(); 1416 assembler->CheckBuffer();
1443 } 1417 }
1444 }; 1418 };
1445 1419
1446 1420
1447 } } // namespace v8::internal 1421 } } // namespace v8::internal
1448 1422
1449 #endif // V8_ARM_ASSEMBLER_ARM_H_ 1423 #endif // V8_ARM_ASSEMBLER_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698