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

Unified Diff: src/IceTargetLoweringX8632.cpp

Issue 321993002: Add a few Subzero intrinsics (not the atomic ones yet). (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: doesn't matter if eax or not Created 6 years, 6 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/IceTargetLoweringX8632.cpp
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp
index 81973d06cd027df3c652d75c789e6d380ff6e352..c646fd0c4f950b3037b8c8a864406b3edcf8c317 100644
--- a/src/IceTargetLoweringX8632.cpp
+++ b/src/IceTargetLoweringX8632.cpp
@@ -1764,6 +1764,82 @@ void TargetX8632::lowerIcmp(const InstIcmp *Inst) {
Context.insert(Label);
}
+void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) {
+ switch (Instr->getIntrinsicInfo().ID) {
+ case AtomicCmpxchg:
+ case AtomicFence:
+ case AtomicFenceAll:
+ case AtomicIsLockFree:
+ case AtomicLoad:
+ case AtomicRMW:
+ case AtomicStore:
+ case Bswap:
+ case Ctlz:
+ case Ctpop:
+ case Cttz:
+ Func->setError("Unhandled intrinsic");
+ return;
+ case Longjmp: {
+ InstCall *Call = makeHelperCall("longjmp", NULL, 2);
+ Call->addArg(Instr->getSrc(1));
Jim Stichnoth 2014/06/10 22:58:28 Change all the Instr->getSrc(N) calls to Instr->ge
jvoung (off chromium) 2014/06/12 05:48:30 Done. Also adding a crosstest runnable test. Curr
+ Call->addArg(Instr->getSrc(2));
+ lowerCall(Call);
+ break;
+ }
+ case Memcpy: {
+ // In the future, we could potentially emit an inline memcpy/memset, etc.
+ // for intrinsic calls w/ a known length.
+ InstCall *Call = makeHelperCall("memcpy", NULL, 3);
+ Call->addArg(Instr->getSrc(1));
+ Call->addArg(Instr->getSrc(2));
+ Call->addArg(Instr->getSrc(3));
+ lowerCall(Call);
+ break;
+ }
+ case Memmove: {
+ InstCall *Call = makeHelperCall("memmove", NULL, 3);
+ Call->addArg(Instr->getSrc(1));
+ Call->addArg(Instr->getSrc(2));
+ Call->addArg(Instr->getSrc(3));
+ lowerCall(Call);
+ break;
+ }
+ case Memset: {
+ InstCall *Call = makeHelperCall("memset", NULL, 3);
+ Call->addArg(Instr->getSrc(1));
+ Call->addArg(Instr->getSrc(2));
+ Call->addArg(Instr->getSrc(3));
+ lowerCall(Call);
+ break;
+ }
+ case NaClReadTP: {
+ Constant *Zero = Ctx->getConstantInt(IceType_i32, 0);
+ Operand *Src = OperandX8632MemOffSeg::create(Func, IceType_i32,
+ Zero, Reg_GS);
+ Variable *Dest = Instr->getDest();
+ // Src is already a memory operand, so we need Dest to be a register.
+ Dest->setWeightInfinite();
Jim Stichnoth 2014/06/10 22:58:28 This will force Dest to have a register for the en
jvoung (off chromium) 2014/06/12 05:48:30 Oops yeah otherwise it could potentially have a pr
+ _mov(Dest, Src);
+ break;
+ }
+ case Setjmp: {
+ InstCall *Call = makeHelperCall("setjmp", Instr->getDest(), 1);
+ Call->addArg(Instr->getSrc(1));
+ lowerCall(Call);
+ break;
+ }
+ case Sqrt:
+ case Stacksave:
+ case Stackrestore:
+ Func->setError("Unhandled intrinsic");
+ return;
+ case Trap:
+ _ud2();
+ break;
+ }
+ return;
+}
+
namespace {
bool isAdd(const Inst *Inst) {

Powered by Google App Engine
This is Rietveld 408576698