| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 2106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2117 *vm = reg_code & 0x0F; | 2117 *vm = reg_code & 0x0F; |
| 2118 } | 2118 } |
| 2119 } | 2119 } |
| 2120 | 2120 |
| 2121 | 2121 |
| 2122 // Encode vcvt.src_type.dst_type instruction. | 2122 // Encode vcvt.src_type.dst_type instruction. |
| 2123 static Instr EncodeVCVT(const VFPType dst_type, | 2123 static Instr EncodeVCVT(const VFPType dst_type, |
| 2124 const int dst_code, | 2124 const int dst_code, |
| 2125 const VFPType src_type, | 2125 const VFPType src_type, |
| 2126 const int src_code, | 2126 const int src_code, |
| 2127 Assembler::ConversionMode mode, | 2127 VFPConversionMode mode, |
| 2128 const Condition cond) { | 2128 const Condition cond) { |
| 2129 ASSERT(src_type != dst_type); | 2129 ASSERT(src_type != dst_type); |
| 2130 int D, Vd, M, Vm; | 2130 int D, Vd, M, Vm; |
| 2131 SplitRegCode(src_type, src_code, &Vm, &M); | 2131 SplitRegCode(src_type, src_code, &Vm, &M); |
| 2132 SplitRegCode(dst_type, dst_code, &Vd, &D); | 2132 SplitRegCode(dst_type, dst_code, &Vd, &D); |
| 2133 | 2133 |
| 2134 if (IsIntegerVFPType(dst_type) || IsIntegerVFPType(src_type)) { | 2134 if (IsIntegerVFPType(dst_type) || IsIntegerVFPType(src_type)) { |
| 2135 // Conversion between IEEE floating point and 32-bit integer. | 2135 // Conversion between IEEE floating point and 32-bit integer. |
| 2136 // Instruction details available in ARM DDI 0406B, A8.6.295. | 2136 // Instruction details available in ARM DDI 0406B, A8.6.295. |
| 2137 // cond(31-28) | 11101(27-23)| D(22) | 11(21-20) | 1(19) | opc2(18-16) | | 2137 // cond(31-28) | 11101(27-23)| D(22) | 11(21-20) | 1(19) | opc2(18-16) | |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2160 // Vd(15-12) | 101(11-9) | sz(8) | 1(7) | 1(6) | M(5) | 0(4) | Vm(3-0) | 2160 // Vd(15-12) | 101(11-9) | sz(8) | 1(7) | 1(6) | M(5) | 0(4) | Vm(3-0) |
| 2161 int sz = IsDoubleVFPType(src_type) ? 0x1 : 0x0; | 2161 int sz = IsDoubleVFPType(src_type) ? 0x1 : 0x0; |
| 2162 return (cond | 0xE*B24 | B23 | D*B22 | 0x3*B20 | 0x7*B16 | | 2162 return (cond | 0xE*B24 | B23 | D*B22 | 0x3*B20 | 0x7*B16 | |
| 2163 Vd*B12 | 0x5*B9 | sz*B8 | B7 | B6 | M*B5 | Vm); | 2163 Vd*B12 | 0x5*B9 | sz*B8 | B7 | B6 | M*B5 | Vm); |
| 2164 } | 2164 } |
| 2165 } | 2165 } |
| 2166 | 2166 |
| 2167 | 2167 |
| 2168 void Assembler::vcvt_f64_s32(const DwVfpRegister dst, | 2168 void Assembler::vcvt_f64_s32(const DwVfpRegister dst, |
| 2169 const SwVfpRegister src, | 2169 const SwVfpRegister src, |
| 2170 ConversionMode mode, | 2170 VFPConversionMode mode, |
| 2171 const Condition cond) { | 2171 const Condition cond) { |
| 2172 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2172 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2173 emit(EncodeVCVT(F64, dst.code(), S32, src.code(), mode, cond)); | 2173 emit(EncodeVCVT(F64, dst.code(), S32, src.code(), mode, cond)); |
| 2174 } | 2174 } |
| 2175 | 2175 |
| 2176 | 2176 |
| 2177 void Assembler::vcvt_f32_s32(const SwVfpRegister dst, | 2177 void Assembler::vcvt_f32_s32(const SwVfpRegister dst, |
| 2178 const SwVfpRegister src, | 2178 const SwVfpRegister src, |
| 2179 ConversionMode mode, | 2179 VFPConversionMode mode, |
| 2180 const Condition cond) { | 2180 const Condition cond) { |
| 2181 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2181 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2182 emit(EncodeVCVT(F32, dst.code(), S32, src.code(), mode, cond)); | 2182 emit(EncodeVCVT(F32, dst.code(), S32, src.code(), mode, cond)); |
| 2183 } | 2183 } |
| 2184 | 2184 |
| 2185 | 2185 |
| 2186 void Assembler::vcvt_f64_u32(const DwVfpRegister dst, | 2186 void Assembler::vcvt_f64_u32(const DwVfpRegister dst, |
| 2187 const SwVfpRegister src, | 2187 const SwVfpRegister src, |
| 2188 ConversionMode mode, | 2188 VFPConversionMode mode, |
| 2189 const Condition cond) { | 2189 const Condition cond) { |
| 2190 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2190 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2191 emit(EncodeVCVT(F64, dst.code(), U32, src.code(), mode, cond)); | 2191 emit(EncodeVCVT(F64, dst.code(), U32, src.code(), mode, cond)); |
| 2192 } | 2192 } |
| 2193 | 2193 |
| 2194 | 2194 |
| 2195 void Assembler::vcvt_s32_f64(const SwVfpRegister dst, | 2195 void Assembler::vcvt_s32_f64(const SwVfpRegister dst, |
| 2196 const DwVfpRegister src, | 2196 const DwVfpRegister src, |
| 2197 ConversionMode mode, | 2197 VFPConversionMode mode, |
| 2198 const Condition cond) { | 2198 const Condition cond) { |
| 2199 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2199 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2200 emit(EncodeVCVT(S32, dst.code(), F64, src.code(), mode, cond)); | 2200 emit(EncodeVCVT(S32, dst.code(), F64, src.code(), mode, cond)); |
| 2201 } | 2201 } |
| 2202 | 2202 |
| 2203 | 2203 |
| 2204 void Assembler::vcvt_u32_f64(const SwVfpRegister dst, | 2204 void Assembler::vcvt_u32_f64(const SwVfpRegister dst, |
| 2205 const DwVfpRegister src, | 2205 const DwVfpRegister src, |
| 2206 ConversionMode mode, | 2206 VFPConversionMode mode, |
| 2207 const Condition cond) { | 2207 const Condition cond) { |
| 2208 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2208 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2209 emit(EncodeVCVT(U32, dst.code(), F64, src.code(), mode, cond)); | 2209 emit(EncodeVCVT(U32, dst.code(), F64, src.code(), mode, cond)); |
| 2210 } | 2210 } |
| 2211 | 2211 |
| 2212 | 2212 |
| 2213 void Assembler::vcvt_f64_f32(const DwVfpRegister dst, | 2213 void Assembler::vcvt_f64_f32(const DwVfpRegister dst, |
| 2214 const SwVfpRegister src, | 2214 const SwVfpRegister src, |
| 2215 ConversionMode mode, | 2215 VFPConversionMode mode, |
| 2216 const Condition cond) { | 2216 const Condition cond) { |
| 2217 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2217 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2218 emit(EncodeVCVT(F64, dst.code(), F32, src.code(), mode, cond)); | 2218 emit(EncodeVCVT(F64, dst.code(), F32, src.code(), mode, cond)); |
| 2219 } | 2219 } |
| 2220 | 2220 |
| 2221 | 2221 |
| 2222 void Assembler::vcvt_f32_f64(const SwVfpRegister dst, | 2222 void Assembler::vcvt_f32_f64(const SwVfpRegister dst, |
| 2223 const DwVfpRegister src, | 2223 const DwVfpRegister src, |
| 2224 ConversionMode mode, | 2224 VFPConversionMode mode, |
| 2225 const Condition cond) { | 2225 const Condition cond) { |
| 2226 ASSERT(CpuFeatures::IsEnabled(VFP3)); | 2226 ASSERT(CpuFeatures::IsEnabled(VFP3)); |
| 2227 emit(EncodeVCVT(F32, dst.code(), F64, src.code(), mode, cond)); | 2227 emit(EncodeVCVT(F32, dst.code(), F64, src.code(), mode, cond)); |
| 2228 } | 2228 } |
| 2229 | 2229 |
| 2230 | 2230 |
| 2231 void Assembler::vabs(const DwVfpRegister dst, | 2231 void Assembler::vabs(const DwVfpRegister dst, |
| 2232 const DwVfpRegister src, | 2232 const DwVfpRegister src, |
| 2233 const Condition cond) { | 2233 const Condition cond) { |
| 2234 emit(cond | 0xE*B24 | 0xB*B20 | dst.code()*B12 | | 2234 emit(cond | 0xE*B24 | 0xB*B20 | dst.code()*B12 | |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2615 | 2615 |
| 2616 // Since a constant pool was just emitted, move the check offset forward by | 2616 // Since a constant pool was just emitted, move the check offset forward by |
| 2617 // the standard interval. | 2617 // the standard interval. |
| 2618 next_buffer_check_ = pc_offset() + kCheckConstInterval; | 2618 next_buffer_check_ = pc_offset() + kCheckConstInterval; |
| 2619 } | 2619 } |
| 2620 | 2620 |
| 2621 | 2621 |
| 2622 } } // namespace v8::internal | 2622 } } // namespace v8::internal |
| 2623 | 2623 |
| 2624 #endif // V8_TARGET_ARCH_ARM | 2624 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |