| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 |
| 11 // with the distribution. | 11 // with the distribution. |
| (...skipping 2012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2024 static_cast<TRBinaryOpIC::TypeInfo>(Smi::cast(args[4])->value()); | 2024 static_cast<TRBinaryOpIC::TypeInfo>(Smi::cast(args[4])->value()); |
| 2025 | 2025 |
| 2026 TRBinaryOpIC::TypeInfo type = TRBinaryOpIC::GetTypeInfo(left, right); | 2026 TRBinaryOpIC::TypeInfo type = TRBinaryOpIC::GetTypeInfo(left, right); |
| 2027 type = TRBinaryOpIC::JoinTypes(type, previous_type); | 2027 type = TRBinaryOpIC::JoinTypes(type, previous_type); |
| 2028 TRBinaryOpIC::TypeInfo result_type = TRBinaryOpIC::UNINITIALIZED; | 2028 TRBinaryOpIC::TypeInfo result_type = TRBinaryOpIC::UNINITIALIZED; |
| 2029 if ((type == TRBinaryOpIC::STRING || type == TRBinaryOpIC::BOTH_STRING) && | 2029 if ((type == TRBinaryOpIC::STRING || type == TRBinaryOpIC::BOTH_STRING) && |
| 2030 op != Token::ADD) { | 2030 op != Token::ADD) { |
| 2031 type = TRBinaryOpIC::GENERIC; | 2031 type = TRBinaryOpIC::GENERIC; |
| 2032 } | 2032 } |
| 2033 if (type == TRBinaryOpIC::SMI && previous_type == TRBinaryOpIC::SMI) { | 2033 if (type == TRBinaryOpIC::SMI && previous_type == TRBinaryOpIC::SMI) { |
| 2034 if (op == Token::DIV || op == Token::MUL || kSmiValueSize == 32) { | 2034 if (op == Token::DIV || |
| 2035 op == Token::MUL || |
| 2036 op == Token::SHR || |
| 2037 kSmiValueSize == 32) { |
| 2035 // Arithmetic on two Smi inputs has yielded a heap number. | 2038 // Arithmetic on two Smi inputs has yielded a heap number. |
| 2036 // That is the only way to get here from the Smi stub. | 2039 // That is the only way to get here from the Smi stub. |
| 2037 // With 32-bit Smis, all overflows give heap numbers, but with | 2040 // With 32-bit Smis, all overflows give heap numbers, but with |
| 2038 // 31-bit Smis, most operations overflow to int32 results. | 2041 // 31-bit Smis, most operations overflow to int32 results. |
| 2039 result_type = TRBinaryOpIC::HEAP_NUMBER; | 2042 result_type = TRBinaryOpIC::HEAP_NUMBER; |
| 2040 } else { | 2043 } else { |
| 2041 // Other operations on SMIs that overflow yield int32s. | 2044 // Other operations on SMIs that overflow yield int32s. |
| 2042 result_type = TRBinaryOpIC::INT32; | 2045 result_type = TRBinaryOpIC::INT32; |
| 2043 } | 2046 } |
| 2044 } | 2047 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2190 #undef ADDR | 2193 #undef ADDR |
| 2191 }; | 2194 }; |
| 2192 | 2195 |
| 2193 | 2196 |
| 2194 Address IC::AddressFromUtilityId(IC::UtilityId id) { | 2197 Address IC::AddressFromUtilityId(IC::UtilityId id) { |
| 2195 return IC_utilities[id]; | 2198 return IC_utilities[id]; |
| 2196 } | 2199 } |
| 2197 | 2200 |
| 2198 | 2201 |
| 2199 } } // namespace v8::internal | 2202 } } // namespace v8::internal |
| OLD | NEW |