| OLD | NEW |
| 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 1769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1780 LOperand* right = instr->right(); | 1780 LOperand* right = instr->right(); |
| 1781 ASSERT(left->Equals(instr->result())); | 1781 ASSERT(left->Equals(instr->result())); |
| 1782 ASSERT(left->IsRegister()); | 1782 ASSERT(left->IsRegister()); |
| 1783 if (right->IsRegister()) { | 1783 if (right->IsRegister()) { |
| 1784 ASSERT(ToRegister(right).is(ecx)); | 1784 ASSERT(ToRegister(right).is(ecx)); |
| 1785 | 1785 |
| 1786 switch (instr->op()) { | 1786 switch (instr->op()) { |
| 1787 case Token::ROR: | 1787 case Token::ROR: |
| 1788 __ ror_cl(ToRegister(left)); | 1788 __ ror_cl(ToRegister(left)); |
| 1789 if (instr->can_deopt()) { | 1789 if (instr->can_deopt()) { |
| 1790 __ test(ToRegister(left), Immediate(0x80000000)); | 1790 __ test(ToRegister(left), ToRegister(left)); |
| 1791 DeoptimizeIf(not_zero, instr->environment()); | 1791 DeoptimizeIf(sign, instr->environment()); |
| 1792 } | 1792 } |
| 1793 break; | 1793 break; |
| 1794 case Token::SAR: | 1794 case Token::SAR: |
| 1795 __ sar_cl(ToRegister(left)); | 1795 __ sar_cl(ToRegister(left)); |
| 1796 break; | 1796 break; |
| 1797 case Token::SHR: | 1797 case Token::SHR: |
| 1798 __ shr_cl(ToRegister(left)); | 1798 __ shr_cl(ToRegister(left)); |
| 1799 if (instr->can_deopt()) { | 1799 if (instr->can_deopt()) { |
| 1800 __ test(ToRegister(left), Immediate(0x80000000)); | 1800 __ test(ToRegister(left), ToRegister(left)); |
| 1801 DeoptimizeIf(not_zero, instr->environment()); | 1801 DeoptimizeIf(sign, instr->environment()); |
| 1802 } | 1802 } |
| 1803 break; | 1803 break; |
| 1804 case Token::SHL: | 1804 case Token::SHL: |
| 1805 __ shl_cl(ToRegister(left)); | 1805 __ shl_cl(ToRegister(left)); |
| 1806 break; | 1806 break; |
| 1807 default: | 1807 default: |
| 1808 UNREACHABLE(); | 1808 UNREACHABLE(); |
| 1809 break; | 1809 break; |
| 1810 } | 1810 } |
| 1811 } else { | 1811 } else { |
| 1812 int value = ToInteger32(LConstantOperand::cast(right)); | 1812 int value = ToInteger32(LConstantOperand::cast(right)); |
| 1813 uint8_t shift_count = static_cast<uint8_t>(value & 0x1F); | 1813 uint8_t shift_count = static_cast<uint8_t>(value & 0x1F); |
| 1814 switch (instr->op()) { | 1814 switch (instr->op()) { |
| 1815 case Token::ROR: | 1815 case Token::ROR: |
| 1816 if (shift_count == 0 && instr->can_deopt()) { | 1816 if (shift_count == 0 && instr->can_deopt()) { |
| 1817 __ test(ToRegister(left), Immediate(0x80000000)); | 1817 __ test(ToRegister(left), ToRegister(left)); |
| 1818 DeoptimizeIf(not_zero, instr->environment()); | 1818 DeoptimizeIf(sign, instr->environment()); |
| 1819 } else { | 1819 } else { |
| 1820 __ ror(ToRegister(left), shift_count); | 1820 __ ror(ToRegister(left), shift_count); |
| 1821 } | 1821 } |
| 1822 break; | 1822 break; |
| 1823 case Token::SAR: | 1823 case Token::SAR: |
| 1824 if (shift_count != 0) { | 1824 if (shift_count != 0) { |
| 1825 __ sar(ToRegister(left), shift_count); | 1825 __ sar(ToRegister(left), shift_count); |
| 1826 } | 1826 } |
| 1827 break; | 1827 break; |
| 1828 case Token::SHR: | 1828 case Token::SHR: |
| 1829 if (shift_count == 0 && instr->can_deopt()) { | 1829 if (shift_count == 0 && instr->can_deopt()) { |
| 1830 __ test(ToRegister(left), Immediate(0x80000000)); | 1830 __ test(ToRegister(left), ToRegister(left)); |
| 1831 DeoptimizeIf(not_zero, instr->environment()); | 1831 DeoptimizeIf(sign, instr->environment()); |
| 1832 } else { | 1832 } else { |
| 1833 __ shr(ToRegister(left), shift_count); | 1833 __ shr(ToRegister(left), shift_count); |
| 1834 } | 1834 } |
| 1835 break; | 1835 break; |
| 1836 case Token::SHL: | 1836 case Token::SHL: |
| 1837 if (shift_count != 0) { | 1837 if (shift_count != 0) { |
| 1838 if (instr->hydrogen_value()->representation().IsSmi() && | 1838 if (instr->hydrogen_value()->representation().IsSmi() && |
| 1839 instr->can_deopt()) { | 1839 instr->can_deopt()) { |
| 1840 if (shift_count != 1) { | 1840 if (shift_count != 1) { |
| 1841 __ shl(ToRegister(left), shift_count - 1); | 1841 __ shl(ToRegister(left), shift_count - 1); |
| (...skipping 4708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6550 FixedArray::kHeaderSize - kPointerSize)); | 6550 FixedArray::kHeaderSize - kPointerSize)); |
| 6551 __ bind(&done); | 6551 __ bind(&done); |
| 6552 } | 6552 } |
| 6553 | 6553 |
| 6554 | 6554 |
| 6555 #undef __ | 6555 #undef __ |
| 6556 | 6556 |
| 6557 } } // namespace v8::internal | 6557 } } // namespace v8::internal |
| 6558 | 6558 |
| 6559 #endif // V8_TARGET_ARCH_IA32 | 6559 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |