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