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 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Operand index = ToOperand(instr->index()); |
1594 Register result = ToRegister(instr->result()); | 1594 Register result = ToRegister(instr->result()); |
1595 | 1595 |
1596 __ sub(length, length, index); | 1596 // Bailout index is not a valid argument index. Use unsigned check to get |
1597 DeoptimizeIf(hi, instr->environment()); | 1597 // negative check for free. |
| 1598 __ sub(length, length, index, SetCC); |
| 1599 DeoptimizeIf(ls, instr->environment()); |
1598 | 1600 |
1599 // 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. |
1600 // Subtracting from length accounts for one of them add one more. | 1602 // Subtracting from length accounts for one of them add one more. |
1601 __ add(length, length, Operand(1)); | 1603 __ add(length, length, Operand(1)); |
1602 __ ldr(result, MemOperand(arguments, length, LSL, kPointerSizeLog2)); | 1604 __ ldr(result, MemOperand(arguments, length, LSL, kPointerSizeLog2)); |
1603 } | 1605 } |
1604 | 1606 |
1605 | 1607 |
1606 void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) { | 1608 void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) { |
1607 Abort("DoLoadKeyedFastElement unimplemented."); | 1609 Abort("DoLoadKeyedFastElement unimplemented."); |
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2410 | 2412 |
2411 | 2413 |
2412 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 2414 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |
2413 Abort("DoOsrEntry unimplemented."); | 2415 Abort("DoOsrEntry unimplemented."); |
2414 } | 2416 } |
2415 | 2417 |
2416 | 2418 |
2417 #undef __ | 2419 #undef __ |
2418 | 2420 |
2419 } } // namespace v8::internal | 2421 } } // namespace v8::internal |
OLD | NEW |