//===------------------ JIT.h - JIT facilities ----------------------------===//
//
//                     The Micro Virtual Machine
//
// This file is distributed under the University of Illinois Open Source 
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef MVM_JIT_H
#define MVM_JIT_H

#include <float.h>

#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
#include "llvm/Module.h"
#include "llvm/ModuleProvider.h"
#include "llvm/PassManager.h"
#include "llvm/Type.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/Target/TargetData.h"

#include "types.h"

#include "mvm/Threads/Locks.h"

namespace mvm {

namespace jit {

const double MaxDouble = +INFINITY; //1.0 / 0.0;
const double MinDouble = -INFINITY;//-1.0 / 0.0;
const double MaxLongDouble =  9223372036854775807.0;
const double MinLongDouble = -9223372036854775808.0;
const double MaxIntDouble = 2147483647.0;
const double MinIntDouble = -2147483648.0;
const uint64 MaxLong = 9223372036854775807LL;
const uint64 MinLong = -9223372036854775808ULL;
const uint32 MaxInt =  2147483647;
const uint32 MinInt =  -2147483648U;
const float MaxFloat = +INFINITY; //(float)(((float)1.0) / (float)0.0);
const float MinFloat = -INFINITY; //(float)(((float)-1.0) / (float)0.0);
const float MaxLongFloat = (float)9223372036854775807.0;
const float MinLongFloat = (float)-9223372036854775808.0;
const float MaxIntFloat = (float)2147483647.0;
const float MinIntFloat = (float)-2147483648.0;
const float NaNFloat = NAN; //(float)(((float)0.0) / (float)0.0);
const double NaNDouble = NAN; //0.0 / 0.0;

extern llvm::Function* exceptionEndCatch;
extern llvm::Function* exceptionBeginCatch;
extern llvm::Function* unwindResume;
extern llvm::Function* exceptionSelector;
extern llvm::Function* personality;
extern llvm::Function* llvmGetException;

extern llvm::Function* printFloatLLVM;
extern llvm::Function* printDoubleLLVM;
extern llvm::Function* printLongLLVM;
extern llvm::Function* printIntLLVM;
extern llvm::Function* printObjectLLVM;

extern llvm::Function* setjmpLLVM;

extern llvm::Function* func_llvm_fabs_f32;
extern llvm::Function* func_llvm_fabs_f64;
extern llvm::Function* func_llvm_sqrt_f64;
extern llvm::Function* func_llvm_sin_f64;
extern llvm::Function* func_llvm_cos_f64;
extern llvm::Function* func_llvm_tan_f64;
extern llvm::Function* func_llvm_asin_f64;
extern llvm::Function* func_llvm_acos_f64;
extern llvm::Function* func_llvm_atan_f64;
extern llvm::Function* func_llvm_atan2_f64;
extern llvm::Function* func_llvm_exp_f64;
extern llvm::Function* func_llvm_log_f64;
extern llvm::Function* func_llvm_pow_f64;
extern llvm::Function* func_llvm_ceil_f64;
extern llvm::Function* func_llvm_floor_f64;
extern llvm::Function* func_llvm_rint_f64;
extern llvm::Function* func_llvm_cbrt_f64;
extern llvm::Function* func_llvm_cosh_f64;
extern llvm::Function* func_llvm_expm1_f64;
extern llvm::Function* func_llvm_hypot_f64;
extern llvm::Function* func_llvm_log10_f64;
extern llvm::Function* func_llvm_log1p_f64;
extern llvm::Function* func_llvm_sinh_f64;
extern llvm::Function* func_llvm_tanh_f64;

extern llvm::Function* llvm_memcpy_i32;
extern llvm::Function* llvm_memset_i32;

extern llvm::ExecutionEngine* executionEngine;

extern uint64 getTypeSize(const llvm::Type* type);

extern void AddStandardCompilePasses(llvm::FunctionPassManager*);

extern void runPasses(llvm::Function* func, llvm::FunctionPassManager*);
extern void* runCompilation(llvm::Function*);

//extern mvm::Lock* protectTypes;
//extern mvm::Lock* protectConstants;
extern mvm::Lock* protectEngine;
extern llvm::ConstantInt* constantInt8Zero;
extern llvm::ConstantInt* constantZero;
extern llvm::ConstantInt* constantOne;
extern llvm::ConstantInt* constantTwo;
extern llvm::ConstantInt* constantThree;
extern llvm::ConstantInt* constantFour;
extern llvm::ConstantInt* constantFive;
extern llvm::ConstantInt* constantSix;
extern llvm::ConstantInt* constantSeven;
extern llvm::ConstantInt* constantEight;
extern llvm::ConstantInt* constantMinusOne;
extern llvm::ConstantInt* constantLongMinusOne;
extern llvm::ConstantInt* constantLongZero;
extern llvm::ConstantInt* constantLongOne;
extern llvm::ConstantInt* constantMinInt;
extern llvm::ConstantInt* constantMaxInt;
extern llvm::ConstantInt* constantMinLong;
extern llvm::ConstantInt* constantMaxLong;
extern llvm::ConstantFP*  constantFloatZero;
extern llvm::ConstantFP*  constantFloatOne;
extern llvm::ConstantFP*  constantFloatTwo;
extern llvm::ConstantFP*  constantDoubleZero;
extern llvm::ConstantFP*  constantDoubleOne;
extern llvm::ConstantFP*  constantMaxIntFloat;
extern llvm::ConstantFP*  constantMinIntFloat;
extern llvm::ConstantFP*  constantMinLongFloat;
extern llvm::ConstantFP*  constantMinLongDouble;
extern llvm::ConstantFP*  constantMaxLongFloat;
extern llvm::ConstantFP*  constantMaxIntDouble;
extern llvm::ConstantFP*  constantMinIntDouble;
extern llvm::ConstantFP*  constantMaxLongDouble;
extern llvm::ConstantFP*  constantDoubleInfinity;
extern llvm::ConstantFP*  constantDoubleMinusInfinity;
extern llvm::ConstantFP*  constantFloatInfinity;
extern llvm::ConstantFP*  constantFloatMinusInfinity;
extern llvm::ConstantFP*  constantFloatMinusZero;
extern llvm::ConstantFP*  constantDoubleMinusZero;
extern llvm::Constant*    constantPtrNull;
extern const llvm::PointerType* ptrType;
extern const llvm::Type* arrayPtrType;


extern llvm::Module *globalModule;
extern llvm::ExistingModuleProvider *globalModuleProvider;
extern llvm::JITMemoryManager *memoryManager;

extern void protectTypes();
extern void unprotectTypes();

extern void protectConstants();
extern void unprotectConstants();
extern int disassemble(unsigned int* addr);


} // end namespace jit

} // end namespace mvm

#endif // MVM_JIT_H
