emitIAS for icmp, and test, movss-reg, movq, movups, storep, storeq, tighten some of the Xmm ops
The "test" instruction is used in very limited situations. I've made a best effort
to fill in the possible forms (address for the first operand), but it's not tested,
so I put the *untested* parts behind an assert. Otherwise it's very similar to
icmp, so if it starts to be used and tested then the asserts can be taken out,
and the code shared with icmp.
Tighten some of the XMM dispatch/emitters. Most of those XMM instructions
can only encode the variant where dest is a register. Rather than waste
a slot for a NULL method pointer, just make the struct type have two variants
instead of three.
Fill out a couple of XMM instructions which *do* allow mem-ops as dest
(mov instructions).
BUG=none
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/624263002
diff --git a/src/IceTargetLoweringX8632.h b/src/IceTargetLoweringX8632.h
index eb3cb70..f6b305e 100644
--- a/src/IceTargetLoweringX8632.h
+++ b/src/IceTargetLoweringX8632.h
@@ -308,8 +308,8 @@
void _movq(Variable *Dest, Operand *Src0) {
Context.insert(InstX8632Movq::create(Func, Dest, Src0));
}
- void _movss(Variable *Dest, Operand *Src0) {
- Context.insert(InstX8632Movss::create(Func, Dest, Src0));
+ void _movss(Variable *Dest, Variable *Src0) {
+ Context.insert(InstX8632MovssRegs::create(Func, Dest, Src0));
}
void _movsx(Variable *Dest, Operand *Src0) {
Context.insert(InstX8632Movsx::create(Func, Dest, Src0));
@@ -422,10 +422,10 @@
void _store(Operand *Value, OperandX8632 *Mem) {
Context.insert(InstX8632Store::create(Func, Value, Mem));
}
- void _storep(Operand *Value, OperandX8632 *Mem) {
+ void _storep(Variable *Value, OperandX8632Mem *Mem) {
Context.insert(InstX8632StoreP::create(Func, Value, Mem));
}
- void _storeq(Operand *Value, OperandX8632 *Mem) {
+ void _storeq(Variable *Value, OperandX8632Mem *Mem) {
Context.insert(InstX8632StoreQ::create(Func, Value, Mem));
}
void _sub(Variable *Dest, Operand *Src0) {