21 * questions. |
21 * questions. |
22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "code/codeCacheExtensions.hpp" |
|
27 #include "interpreter/interpreter.hpp" |
26 #include "interpreter/interpreter.hpp" |
28 #include "interpreter/interpreterRuntime.hpp" |
27 #include "interpreter/interpreterRuntime.hpp" |
29 #include "interpreter/interp_masm.hpp" |
28 #include "interpreter/interp_masm.hpp" |
30 #include "interpreter/templateInterpreter.hpp" |
29 #include "interpreter/templateInterpreter.hpp" |
31 #include "interpreter/templateInterpreterGenerator.hpp" |
30 #include "interpreter/templateInterpreterGenerator.hpp" |
50 // generate interpreter |
49 // generate interpreter |
51 { ResourceMark rm; |
50 { ResourceMark rm; |
52 TraceTime timer("Interpreter generation", TRACETIME_LOG(Info, startuptime)); |
51 TraceTime timer("Interpreter generation", TRACETIME_LOG(Info, startuptime)); |
53 int code_size = InterpreterCodeSize; |
52 int code_size = InterpreterCodeSize; |
54 NOT_PRODUCT(code_size *= 4;) // debug uses extra interpreter code space |
53 NOT_PRODUCT(code_size *= 4;) // debug uses extra interpreter code space |
55 #if INCLUDE_JVMTI |
|
56 if (CodeCacheExtensions::saving_generated_interpreter()) { |
|
57 // May requires several versions of the codelets. |
|
58 // Final size will automatically be optimized. |
|
59 code_size *= 2; |
|
60 } |
|
61 #endif |
|
62 _code = new StubQueue(new InterpreterCodeletInterface, code_size, NULL, |
54 _code = new StubQueue(new InterpreterCodeletInterface, code_size, NULL, |
63 "Interpreter"); |
55 "Interpreter"); |
64 TemplateInterpreterGenerator g(_code); |
56 TemplateInterpreterGenerator g(_code); |
65 } |
57 } |
66 if (PrintInterpreter) { |
|
67 if (CodeCacheExtensions::saving_generated_interpreter() && |
|
68 CodeCacheExtensions::use_pregenerated_interpreter()) { |
|
69 ResourceMark rm; |
|
70 tty->print("Printing the newly generated interpreter first"); |
|
71 print(); |
|
72 tty->print("Printing the pregenerated interpreter next"); |
|
73 } |
|
74 } |
|
75 |
|
76 // Install the pregenerated interpreter code before printing it |
|
77 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::TemplateInterpreter); |
|
78 |
58 |
79 if (PrintInterpreter) { |
59 if (PrintInterpreter) { |
80 ResourceMark rm; |
60 ResourceMark rm; |
81 print(); |
61 print(); |
82 } |
62 } |