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

Side by Side Diff: src/IceAssemblerARM32.cpp

Issue 1886263004: Subzero. ARM32. Implements vector select. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. Created 4 years, 8 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/IceAssemblerARM32.h ('k') | src/IceInstARM32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceAssemblerARM32.cpp - Assembler for ARM32 --*- C++ -*-===// 1 //===- subzero/src/IceAssemblerARM32.cpp - Assembler for ARM32 --*- C++ -*-===//
2 // 2 //
3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
4 // for details. All rights reserved. Use of this source code is governed by a 4 // for details. All rights reserved. Use of this source code is governed by a
5 // BSD-style license that can be found in the LICENSE file. 5 // BSD-style license that can be found in the LICENSE file.
6 // 6 //
7 // Modified by the Subzero authors. 7 // Modified by the Subzero authors.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 // 10 //
(...skipping 2392 matching lines...) Expand 10 before | Expand all | Expand 10 after
2403 // VAND (register) - ARM section A8.8.287, encoding A1: 2403 // VAND (register) - ARM section A8.8.287, encoding A1:
2404 // vand <Qd>, <Qn>, <Qm> 2404 // vand <Qd>, <Qn>, <Qm>
2405 // 2405 //
2406 // 111100100D00nnn0ddd00001N1M1mmm0 where Dddd=OpQd, Nnnn=OpQm, and Mmmm=OpQm. 2406 // 111100100D00nnn0ddd00001N1M1mmm0 where Dddd=OpQd, Nnnn=OpQm, and Mmmm=OpQm.
2407 constexpr const char *Vandq = "vandq"; 2407 constexpr const char *Vandq = "vandq";
2408 constexpr IValueT VandqOpcode = B8 | B4; 2408 constexpr IValueT VandqOpcode = B8 | B4;
2409 constexpr Type ElmtTy = IceType_i8; 2409 constexpr Type ElmtTy = IceType_i8;
2410 emitSIMDqqq(VandqOpcode, ElmtTy, OpQd, OpQm, OpQn, Vandq); 2410 emitSIMDqqq(VandqOpcode, ElmtTy, OpQd, OpQm, OpQn, Vandq);
2411 } 2411 }
2412 2412
2413 void AssemblerARM32::vbslq(const Operand *OpQd, const Operand *OpQm,
2414 const Operand *OpQn) {
2415 // VBSL (register) - ARM section A8.8.290, encoding A1:
2416 // vbsl <Qd>, <Qn>, <Qm>
2417 //
2418 // 111100110D01nnn0ddd00001N1M1mmm0 where Dddd=OpQd, Nnnn=OpQm, and Mmmm=OpQm.
2419 constexpr const char *Vbslq = "vbslq";
2420 constexpr IValueT VbslqOpcode = B24 | B20 | B8 | B4;
2421 constexpr Type ElmtTy = IceType_i8; // emits sz=0
2422 emitSIMDqqq(VbslqOpcode, ElmtTy, OpQd, OpQm, OpQn, Vbslq);
2423 }
2424
2413 void AssemblerARM32::vcmpd(const Operand *OpDd, const Operand *OpDm, 2425 void AssemblerARM32::vcmpd(const Operand *OpDd, const Operand *OpDm,
2414 CondARM32::Cond Cond) { 2426 CondARM32::Cond Cond) {
2415 constexpr const char *Vcmpd = "vcmpd"; 2427 constexpr const char *Vcmpd = "vcmpd";
2416 IValueT Dd = encodeDRegister(OpDd, "Dd", Vcmpd); 2428 IValueT Dd = encodeDRegister(OpDd, "Dd", Vcmpd);
2417 IValueT Dm = encodeDRegister(OpDm, "Dm", Vcmpd); 2429 IValueT Dm = encodeDRegister(OpDm, "Dm", Vcmpd);
2418 constexpr IValueT VcmpdOpcode = B23 | B21 | B20 | B18 | B6; 2430 constexpr IValueT VcmpdOpcode = B23 | B21 | B20 | B18 | B6;
2419 constexpr IValueT Dn = 0; 2431 constexpr IValueT Dn = 0;
2420 emitVFPddd(Cond, VcmpdOpcode, Dd, Dn, Dm); 2432 emitVFPddd(Cond, VcmpdOpcode, Dd, Dn, Dm);
2421 } 2433 }
2422 2434
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
3443 constexpr const char *Vsqrts = "vsqrts"; 3455 constexpr const char *Vsqrts = "vsqrts";
3444 IValueT Sd = encodeSRegister(OpSd, "Sd", Vsqrts); 3456 IValueT Sd = encodeSRegister(OpSd, "Sd", Vsqrts);
3445 IValueT Sm = encodeSRegister(OpSm, "Sm", Vsqrts); 3457 IValueT Sm = encodeSRegister(OpSm, "Sm", Vsqrts);
3446 constexpr IValueT VsqrtsOpcode = B23 | B21 | B20 | B16 | B7 | B6; 3458 constexpr IValueT VsqrtsOpcode = B23 | B21 | B20 | B16 | B7 | B6;
3447 constexpr IValueT S0 = 0; 3459 constexpr IValueT S0 = 0;
3448 emitVFPsss(Cond, VsqrtsOpcode, Sd, S0, Sm); 3460 emitVFPsss(Cond, VsqrtsOpcode, Sd, S0, Sm);
3449 } 3461 }
3450 3462
3451 } // end of namespace ARM32 3463 } // end of namespace ARM32
3452 } // end of namespace Ice 3464 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceAssemblerARM32.h ('k') | src/IceInstARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698