//===-------------- J3Intrinsics.h - Intrinsics of J3 ---------------------===//
//
//                            The VMKit project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef J3_INTRINSICS_H
#define J3_INTRINSICS_H

#include "mvm/JIT.h"

namespace j3 {

class J3Intrinsics : public mvm::BaseIntrinsics {

public:
  const llvm::Type* JavaArrayUInt8Type;
  const llvm::Type* JavaArraySInt8Type;
  const llvm::Type* JavaArrayUInt16Type;
  const llvm::Type* JavaArraySInt16Type;
  const llvm::Type* JavaArrayUInt32Type;
  const llvm::Type* JavaArraySInt32Type;
  const llvm::Type* JavaArrayLongType;
  const llvm::Type* JavaArrayFloatType;
  const llvm::Type* JavaArrayDoubleType;
  const llvm::Type* JavaArrayObjectType;
  
  const llvm::Type* VTType;
  const llvm::Type* JavaObjectType;
  const llvm::Type* JavaArrayType;
  const llvm::Type* JavaCommonClassType;
  const llvm::Type* JavaClassType;
  const llvm::Type* JavaClassArrayType;
  const llvm::Type* JavaClassPrimitiveType;
  const llvm::Type* ConstantPoolType;
  const llvm::Type* CodeLineInfoType;
  const llvm::Type* UTF8Type;
  const llvm::Type* JavaMethodType;
  const llvm::Type* JavaFieldType;
  const llvm::Type* AttributType;
  const llvm::Type* JavaThreadType;
  const llvm::Type* MutatorThreadType;
  
#ifdef ISOLATE_SHARING
  const llvm::Type* JnjvmType;
#endif
  
  llvm::Function* EmptyTracerFunction;
  llvm::Function* JavaObjectTracerFunction;
  llvm::Function* JavaArrayTracerFunction;
  llvm::Function* ArrayObjectTracerFunction;
  llvm::Function* RegularObjectTracerFunction;
  
  llvm::Function* StartJNIFunction;
  llvm::Function* EndJNIFunction;
  llvm::Function* InterfaceLookupFunction;
  llvm::Function* VirtualFieldLookupFunction;
  llvm::Function* StaticFieldLookupFunction;
  llvm::Function* PrintExecutionFunction;
  llvm::Function* PrintMethodStartFunction;
  llvm::Function* PrintMethodEndFunction;
  llvm::Function* InitialiseClassFunction;
  llvm::Function* InitialisationCheckFunction;
  llvm::Function* ForceInitialisationCheckFunction;
  llvm::Function* ForceLoadedCheckFunction;
  llvm::Function* ClassLookupFunction;
  llvm::Function* StringLookupFunction;
  
  llvm::Function* ResolveVirtualStubFunction;
  llvm::Function* ResolveSpecialStubFunction;
  llvm::Function* ResolveStaticStubFunction;

#ifndef WITHOUT_VTABLE
  llvm::Function* VirtualLookupFunction;
#endif
  llvm::Function* IsAssignableFromFunction;
  llvm::Function* IsSecondaryClassFunction;
  llvm::Function* GetDepthFunction;
  llvm::Function* GetDisplayFunction;
  llvm::Function* GetVTInDisplayFunction;
  llvm::Function* GetStaticInstanceFunction;
  llvm::Function* AquireObjectFunction;
  llvm::Function* ReleaseObjectFunction;
  llvm::Function* GetConstantPoolAtFunction;
  llvm::Function* MultiCallNewFunction;
  llvm::Function* GetArrayClassFunction;

#ifdef ISOLATE_SHARING
  llvm::Function* GetCtpClassFunction;
  llvm::Function* GetJnjvmExceptionClassFunction;
  llvm::Function* GetJnjvmArrayClassFunction;
  llvm::Function* StaticCtpLookupFunction;
  llvm::Function* SpecialCtpLookupFunction;
#endif

#ifdef SERVICE
  llvm::Function* ServiceCallStartFunction;
  llvm::Function* ServiceCallStopFunction;
#endif

