| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 const CPURegister& src2 = NoReg, const CPURegister& src3 = NoReg); | 524 const CPURegister& src2 = NoReg, const CPURegister& src3 = NoReg); |
| 525 void Pop(const CPURegister& dst0, const CPURegister& dst1 = NoReg, | 525 void Pop(const CPURegister& dst0, const CPURegister& dst1 = NoReg, |
| 526 const CPURegister& dst2 = NoReg, const CPURegister& dst3 = NoReg); | 526 const CPURegister& dst2 = NoReg, const CPURegister& dst3 = NoReg); |
| 527 | 527 |
| 528 // Alternative forms of Push and Pop, taking a RegList or CPURegList that | 528 // Alternative forms of Push and Pop, taking a RegList or CPURegList that |
| 529 // specifies the registers that are to be pushed or popped. Higher-numbered | 529 // specifies the registers that are to be pushed or popped. Higher-numbered |
| 530 // registers are associated with higher memory addresses (as in the A32 push | 530 // registers are associated with higher memory addresses (as in the A32 push |
| 531 // and pop instructions). | 531 // and pop instructions). |
| 532 // | 532 // |
| 533 // (Push|Pop)SizeRegList allow you to specify the register size as a | 533 // (Push|Pop)SizeRegList allow you to specify the register size as a |
| 534 // parameter. Only kXRegSize, kWRegSize, kDRegSize and kSRegSize are | 534 // parameter. Only kXRegSizeInBits, kWRegSizeInBits, kDRegSizeInBits and |
| 535 // supported. | 535 // kSRegSizeInBits are supported. |
| 536 // | 536 // |
| 537 // Otherwise, (Push|Pop)(CPU|X|W|D|S)RegList is preferred. | 537 // Otherwise, (Push|Pop)(CPU|X|W|D|S)RegList is preferred. |
| 538 void PushCPURegList(CPURegList registers); | 538 void PushCPURegList(CPURegList registers); |
| 539 void PopCPURegList(CPURegList registers); | 539 void PopCPURegList(CPURegList registers); |
| 540 | 540 |
| 541 inline void PushSizeRegList(RegList registers, unsigned reg_size, | 541 inline void PushSizeRegList(RegList registers, unsigned reg_size, |
| 542 CPURegister::RegisterType type = CPURegister::kRegister) { | 542 CPURegister::RegisterType type = CPURegister::kRegister) { |
| 543 PushCPURegList(CPURegList(type, reg_size, registers)); | 543 PushCPURegList(CPURegList(type, reg_size, registers)); |
| 544 } | 544 } |
| 545 inline void PopSizeRegList(RegList registers, unsigned reg_size, | 545 inline void PopSizeRegList(RegList registers, unsigned reg_size, |
| 546 CPURegister::RegisterType type = CPURegister::kRegister) { | 546 CPURegister::RegisterType type = CPURegister::kRegister) { |
| 547 PopCPURegList(CPURegList(type, reg_size, registers)); | 547 PopCPURegList(CPURegList(type, reg_size, registers)); |
| 548 } | 548 } |
| 549 inline void PushXRegList(RegList regs) { | 549 inline void PushXRegList(RegList regs) { |
| 550 PushSizeRegList(regs, kXRegSize); | 550 PushSizeRegList(regs, kXRegSizeInBits); |
| 551 } | 551 } |
| 552 inline void PopXRegList(RegList regs) { | 552 inline void PopXRegList(RegList regs) { |
| 553 PopSizeRegList(regs, kXRegSize); | 553 PopSizeRegList(regs, kXRegSizeInBits); |
| 554 } | 554 } |
| 555 inline void PushWRegList(RegList regs) { | 555 inline void PushWRegList(RegList regs) { |
| 556 PushSizeRegList(regs, kWRegSize); | 556 PushSizeRegList(regs, kWRegSizeInBits); |
| 557 } | 557 } |
| 558 inline void PopWRegList(RegList regs) { | 558 inline void PopWRegList(RegList regs) { |
| 559 PopSizeRegList(regs, kWRegSize); | 559 PopSizeRegList(regs, kWRegSizeInBits); |
| 560 } | 560 } |
| 561 inline void PushDRegList(RegList regs) { | 561 inline void PushDRegList(RegList regs) { |
| 562 PushSizeRegList(regs, kDRegSize, CPURegister::kFPRegister); | 562 PushSizeRegList(regs, kDRegSizeInBits, CPURegister::kFPRegister); |
| 563 } | 563 } |
| 564 inline void PopDRegList(RegList regs) { | 564 inline void PopDRegList(RegList regs) { |
| 565 PopSizeRegList(regs, kDRegSize, CPURegister::kFPRegister); | 565 PopSizeRegList(regs, kDRegSizeInBits, CPURegister::kFPRegister); |
| 566 } | 566 } |
| 567 inline void PushSRegList(RegList regs) { | 567 inline void PushSRegList(RegList regs) { |
| 568 PushSizeRegList(regs, kSRegSize, CPURegister::kFPRegister); | 568 PushSizeRegList(regs, kSRegSizeInBits, CPURegister::kFPRegister); |
| 569 } | 569 } |
| 570 inline void PopSRegList(RegList regs) { | 570 inline void PopSRegList(RegList regs) { |
| 571 PopSizeRegList(regs, kSRegSize, CPURegister::kFPRegister); | 571 PopSizeRegList(regs, kSRegSizeInBits, CPURegister::kFPRegister); |
| 572 } | 572 } |
| 573 | 573 |
| 574 // Push the specified register 'count' times. | 574 // Push the specified register 'count' times. |
| 575 void PushMultipleTimes(CPURegister src, Register count); | 575 void PushMultipleTimes(CPURegister src, Register count); |
| 576 void PushMultipleTimes(CPURegister src, int count); | 576 void PushMultipleTimes(CPURegister src, int count); |
| 577 | 577 |
| 578 // This is a convenience method for pushing a single Handle<Object>. | 578 // This is a convenience method for pushing a single Handle<Object>. |
| 579 inline void Push(Handle<Object> handle); | 579 inline void Push(Handle<Object> handle); |
| 580 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } | 580 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } |
| 581 | 581 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 // | 647 // |
| 648 // In debug mode, both of these will write invalid data into the claimed or | 648 // In debug mode, both of these will write invalid data into the claimed or |
| 649 // dropped space. | 649 // dropped space. |
| 650 // | 650 // |
| 651 // If the current stack pointer (according to StackPointer()) is csp, then it | 651 // If the current stack pointer (according to StackPointer()) is csp, then it |
| 652 // must be aligned to 16 bytes and the size claimed or dropped must be a | 652 // must be aligned to 16 bytes and the size claimed or dropped must be a |
| 653 // multiple of 16 bytes. | 653 // multiple of 16 bytes. |
| 654 // | 654 // |
| 655 // Note that unit_size must be specified in bytes. For variants which take a | 655 // Note that unit_size must be specified in bytes. For variants which take a |
| 656 // Register count, the unit size must be a power of two. | 656 // Register count, the unit size must be a power of two. |
| 657 inline void Claim(uint64_t count, uint64_t unit_size = kXRegSizeInBytes); | 657 inline void Claim(uint64_t count, uint64_t unit_size = kXRegSize); |
| 658 inline void Claim(const Register& count, | 658 inline void Claim(const Register& count, |
| 659 uint64_t unit_size = kXRegSizeInBytes); | 659 uint64_t unit_size = kXRegSize); |
| 660 inline void Drop(uint64_t count, uint64_t unit_size = kXRegSizeInBytes); | 660 inline void Drop(uint64_t count, uint64_t unit_size = kXRegSize); |
| 661 inline void Drop(const Register& count, | 661 inline void Drop(const Register& count, |
| 662 uint64_t unit_size = kXRegSizeInBytes); | 662 uint64_t unit_size = kXRegSize); |
| 663 | 663 |
| 664 // Variants of Claim and Drop, where the 'count' parameter is a SMI held in a | 664 // Variants of Claim and Drop, where the 'count' parameter is a SMI held in a |
| 665 // register. | 665 // register. |
| 666 inline void ClaimBySMI(const Register& count_smi, | 666 inline void ClaimBySMI(const Register& count_smi, |
| 667 uint64_t unit_size = kXRegSizeInBytes); | 667 uint64_t unit_size = kXRegSize); |
| 668 inline void DropBySMI(const Register& count_smi, | 668 inline void DropBySMI(const Register& count_smi, |
| 669 uint64_t unit_size = kXRegSizeInBytes); | 669 uint64_t unit_size = kXRegSize); |
| 670 | 670 |
| 671 // Compare a register with an operand, and branch to label depending on the | 671 // Compare a register with an operand, and branch to label depending on the |
| 672 // condition. May corrupt the status flags. | 672 // condition. May corrupt the status flags. |
| 673 inline void CompareAndBranch(const Register& lhs, | 673 inline void CompareAndBranch(const Register& lhs, |
| 674 const Operand& rhs, | 674 const Operand& rhs, |
| 675 Condition cond, | 675 Condition cond, |
| 676 Label* label); | 676 Label* label); |
| 677 | 677 |
| 678 // Test the bits of register defined by bit_pattern, and branch if ANY of | 678 // Test the bits of register defined by bit_pattern, and branch if ANY of |
| 679 // those bits are set. May corrupt the status flags. | 679 // those bits are set. May corrupt the status flags. |
| (...skipping 1594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2274 #error "Unsupported option" | 2274 #error "Unsupported option" |
| 2275 #define CODE_COVERAGE_STRINGIFY(x) #x | 2275 #define CODE_COVERAGE_STRINGIFY(x) #x |
| 2276 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 2276 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
| 2277 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 2277 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
| 2278 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 2278 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
| 2279 #else | 2279 #else |
| 2280 #define ACCESS_MASM(masm) masm-> | 2280 #define ACCESS_MASM(masm) masm-> |
| 2281 #endif | 2281 #endif |
| 2282 | 2282 |
| 2283 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_ | 2283 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_ |
| OLD | NEW |