109 |
109 |
110 |
110 |
111 //------------------------------------------------------------------------------ |
111 //------------------------------------------------------------------------------ |
112 // MethodHandles::generate_adapters |
112 // MethodHandles::generate_adapters |
113 // |
113 // |
114 void MethodHandles::generate_adapters() { |
114 void MethodHandles::generate_adapters(TRAPS) { |
115 if (!EnableMethodHandles || SystemDictionary::MethodHandle_klass() == NULL) return; |
115 if (!EnableMethodHandles || SystemDictionary::MethodHandle_klass() == NULL) return; |
116 |
116 |
117 assert(_adapter_code == NULL, "generate only once"); |
117 assert(_adapter_code == NULL, "generate only once"); |
118 |
118 |
119 ResourceMark rm; |
119 ResourceMark rm; |
121 _adapter_code = MethodHandlesAdapterBlob::create(_adapter_code_size); |
121 _adapter_code = MethodHandlesAdapterBlob::create(_adapter_code_size); |
122 if (_adapter_code == NULL) |
122 if (_adapter_code == NULL) |
123 vm_exit_out_of_memory(_adapter_code_size, "CodeCache: no room for MethodHandles adapters"); |
123 vm_exit_out_of_memory(_adapter_code_size, "CodeCache: no room for MethodHandles adapters"); |
124 CodeBuffer code(_adapter_code); |
124 CodeBuffer code(_adapter_code); |
125 MethodHandlesAdapterGenerator g(&code); |
125 MethodHandlesAdapterGenerator g(&code); |
126 g.generate(); |
126 g.generate(CHECK); |
127 } |
127 } |
128 |
128 |
129 |
129 |
130 //------------------------------------------------------------------------------ |
130 //------------------------------------------------------------------------------ |
131 // MethodHandlesAdapterGenerator::generate |
131 // MethodHandlesAdapterGenerator::generate |
132 // |
132 // |
133 void MethodHandlesAdapterGenerator::generate() { |
133 void MethodHandlesAdapterGenerator::generate(TRAPS) { |
134 // Generate generic method handle adapters. |
134 // Generate generic method handle adapters. |
135 for (MethodHandles::EntryKind ek = MethodHandles::_EK_FIRST; |
135 for (MethodHandles::EntryKind ek = MethodHandles::_EK_FIRST; |
136 ek < MethodHandles::_EK_LIMIT; |
136 ek < MethodHandles::_EK_LIMIT; |
137 ek = MethodHandles::EntryKind(1 + (int)ek)) { |
137 ek = MethodHandles::EntryKind(1 + (int)ek)) { |
138 StubCodeMark mark(this, "MethodHandle", MethodHandles::entry_name(ek)); |
138 StubCodeMark mark(this, "MethodHandle", MethodHandles::entry_name(ek)); |
139 MethodHandles::generate_method_handle_stub(_masm, ek); |
139 MethodHandles::generate_method_handle_stub(_masm, ek, CHECK); |
140 } |
140 } |
141 } |
141 } |
142 |
142 |
143 |
143 |
144 void MethodHandles::set_enabled(bool z) { |
144 void MethodHandles::set_enabled(bool z) { |