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

Unified Diff: src/IceInstX86Base.h

Issue 1530423002: Add template parameter for suffix to BinopXmm (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/IceInstX86BaseImpl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceInstX86Base.h
diff --git a/src/IceInstX86Base.h b/src/IceInstX86Base.h
index b53620847ad595498c485f85f480c7d553676acd..50cf5efd95ca45dd61645fa6d4a1cca906d6c6e8 100644
--- a/src/IceInstX86Base.h
+++ b/src/IceInstX86Base.h
@@ -149,6 +149,8 @@ public:
IacaEnd
};
+ enum SseSuffix { None, Packed, Scalar };
+
static const char *getWidthString(Type Ty);
static const char *getFldString(Type Ty);
static typename Traits::Cond::BrCond
@@ -749,20 +751,39 @@ protected:
};
template <class Machine, typename InstX86Base<Machine>::InstKindX86 K,
- bool NeedsElementType>
+ bool NeedsElementType,
+ typename InstX86Base<Machine>::SseSuffix Suffix>
class InstX86BaseBinopXmm : public InstX86Base<Machine> {
InstX86BaseBinopXmm() = delete;
InstX86BaseBinopXmm(const InstX86BaseBinopXmm &) = delete;
InstX86BaseBinopXmm &operator=(const InstX86BaseBinopXmm &) = delete;
public:
- using Base = InstX86BaseBinopXmm<Machine, K, NeedsElementType>;
+ using Base = InstX86BaseBinopXmm<Machine, K, NeedsElementType, Suffix>;
void emit(const Cfg *Func) const override {
if (!BuildDefs::dump())
return;
this->validateVectorAddrMode();
- this->emitTwoAddress(Opcode, this, Func);
+ switch (Suffix) {
+ case InstX86Base<Machine>::SseSuffix::None:
+ this->emitTwoAddress(Opcode, this, Func);
+ break;
+ case InstX86Base<Machine>::SseSuffix::Packed: {
+ char buf[30];
John 2015/12/17 14:06:36 I know these routines don't make to the final bina
sehr 2015/12/17 21:03:31 Done. And added another case for the Integral SSE
+ Type DestTy = this->getDest()->getType();
+ snprintf(buf, llvm::array_lengthof(buf), "%s%s", this->Opcode,
+ InstX86Base<Machine>::Traits::TypeAttributes[DestTy].PdPsString);
+ this->emitTwoAddress(buf, this, Func);
+ } break;
+ case InstX86Base<Machine>::SseSuffix::Scalar: {
+ char buf[30];
+ Type DestTy = this->getDest()->getType();
+ snprintf(buf, llvm::array_lengthof(buf), "%s%s", this->Opcode,
+ InstX86Base<Machine>::Traits::TypeAttributes[DestTy].SdSsString);
+ this->emitTwoAddress(buf, this, Func);
+ } break;
+ }
}
void emitIAS(const Cfg *Func) const override {
this->validateVectorAddrMode();
@@ -1254,7 +1275,8 @@ private:
template <class Machine>
class InstX86Addps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Addps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Addps>())
@@ -1263,8 +1285,9 @@ public:
private:
InstX86Addps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1303,24 +1326,25 @@ private:
template <class Machine>
class InstX86Addss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addss, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Addss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Addss>())
InstX86Addss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Addss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addss, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Addss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Padd
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Padd, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Padd, true,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Padd *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Padd>()) InstX86Padd(Func, Dest, Source);
@@ -1330,8 +1354,9 @@ public:
private:
InstX86Padd(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Padd, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Padd, true,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1370,7 +1395,8 @@ private:
template <class Machine>
class InstX86Subps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Subps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Subps>())
@@ -1379,25 +1405,26 @@ public:
private:
InstX86Subps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Subss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subss, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Subss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Subss>())
InstX86Subss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Subss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subss, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Subss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1436,7 +1463,8 @@ private:
template <class Machine>
class InstX86Psub
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Psub, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Psub, true,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Psub *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Psub>()) InstX86Psub(Func, Dest, Source);
@@ -1446,8 +1474,9 @@ public:
private:
InstX86Psub(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Psub, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Psub, true,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1466,36 +1495,36 @@ private:
template <class Machine>
class InstX86Andnps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andnps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andnps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Andnps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Andnps>())
InstX86Andnps(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Andnps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andnps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andnps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Andps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Andps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Andps>())
InstX86Andps(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Andps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Andps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1520,7 +1549,8 @@ private:
template <class Machine>
class InstX86Pand
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pand, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pand, false,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pand *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pand>()) InstX86Pand(Func, Dest, Source);
@@ -1528,13 +1558,15 @@ public:
private:
InstX86Pand(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pand, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pand, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Pandn
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pandn, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pandn, false,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pandn *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pandn>())
@@ -1543,42 +1575,43 @@ public:
private:
InstX86Pandn(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pandn, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pandn, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Maxss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Maxss, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Maxss, true,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Maxss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Maxss>())
InstX86Maxss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Maxss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Maxss, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Maxss, true,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Minss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Minss, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Minss, true,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Minss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Minss>())
InstX86Minss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Minss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Minss, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Minss, true,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1597,18 +1630,18 @@ private:
template <class Machine>
class InstX86Orps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Orps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Orps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Orps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Orps>()) InstX86Orps(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Orps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Orps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Orps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1633,7 +1666,8 @@ private:
template <class Machine>
class InstX86Por
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Por, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Por, false,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Por *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Por>()) InstX86Por(Func, Dest, Source);
@@ -1641,8 +1675,9 @@ public:
private:
InstX86Por(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Por, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Por, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1661,19 +1696,19 @@ private:
template <class Machine>
class InstX86Xorps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Xorps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Xorps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Xorps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Xorps>())
InstX86Xorps(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Xorps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Xorps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Xorps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1698,7 +1733,8 @@ private:
template <class Machine>
class InstX86Pxor
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pxor, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pxor, false,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pxor *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pxor>()) InstX86Pxor(Func, Dest, Source);
@@ -1706,8 +1742,9 @@ public:
private:
InstX86Pxor(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pxor, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pxor, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1748,7 +1785,8 @@ private:
template <class Machine>
class InstX86Mulps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Mulps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Mulps>())
@@ -1757,30 +1795,32 @@ public:
private:
InstX86Mulps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Mulss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulss, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Mulss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Mulss>())
InstX86Mulss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Mulss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulss, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Pmull
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmull, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmull, true,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pmull *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pmull>())
@@ -1792,14 +1832,15 @@ public:
private:
InstX86Pmull(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmull, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmull, true,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Pmuludq
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmuludq,
- false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmuludq, false,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pmuludq *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pmuludq>())
@@ -1810,13 +1851,15 @@ public:
private:
InstX86Pmuludq(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmuludq, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pmuludq, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Divps
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divps, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divps, true,
+ InstX86Base<Machine>::SseSuffix::Packed> {
public:
static InstX86Divps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Divps>())
@@ -1825,25 +1868,26 @@ public:
private:
InstX86Divps(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divps, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divps, true,
+ InstX86Base<Machine>::SseSuffix::Packed>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Divss
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divss, false> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar> {
public:
static InstX86Divss *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Divss>())
InstX86Divss(Func, Dest, Source);
}
- void emit(const Cfg *Func) const override;
-
private:
InstX86Divss(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divss, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Divss, false,
+ InstX86Base<Machine>::SseSuffix::Scalar>(Func, Dest,
+ Source) {}
};
template <class Machine>
@@ -1953,7 +1997,8 @@ private:
template <class Machine>
class InstX86Pcmpeq
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpeq, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpeq, true,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pcmpeq *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pcmpeq>())
@@ -1964,13 +2009,15 @@ public:
private:
InstX86Pcmpeq(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpeq, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpeq, true,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
class InstX86Pcmpgt
- : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpgt, true> {
+ : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpgt, true,
+ InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86Pcmpgt *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Pcmpgt>())
@@ -1981,8 +2028,9 @@ public:
private:
InstX86Pcmpgt(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpgt, true>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Pcmpgt, true,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
/// movss is only a binary operation when the source and dest operands are both
@@ -1994,7 +2042,7 @@ private:
template <class Machine>
class InstX86MovssRegs
: public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::MovssRegs,
- false> {
+ false, InstX86Base<Machine>::SseSuffix::None> {
public:
static InstX86MovssRegs *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86MovssRegs>())
@@ -2005,8 +2053,9 @@ public:
private:
InstX86MovssRegs(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::MovssRegs, false>(
- Func, Dest, Source) {}
+ : InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::MovssRegs, false,
+ InstX86Base<Machine>::SseSuffix::None>(Func, Dest,
+ Source) {}
};
template <class Machine>
« no previous file with comments | « no previous file | src/IceInstX86BaseImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698