Commit eb568f55 by Nicolas Capens Committed by Jim Stichnoth

Implement minps/maxps x86 instructions.

BUG=swiftshader:19 Change-Id: I6954db6f1ab3456a199d164676d7f01f91ff7514 Reviewed-on: https://chromium-review.googlesource.com/400090Reviewed-by: 's avatarJim Stichnoth <stichnot@chromium.org>
parent e9655304
......@@ -113,6 +113,8 @@ template <typename TraitsType> struct InstImpl {
Lea,
Load,
Mfence,
Minps,
Maxps,
Minss,
Maxss,
Mov,
......@@ -1719,6 +1721,38 @@ template <typename TraitsType> struct InstImpl {
Source) {}
};
class InstX86Maxps
: public InstX86BaseBinopXmm<InstX86Base::Maxps, true,
InstX86Base::SseSuffix::None> {
public:
static InstX86Maxps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Maxps>())
InstX86Maxps(Func, Dest, Source);
}
private:
InstX86Maxps(Cfg *Func, Variable *Dest, Operand *Source)
: InstX86BaseBinopXmm<InstX86Base::Maxps, true,
InstX86Base::SseSuffix::None>(Func, Dest,
Source) {}
};
class InstX86Minps
: public InstX86BaseBinopXmm<InstX86Base::Minps, true,
InstX86Base::SseSuffix::None> {
public:
static InstX86Minps *create(Cfg *Func, Variable *Dest, Operand *Source) {
return new (Func->allocate<InstX86Minps>())
InstX86Minps(Func, Dest, Source);
}
private:
InstX86Minps(Cfg *Func, Variable *Dest, Operand *Source)
: InstX86BaseBinopXmm<InstX86Base::Minps, true,
InstX86Base::SseSuffix::None>(Func, Dest,
Source) {}
};
class InstX86Or : public InstX86BaseBinopGPR<InstX86Base::Or> {
public:
static InstX86Or *create(Cfg *Func, Variable *Dest, Operand *Source) {
......@@ -3210,6 +3244,8 @@ template <typename TraitsType> struct Insts {
using Pxor = typename InstImpl<TraitsType>::InstX86Pxor;
using Maxss = typename InstImpl<TraitsType>::InstX86Maxss;
using Minss = typename InstImpl<TraitsType>::InstX86Minss;
using Maxps = typename InstImpl<TraitsType>::InstX86Maxps;
using Minps = typename InstImpl<TraitsType>::InstX86Minps;
using Imul = typename InstImpl<TraitsType>::InstX86Imul;
using ImulImm = typename InstImpl<TraitsType>::InstX86ImulImm;
using Mulps = typename InstImpl<TraitsType>::InstX86Mulps;
......@@ -3369,6 +3405,12 @@ template <typename TraitsType> struct Insts {
const char *InstImpl<TraitsType>::InstX86Minss::Base::Opcode = "min"; \
template <> \
template <> \
const char *InstImpl<TraitsType>::InstX86Maxps::Base::Opcode = "max"; \
template <> \
template <> \
const char *InstImpl<TraitsType>::InstX86Minps::Base::Opcode = "min"; \
template <> \
template <> \
const char *InstImpl<TraitsType>::InstX86Padd::Base::Opcode = "padd"; \
template <> \
template <> \
......@@ -3923,6 +3965,18 @@ template <typename TraitsType> struct Insts {
template <> \
template <> \
const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp \
InstImpl<TraitsType>::InstX86Maxps::Base::Emitter = { \
&InstImpl<TraitsType>::Assembler::maxps, \
&InstImpl<TraitsType>::Assembler::maxps}; \
template <> \
template <> \
const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp \
InstImpl<TraitsType>::InstX86Minps::Base::Emitter = { \
&InstImpl<TraitsType>::Assembler::minps, \
&InstImpl<TraitsType>::Assembler::minps}; \
template <> \
template <> \
const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp \
InstImpl<TraitsType>::InstX86Orps::Base::Emitter = { \
&InstImpl<TraitsType>::Assembler::orps, \
&InstImpl<TraitsType>::Assembler::orps}; \
......
......@@ -747,6 +747,14 @@ protected:
AutoMemorySandboxer<> _(this, &Dest, &Src0);
Context.insert<typename Traits::Insts::Minss>(Dest, Src0);
}
void _maxps(Variable *Dest, Operand *Src0) {
AutoMemorySandboxer<> _(this, &Dest, &Src0);
Context.insert<typename Traits::Insts::Maxps>(Dest, Src0);
}
void _minps(Variable *Dest, Operand *Src0) {
AutoMemorySandboxer<> _(this, &Dest, &Src0);
Context.insert<typename Traits::Insts::Minps>(Dest, Src0);
}
void _mul(Variable *Dest, Variable *Src0, Operand *Src1) {
AutoMemorySandboxer<> _(this, &Dest, &Src0, &Src1);
Context.insert<typename Traits::Insts::Mul>(Dest, Src0, Src1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment