/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ART_COMPILER_OPTIMIZING_INTRINSICS_LIST_H_
#define ART_COMPILER_OPTIMIZING_INTRINSICS_LIST_H_

// All intrinsics supported by the optimizing compiler. Format is name, then whether it is expected
// to be a HInvokeStaticOrDirect node (compared to HInvokeVirtual), then whether it requires an
// environment.

#define INTRINSICS_LIST(V) \
  V(DoubleDoubleToRawLongBits, kStatic, kNeedsEnvironmentOrCache) \
  V(DoubleLongBitsToDouble, kStatic, kNeedsEnvironmentOrCache) \
  V(FloatFloatToRawIntBits, kStatic, kNeedsEnvironmentOrCache) \
  V(FloatIntBitsToFloat, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerReverse, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerReverseBytes, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerNumberOfLeadingZeros, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerNumberOfTrailingZeros, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerRotateRight, kStatic, kNeedsEnvironmentOrCache) \
  V(IntegerRotateLeft, kStatic, kNeedsEnvironmentOrCache) \
  V(LongReverse, kStatic, kNeedsEnvironmentOrCache) \
  V(LongReverseBytes, kStatic, kNeedsEnvironmentOrCache) \
  V(LongNumberOfLeadingZeros, kStatic, kNeedsEnvironmentOrCache) \
  V(LongNumberOfTrailingZeros, kStatic, kNeedsEnvironmentOrCache) \
  V(LongRotateRight, kStatic, kNeedsEnvironmentOrCache) \
  V(LongRotateLeft, kStatic, kNeedsEnvironmentOrCache) \
  V(ShortReverseBytes, kStatic, kNeedsEnvironmentOrCache) \
  V(MathAbsDouble, kStatic, kNeedsEnvironmentOrCache) \
  V(MathAbsFloat, kStatic, kNeedsEnvironmentOrCache) \
  V(MathAbsLong, kStatic, kNeedsEnvironmentOrCache) \
  V(MathAbsInt, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMinDoubleDouble, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMinFloatFloat, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMinLongLong, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMinIntInt, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMaxDoubleDouble, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMaxFloatFloat, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMaxLongLong, kStatic, kNeedsEnvironmentOrCache) \
  V(MathMaxIntInt, kStatic, kNeedsEnvironmentOrCache) \
  V(MathSqrt, kStatic, kNeedsEnvironmentOrCache) \
  V(MathCeil, kStatic, kNeedsEnvironmentOrCache) \
  V(MathFloor, kStatic, kNeedsEnvironmentOrCache) \
  V(MathRint, kStatic, kNeedsEnvironmentOrCache) \
  V(MathRoundDouble, kStatic, kNeedsEnvironmentOrCache) \
  V(MathRoundFloat, kStatic, kNeedsEnvironmentOrCache) \
  V(SystemArrayCopyChar, kStatic, kNeedsEnvironmentOrCache) \
  V(SystemArrayCopy, kStatic, kNeedsEnvironmentOrCache) \
  V(ThreadCurrentThread, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPeekByte, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPeekIntNative, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPeekLongNative, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPeekShortNative, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPokeByte, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPokeIntNative, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPokeLongNative, kStatic, kNeedsEnvironmentOrCache) \
  V(MemoryPokeShortNative, kStatic, kNeedsEnvironmentOrCache) \
  V(StringCharAt, kDirect, kNeedsEnvironmentOrCache) \
  V(StringCompareTo, kDirect, kNeedsEnvironmentOrCache) \
  V(StringEquals, kDirect, kNeedsEnvironmentOrCache) \
  V(StringGetCharsNoCheck, kDirect, kNeedsEnvironmentOrCache) \
  V(StringIndexOf, kDirect, kNeedsEnvironmentOrCache) \
  V(StringIndexOfAfter, kDirect, kNeedsEnvironmentOrCache) \
  V(StringNewStringFromBytes, kStatic, kNeedsEnvironmentOrCache) \
  V(StringNewStringFromChars, kStatic, kNeedsEnvironmentOrCache) \
  V(StringNewStringFromString, kStatic, kNeedsEnvironmentOrCache) \
  V(UnsafeCASInt, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeCASLong, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeCASObject, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGet, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGetVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGetObject, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGetObjectVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGetLong, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafeGetLongVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePut, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutOrdered, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutObject, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutObjectOrdered, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutObjectVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutLong, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutLongOrdered, kDirect, kNeedsEnvironmentOrCache) \
  V(UnsafePutLongVolatile, kDirect, kNeedsEnvironmentOrCache) \
  V(ReferenceGetReferent, kDirect, kNeedsEnvironmentOrCache)

#endif  // ART_COMPILER_OPTIMIZING_INTRINSICS_LIST_H_
#undef ART_COMPILER_OPTIMIZING_INTRINSICS_LIST_H_   // #define is only for lint.
