nodes_x86.h revision 154746b84b407cfd166b45e039b62e6a06dc3f39
10616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell/* 20616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * Copyright (C) 2015 The Android Open Source Project 30616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * 40616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * Licensed under the Apache License, Version 2.0 (the "License"); 50616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * you may not use this file except in compliance with the License. 60616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * You may obtain a copy of the License at 70616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * 80616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * http://www.apache.org/licenses/LICENSE-2.0 90616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * 100616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * Unless required by applicable law or agreed to in writing, software 110616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * distributed under the License is distributed on an "AS IS" BASIS, 120616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * See the License for the specific language governing permissions and 140616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell * limitations under the License. 150616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell */ 160616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 170616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell#ifndef ART_COMPILER_OPTIMIZING_NODES_X86_H_ 180616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell#define ART_COMPILER_OPTIMIZING_NODES_X86_H_ 190616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 200616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendellnamespace art { 210616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 220616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell// Compute the address of the method for X86 Constant area support. 230616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendellclass HX86ComputeBaseMethodAddress : public HExpression<0> { 240616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell public: 250616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Treat the value as an int32_t, but it is really a 32 bit native pointer. 26154746b84b407cfd166b45e039b62e6a06dc3f39Calin Juravle HX86ComputeBaseMethodAddress() 27154746b84b407cfd166b45e039b62e6a06dc3f39Calin Juravle : HExpression(Primitive::kPrimInt, SideEffects::None(), kNoDexPc) {} 280616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 290616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell DECLARE_INSTRUCTION(X86ComputeBaseMethodAddress); 300616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 310616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell private: 320616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell DISALLOW_COPY_AND_ASSIGN(HX86ComputeBaseMethodAddress); 330616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell}; 340616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 350616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell// Load a constant value from the constant table. 360616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendellclass HX86LoadFromConstantTable : public HExpression<2> { 370616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell public: 380616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell HX86LoadFromConstantTable(HX86ComputeBaseMethodAddress* method_base, 390616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell HConstant* constant, 400616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell bool needs_materialization = true) 41154746b84b407cfd166b45e039b62e6a06dc3f39Calin Juravle : HExpression(constant->GetType(), SideEffects::None(), kNoDexPc), 420616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell needs_materialization_(needs_materialization) { 430616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell SetRawInputAt(0, method_base); 440616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell SetRawInputAt(1, constant); 450616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 460616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 470616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell bool NeedsMaterialization() const { return needs_materialization_; } 480616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 490616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell HX86ComputeBaseMethodAddress* GetBaseMethodAddress() const { 500616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return InputAt(0)->AsX86ComputeBaseMethodAddress(); 510616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 520616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 530616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell HConstant* GetConstant() const { 540616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return InputAt(1)->AsConstant(); 550616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 560616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 570616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell DECLARE_INSTRUCTION(X86LoadFromConstantTable); 580616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 590616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell private: 600616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell const bool needs_materialization_; 610616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 620616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell DISALLOW_COPY_AND_ASSIGN(HX86LoadFromConstantTable); 630616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell}; 640616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 650616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} // namespace art 660616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 670616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell#endif // ART_COMPILER_OPTIMIZING_NODES_X86_H_ 68