1701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen/* 2701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * Copyright (C) 2015 The Android Open Source Project 3701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * 4701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * Licensed under the Apache License, Version 2.0 (the "License"); 5701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * you may not use this file except in compliance with the License. 6701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * You may obtain a copy of the License at 7701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * 8701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * http://www.apache.org/licenses/LICENSE-2.0 9701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * 10701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * Unless required by applicable law or agreed to in writing, software 11701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * distributed under the License is distributed on an "AS IS" BASIS, 12701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * See the License for the specific language governing permissions and 14701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen * limitations under the License. 15701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen */ 16701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 17701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#ifndef ART_COMPILER_OPTIMIZING_INTRINSICS_MIPS_H_ 18701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#define ART_COMPILER_OPTIMIZING_INTRINSICS_MIPS_H_ 19701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 20701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#include "intrinsics.h" 21701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 22701566aaae098d5aab9d912e2003a18d44fb850dChris Larsennamespace art { 23701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 24701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass ArenaAllocator; 25701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass HInvokeStaticOrDirect; 26701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass HInvokeVirtual; 27701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 28701566aaae098d5aab9d912e2003a18d44fb850dChris Larsennamespace mips { 29701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 30701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass CodeGeneratorMIPS; 31701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass MipsAssembler; 32701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 33701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass IntrinsicLocationsBuilderMIPS FINAL : public IntrinsicVisitor { 34701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen public: 35701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen explicit IntrinsicLocationsBuilderMIPS(CodeGeneratorMIPS* codegen); 36701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 37701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen // Define visitor methods. 38701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 395d75afe333f57546786686d9bee16b52f1bbe971Aart Bik#define OPTIMIZING_INTRINSICS(Name, IsStatic, NeedsEnvironmentOrCache, SideEffects, Exceptions) \ 40701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen void Visit ## Name(HInvoke* invoke) OVERRIDE; 41701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#include "intrinsics_list.h" 42701566aaae098d5aab9d912e2003a18d44fb850dChris LarsenINTRINSICS_LIST(OPTIMIZING_INTRINSICS) 43701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#undef INTRINSICS_LIST 44701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#undef OPTIMIZING_INTRINSICS 45701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 46701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen // Check whether an invoke is an intrinsic, and if so, create a location summary. Returns whether 47701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen // a corresponding LocationSummary with the intrinsified_ flag set was generated and attached to 48701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen // the invoke. 49701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen bool TryDispatch(HInvoke* invoke); 50701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 51701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen private: 52701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen ArenaAllocator* arena_; 53701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 54701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen DISALLOW_COPY_AND_ASSIGN(IntrinsicLocationsBuilderMIPS); 55701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen}; 56701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 57701566aaae098d5aab9d912e2003a18d44fb850dChris Larsenclass IntrinsicCodeGeneratorMIPS FINAL : public IntrinsicVisitor { 58701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen public: 59701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen explicit IntrinsicCodeGeneratorMIPS(CodeGeneratorMIPS* codegen) : codegen_(codegen) {} 60701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 61701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen // Define visitor methods. 62701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 635d75afe333f57546786686d9bee16b52f1bbe971Aart Bik#define OPTIMIZING_INTRINSICS(Name, IsStatic, NeedsEnvironmentOrCache, SideEffects, Exceptions) \ 64701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen void Visit ## Name(HInvoke* invoke) OVERRIDE; 65701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#include "intrinsics_list.h" 66701566aaae098d5aab9d912e2003a18d44fb850dChris LarsenINTRINSICS_LIST(OPTIMIZING_INTRINSICS) 67701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#undef INTRINSICS_LIST 68701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#undef OPTIMIZING_INTRINSICS 69701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 70bb9863af3a98622e650de78fb235ab484b50eb1fAlexey Frunze bool IsR2OrNewer() const; 71bb9863af3a98622e650de78fb235ab484b50eb1fAlexey Frunze bool IsR6() const; 72bb9863af3a98622e650de78fb235ab484b50eb1fAlexey Frunze bool Is32BitFPU() const; 73e16ce5a52da4fcbb8c6b5d1ec696863fcf113409Chris Larsen 74701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen private: 75701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen MipsAssembler* GetAssembler(); 76701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 77701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen ArenaAllocator* GetAllocator(); 78701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 79701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen CodeGeneratorMIPS* codegen_; 80701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 81701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen DISALLOW_COPY_AND_ASSIGN(IntrinsicCodeGeneratorMIPS); 82701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen}; 83701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 84701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen} // namespace mips 85701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen} // namespace art 86701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen 87701566aaae098d5aab9d912e2003a18d44fb850dChris Larsen#endif // ART_COMPILER_OPTIMIZING_INTRINSICS_MIPS_H_ 88