167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* 21fd3346740dfb7f47be9922312b68a4227fada96buzbee * Copyright (C) 2013 The Android Open Source Project 367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * you may not use this file except in compliance with the License. 667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * You may obtain a copy of the License at 767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * http://www.apache.org/licenses/LICENSE-2.0 967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 1067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Unless required by applicable law or agreed to in writing, software 1167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * distributed under the License is distributed on an "AS IS" BASIS, 1267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * See the License for the specific language governing permissions and 1467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * limitations under the License. 1567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 1667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_COMPILER_DEX_BACKEND_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_COMPILER_DEX_BACKEND_H_ 191fd3346740dfb7f47be9922312b68a4227fada96buzbee 201af0c0b88a956813eb0ad282664cedc391e2938fNicolas Geoffraynamespace art { 2168a5fefa90f03fdf5a238ac85c9439c6b03eae96Nicolas Geoffray 22818f2107e6d2d9e80faac8ae8c92faffa83cbd11Nicolas Geoffrayclass ArenaAllocator; 23818f2107e6d2d9e80faac8ae8c92faffa83cbd11Nicolas Geoffrayclass CompiledMethod; 24818f2107e6d2d9e80faac8ae8c92faffa83cbd11Nicolas Geoffray 251fd3346740dfb7f47be9922312b68a4227fada96buzbeeclass Backend { 261fd3346740dfb7f47be9922312b68a4227fada96buzbee public: 279b7085a4e7c40e7fa01932ea1647a4a33ac1c585Brian Carlstrom virtual ~Backend() {} 281fd3346740dfb7f47be9922312b68a4227fada96buzbee virtual void Materialize() = 0; 291fd3346740dfb7f47be9922312b68a4227fada96buzbee virtual CompiledMethod* GetCompiledMethod() = 0; 301fd3346740dfb7f47be9922312b68a4227fada96buzbee 3160bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji // Queries for backend support for vectors 3260bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji /* 3360bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * Return the number of bits in a vector register. 3460bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * @return 0 if vector registers are not supported, or the 3560bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * number of bits in the vector register if supported. 3660bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji */ 3760bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji virtual int VectorRegisterSize() { return 0; } 3860bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji 3960bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji /* 4060bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * Return the number of reservable vector registers supported 4160bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * @param fp_used ‘true’ if floating point computations will be 4260bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * executed while vector registers are reserved. 4360bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * @return the number of vector registers that are available 4460bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * @note The backend should ensure that sufficient vector registers 4560bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * are held back to generate scalar code without exhausting vector 4660bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji * registers, if scalar code also uses the vector registers. 4760bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji */ 4860bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji virtual int NumReservableVectorRegisters(bool fp_used) { return 0; } 4960bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43Udayan Banerji 501fd3346740dfb7f47be9922312b68a4227fada96buzbee protected: 519b7085a4e7c40e7fa01932ea1647a4a33ac1c585Brian Carlstrom explicit Backend(ArenaAllocator* arena) : arena_(arena) {} 526282dc12440a2072dc06a616160027ff21bd895eIan Rogers ArenaAllocator* const arena_; 531fd3346740dfb7f47be9922312b68a4227fada96buzbee}; // Class Backend 5467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 5511d1b0c31ddd710d26068da8e0e4621002205b4bElliott Hughes} // namespace art 5611d1b0c31ddd710d26068da8e0e4621002205b4bElliott Hughes 57fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_COMPILER_DEX_BACKEND_H_ 58