  llvm::Function* GetClassDelegateeFunction;
  llvm::Function* RuntimeDelegateeFunction;
  llvm::Function* ArrayLengthFunction;
  llvm::Function* GetVTFunction;
  llvm::Function* GetIMTFunction;
  llvm::Function* GetClassFunction;
  llvm::Function* GetVTFromClassFunction;
  llvm::Function* GetVTFromClassArrayFunction;
  llvm::Function* GetVTFromCommonClassFunction;
  llvm::Function* GetObjectSizeFromClassFunction;
  llvm::Function* GetBaseClassVTFromVTFunction;

  llvm::Function* GetLockFunction;
  llvm::Function* OverflowThinLockFunction;
  
  llvm::Function* GetFinalInt8FieldFunction;
  llvm::Function* GetFinalInt16FieldFunction;
  llvm::Function* GetFinalInt32FieldFunction;
  llvm::Function* GetFinalLongFieldFunction;
  llvm::Function* GetFinalFloatFieldFunction;
  llvm::Function* GetFinalDoubleFieldFunction;
  llvm::Function* GetFinalObjectFieldFunction;
  
  llvm::Constant* JavaArraySizeOffsetConstant;
  llvm::Constant* JavaArrayElementsOffsetConstant;
  llvm::Constant* JavaObjectLockOffsetConstant;
  llvm::Constant* JavaObjectVTOffsetConstant;

  llvm::Constant* OffsetAccessInCommonClassConstant;
  llvm::Constant* IsArrayConstant;
  llvm::Constant* IsPrimitiveConstant;
  llvm::Constant* OffsetObjectSizeInClassConstant;
  llvm::Constant* OffsetVTInClassConstant;
  llvm::Constant* OffsetTaskClassMirrorInClassConstant;
  llvm::Constant* OffsetVirtualMethodsInClassConstant;
  llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant;
  llvm::Constant* OffsetInitializedInTaskClassMirrorConstant;
  llvm::Constant* OffsetStatusInTaskClassMirrorConstant;
  
  llvm::Constant* OffsetDoYieldInThreadConstant;
  llvm::Constant* OffsetIsolateInThreadConstant;
  llvm::Constant* OffsetJNIInThreadConstant;
  llvm::Constant* OffsetJavaExceptionInThreadConstant;
  llvm::Constant* OffsetCXXExceptionInThreadConstant;
  
  llvm::Constant* OffsetClassInVTConstant;
  llvm::Constant* OffsetDepthInVTConstant;
  llvm::Constant* OffsetDisplayInVTConstant;
  llvm::Constant* OffsetBaseClassVTInVTConstant;
  llvm::Constant* OffsetIMTInVTConstant;
  
  llvm::Constant* OffsetBaseClassInArrayClassConstant;
  llvm::Constant* OffsetLogSizeInPrimitiveClassConstant;
  
  llvm::Constant* ClassReadyConstant;

  llvm::Constant* JavaObjectNullConstant;
  llvm::Constant* MaxArraySizeConstant;
  llvm::Constant* JavaArraySizeConstant;

  llvm::Function* ThrowExceptionFunction;
  llvm::Function* NullPointerExceptionFunction;
  llvm::Function* IndexOutOfBoundsExceptionFunction;
  llvm::Function* ClassCastExceptionFunction;
  llvm::Function* OutOfMemoryErrorFunction;
  llvm::Function* StackOverflowErrorFunction;
  llvm::Function* NegativeArraySizeExceptionFunction;
  llvm::Function* ArrayStoreExceptionFunction;
  llvm::Function* ArithmeticExceptionFunction;
  llvm::Function* ThrowExceptionFromJITFunction;
  

  J3Intrinsics(llvm::Module*);
  
  static void initialise();

};

}

#endif
