OLD | NEW |
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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 } | 155 } |
156 | 156 |
157 | 157 |
158 void MacroAssembler::StackLimitCheck(Label* on_stack_overflow) { | 158 void MacroAssembler::StackLimitCheck(Label* on_stack_overflow) { |
159 LoadRoot(ip, Heap::kStackLimitRootIndex); | 159 LoadRoot(ip, Heap::kStackLimitRootIndex); |
160 cmp(sp, Operand(ip)); | 160 cmp(sp, Operand(ip)); |
161 b(lo, on_stack_overflow); | 161 b(lo, on_stack_overflow); |
162 } | 162 } |
163 | 163 |
164 | 164 |
| 165 void MacroAssembler::Drop(int stack_elements, Condition cond) { |
| 166 if (stack_elements > 0) { |
| 167 add(sp, sp, Operand(stack_elements * kPointerSize), LeaveCC, cond); |
| 168 } |
| 169 } |
| 170 |
| 171 |
| 172 void MacroAssembler::Call(Label* target) { |
| 173 bl(target); |
| 174 } |
| 175 |
| 176 |
| 177 void MacroAssembler::Move(Register dst, Handle<Object> value) { |
| 178 mov(dst, Operand(value)); |
| 179 } |
165 | 180 |
166 | 181 |
167 void MacroAssembler::SmiJumpTable(Register index, Vector<Label*> targets) { | 182 void MacroAssembler::SmiJumpTable(Register index, Vector<Label*> targets) { |
168 // Empty the const pool. | 183 // Empty the const pool. |
169 CheckConstPool(true, true); | 184 CheckConstPool(true, true); |
170 add(pc, pc, Operand(index, | 185 add(pc, pc, Operand(index, |
171 LSL, | 186 LSL, |
172 assembler::arm::Instr::kInstrSizeLog2 - kSmiTagSize)); | 187 assembler::arm::Instr::kInstrSizeLog2 - kSmiTagSize)); |
173 BlockConstPoolBefore(pc_offset() + (targets.length() + 1) * kInstrSize); | 188 BlockConstPoolBefore(pc_offset() + (targets.length() + 1) * kInstrSize); |
174 nop(); // Jump table alignment. | 189 nop(); // Jump table alignment. |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 mov(r7, Operand(ExternalReference(Top::k_handler_address))); | 636 mov(r7, Operand(ExternalReference(Top::k_handler_address))); |
622 ldr(r6, MemOperand(r7)); | 637 ldr(r6, MemOperand(r7)); |
623 ASSERT(StackHandlerConstants::kNextOffset == 0); | 638 ASSERT(StackHandlerConstants::kNextOffset == 0); |
624 push(r6); | 639 push(r6); |
625 // Link this handler as the new current one. | 640 // Link this handler as the new current one. |
626 str(sp, MemOperand(r7)); | 641 str(sp, MemOperand(r7)); |
627 } | 642 } |
628 } | 643 } |
629 | 644 |
630 | 645 |
| 646 void MacroAssembler::PopTryHandler() { |
| 647 ASSERT_EQ(0, StackHandlerConstants::kNextOffset); |
| 648 pop(r1); |
| 649 mov(ip, Operand(ExternalReference(Top::k_handler_address))); |
| 650 add(sp, sp, Operand(StackHandlerConstants::kSize - kPointerSize)); |
| 651 str(r1, MemOperand(ip)); |
| 652 } |
| 653 |
| 654 |
631 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg, | 655 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg, |
632 JSObject* holder, Register holder_reg, | 656 JSObject* holder, Register holder_reg, |
633 Register scratch, | 657 Register scratch, |
634 Label* miss) { | 658 Label* miss) { |
635 // Make sure there's no overlap between scratch and the other | 659 // Make sure there's no overlap between scratch and the other |
636 // registers. | 660 // registers. |
637 ASSERT(!scratch.is(object_reg) && !scratch.is(holder_reg)); | 661 ASSERT(!scratch.is(object_reg) && !scratch.is(holder_reg)); |
638 | 662 |
639 // Keep track of the current object in register reg. | 663 // Keep track of the current object in register reg. |
640 Register reg = object_reg; | 664 Register reg = object_reg; |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1226 } | 1250 } |
1227 | 1251 |
1228 | 1252 |
1229 void CodePatcher::Emit(Address addr) { | 1253 void CodePatcher::Emit(Address addr) { |
1230 masm()->emit(reinterpret_cast<Instr>(addr)); | 1254 masm()->emit(reinterpret_cast<Instr>(addr)); |
1231 } | 1255 } |
1232 #endif // ENABLE_DEBUGGER_SUPPORT | 1256 #endif // ENABLE_DEBUGGER_SUPPORT |
1233 | 1257 |
1234 | 1258 |
1235 } } // namespace v8::internal | 1259 } } // namespace v8::internal |
OLD | NEW |