// // 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