OLD | NEW |
1 //===- subzero/src/IceInstX8632.h - Low-level x86 instructions --*- C++ -*-===// | 1 //===- subzero/src/IceInstX8632.h - Low-level x86 instructions --*- C++ -*-===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file declares the InstX8632 and OperandX8632 classes and | 10 // This file declares the InstX8632 and OperandX8632 classes and |
(...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
830 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; | 830 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; |
831 typedef InstX8632BinopGPR<InstX8632::Sbb> InstX8632Sbb; | 831 typedef InstX8632BinopGPR<InstX8632::Sbb> InstX8632Sbb; |
832 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; | 832 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; |
833 typedef InstX8632BinopGPR<InstX8632::And> InstX8632And; | 833 typedef InstX8632BinopGPR<InstX8632::And> InstX8632And; |
834 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; | 834 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; |
835 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; | 835 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; |
836 typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; | 836 typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; |
837 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; | 837 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; |
838 typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; | 838 typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; |
839 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; | 839 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; |
840 typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul; | 840 typedef InstX8632BinopGPR<InstX8632::Imul> InstX8632Imul; |
841 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; | 841 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; |
842 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; | 842 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; |
843 typedef InstX8632Binop<InstX8632::Pmull> InstX8632Pmull; | 843 typedef InstX8632Binop<InstX8632::Pmull> InstX8632Pmull; |
844 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; | 844 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; |
845 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; | 845 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; |
846 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; | 846 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; |
847 typedef InstX8632Binop<InstX8632::Rol, true> InstX8632Rol; | 847 typedef InstX8632Binop<InstX8632::Rol, true> InstX8632Rol; |
848 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl; | 848 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl; |
849 typedef InstX8632Binop<InstX8632::Psll> InstX8632Psll; | 849 typedef InstX8632Binop<InstX8632::Psll> InstX8632Psll; |
850 typedef InstX8632Binop<InstX8632::Shr, true> InstX8632Shr; | 850 typedef InstX8632Binop<InstX8632::Shr, true> InstX8632Shr; |
851 typedef InstX8632Binop<InstX8632::Sar, true> InstX8632Sar; | 851 typedef InstX8632Binop<InstX8632::Sar, true> InstX8632Sar; |
852 typedef InstX8632Binop<InstX8632::Psra> InstX8632Psra; | 852 typedef InstX8632Binop<InstX8632::Psra> InstX8632Psra; |
853 typedef InstX8632Binop<InstX8632::Pcmpeq> InstX8632Pcmpeq; | 853 typedef InstX8632BinopXmm<InstX8632::Pcmpeq, true> InstX8632Pcmpeq; |
854 typedef InstX8632Binop<InstX8632::Pcmpgt> InstX8632Pcmpgt; | 854 typedef InstX8632BinopXmm<InstX8632::Pcmpgt, true> InstX8632Pcmpgt; |
855 // TODO: movss is only a binary operation when the source and dest | 855 // TODO: movss is only a binary operation when the source and dest |
856 // operands are both registers. In other cases, it behaves like a copy | 856 // operands are both registers. In other cases, it behaves like a copy |
857 // (mov-like) operation. Eventually, InstX8632Movss should assert that | 857 // (mov-like) operation. Eventually, InstX8632Movss should assert that |
858 // both its source and dest operands are registers, and the lowering | 858 // both its source and dest operands are registers, and the lowering |
859 // code should use _mov instead of _movss in cases where a copy | 859 // code should use _mov instead of _movss in cases where a copy |
860 // operation is intended. | 860 // operation is intended. |
861 typedef InstX8632Binop<InstX8632::Movss> InstX8632Movss; | 861 typedef InstX8632Binop<InstX8632::Movss> InstX8632Movss; |
862 typedef InstX8632Ternop<InstX8632::Idiv> InstX8632Idiv; | 862 typedef InstX8632Ternop<InstX8632::Idiv> InstX8632Idiv; |
863 typedef InstX8632Ternop<InstX8632::Div> InstX8632Div; | 863 typedef InstX8632Ternop<InstX8632::Div> InstX8632Div; |
864 typedef InstX8632Ternop<InstX8632::Insertps> InstX8632Insertps; | 864 typedef InstX8632Ternop<InstX8632::Insertps> InstX8632Insertps; |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 template <> void InstX8632Pmull::emit(const Cfg *Func) const; | 1443 template <> void InstX8632Pmull::emit(const Cfg *Func) const; |
1444 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; | 1444 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; |
1445 template <> void InstX8632Psll::emit(const Cfg *Func) const; | 1445 template <> void InstX8632Psll::emit(const Cfg *Func) const; |
1446 template <> void InstX8632Psra::emit(const Cfg *Func) const; | 1446 template <> void InstX8632Psra::emit(const Cfg *Func) const; |
1447 template <> void InstX8632Psub::emit(const Cfg *Func) const; | 1447 template <> void InstX8632Psub::emit(const Cfg *Func) const; |
1448 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; | 1448 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; |
1449 template <> void InstX8632Subss::emit(const Cfg *Func) const; | 1449 template <> void InstX8632Subss::emit(const Cfg *Func) const; |
1450 | 1450 |
1451 template <> void InstX8632Div::emitIAS(const Cfg *Func) const; | 1451 template <> void InstX8632Div::emitIAS(const Cfg *Func) const; |
1452 template <> void InstX8632Idiv::emitIAS(const Cfg *Func) const; | 1452 template <> void InstX8632Idiv::emitIAS(const Cfg *Func) const; |
| 1453 template <> void InstX8632Imul::emitIAS(const Cfg *Func) const; |
1453 template <> void InstX8632Cbwdq::emitIAS(const Cfg *Func) const; | 1454 template <> void InstX8632Cbwdq::emitIAS(const Cfg *Func) const; |
1454 template <> void InstX8632Movd::emitIAS(const Cfg *Func) const; | 1455 template <> void InstX8632Movd::emitIAS(const Cfg *Func) const; |
1455 | 1456 |
1456 } // end of namespace Ice | 1457 } // end of namespace Ice |
1457 | 1458 |
1458 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1459 #endif // SUBZERO_SRC_ICEINSTX8632_H |
OLD | NEW |