Chromium Code Reviews| 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 4117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4128 int vn, n; | 4128 int vn, n; |
| 4129 src1.split_code(&vn, &n); | 4129 src1.split_code(&vn, &n); |
| 4130 int vm, m; | 4130 int vm, m; |
| 4131 src2.split_code(&vm, &m); | 4131 src2.split_code(&vm, &m); |
| 4132 emit(0x1E6U * B23 | d * B22 | vn * B16 | vd * B12 | B8 | n * B7 | m * B5 | | 4132 emit(0x1E6U * B23 | d * B22 | vn * B16 | vd * B12 | B8 | n * B7 | m * B5 | |
| 4133 B4 | vm); | 4133 B4 | vm); |
| 4134 } | 4134 } |
| 4135 | 4135 |
| 4136 void Assembler::veor(QwNeonRegister dst, QwNeonRegister src1, | 4136 void Assembler::veor(QwNeonRegister dst, QwNeonRegister src1, |
| 4137 QwNeonRegister src2) { | 4137 QwNeonRegister src2) { |
| 4138 // Qd = veor(Qn, Qm) SIMD integer exclusive OR. | 4138 // Qd = veor(Qn, Qm) SIMD exclusive OR. |
| 4139 // Instruction details available in ARM DDI 0406C.b, A8.8.888. | 4139 // Instruction details available in ARM DDI 0406C.b, A8.8.888. |
| 4140 DCHECK(IsEnabled(NEON)); | 4140 DCHECK(IsEnabled(NEON)); |
| 4141 int vd, d; | 4141 int vd, d; |
| 4142 dst.split_code(&vd, &d); | 4142 dst.split_code(&vd, &d); |
| 4143 int vn, n; | 4143 int vn, n; |
| 4144 src1.split_code(&vn, &n); | 4144 src1.split_code(&vn, &n); |
| 4145 int vm, m; | 4145 int vm, m; |
| 4146 src2.split_code(&vm, &m); | 4146 src2.split_code(&vm, &m); |
| 4147 emit(0x1E6U * B23 | d * B22 | vn * B16 | vd * B12 | B8 | n * B7 | B6 | | 4147 emit(0x1E6U * B23 | d * B22 | vn * B16 | vd * B12 | B8 | n * B7 | B6 | |
| 4148 m * B5 | B4 | vm); | 4148 m * B5 | B4 | vm); |
| 4149 } | 4149 } |
| 4150 | 4150 |
| 4151 void Assembler::vand(QwNeonRegister dst, QwNeonRegister src1, | |
|
martyn.capewell
2017/01/11 13:47:44
It would be good to factor these into a single fun
bbudge
2017/01/12 10:53:18
Great, thanks. The existing vbsl implementation wa
| |
| 4152 QwNeonRegister src2) { | |
| 4153 // Qd = vand(Qn, Qm) SIMD AND. | |
| 4154 // Instruction details available in ARM DDI 0406C.b, A8.8.836. | |
| 4155 DCHECK(IsEnabled(NEON)); | |
| 4156 int vd, d; | |
| 4157 dst.split_code(&vd, &d); | |
| 4158 int vn, n; | |
| 4159 src1.split_code(&vn, &n); | |
| 4160 int vm, m; | |
| 4161 src2.split_code(&vm, &m); | |
| 4162 emit(0x1E4U * B23 | d * B22 | vn * B16 | vd * B12 | B8 | n * B7 | B6 | | |
| 4163 m * B5 | B4 | vm); | |
| 4164 } | |
| 4165 | |
| 4166 void Assembler::vorr(QwNeonRegister dst, QwNeonRegister src1, | |
| 4167 QwNeonRegister src2) { | |
| 4168 // Qd = vorr(Qn, Qm) SIMD OR. | |
| 4169 // Instruction details available in ARM DDI 0406C.b, A8.8.976. | |
| 4170 DCHECK(IsEnabled(NEON)); | |
| 4171 int vd, d; | |
| 4172 dst.split_code(&vd, &d); | |
| 4173 int vn, n; | |
| 4174 src1.split_code(&vn, &n); | |
| 4175 int vm, m; | |
| 4176 src2.split_code(&vm, &m); | |
| 4177 emit(0x1E4U * B23 | d * B22 | B21 | vn * B16 | vd * B12 | B8 | n * B7 | B6 | | |
| 4178 m * B5 | B4 | vm); | |
| 4179 } | |
| 4180 | |
| 4151 void Assembler::vadd(QwNeonRegister dst, const QwNeonRegister src1, | 4181 void Assembler::vadd(QwNeonRegister dst, const QwNeonRegister src1, |
| 4152 const QwNeonRegister src2) { | 4182 const QwNeonRegister src2) { |
| 4153 DCHECK(IsEnabled(NEON)); | 4183 DCHECK(IsEnabled(NEON)); |
| 4154 // Qd = vadd(Qn, Qm) SIMD floating point addition. | 4184 // Qd = vadd(Qn, Qm) SIMD floating point addition. |
| 4155 // Instruction details available in ARM DDI 0406C.b, A8-830. | 4185 // Instruction details available in ARM DDI 0406C.b, A8-830. |
| 4156 int vd, d; | 4186 int vd, d; |
| 4157 dst.split_code(&vd, &d); | 4187 dst.split_code(&vd, &d); |
| 4158 int vn, n; | 4188 int vn, n; |
| 4159 src1.split_code(&vn, &n); | 4189 src1.split_code(&vn, &n); |
| 4160 int vm, m; | 4190 int vm, m; |
| (...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4998 DCHECK(is_uint12(offset)); | 5028 DCHECK(is_uint12(offset)); |
| 4999 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset)); | 5029 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset)); |
| 5000 } | 5030 } |
| 5001 } | 5031 } |
| 5002 | 5032 |
| 5003 | 5033 |
| 5004 } // namespace internal | 5034 } // namespace internal |
| 5005 } // namespace v8 | 5035 } // namespace v8 |
| 5006 | 5036 |
| 5007 #endif // V8_TARGET_ARCH_ARM | 5037 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |