Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: src/arm/assembler-arm.cc

Issue 2620343002: [ARM] Add vand, vorr NEON instructions. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/disasm-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/disasm-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698