| 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 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ | 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ |
| 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ | 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ |
| 7 | 7 |
| 8 #include "assembler.h" | 8 #include "assembler.h" |
| 9 #include "frames.h" | 9 #include "frames.h" |
| 10 #include "globals.h" | 10 #include "globals.h" |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 Condition CheckUInteger32ValidSmiValue(Register src); | 463 Condition CheckUInteger32ValidSmiValue(Register src); |
| 464 | 464 |
| 465 // Check whether src is a Smi, and set dst to zero if it is a smi, | 465 // Check whether src is a Smi, and set dst to zero if it is a smi, |
| 466 // and to one if it isn't. | 466 // and to one if it isn't. |
| 467 void CheckSmiToIndicator(Register dst, Register src); | 467 void CheckSmiToIndicator(Register dst, Register src); |
| 468 void CheckSmiToIndicator(Register dst, const Operand& src); | 468 void CheckSmiToIndicator(Register dst, const Operand& src); |
| 469 | 469 |
| 470 // Test-and-jump functions. Typically combines a check function | 470 // Test-and-jump functions. Typically combines a check function |
| 471 // above with a conditional jump. | 471 // above with a conditional jump. |
| 472 | 472 |
| 473 // Jump if the value can be represented by a smi. |
| 474 void JumpIfValidSmiValue(Register src, Label* on_valid, |
| 475 Label::Distance near_jump = Label::kFar); |
| 476 |
| 473 // Jump if the value cannot be represented by a smi. | 477 // Jump if the value cannot be represented by a smi. |
| 474 void JumpIfNotValidSmiValue(Register src, Label* on_invalid, | 478 void JumpIfNotValidSmiValue(Register src, Label* on_invalid, |
| 475 Label::Distance near_jump = Label::kFar); | 479 Label::Distance near_jump = Label::kFar); |
| 476 | 480 |
| 481 // Jump if the unsigned integer value can be represented by a smi. |
| 482 void JumpIfUIntValidSmiValue(Register src, Label* on_valid, |
| 483 Label::Distance near_jump = Label::kFar); |
| 484 |
| 477 // Jump if the unsigned integer value cannot be represented by a smi. | 485 // Jump if the unsigned integer value cannot be represented by a smi. |
| 478 void JumpIfUIntNotValidSmiValue(Register src, Label* on_invalid, | 486 void JumpIfUIntNotValidSmiValue(Register src, Label* on_invalid, |
| 479 Label::Distance near_jump = Label::kFar); | 487 Label::Distance near_jump = Label::kFar); |
| 480 | 488 |
| 481 // Jump to label if the value is a tagged smi. | 489 // Jump to label if the value is a tagged smi. |
| 482 void JumpIfSmi(Register src, | 490 void JumpIfSmi(Register src, |
| 483 Label* on_smi, | 491 Label* on_smi, |
| 484 Label::Distance near_jump = Label::kFar); | 492 Label::Distance near_jump = Label::kFar); |
| 485 | 493 |
| 486 // Jump to label if the value is not a tagged smi. | 494 // Jump to label if the value is not a tagged smi. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 void SmiNot(Register dst, Register src); | 632 void SmiNot(Register dst, Register src); |
| 625 void SmiAnd(Register dst, Register src1, Register src2); | 633 void SmiAnd(Register dst, Register src1, Register src2); |
| 626 void SmiOr(Register dst, Register src1, Register src2); | 634 void SmiOr(Register dst, Register src1, Register src2); |
| 627 void SmiXor(Register dst, Register src1, Register src2); | 635 void SmiXor(Register dst, Register src1, Register src2); |
| 628 void SmiAndConstant(Register dst, Register src1, Smi* constant); | 636 void SmiAndConstant(Register dst, Register src1, Smi* constant); |
| 629 void SmiOrConstant(Register dst, Register src1, Smi* constant); | 637 void SmiOrConstant(Register dst, Register src1, Smi* constant); |
| 630 void SmiXorConstant(Register dst, Register src1, Smi* constant); | 638 void SmiXorConstant(Register dst, Register src1, Smi* constant); |
| 631 | 639 |
| 632 void SmiShiftLeftConstant(Register dst, | 640 void SmiShiftLeftConstant(Register dst, |
| 633 Register src, | 641 Register src, |
| 634 int shift_value); | 642 int shift_value, |
| 643 Label* on_not_smi_result = NULL, |
| 644 Label::Distance near_jump = Label::kFar); |
| 635 void SmiShiftLogicalRightConstant(Register dst, | 645 void SmiShiftLogicalRightConstant(Register dst, |
| 636 Register src, | 646 Register src, |
| 637 int shift_value, | 647 int shift_value, |
| 638 Label* on_not_smi_result, | 648 Label* on_not_smi_result, |
| 639 Label::Distance near_jump = Label::kFar); | 649 Label::Distance near_jump = Label::kFar); |
| 640 void SmiShiftArithmeticRightConstant(Register dst, | 650 void SmiShiftArithmeticRightConstant(Register dst, |
| 641 Register src, | 651 Register src, |
| 642 int shift_value); | 652 int shift_value); |
| 643 | 653 |
| 644 // Shifts a smi value to the left, and returns the result if that is a smi. | 654 // Shifts a smi value to the left, and returns the result if that is a smi. |
| 645 // Uses and clobbers rcx, so dst may not be rcx. | 655 // Uses and clobbers rcx, so dst may not be rcx. |
| 646 void SmiShiftLeft(Register dst, | 656 void SmiShiftLeft(Register dst, |
| 647 Register src1, | 657 Register src1, |
| 648 Register src2); | 658 Register src2, |
| 659 Label* on_not_smi_result = NULL, |
| 660 Label::Distance near_jump = Label::kFar); |
| 649 // Shifts a smi value to the right, shifting in zero bits at the top, and | 661 // Shifts a smi value to the right, shifting in zero bits at the top, and |
| 650 // returns the unsigned intepretation of the result if that is a smi. | 662 // returns the unsigned intepretation of the result if that is a smi. |
| 651 // Uses and clobbers rcx, so dst may not be rcx. | 663 // Uses and clobbers rcx, so dst may not be rcx. |
| 652 void SmiShiftLogicalRight(Register dst, | 664 void SmiShiftLogicalRight(Register dst, |
| 653 Register src1, | 665 Register src1, |
| 654 Register src2, | 666 Register src2, |
| 655 Label* on_not_smi_result, | 667 Label* on_not_smi_result, |
| 656 Label::Distance near_jump = Label::kFar); | 668 Label::Distance near_jump = Label::kFar); |
| 657 // Shifts a smi value to the right, sign extending the top, and | 669 // Shifts a smi value to the right, sign extending the top, and |
| 658 // returns the signed intepretation of the result. That will always | 670 // returns the signed intepretation of the result. That will always |
| (...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1597 masm->popfq(); \ | 1609 masm->popfq(); \ |
| 1598 } \ | 1610 } \ |
| 1599 masm-> | 1611 masm-> |
| 1600 #else | 1612 #else |
| 1601 #define ACCESS_MASM(masm) masm-> | 1613 #define ACCESS_MASM(masm) masm-> |
| 1602 #endif | 1614 #endif |
| 1603 | 1615 |
| 1604 } } // namespace v8::internal | 1616 } } // namespace v8::internal |
| 1605 | 1617 |
| 1606 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 1618 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
| OLD | NEW |