// Copyright 2011 Google Inc. All Rights Reserved. // Author: irogers@google.com (Ian Rogers) #ifndef ART_SRC_JNI_COMPILER_H_ #define ART_SRC_JNI_COMPILER_H_ #include "calling_convention.h" #include "globals.h" #include "macros.h" namespace art { class Assembler; class Method; // A JNI compiler generates code that acts as the bridge between managed code // and native code. // TODO: move the responsibility of managing memory to somewhere else class JniCompiler { public: JniCompiler(); ~JniCompiler(); void Compile(Assembler* jni_asm, Method* method); private: // Copy a single parameter from the managed to the JNI calling convention void CopyParameter(Assembler* jni_asm, ManagedRuntimeCallingConvention* mr_conv, JniCallingConvention* jni_conv, size_t frame_size, size_t out_arg_size); // A poor man's code cache void* AllocateCode(size_t size); // Base of memory region for allocated code byte* jni_code_; // Allocated code size size_t jni_code_size_; // Pointer to the free space byte* jni_code_top_; DISALLOW_COPY_AND_ASSIGN(JniCompiler); }; } // namespace art #endif // ART_SRC_JNI_COMPILER_H_