| 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 <limits> |  | 
|     6  |  | 
|     7 #include "src/v8.h" |     5 #include "src/v8.h" | 
|     8  |     6  | 
|     9 #if V8_TARGET_ARCH_ARM |     7 #if V8_TARGET_ARCH_ARM | 
|    10  |     8  | 
|    11 #include "src/base/bits.h" |     9 #include "src/base/bits.h" | 
|    12 #include "src/bootstrapper.h" |    10 #include "src/bootstrapper.h" | 
|    13 #include "src/code-stubs.h" |    11 #include "src/code-stubs.h" | 
|    14 #include "src/codegen.h" |    12 #include "src/codegen.h" | 
|    15 #include "src/ic/handler-compiler.h" |    13 #include "src/ic/handler-compiler.h" | 
|    16 #include "src/ic/ic.h" |    14 #include "src/ic/ic.h" | 
| (...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   777       // for non-constant cases of +/-0.5 as these hardly occur. |   775       // for non-constant cases of +/-0.5 as these hardly occur. | 
|   778       Label not_plus_half; |   776       Label not_plus_half; | 
|   779  |   777  | 
|   780       // Test for 0.5. |   778       // Test for 0.5. | 
|   781       __ vmov(double_scratch, 0.5, scratch); |   779       __ vmov(double_scratch, 0.5, scratch); | 
|   782       __ VFPCompareAndSetFlags(double_exponent, double_scratch); |   780       __ VFPCompareAndSetFlags(double_exponent, double_scratch); | 
|   783       __ b(ne, ¬_plus_half); |   781       __ b(ne, ¬_plus_half); | 
|   784  |   782  | 
|   785       // Calculates square root of base.  Check for the special case of |   783       // Calculates square root of base.  Check for the special case of | 
|   786       // Math.pow(-Infinity, 0.5) == Infinity (ECMA spec, 15.8.2.13). |   784       // Math.pow(-Infinity, 0.5) == Infinity (ECMA spec, 15.8.2.13). | 
|   787       __ vmov(double_scratch, -std::numeric_limits<double>::infinity(), |   785       __ vmov(double_scratch, -V8_INFINITY, scratch); | 
|   788               scratch); |  | 
|   789       __ VFPCompareAndSetFlags(double_base, double_scratch); |   786       __ VFPCompareAndSetFlags(double_base, double_scratch); | 
|   790       __ vneg(double_result, double_scratch, eq); |   787       __ vneg(double_result, double_scratch, eq); | 
|   791       __ b(eq, &done); |   788       __ b(eq, &done); | 
|   792  |   789  | 
|   793       // Add +0 to convert -0 to +0. |   790       // Add +0 to convert -0 to +0. | 
|   794       __ vadd(double_scratch, double_base, kDoubleRegZero); |   791       __ vadd(double_scratch, double_base, kDoubleRegZero); | 
|   795       __ vsqrt(double_result, double_scratch); |   792       __ vsqrt(double_result, double_scratch); | 
|   796       __ jmp(&done); |   793       __ jmp(&done); | 
|   797  |   794  | 
|   798       __ bind(¬_plus_half); |   795       __ bind(¬_plus_half); | 
|   799       __ vmov(double_scratch, -0.5, scratch); |   796       __ vmov(double_scratch, -0.5, scratch); | 
|   800       __ VFPCompareAndSetFlags(double_exponent, double_scratch); |   797       __ VFPCompareAndSetFlags(double_exponent, double_scratch); | 
|   801       __ b(ne, &call_runtime); |   798       __ b(ne, &call_runtime); | 
|   802  |   799  | 
|   803       // Calculates square root of base.  Check for the special case of |   800       // Calculates square root of base.  Check for the special case of | 
|   804       // Math.pow(-Infinity, -0.5) == 0 (ECMA spec, 15.8.2.13). |   801       // Math.pow(-Infinity, -0.5) == 0 (ECMA spec, 15.8.2.13). | 
|   805       __ vmov(double_scratch, -std::numeric_limits<double>::infinity(), |   802       __ vmov(double_scratch, -V8_INFINITY, scratch); | 
|   806               scratch); |  | 
|   807       __ VFPCompareAndSetFlags(double_base, double_scratch); |   803       __ VFPCompareAndSetFlags(double_base, double_scratch); | 
|   808       __ vmov(double_result, kDoubleRegZero, eq); |   804       __ vmov(double_result, kDoubleRegZero, eq); | 
|   809       __ b(eq, &done); |   805       __ b(eq, &done); | 
|   810  |   806  | 
|   811       // Add +0 to convert -0 to +0. |   807       // Add +0 to convert -0 to +0. | 
|   812       __ vadd(double_scratch, double_base, kDoubleRegZero); |   808       __ vadd(double_scratch, double_base, kDoubleRegZero); | 
|   813       __ vmov(double_result, 1.0, scratch); |   809       __ vmov(double_result, 1.0, scratch); | 
|   814       __ vsqrt(double_scratch, double_scratch); |   810       __ vsqrt(double_scratch, double_scratch); | 
|   815       __ vdiv(double_result, double_result, double_scratch); |   811       __ vdiv(double_result, double_result, double_scratch); | 
|   816       __ jmp(&done); |   812       __ jmp(&done); | 
| (...skipping 3941 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4758                               MemOperand(fp, 6 * kPointerSize), |  4754                               MemOperand(fp, 6 * kPointerSize), | 
|  4759                               NULL); |  4755                               NULL); | 
|  4760 } |  4756 } | 
|  4761  |  4757  | 
|  4762  |  4758  | 
|  4763 #undef __ |  4759 #undef __ | 
|  4764  |  4760  | 
|  4765 } }  // namespace v8::internal |  4761 } }  // namespace v8::internal | 
|  4766  |  4762  | 
|  4767 #endif  // V8_TARGET_ARCH_ARM |  4763 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW |