| OLD | NEW |
| 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 <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_MIPS64 | 9 #if V8_TARGET_ARCH_MIPS64 |
| 10 | 10 |
| (...skipping 3216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3227 // pushing on the stack. | 3227 // pushing on the stack. |
| 3228 // Set up the code object (a5) and the state (a6) for pushing. | 3228 // Set up the code object (a5) and the state (a6) for pushing. |
| 3229 unsigned state = | 3229 unsigned state = |
| 3230 StackHandler::IndexField::encode(handler_index) | | 3230 StackHandler::IndexField::encode(handler_index) | |
| 3231 StackHandler::KindField::encode(kind); | 3231 StackHandler::KindField::encode(kind); |
| 3232 li(a5, Operand(CodeObject()), CONSTANT_SIZE); | 3232 li(a5, Operand(CodeObject()), CONSTANT_SIZE); |
| 3233 li(a6, Operand(state)); | 3233 li(a6, Operand(state)); |
| 3234 | 3234 |
| 3235 // Push the frame pointer, context, state, and code object. | 3235 // Push the frame pointer, context, state, and code object. |
| 3236 if (kind == StackHandler::JS_ENTRY) { | 3236 if (kind == StackHandler::JS_ENTRY) { |
| 3237 DCHECK_EQ(Smi::FromInt(0), 0); | 3237 DCHECK_EQ(static_cast<Smi*>(0), Smi::FromInt(0)); |
| 3238 // The second zero_reg indicates no context. | 3238 // The second zero_reg indicates no context. |
| 3239 // The first zero_reg is the NULL frame pointer. | 3239 // The first zero_reg is the NULL frame pointer. |
| 3240 // The operands are reversed to match the order of MultiPush/Pop. | 3240 // The operands are reversed to match the order of MultiPush/Pop. |
| 3241 Push(zero_reg, zero_reg, a6, a5); | 3241 Push(zero_reg, zero_reg, a6, a5); |
| 3242 } else { | 3242 } else { |
| 3243 MultiPush(a5.bit() | a6.bit() | cp.bit() | fp.bit()); | 3243 MultiPush(a5.bit() | a6.bit() | cp.bit() | fp.bit()); |
| 3244 } | 3244 } |
| 3245 | 3245 |
| 3246 // Link the current handler as the next handler. | 3246 // Link the current handler as the next handler. |
| 3247 li(a6, Operand(ExternalReference(Isolate::kHandlerAddress, isolate()))); | 3247 li(a6, Operand(ExternalReference(Isolate::kHandlerAddress, isolate()))); |
| (...skipping 1967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5215 | 5215 |
| 5216 | 5216 |
| 5217 void MacroAssembler::JumpIfNotBothSmi(Register reg1, | 5217 void MacroAssembler::JumpIfNotBothSmi(Register reg1, |
| 5218 Register reg2, | 5218 Register reg2, |
| 5219 Label* on_not_both_smi) { | 5219 Label* on_not_both_smi) { |
| 5220 STATIC_ASSERT(kSmiTag == 0); | 5220 STATIC_ASSERT(kSmiTag == 0); |
| 5221 // TODO(plind): Find some better to fix this assert issue. | 5221 // TODO(plind): Find some better to fix this assert issue. |
| 5222 #if defined(__APPLE__) | 5222 #if defined(__APPLE__) |
| 5223 DCHECK_EQ(1, kSmiTagMask); | 5223 DCHECK_EQ(1, kSmiTagMask); |
| 5224 #else | 5224 #else |
| 5225 DCHECK_EQ((uint64_t)1, kSmiTagMask); | 5225 DCHECK_EQ((int64_t)1, kSmiTagMask); |
| 5226 #endif | 5226 #endif |
| 5227 or_(at, reg1, reg2); | 5227 or_(at, reg1, reg2); |
| 5228 JumpIfNotSmi(at, on_not_both_smi); | 5228 JumpIfNotSmi(at, on_not_both_smi); |
| 5229 } | 5229 } |
| 5230 | 5230 |
| 5231 | 5231 |
| 5232 void MacroAssembler::JumpIfEitherSmi(Register reg1, | 5232 void MacroAssembler::JumpIfEitherSmi(Register reg1, |
| 5233 Register reg2, | 5233 Register reg2, |
| 5234 Label* on_either_smi) { | 5234 Label* on_either_smi) { |
| 5235 STATIC_ASSERT(kSmiTag == 0); | 5235 STATIC_ASSERT(kSmiTag == 0); |
| 5236 // TODO(plind): Find some better to fix this assert issue. | 5236 // TODO(plind): Find some better to fix this assert issue. |
| 5237 #if defined(__APPLE__) | 5237 #if defined(__APPLE__) |
| 5238 DCHECK_EQ(1, kSmiTagMask); | 5238 DCHECK_EQ(1, kSmiTagMask); |
| 5239 #else | 5239 #else |
| 5240 DCHECK_EQ((uint64_t)1, kSmiTagMask); | 5240 DCHECK_EQ((int64_t)1, kSmiTagMask); |
| 5241 #endif | 5241 #endif |
| 5242 // Both Smi tags must be 1 (not Smi). | 5242 // Both Smi tags must be 1 (not Smi). |
| 5243 and_(at, reg1, reg2); | 5243 and_(at, reg1, reg2); |
| 5244 JumpIfSmi(at, on_either_smi); | 5244 JumpIfSmi(at, on_either_smi); |
| 5245 } | 5245 } |
| 5246 | 5246 |
| 5247 | 5247 |
| 5248 void MacroAssembler::AssertNotSmi(Register object) { | 5248 void MacroAssembler::AssertNotSmi(Register object) { |
| 5249 if (emit_debug_code()) { | 5249 if (emit_debug_code()) { |
| 5250 STATIC_ASSERT(kSmiTag == 0); | 5250 STATIC_ASSERT(kSmiTag == 0); |
| (...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6201 } | 6201 } |
| 6202 if (mag.shift > 0) sra(result, result, mag.shift); | 6202 if (mag.shift > 0) sra(result, result, mag.shift); |
| 6203 srl(at, dividend, 31); | 6203 srl(at, dividend, 31); |
| 6204 Addu(result, result, Operand(at)); | 6204 Addu(result, result, Operand(at)); |
| 6205 } | 6205 } |
| 6206 | 6206 |
| 6207 | 6207 |
| 6208 } } // namespace v8::internal | 6208 } } // namespace v8::internal |
| 6209 | 6209 |
| 6210 #endif // V8_TARGET_ARCH_MIPS64 | 6210 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |