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 |