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

Unified Diff: src/IceInstX86Base.h

Issue 1531623007: Add option to force filetype=asm for testing (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Missed one --sandbox in the wrong place. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: src/IceInstX86Base.h
diff --git a/src/IceInstX86Base.h b/src/IceInstX86Base.h
index c4a9fe4cbcae6e40bceae7581010677c08c03d41..2b7ac3f2fccb0267d19508e14d9261fc80083d16 100644
--- a/src/IceInstX86Base.h
+++ b/src/IceInstX86Base.h
@@ -823,26 +823,24 @@ template <typename TraitsType> struct InstImpl {
if (!BuildDefs::dump())
return;
this->validateVectorAddrMode();
+ const Type DestTy = ArithmeticTypeOverride == IceType_void
+ ? this->getDest()->getType()
+ : ArithmeticTypeOverride;
+ const char *SuffixString = "";
switch (Suffix) {
case InstX86Base::SseSuffix::None:
- this->emitTwoAddress(Func, Opcode);
break;
- case InstX86Base::SseSuffix::Packed: {
- const Type DestTy = this->getDest()->getType();
- this->emitTwoAddress(Func, this->Opcode,
- Traits::TypeAttributes[DestTy].PdPsString);
- } break;
- case InstX86Base::SseSuffix::Scalar: {
- const Type DestTy = this->getDest()->getType();
- this->emitTwoAddress(Func, this->Opcode,
- Traits::TypeAttributes[DestTy].SdSsString);
- } break;
- case InstX86Base::SseSuffix::Integral: {
- const Type DestTy = this->getDest()->getType();
- this->emitTwoAddress(Func, this->Opcode,
- Traits::TypeAttributes[DestTy].PackString);
- } break;
+ case InstX86Base::SseSuffix::Packed:
+ SuffixString = Traits::TypeAttributes[DestTy].PdPsString;
+ break;
+ case InstX86Base::SseSuffix::Scalar:
+ SuffixString = Traits::TypeAttributes[DestTy].SdSsString;
+ break;
+ case InstX86Base::SseSuffix::Integral:
+ SuffixString = Traits::TypeAttributes[DestTy].PackString;
+ break;
}
+ this->emitTwoAddress(Func, Opcode, SuffixString);
}
void emitIAS(const Cfg *Func) const override {
this->validateVectorAddrMode();
@@ -865,12 +863,15 @@ template <typename TraitsType> struct InstImpl {
}
protected:
- InstX86BaseBinopXmm(Cfg *Func, Variable *Dest, Operand *Source)
- : InstX86Base(Func, K, 2, Dest) {
+ InstX86BaseBinopXmm(Cfg *Func, Variable *Dest, Operand *Source,
+ Type ArithmeticTypeOverride = IceType_void)
+ : InstX86Base(Func, K, 2, Dest),
+ ArithmeticTypeOverride(ArithmeticTypeOverride) {
this->addSource(Dest);
this->addSource(Source);
}
+ const Type ArithmeticTypeOverride;
static const char *Opcode;
static const XmmEmitterRegOp Emitter;
};
@@ -1914,16 +1915,25 @@ template <typename TraitsType> struct InstImpl {
: public InstX86BaseBinopXmm<InstX86Base::Pcmpeq, true,
InstX86Base::SseSuffix::Integral> {
public:
- static InstX86Pcmpeq *create(Cfg *Func, Variable *Dest, Operand *Source) {
+ static InstX86Pcmpeq *create(Cfg *Func, Variable *Dest, Operand *Source,
+ Type ArithmeticTypeOverride = IceType_void) {
+ const Type Ty = ArithmeticTypeOverride == IceType_void
+ ? Dest->getType()
+ : ArithmeticTypeOverride;
+ (void)Ty;
+ assert((Ty != IceType_f64 && Ty != IceType_i64) ||
+ InstX86Base::getTarget(Func)->getInstructionSet() >=
+ Traits::SSE4_1);
return new (Func->allocate<InstX86Pcmpeq>())
- InstX86Pcmpeq(Func, Dest, Source);
+ InstX86Pcmpeq(Func, Dest, Source, ArithmeticTypeOverride);
}
private:
- InstX86Pcmpeq(Cfg *Func, Variable *Dest, Operand *Source)
+ InstX86Pcmpeq(Cfg *Func, Variable *Dest, Operand *Source,
+ Type ArithmeticTypeOverride)
: InstX86BaseBinopXmm<InstX86Base::Pcmpeq, true,
- InstX86Base::SseSuffix::Integral>(Func, Dest,
- Source) {}
+ InstX86Base::SseSuffix::Integral>(
+ Func, Dest, Source, ArithmeticTypeOverride) {}
};
class InstX86Pcmpgt
@@ -1931,6 +1941,9 @@ template <typename TraitsType> struct InstImpl {
InstX86Base::SseSuffix::Integral> {
public:
static InstX86Pcmpgt *create(Cfg *Func, Variable *Dest, Operand *Source) {
+ assert(Dest->getType() != IceType_f64 ||
+ InstX86Base::getTarget(Func)->getInstructionSet() >=
+ Traits::SSE4_1);
return new (Func->allocate<InstX86Pcmpgt>())
InstX86Pcmpgt(Func, Dest, Source);
}
« pydir/run-pnacl-sz.py ('K') | « runtime/szrt_ll.ll ('k') | src/IceRegAlloc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698