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

Unified Diff: src/IceInstX86BaseImpl.h

Issue 1537703002: Subzero. x8664. Resurrects the Target. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. 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
Index: src/IceInstX86BaseImpl.h
diff --git a/src/IceInstX86BaseImpl.h b/src/IceInstX86BaseImpl.h
index c94356014e57d6c011cb0830ac6f08ab504e330e..d7ef70c2b8791215cee830e187b8865d52ae9439 100644
--- a/src/IceInstX86BaseImpl.h
+++ b/src/IceInstX86BaseImpl.h
@@ -198,8 +198,10 @@ InstX86Cmpxchg<Machine>::InstX86Cmpxchg(Cfg *Func, Operand *DestOrAddr,
: InstX86BaseLockable<Machine>(Func, InstX86Base<Machine>::Cmpxchg, 3,
llvm::dyn_cast<Variable>(DestOrAddr),
Locked) {
- assert(InstX86Base<Machine>::Traits::getBaseReg(Eax->getRegNum()) ==
- InstX86Base<Machine>::Traits::RegisterSet::Reg_eax);
+ constexpr uint16_t Encoded_rAX = 0;
+ (void)Encoded_rAX;
+ assert(InstX86Base<Machine>::Traits::getEncodedGPR(Eax->getRegNum()) ==
+ Encoded_rAX);
this->addSource(DestOrAddr);
this->addSource(Eax);
this->addSource(Desired);
@@ -1509,7 +1511,9 @@ void InstX86Cbwdq<Machine>::emitIAS(const Cfg *Func) const {
Asm->cdq();
break;
case IceType_i64:
- assert(DestReg == InstX86Base<Machine>::Traits::RegisterSet::Reg_edx);
+ assert(InstX86Base<Machine>::Traits::Is64Bit);
+ assert(SrcReg == InstX86Base<Machine>::Traits::getRaxOrDie());
+ assert(DestReg == InstX86Base<Machine>::Traits::getRdxOrDie());
Asm->cqo();
break;
}
@@ -2468,49 +2472,58 @@ void InstX86Movd<Machine>::emitIAS(const Cfg *Func) const {
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>();
assert(this->getSrcSize() == 1);
const Variable *Dest = this->getDest();
- const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0));
auto *Target = InstX86Base<Machine>::getTarget(Func);
// For insert/extract element (one of Src/Dest is an Xmm vector and the other
// is an int type).
- if (SrcVar->getType() == IceType_i32 ||
- (InstX86Base<Machine>::Traits::Is64Bit &&
- SrcVar->getType() == IceType_i64)) {
- assert(isVectorType(Dest->getType()) ||
- (isScalarFloatingType(Dest->getType()) &&
- typeWidthInBytes(SrcVar->getType()) ==
- typeWidthInBytes(Dest->getType())));
- assert(Dest->hasReg());
- typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister DestReg =
- InstX86Base<Machine>::Traits::getEncodedXmm(Dest->getRegNum());
- if (SrcVar->hasReg()) {
- Asm->movd(
- SrcVar->getType(), DestReg,
- InstX86Base<Machine>::Traits::getEncodedGPR(SrcVar->getRegNum()));
+ if (const auto *SrcVar = llvm::dyn_cast<Variable>(this->getSrc(0))) {
+ if (SrcVar->getType() == IceType_i32 ||
+ (InstX86Base<Machine>::Traits::Is64Bit &&
+ SrcVar->getType() == IceType_i64)) {
+ assert(isVectorType(Dest->getType()) ||
+ (isScalarFloatingType(Dest->getType()) &&
+ typeWidthInBytes(SrcVar->getType()) ==
+ typeWidthInBytes(Dest->getType())));
+ assert(Dest->hasReg());
+ typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister DestReg =
+ InstX86Base<Machine>::Traits::getEncodedXmm(Dest->getRegNum());
+ if (SrcVar->hasReg()) {
+ Asm->movd(
+ SrcVar->getType(), DestReg,
+ InstX86Base<Machine>::Traits::getEncodedGPR(SrcVar->getRegNum()));
+ } else {
+ typename InstX86Base<Machine>::Traits::Address StackAddr(
+ Target->stackVarToAsmOperand(SrcVar));
+ Asm->movd(SrcVar->getType(), DestReg, StackAddr);
+ }
} else {
- typename InstX86Base<Machine>::Traits::Address StackAddr(
- Target->stackVarToAsmOperand(SrcVar));
- Asm->movd(SrcVar->getType(), DestReg, StackAddr);
+ assert(isVectorType(SrcVar->getType()) ||
+ (isScalarFloatingType(SrcVar->getType()) &&
+ typeWidthInBytes(SrcVar->getType()) ==
+ typeWidthInBytes(Dest->getType())));
+ assert(SrcVar->hasReg());
+ assert(Dest->getType() == IceType_i32 ||
+ (InstX86Base<Machine>::Traits::Is64Bit &&
+ Dest->getType() == IceType_i64));
+ typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister SrcReg =
+ InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum());
+ if (Dest->hasReg()) {
+ Asm->movd(Dest->getType(), InstX86Base<Machine>::Traits::getEncodedGPR(
+ Dest->getRegNum()),
+ SrcReg);
+ } else {
+ typename InstX86Base<Machine>::Traits::Address StackAddr(
+ Target->stackVarToAsmOperand(Dest));
+ Asm->movd(Dest->getType(), StackAddr, SrcReg);
+ }
}
} else {
- assert(isVectorType(SrcVar->getType()) ||
- (isScalarFloatingType(SrcVar->getType()) &&
- typeWidthInBytes(SrcVar->getType()) ==
- typeWidthInBytes(Dest->getType())));
- assert(SrcVar->hasReg());
- assert(Dest->getType() == IceType_i32 ||
- (InstX86Base<Machine>::Traits::Is64Bit &&
- Dest->getType() == IceType_i64));
- typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister SrcReg =
- InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum());
- if (Dest->hasReg()) {
- Asm->movd(Dest->getType(),
- InstX86Base<Machine>::Traits::getEncodedGPR(Dest->getRegNum()),
- SrcReg);
- } else {
- typename InstX86Base<Machine>::Traits::Address StackAddr(
- Target->stackVarToAsmOperand(Dest));
- Asm->movd(Dest->getType(), StackAddr, SrcReg);
- }
+ assert(Dest->hasReg());
+ typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister DestReg =
+ InstX86Base<Machine>::Traits::getEncodedXmm(Dest->getRegNum());
+ auto *Mem =
+ llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>(
+ this->getSrc(0));
+ Asm->movd(Mem->getType(), DestReg, Mem->toAsmAddress(Asm, Target));
}
}

Powered by Google App Engine
This is Rietveld 408576698