Mercurial > hg > truffle
comparison src/cpu/x86/vm/interp_masm_x86_32.cpp @ 625:2f2f54ed12ce
Merge
author | kvn |
---|---|
date | Tue, 10 Mar 2009 08:52:16 -0700 |
parents | afa80fa86d22 56aae7be60d4 |
children | 7bb995fbd3c0 c517646eef23 |
comparison
equal
deleted
inserted
replaced
620:bcedf688d882 | 625:2f2f54ed12ce |
---|---|
190 | 190 |
191 | 191 |
192 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset) { | 192 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset) { |
193 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); | 193 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
194 assert(cache != index, "must use different registers"); | 194 assert(cache != index, "must use different registers"); |
195 load_unsigned_word(index, Address(rsi, bcp_offset)); | 195 load_unsigned_short(index, Address(rsi, bcp_offset)); |
196 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); | 196 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
197 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); | 197 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
198 shlptr(index, 2); // convert from field index to ConstantPoolCacheEntry index | 198 shlptr(index, 2); // convert from field index to ConstantPoolCacheEntry index |
199 } | 199 } |
200 | 200 |
201 | 201 |
202 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset) { | 202 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset) { |
203 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); | 203 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
204 assert(cache != tmp, "must use different register"); | 204 assert(cache != tmp, "must use different register"); |
205 load_unsigned_word(tmp, Address(rsi, bcp_offset)); | 205 load_unsigned_short(tmp, Address(rsi, bcp_offset)); |
206 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); | 206 assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); |
207 // convert from field index to ConstantPoolCacheEntry index | 207 // convert from field index to ConstantPoolCacheEntry index |
208 // and from word offset to byte offset | 208 // and from word offset to byte offset |
209 shll(tmp, 2 + LogBytesPerWord); | 209 shll(tmp, 2 + LogBytesPerWord); |
210 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); | 210 movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); |
1029 test_method_data_pointer(rcx, verify_continue); // If mdp is zero, continue | 1029 test_method_data_pointer(rcx, verify_continue); // If mdp is zero, continue |
1030 get_method(rbx); | 1030 get_method(rbx); |
1031 | 1031 |
1032 // If the mdp is valid, it will point to a DataLayout header which is | 1032 // If the mdp is valid, it will point to a DataLayout header which is |
1033 // consistent with the bcp. The converse is highly probable also. | 1033 // consistent with the bcp. The converse is highly probable also. |
1034 load_unsigned_word(rdx, Address(rcx, in_bytes(DataLayout::bci_offset()))); | 1034 load_unsigned_short(rdx, Address(rcx, in_bytes(DataLayout::bci_offset()))); |
1035 addptr(rdx, Address(rbx, methodOopDesc::const_offset())); | 1035 addptr(rdx, Address(rbx, methodOopDesc::const_offset())); |
1036 lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); | 1036 lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); |
1037 cmpptr(rdx, rsi); | 1037 cmpptr(rdx, rsi); |
1038 jcc(Assembler::equal, verify_continue); | 1038 jcc(Assembler::equal, verify_continue); |
1039 // rbx,: method | 1039 // rbx,: method |