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 |