Mercurial > hg > truffle
comparison src/share/vm/prims/methodHandles.cpp @ 2088:8d0b933dda2d
7007377: JSR 292 MethodHandlesTest.testCastFailure fails on SPARC with -Xcomp +DeoptimizeALot
Reviewed-by: kvn, jrose
author | twisti |
---|---|
date | Wed, 22 Dec 2010 02:02:53 -0800 |
parents | f2da85a9b08e |
children | d810e9a3fc33 |
comparison
equal
deleted
inserted
replaced
2087:352765ed11a1 | 2088:8d0b933dda2d |
---|---|
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) { |
2643 env->ExceptionClear(); | 2643 env->ExceptionClear(); |
2644 } else { | 2644 } else { |
2645 MethodHandles::set_enabled(true); | 2645 MethodHandles::set_enabled(true); |
2646 } | 2646 } |
2647 } | 2647 } |
2648 | |
2649 // Generate method handles adapters if enabled. | |
2650 if (MethodHandles::enabled()) { | |
2651 MethodHandles::generate_adapters(CHECK); | |
2652 } | |
2648 } | 2653 } |
2649 JVM_END | 2654 JVM_END |