| OLD | NEW | 
|     1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |     1 // Copyright 2006-2009 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 1713 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1724         } |  1724         } | 
|  1725         operand->Unuse(); |  1725         operand->Unuse(); | 
|  1726         __ SmiTag(answer.reg()); |  1726         __ SmiTag(answer.reg()); | 
|  1727         deferred->BindExit(); |  1727         deferred->BindExit(); | 
|  1728         frame_->Push(&answer); |  1728         frame_->Push(&answer); | 
|  1729       } |  1729       } | 
|  1730       break; |  1730       break; | 
|  1731  |  1731  | 
|  1732     case Token::SHL: |  1732     case Token::SHL: | 
|  1733       if (reversed) { |  1733       if (reversed) { | 
|  1734         Result constant_operand(value); |  1734         Result right; | 
|  1735         LikelySmiBinaryOperation(op, &constant_operand, operand, |  1735         Result right_copy_in_ecx; | 
|  1736                                  overwrite_mode); |  1736  | 
 |  1737         // Make sure to get a copy of the right operand into ecx. This | 
 |  1738         // allows us to modify it without having to restore it in the | 
 |  1739         // deferred code. | 
 |  1740         operand->ToRegister(); | 
 |  1741         if (operand->reg().is(ecx)) { | 
 |  1742           right = allocator()->Allocate(); | 
 |  1743           __ mov(right.reg(), ecx); | 
 |  1744           frame_->Spill(ecx); | 
 |  1745           right_copy_in_ecx = *operand; | 
 |  1746         } else { | 
 |  1747           right_copy_in_ecx = allocator()->Allocate(ecx); | 
 |  1748           __ mov(ecx, operand->reg()); | 
 |  1749           right = *operand; | 
 |  1750         } | 
 |  1751         operand->Unuse(); | 
 |  1752  | 
 |  1753         Result answer = allocator()->Allocate(); | 
 |  1754         DeferredInlineSmiOperation* deferred = | 
 |  1755             new DeferredInlineSmiOperation(op, | 
 |  1756                                            answer.reg(), | 
 |  1757                                            right.reg(), | 
 |  1758                                            smi_value, | 
 |  1759                                            overwrite_mode); | 
 |  1760         __ mov(answer.reg(), Immediate(int_value)); | 
 |  1761         __ sar(ecx, kSmiTagSize); | 
 |  1762         deferred->Branch(carry); | 
 |  1763         __ shl_cl(answer.reg()); | 
 |  1764         __ cmp(answer.reg(), 0xc0000000); | 
 |  1765         deferred->Branch(sign); | 
 |  1766         __ SmiTag(answer.reg()); | 
 |  1767  | 
 |  1768         deferred->BindExit(); | 
 |  1769         frame_->Push(&answer); | 
|  1737       } else { |  1770       } else { | 
|  1738         // Only the least significant 5 bits of the shift value are used. |  1771         // Only the least significant 5 bits of the shift value are used. | 
|  1739         // In the slow case, this masking is done inside the runtime call. |  1772         // In the slow case, this masking is done inside the runtime call. | 
|  1740         int shift_value = int_value & 0x1f; |  1773         int shift_value = int_value & 0x1f; | 
|  1741         operand->ToRegister(); |  1774         operand->ToRegister(); | 
|  1742         if (shift_value == 0) { |  1775         if (shift_value == 0) { | 
|  1743           // Spill operand so it can be overwritten in the slow case. |  1776           // Spill operand so it can be overwritten in the slow case. | 
|  1744           frame_->Spill(operand->reg()); |  1777           frame_->Spill(operand->reg()); | 
|  1745           DeferredInlineSmiOperation* deferred = |  1778           DeferredInlineSmiOperation* deferred = | 
|  1746               new DeferredInlineSmiOperation(op, |  1779               new DeferredInlineSmiOperation(op, | 
| (...skipping 7157 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  8904     __ add(Operand(dest), Immediate(2)); |  8937     __ add(Operand(dest), Immediate(2)); | 
|  8905   } |  8938   } | 
|  8906   __ sub(Operand(count), Immediate(1)); |  8939   __ sub(Operand(count), Immediate(1)); | 
|  8907   __ j(not_zero, &loop); |  8940   __ j(not_zero, &loop); | 
|  8908 } |  8941 } | 
|  8909  |  8942  | 
|  8910  |  8943  | 
|  8911 #undef __ |  8944 #undef __ | 
|  8912  |  8945  | 
|  8913 } }  // namespace v8::internal |  8946 } }  // namespace v8::internal | 
| OLD | NEW |