| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/double.h" | 7 #include "src/double.h" |
| 8 #include "src/factory.h" | 8 #include "src/factory.h" |
| 9 #include "src/hydrogen-infer-representation.h" | 9 #include "src/hydrogen-infer-representation.h" |
| 10 #include "src/property-details-inl.h" | 10 #include "src/property-details-inl.h" |
| (...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1196 os << " [true]"; | 1196 os << " [true]"; |
| 1197 } else if (known_successor_index() == 1) { | 1197 } else if (known_successor_index() == 1) { |
| 1198 os << " [false]"; | 1198 os << " [false]"; |
| 1199 } | 1199 } |
| 1200 return os; | 1200 return os; |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 | 1203 |
| 1204 const char* HUnaryMathOperation::OpName() const { | 1204 const char* HUnaryMathOperation::OpName() const { |
| 1205 switch (op()) { | 1205 switch (op()) { |
| 1206 case kMathFloor: return "floor"; | 1206 case kMathFloor: |
| 1207 case kMathRound: return "round"; | 1207 return "floor"; |
| 1208 case kMathAbs: return "abs"; | 1208 case kMathFround: |
| 1209 case kMathLog: return "log"; | 1209 return "fround"; |
| 1210 case kMathExp: return "exp"; | 1210 case kMathRound: |
| 1211 case kMathSqrt: return "sqrt"; | 1211 return "round"; |
| 1212 case kMathPowHalf: return "pow-half"; | 1212 case kMathAbs: |
| 1213 case kMathClz32: return "clz32"; | 1213 return "abs"; |
| 1214 case kMathLog: |
| 1215 return "log"; |
| 1216 case kMathExp: |
| 1217 return "exp"; |
| 1218 case kMathSqrt: |
| 1219 return "sqrt"; |
| 1220 case kMathPowHalf: |
| 1221 return "pow-half"; |
| 1222 case kMathClz32: |
| 1223 return "clz32"; |
| 1214 default: | 1224 default: |
| 1215 UNREACHABLE(); | 1225 UNREACHABLE(); |
| 1216 return NULL; | 1226 return NULL; |
| 1217 } | 1227 } |
| 1218 } | 1228 } |
| 1219 | 1229 |
| 1220 | 1230 |
| 1221 Range* HUnaryMathOperation::InferRange(Zone* zone) { | 1231 Range* HUnaryMathOperation::InferRange(Zone* zone) { |
| 1222 Representation r = representation(); | 1232 Representation r = representation(); |
| 1223 if (op() == kMathClz32) return new(zone) Range(0, 32); | 1233 if (op() == kMathClz32) return new(zone) Range(0, 32); |
| (...skipping 2904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4128 switch (op) { | 4138 switch (op) { |
| 4129 case kMathExp: | 4139 case kMathExp: |
| 4130 return H_CONSTANT_DOUBLE((d > 0.0) ? d : 0.0); | 4140 return H_CONSTANT_DOUBLE((d > 0.0) ? d : 0.0); |
| 4131 case kMathLog: | 4141 case kMathLog: |
| 4132 case kMathSqrt: | 4142 case kMathSqrt: |
| 4133 return H_CONSTANT_DOUBLE((d > 0.0) ? d : base::OS::nan_value()); | 4143 return H_CONSTANT_DOUBLE((d > 0.0) ? d : base::OS::nan_value()); |
| 4134 case kMathPowHalf: | 4144 case kMathPowHalf: |
| 4135 case kMathAbs: | 4145 case kMathAbs: |
| 4136 return H_CONSTANT_DOUBLE((d > 0.0) ? d : -d); | 4146 return H_CONSTANT_DOUBLE((d > 0.0) ? d : -d); |
| 4137 case kMathRound: | 4147 case kMathRound: |
| 4148 case kMathFround: |
| 4138 case kMathFloor: | 4149 case kMathFloor: |
| 4139 return H_CONSTANT_DOUBLE(d); | 4150 return H_CONSTANT_DOUBLE(d); |
| 4140 case kMathClz32: | 4151 case kMathClz32: |
| 4141 return H_CONSTANT_INT(32); | 4152 return H_CONSTANT_INT(32); |
| 4142 default: | 4153 default: |
| 4143 UNREACHABLE(); | 4154 UNREACHABLE(); |
| 4144 break; | 4155 break; |
| 4145 } | 4156 } |
| 4146 } | 4157 } |
| 4147 switch (op) { | 4158 switch (op) { |
| 4148 case kMathExp: | 4159 case kMathExp: |
| 4149 return H_CONSTANT_DOUBLE(fast_exp(d)); | 4160 return H_CONSTANT_DOUBLE(fast_exp(d)); |
| 4150 case kMathLog: | 4161 case kMathLog: |
| 4151 return H_CONSTANT_DOUBLE(std::log(d)); | 4162 return H_CONSTANT_DOUBLE(std::log(d)); |
| 4152 case kMathSqrt: | 4163 case kMathSqrt: |
| 4153 return H_CONSTANT_DOUBLE(fast_sqrt(d)); | 4164 return H_CONSTANT_DOUBLE(fast_sqrt(d)); |
| 4154 case kMathPowHalf: | 4165 case kMathPowHalf: |
| 4155 return H_CONSTANT_DOUBLE(power_double_double(d, 0.5)); | 4166 return H_CONSTANT_DOUBLE(power_double_double(d, 0.5)); |
| 4156 case kMathAbs: | 4167 case kMathAbs: |
| 4157 return H_CONSTANT_DOUBLE((d >= 0.0) ? d + 0.0 : -d); | 4168 return H_CONSTANT_DOUBLE((d >= 0.0) ? d + 0.0 : -d); |
| 4158 case kMathRound: | 4169 case kMathRound: |
| 4159 // -0.5 .. -0.0 round to -0.0. | 4170 // -0.5 .. -0.0 round to -0.0. |
| 4160 if ((d >= -0.5 && Double(d).Sign() < 0)) return H_CONSTANT_DOUBLE(-0.0); | 4171 if ((d >= -0.5 && Double(d).Sign() < 0)) return H_CONSTANT_DOUBLE(-0.0); |
| 4161 // Doubles are represented as Significant * 2 ^ Exponent. If the | 4172 // Doubles are represented as Significant * 2 ^ Exponent. If the |
| 4162 // Exponent is not negative, the double value is already an integer. | 4173 // Exponent is not negative, the double value is already an integer. |
| 4163 if (Double(d).Exponent() >= 0) return H_CONSTANT_DOUBLE(d); | 4174 if (Double(d).Exponent() >= 0) return H_CONSTANT_DOUBLE(d); |
| 4164 return H_CONSTANT_DOUBLE(std::floor(d + 0.5)); | 4175 return H_CONSTANT_DOUBLE(std::floor(d + 0.5)); |
| 4176 case kMathFround: |
| 4177 return H_CONSTANT_DOUBLE(static_cast<double>(static_cast<float>(d))); |
| 4165 case kMathFloor: | 4178 case kMathFloor: |
| 4166 return H_CONSTANT_DOUBLE(std::floor(d)); | 4179 return H_CONSTANT_DOUBLE(std::floor(d)); |
| 4167 case kMathClz32: { | 4180 case kMathClz32: { |
| 4168 uint32_t i = DoubleToUint32(d); | 4181 uint32_t i = DoubleToUint32(d); |
| 4169 return H_CONSTANT_INT( | 4182 return H_CONSTANT_INT( |
| 4170 (i == 0) ? 32 : CompilerIntrinsics::CountLeadingZeros(i)); | 4183 (i == 0) ? 32 : CompilerIntrinsics::CountLeadingZeros(i)); |
| 4171 } | 4184 } |
| 4172 default: | 4185 default: |
| 4173 UNREACHABLE(); | 4186 UNREACHABLE(); |
| 4174 break; | 4187 break; |
| (...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4770 break; | 4783 break; |
| 4771 case HObjectAccess::kExternalMemory: | 4784 case HObjectAccess::kExternalMemory: |
| 4772 os << "[external-memory]"; | 4785 os << "[external-memory]"; |
| 4773 break; | 4786 break; |
| 4774 } | 4787 } |
| 4775 | 4788 |
| 4776 return os << "@" << access.offset(); | 4789 return os << "@" << access.offset(); |
| 4777 } | 4790 } |
| 4778 | 4791 |
| 4779 } } // namespace v8::internal | 4792 } } // namespace v8::internal |
| OLD | NEW |