summaryrefslogtreecommitdiff
path: root/src/jit/lowerarm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/lowerarm.cpp')
-rw-r--r--src/jit/lowerarm.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/jit/lowerarm.cpp b/src/jit/lowerarm.cpp
new file mode 100644
index 0000000000..d99347d335
--- /dev/null
+++ b/src/jit/lowerarm.cpp
@@ -0,0 +1,89 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XX XX
+XX Lowering for ARM XX
+XX XX
+XX This encapsulates all the logic for lowering trees for the ARM XX
+XX architecture. For a more detailed view of what is lowering, please XX
+XX take a look at Lower.cpp XX
+XX XX
+XX XX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+*/
+
+#include "jitpch.h"
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#ifndef LEGACY_BACKEND // This file is ONLY used for the RyuJIT backend that uses the linear scan register allocator
+
+// The ARM backend is not yet implemented, so the methods here are all NYI.
+// TODO-ARM-NYI: Lowering for ARM.
+#ifdef _TARGET_ARM_
+
+#include "jit.h"
+#include "lower.h"
+#include "lsra.h"
+
+/* Lowering of GT_CAST nodes */
+void Lowering::LowerCast(GenTreePtr *ppTree) { }
+
+
+void Lowering::LowerCntBlockOp(GenTreePtr *ppTree)
+{
+ NYI_ARM("ARM Lowering for BlockOp");
+}
+
+void Lowering::TreeNodeInfoInitCall(GenTree *tree, TreeNodeInfo &info,
+ int &srcCount, // out
+ int &dstCount // out
+ )
+{
+ NYI_ARM("ARM TreeNodeInfoInit for Call");
+}
+
+Compiler::fgWalkResult Lowering::TreeInfoInitHelper(GenTreePtr* pTree, Compiler::fgWalkData* data)
+{
+ Lowering* lower = (Lowering*)data->pCallbackData;
+ lower->TreeNodeInfoInit(pTree, data->parent);
+ return Compiler::WALK_CONTINUE;
+}
+
+void Lowering::TreeNodeInfoInit(GenTree* stmt)
+{
+ comp->fgWalkTreePost(&stmt->gtStmt.gtStmtExpr, &Lowering::TreeInfoInitHelper, this);
+}
+
+void Lowering::TreeNodeInfoInit(GenTreePtr *pTree, GenTree* parent)
+{
+ NYI("ARM TreeNodInfoInit");
+}
+
+// returns true if the tree can use the read-modify-write memory instruction form
+bool Lowering::isRMWRegOper(GenTreePtr tree)
+{
+ return false;
+}
+
+bool Lowering::IsCallTargetInRange(void *addr)
+{
+ return comp->codeGen->validImmForBL ((ssize_t)addr);
+}
+
+// return true if the immediate can be folded into an instruction, for example small enough and non-relocatable
+bool Lowering:: IsContainableImmed(GenTree* parentNode, GenTree* childNode)
+{
+ NYI_ARM("ARM IsContainableImmed");
+ return false;
+}
+
+#endif // _TARGET_ARM_
+
+#endif // !LEGACY_BACKEND