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

Side by Side Diff: src/IceAssemblerARM32.h

Issue 1878943009: Subzero. ARM32. Vector casts. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Adds vcvt assembler lit tests. 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 | « no previous file | src/IceAssemblerARM32.cpp » ('j') | tests_lit/assembler/arm32/vcvt.f32.s32.ll » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceAssemblerARM32.h - Assembler for ARM32 ----*- C++ -*-===// 1 //===- subzero/src/IceAssemblerARM32.h - 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 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 374
375 // vcvt<c>.F32.U32 375 // vcvt<c>.F32.U32
376 void vcvtsu(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); 376 void vcvtsu(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond);
377 377
378 // vcvt<c>.U32.F64 378 // vcvt<c>.U32.F64
379 void vcvtud(const Operand *OpSd, const Operand *OpDm, CondARM32::Cond Cond); 379 void vcvtud(const Operand *OpSd, const Operand *OpDm, CondARM32::Cond Cond);
380 380
381 // vcvt<c>.u32.f32 381 // vcvt<c>.u32.f32
382 void vcvtus(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); 382 void vcvtus(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond);
383 383
384 void vcvtqsi(const Operand *OpQd, const Operand *OpQm);
385
386 void vcvtqsu(const Operand *OpQd, const Operand *OpQm);
387
388 void vcvtqis(const Operand *OpQd, const Operand *OpQm);
389
390 void vcvtqus(const Operand *OpQd, const Operand *OpQm);
391
384 void vdivd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, 392 void vdivd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm,
385 CondARM32::Cond Cond); 393 CondARM32::Cond Cond);
386 394
387 void vdivs(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm, 395 void vdivs(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm,
388 CondARM32::Cond Cond); 396 CondARM32::Cond Cond);
389 397
390 void veord(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm); 398 void veord(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm);
391 399
392 void veorq(const Operand *OpQd, const Operand *OpQn, const Operand *OpQm); 400 void veorq(const Operand *OpQd, const Operand *OpQn, const Operand *OpQm);
393 401
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 512
505 void vpush(const Variable *OpBaseReg, SizeT NumConsecRegs, 513 void vpush(const Variable *OpBaseReg, SizeT NumConsecRegs,
506 CondARM32::Cond Cond); 514 CondARM32::Cond Cond);
507 515
508 void vshlqi(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, 516 void vshlqi(Type ElmtTy, const Operand *OpQd, const Operand *OpQm,
509 const Operand *OpQn); 517 const Operand *OpQn);
510 518
511 void vshlqu(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, 519 void vshlqu(Type ElmtTy, const Operand *OpQd, const Operand *OpQm,
512 const Operand *OpQn); 520 const Operand *OpQn);
513 521
522 void vshlqc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm,
523 const ConstantInteger32 *OpQn);
524
525 void vshrqic(Type ElmtTy, const Operand *OpQd, const Operand *OpQm,
526 const ConstantInteger32 *OpQn);
527
528 void vshrquc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm,
529 const ConstantInteger32 *OpQn);
530
514 void vsqrtd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond Cond); 531 void vsqrtd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond Cond);
515 532
516 void vsqrts(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); 533 void vsqrts(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond);
517 534
518 void vstrd(const Operand *OpDd, const Operand *OpAddress, 535 void vstrd(const Operand *OpDd, const Operand *OpAddress,
519 CondARM32::Cond Cond, const TargetInfo &TInfo); 536 CondARM32::Cond Cond, const TargetInfo &TInfo);
520 537
521 void vstrd(const Operand *OpDd, const Operand *OpAddress, 538 void vstrd(const Operand *OpDd, const Operand *OpAddress,
522 CondARM32::Cond Cond, const TargetLowering *Lowering) { 539 CondARM32::Cond Cond, const TargetLowering *Lowering) {
523 const TargetInfo TInfo(Lowering); 540 const TargetInfo TInfo(Lowering);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 void emitSIMDqqqBase(IValueT Opcode, const Operand *OpQd, const Operand *OpQn, 749 void emitSIMDqqqBase(IValueT Opcode, const Operand *OpQd, const Operand *OpQn,
733 const Operand *OpQm, bool IsFloatTy, 750 const Operand *OpQm, bool IsFloatTy,
734 const char *OpcodeName); 751 const char *OpcodeName);
735 752
736 // Same as emitSIMD above, except ElmtShift=20 and ElmtSize is computed from 753 // Same as emitSIMD above, except ElmtShift=20 and ElmtSize is computed from
737 // ElmtTy. 754 // ElmtTy.
738 void emitSIMDqqq(IValueT Opcode, Type ElmtTy, const Operand *OpQd, 755 void emitSIMDqqq(IValueT Opcode, Type ElmtTy, const Operand *OpQd,
739 const Operand *OpQn, const Operand *OpQm, 756 const Operand *OpQn, const Operand *OpQm,
740 const char *OpcodeName); 757 const char *OpcodeName);
741 758
759 // Implements various forms of vector (SIMD) shifts using Q registers.
760 // Implements pattern 111100101Diiiiiidddd010101M1mmmm where Dddd=Qd, Mmmm=Qm,
761 // iiiiii=Imm6, and Opcode is unioned into the pattern.
762 void emitSIMDShiftqqc(IValueT Opcode, const Operand *OpQd,
763 const Operand *OpQm, const IValueT Imm6,
764 const char *OpcodeName);
765
766 // Implements various forms of vector (SIMD) casts between (signed and
767 // unsigned) integer and floating point types (f32). Implements pattern
768 // 111100111D11ss11dddd011ooQM0mmmm where Dddd=Qd, Mmmm=Qm, 10=ss, op=00, 1=Q,
769 // and Opcode is unioned into the pattern.
770 void emitSIMDCvtqq(IValueT Opcode, const Operand *OpQd, const Operand *OpQm,
771 const char *CvtName);
772
742 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, 773 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn,
743 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from 774 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from
744 // OpSrc1, and xxxx=Opcode. 775 // OpSrc1, and xxxx=Opcode.
745 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn, 776 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn,
746 const Operand *OpSrc1, const char *CmpName); 777 const Operand *OpSrc1, const char *CmpName);
747 778
748 void emitBranch(Label *L, CondARM32::Cond, bool Link); 779 void emitBranch(Label *L, CondARM32::Cond, bool Link);
749 780
750 // Returns the offset encoded in the branch instruction Inst. 781 // Returns the offset encoded in the branch instruction Inst.
751 static IOffsetT decodeBranchOffset(IValueT Inst); 782 static IOffsetT decodeBranchOffset(IValueT Inst);
(...skipping 18 matching lines...) Expand all
770 801
771 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd, 802 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd,
772 const Operand *OpSn, const Operand *OpSm, 803 const Operand *OpSn, const Operand *OpSm,
773 const char *InstName); 804 const char *InstName);
774 }; 805 };
775 806
776 } // end of namespace ARM32 807 } // end of namespace ARM32
777 } // end of namespace Ice 808 } // end of namespace Ice
778 809
779 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H 810 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H
OLDNEW
« no previous file with comments | « no previous file | src/IceAssemblerARM32.cpp » ('j') | tests_lit/assembler/arm32/vcvt.f32.s32.ll » ('J')

Powered by Google App Engine
This is Rietveld 408576698