OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 1572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1583 | 1583 |
1584 | 1584 |
1585 void LCodeGen::DoLoadElements(LLoadElements* instr) { | 1585 void LCodeGen::DoLoadElements(LLoadElements* instr) { |
1586 Abort("DoLoadElements unimplemented."); | 1586 Abort("DoLoadElements unimplemented."); |
1587 } | 1587 } |
1588 | 1588 |
1589 | 1589 |
1590 void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) { | 1590 void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) { |
1591 Register arguments = ToRegister(instr->arguments()); | 1591 Register arguments = ToRegister(instr->arguments()); |
1592 Register length = ToRegister(instr->length()); | 1592 Register length = ToRegister(instr->length()); |
1593 Operand index = ToOperand(instr->index()); | 1593 Register index = ToRegister(instr->index()); |
1594 Register result = ToRegister(instr->result()); | 1594 Register result = ToRegister(instr->result()); |
1595 | 1595 |
1596 // Bailout index is not a valid argument index. Use unsigned check to get | 1596 // Bailout index is not a valid argument index. Use unsigned check to get |
1597 // negative check for free. | 1597 // negative check for free. |
1598 __ sub(length, length, index, SetCC); | 1598 __ sub(length, length, index, SetCC); |
1599 DeoptimizeIf(ls, instr->environment()); | 1599 DeoptimizeIf(ls, instr->environment()); |
1600 | 1600 |
1601 // There are two words between the frame pointer and the last argument. | 1601 // There are two words between the frame pointer and the last argument. |
1602 // Subtracting from length accounts for one of them add one more. | 1602 // Subtracting from length accounts for one of them add one more. |
1603 __ add(length, length, Operand(1)); | 1603 __ add(length, length, Operand(1)); |
(...skipping 26 matching lines...) Expand all Loading... |
1630 __ cmp(result, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); | 1630 __ cmp(result, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
1631 | 1631 |
1632 // Result is the frame pointer for the frame if not adapted and for the real | 1632 // Result is the frame pointer for the frame if not adapted and for the real |
1633 // frame below the adaptor frame if adapted. | 1633 // frame below the adaptor frame if adapted. |
1634 __ mov(result, fp, LeaveCC, ne); | 1634 __ mov(result, fp, LeaveCC, ne); |
1635 __ mov(result, scratch, LeaveCC, eq); | 1635 __ mov(result, scratch, LeaveCC, eq); |
1636 } | 1636 } |
1637 | 1637 |
1638 | 1638 |
1639 void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) { | 1639 void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) { |
1640 Operand elem = ToOperand(instr->input()); | 1640 Register elem = ToRegister(instr->input()); |
1641 Register result = ToRegister(instr->result()); | 1641 Register result = ToRegister(instr->result()); |
1642 | 1642 |
1643 Label done; | 1643 Label done; |
1644 | 1644 |
1645 // If no arguments adaptor frame the number of arguments is fixed. | 1645 // If no arguments adaptor frame the number of arguments is fixed. |
1646 __ cmp(fp, elem); | 1646 __ cmp(fp, elem); |
1647 __ mov(result, Operand(scope()->num_parameters())); | 1647 __ mov(result, Operand(scope()->num_parameters())); |
1648 __ b(eq, &done); | 1648 __ b(eq, &done); |
1649 | 1649 |
1650 // Arguments adaptor frame present. Get argument length from there. | 1650 // Arguments adaptor frame present. Get argument length from there. |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1830 ASSERT(ToRegister(instr->value()).is(r0)); | 1830 ASSERT(ToRegister(instr->value()).is(r0)); |
1831 | 1831 |
1832 // Name is always in r2. | 1832 // Name is always in r2. |
1833 __ mov(r2, Operand(instr->name())); | 1833 __ mov(r2, Operand(instr->name())); |
1834 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); | 1834 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
1835 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 1835 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
1836 } | 1836 } |
1837 | 1837 |
1838 | 1838 |
1839 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { | 1839 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
1840 __ cmp(ToRegister(instr->index()), ToOperand(instr->length())); | 1840 __ cmp(ToRegister(instr->index()), ToRegister(instr->length())); |
1841 DeoptimizeIf(hs, instr->environment()); | 1841 DeoptimizeIf(hs, instr->environment()); |
1842 } | 1842 } |
1843 | 1843 |
1844 | 1844 |
1845 void LCodeGen::DoStoreKeyedFastElement(LStoreKeyedFastElement* instr) { | 1845 void LCodeGen::DoStoreKeyedFastElement(LStoreKeyedFastElement* instr) { |
1846 Abort("DoStoreKeyedFastElement unimplemented."); | 1846 Abort("DoStoreKeyedFastElement unimplemented."); |
1847 } | 1847 } |
1848 | 1848 |
1849 | 1849 |
1850 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { | 1850 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { |
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 | 2462 |
2463 | 2463 |
2464 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 2464 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |
2465 Abort("DoOsrEntry unimplemented."); | 2465 Abort("DoOsrEntry unimplemented."); |
2466 } | 2466 } |
2467 | 2467 |
2468 | 2468 |
2469 #undef __ | 2469 #undef __ |
2470 | 2470 |
2471 } } // namespace v8::internal | 2471 } } // namespace v8::internal |
OLD | NEW |