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

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

Issue 70233011: MIPS: Remove unused LoadNumber* from macro assembler. (Closed) Base URL: https://github.com/v8/v8.git@gbl
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « no previous file | 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 4494 matching lines...) Expand 10 before | Expand all | Expand 10 after
4505 Label ok, fail; 4505 Label ok, fail;
4506 CheckMap(map, scratch, Heap::kMetaMapRootIndex, &fail, DO_SMI_CHECK); 4506 CheckMap(map, scratch, Heap::kMetaMapRootIndex, &fail, DO_SMI_CHECK);
4507 Branch(&ok); 4507 Branch(&ok);
4508 bind(&fail); 4508 bind(&fail);
4509 Abort(kGlobalFunctionsMustHaveInitialMap); 4509 Abort(kGlobalFunctionsMustHaveInitialMap);
4510 bind(&ok); 4510 bind(&ok);
4511 } 4511 }
4512 } 4512 }
4513 4513
4514 4514
4515 void MacroAssembler::LoadNumber(Register object,
4516 FPURegister dst,
4517 Register heap_number_map,
4518 Register scratch,
4519 Label* not_number) {
4520 Label is_smi, done;
4521
4522 UntagAndJumpIfSmi(scratch, object, &is_smi);
4523 JumpIfNotHeapNumber(object, heap_number_map, scratch, not_number);
4524
4525 ldc1(dst, FieldMemOperand(object, HeapNumber::kValueOffset));
4526 Branch(&done);
4527
4528 bind(&is_smi);
4529 mtc1(scratch, dst);
4530 cvt_d_w(dst, dst);
4531
4532 bind(&done);
4533 }
4534
4535
4536 void MacroAssembler::LoadNumberAsInt32Double(Register object,
4537 DoubleRegister double_dst,
4538 Register heap_number_map,
4539 Register scratch1,
4540 Register scratch2,
4541 FPURegister double_scratch,
4542 Label* not_int32) {
4543 ASSERT(!scratch1.is(object) && !scratch2.is(object));
4544 ASSERT(!scratch1.is(scratch2));
4545 ASSERT(!heap_number_map.is(object) &&
4546 !heap_number_map.is(scratch1) &&
4547 !heap_number_map.is(scratch2));
4548
4549 Label done, obj_is_not_smi;
4550
4551 UntagAndJumpIfNotSmi(scratch1, object, &obj_is_not_smi);
4552 mtc1(scratch1, double_scratch);
4553 cvt_d_w(double_dst, double_scratch);
4554 Branch(&done);
4555
4556 bind(&obj_is_not_smi);
4557 JumpIfNotHeapNumber(object, heap_number_map, scratch1, not_int32);
4558
4559 // Load the number.
4560 // Load the double value.
4561 ldc1(double_dst, FieldMemOperand(object, HeapNumber::kValueOffset));
4562
4563 Register except_flag = scratch2;
4564 EmitFPUTruncate(kRoundToZero,
4565 scratch1,
4566 double_dst,
4567 at,
4568 double_scratch,
4569 except_flag,
4570 kCheckForInexactConversion);
4571
4572 // Jump to not_int32 if the operation did not succeed.
4573 Branch(not_int32, ne, except_flag, Operand(zero_reg));
4574 bind(&done);
4575 }
4576
4577
4578 void MacroAssembler::LoadNumberAsInt32(Register object,
4579 Register dst,
4580 Register heap_number_map,
4581 Register scratch1,
4582 Register scratch2,
4583 FPURegister double_scratch0,
4584 FPURegister double_scratch1,
4585 Label* not_int32) {
4586 ASSERT(!dst.is(object));
4587 ASSERT(!scratch1.is(object) && !scratch2.is(object));
4588 ASSERT(!scratch1.is(scratch2));
4589
4590 Label done, maybe_undefined;
4591
4592 UntagAndJumpIfSmi(dst, object, &done);
4593
4594 JumpIfNotHeapNumber(object, heap_number_map, scratch1, &maybe_undefined);
4595
4596 // Object is a heap number.
4597 // Convert the floating point value to a 32-bit integer.
4598 // Load the double value.
4599 ldc1(double_scratch0, FieldMemOperand(object, HeapNumber::kValueOffset));
4600
4601 Register except_flag = scratch2;
4602 EmitFPUTruncate(kRoundToZero,
4603 dst,
4604 double_scratch0,
4605 scratch1,
4606 double_scratch1,
4607 except_flag,
4608 kCheckForInexactConversion);
4609
4610 // Jump to not_int32 if the operation did not succeed.
4611 Branch(not_int32, ne, except_flag, Operand(zero_reg));
4612 Branch(&done);
4613
4614 bind(&maybe_undefined);
4615 LoadRoot(at, Heap::kUndefinedValueRootIndex);
4616 Branch(not_int32, ne, object, Operand(at));
4617 // |undefined| is truncated to 0.
4618 li(dst, Operand(Smi::FromInt(0)));
4619 // Fall through.
4620
4621 bind(&done);
4622 }
4623
4624
4625 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { 4515 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) {
4626 if (frame_mode == BUILD_STUB_FRAME) { 4516 if (frame_mode == BUILD_STUB_FRAME) {
4627 Push(ra, fp, cp); 4517 Push(ra, fp, cp);
4628 Push(Smi::FromInt(StackFrame::STUB)); 4518 Push(Smi::FromInt(StackFrame::STUB));
4629 // Adjust FP to point to saved FP. 4519 // Adjust FP to point to saved FP.
4630 Addu(fp, sp, Operand(2 * kPointerSize)); 4520 Addu(fp, sp, Operand(2 * kPointerSize));
4631 } else { 4521 } else {
4632 PredictableCodeSizeScope predictible_code_size_scope( 4522 PredictableCodeSizeScope predictible_code_size_scope(
4633 this, kNoCodeAgeSequenceLength * Assembler::kInstrSize); 4523 this, kNoCodeAgeSequenceLength * Assembler::kInstrSize);
4634 // The following three instructions must remain together and unmodified 4524 // The following three instructions must remain together and unmodified
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after
5770 opcode == BGTZL); 5660 opcode == BGTZL);
5771 opcode = (cond == eq) ? BEQ : BNE; 5661 opcode = (cond == eq) ? BEQ : BNE;
5772 instr = (instr & ~kOpcodeMask) | opcode; 5662 instr = (instr & ~kOpcodeMask) | opcode;
5773 masm_.emit(instr); 5663 masm_.emit(instr);
5774 } 5664 }
5775 5665
5776 5666
5777 } } // namespace v8::internal 5667 } } // namespace v8::internal
5778 5668
5779 #endif // V8_TARGET_ARCH_MIPS 5669 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698