49 static int bci(JavaThread *thread) { return last_frame(thread).interpreter_frame_bci(); }
50 static void set_bcp_and_mdp(address bcp, JavaThread*thread);
51 static Bytecodes::Code code(JavaThread *thread) {
52 // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272)
53 return Bytecodes::code_at(method(thread), bcp(thread));
54 }
55 static bool already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
56 static Bytecode bytecode(JavaThread *thread) { return Bytecode(method(thread), bcp(thread)); }
57 static int get_index_u1(JavaThread *thread, Bytecodes::Code bc)
58 { return bytecode(thread).get_index_u1(bc); }
59 static int get_index_u2(JavaThread *thread, Bytecodes::Code bc)
60 { return bytecode(thread).get_index_u2(bc); }
61 static int get_index_u2_cpcache(JavaThread *thread, Bytecodes::Code bc)
62 { return bytecode(thread).get_index_u2_cpcache(bc); }
63 static int get_index_u4(JavaThread *thread, Bytecodes::Code bc)
64 { return bytecode(thread).get_index_u4(bc); }
65 static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; }
66
67 static ConstantPoolCacheEntry* cache_entry_at(JavaThread *thread, int i) { return method(thread)->constants()->cache()->entry_at(i); }
68 static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return cache_entry_at(thread, Bytes::get_native_u2(bcp(thread) + 1)); }
69 static void note_trap(JavaThread *thread, int reason, TRAPS);
70
71 // Inner work method for Interpreter's frequency counter overflow
72 static nmethod* frequency_counter_overflow_inner(JavaThread* thread, address branch_bcp);
73
74 public:
75 // Constants
76 static void ldc (JavaThread* thread, bool wide);
77 static void resolve_ldc (JavaThread* thread, Bytecodes::Code bytecode);
78
79 // Allocation
80 static void _new (JavaThread* thread, ConstantPool* pool, int index);
81 static void newarray (JavaThread* thread, BasicType type, jint size);
82 static void anewarray (JavaThread* thread, ConstantPool* pool, int index, jint size);
83 static void multianewarray(JavaThread* thread, jint* first_size_address);
84 static void register_finalizer(JavaThread* thread, oopDesc* obj);
85
86 // Quicken instance-of and check-cast bytecodes
87 static void quicken_io_cc(JavaThread* thread);
88
89 // Exceptions thrown by the interpreter
90 static void throw_AbstractMethodError(JavaThread* thread);
91 static void throw_IncompatibleClassChangeError(JavaThread* thread);
92 static void throw_StackOverflowError(JavaThread* thread);
93 static void throw_ArrayIndexOutOfBoundsException(JavaThread* thread, char* name, jint index);
94 static void throw_ClassCastException(JavaThread* thread, oopDesc* obj);
95 static void create_exception(JavaThread* thread, char* name, char* message);
96 static void create_klass_exception(JavaThread* thread, char* name, oopDesc* obj);
97 static address exception_handler_for_exception(JavaThread* thread, oopDesc* exception);
98 #if INCLUDE_JVMTI
99 static void member_name_arg_or_null(JavaThread* thread, address dmh, Method* m, address bcp);
100 #endif
101 static void throw_pending_exception(JavaThread* thread);
102
103 // Statics & fields
104 static void resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode);
105
106 // Synchronization
107 static void monitorenter(JavaThread* thread, BasicObjectLock* elem);
108 static void monitorexit (JavaThread* thread, BasicObjectLock* elem);
109
110 static void throw_illegal_monitor_state_exception(JavaThread* thread);
111 static void new_illegal_monitor_state_exception(JavaThread* thread);
112
113 // Calls
114 static void resolve_invoke (JavaThread* thread, Bytecodes::Code bytecode);
115 static void resolve_invokehandle (JavaThread* thread);
116 static void resolve_invokedynamic(JavaThread* thread);
117
118 // Breakpoints
119 static void _breakpoint(JavaThread* thread, Method* method, address bcp);
120 static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp);
121 static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code);
122 static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(bcp(thread)) == Bytecodes::_breakpoint; }
|
49 static int bci(JavaThread *thread) { return last_frame(thread).interpreter_frame_bci(); }
50 static void set_bcp_and_mdp(address bcp, JavaThread*thread);
51 static Bytecodes::Code code(JavaThread *thread) {
52 // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272)
53 return Bytecodes::code_at(method(thread), bcp(thread));
54 }
55 static bool already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
56 static Bytecode bytecode(JavaThread *thread) { return Bytecode(method(thread), bcp(thread)); }
57 static int get_index_u1(JavaThread *thread, Bytecodes::Code bc)
58 { return bytecode(thread).get_index_u1(bc); }
59 static int get_index_u2(JavaThread *thread, Bytecodes::Code bc)
60 { return bytecode(thread).get_index_u2(bc); }
61 static int get_index_u2_cpcache(JavaThread *thread, Bytecodes::Code bc)
62 { return bytecode(thread).get_index_u2_cpcache(bc); }
63 static int get_index_u4(JavaThread *thread, Bytecodes::Code bc)
64 { return bytecode(thread).get_index_u4(bc); }
65 static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; }
66
67 static ConstantPoolCacheEntry* cache_entry_at(JavaThread *thread, int i) { return method(thread)->constants()->cache()->entry_at(i); }
68 static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return cache_entry_at(thread, Bytes::get_native_u2(bcp(thread) + 1)); }
69 static void note_trap_inner(JavaThread* thread, int reason,
70 methodHandle trap_method, int trap_bci, TRAPS);
71 static void note_trap(JavaThread *thread, int reason, TRAPS);
72 #ifdef CC_INTERP
73 // Profile traps in C++ interpreter.
74 static void note_trap(JavaThread* thread, int reason, Method *method, int trap_bci);
75 #endif // CC_INTERP
76
77 // Inner work method for Interpreter's frequency counter overflow.
78 static nmethod* frequency_counter_overflow_inner(JavaThread* thread, address branch_bcp);
79
80 public:
81 // Constants
82 static void ldc (JavaThread* thread, bool wide);
83 static void resolve_ldc (JavaThread* thread, Bytecodes::Code bytecode);
84
85 // Allocation
86 static void _new (JavaThread* thread, ConstantPool* pool, int index);
87 static void newarray (JavaThread* thread, BasicType type, jint size);
88 static void anewarray (JavaThread* thread, ConstantPool* pool, int index, jint size);
89 static void multianewarray(JavaThread* thread, jint* first_size_address);
90 static void register_finalizer(JavaThread* thread, oopDesc* obj);
91
92 // Quicken instance-of and check-cast bytecodes
93 static void quicken_io_cc(JavaThread* thread);
94
95 // Exceptions thrown by the interpreter
96 static void throw_AbstractMethodError(JavaThread* thread);
97 static void throw_IncompatibleClassChangeError(JavaThread* thread);
98 static void throw_StackOverflowError(JavaThread* thread);
99 static void throw_ArrayIndexOutOfBoundsException(JavaThread* thread, char* name, jint index);
100 static void throw_ClassCastException(JavaThread* thread, oopDesc* obj);
101 static void create_exception(JavaThread* thread, char* name, char* message);
102 static void create_klass_exception(JavaThread* thread, char* name, oopDesc* obj);
103 static address exception_handler_for_exception(JavaThread* thread, oopDesc* exception);
104 #if INCLUDE_JVMTI
105 static void member_name_arg_or_null(JavaThread* thread, address dmh, Method* m, address bcp);
106 #endif
107 static void throw_pending_exception(JavaThread* thread);
108
109 #ifdef CC_INTERP
110 // Profile traps in C++ interpreter.
111 static void note_nullCheck_trap (JavaThread* thread, Method *method, int trap_bci);
112 static void note_div0Check_trap (JavaThread* thread, Method *method, int trap_bci);
113 static void note_rangeCheck_trap(JavaThread* thread, Method *method, int trap_bci);
114 static void note_classCheck_trap(JavaThread* thread, Method *method, int trap_bci);
115 static void note_arrayCheck_trap(JavaThread* thread, Method *method, int trap_bci);
116 // A dummy for makros that shall not profile traps.
117 static void note_no_trap(JavaThread* thread, Method *method, int trap_bci) {}
118 #endif // CC_INTERP
119
120 // Statics & fields
121 static void resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode);
122
123 // Synchronization
124 static void monitorenter(JavaThread* thread, BasicObjectLock* elem);
125 static void monitorexit (JavaThread* thread, BasicObjectLock* elem);
126
127 static void throw_illegal_monitor_state_exception(JavaThread* thread);
128 static void new_illegal_monitor_state_exception(JavaThread* thread);
129
130 // Calls
131 static void resolve_invoke (JavaThread* thread, Bytecodes::Code bytecode);
132 static void resolve_invokehandle (JavaThread* thread);
133 static void resolve_invokedynamic(JavaThread* thread);
134
135 // Breakpoints
136 static void _breakpoint(JavaThread* thread, Method* method, address bcp);
137 static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp);
138 static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code);
139 static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(bcp(thread)) == Bytecodes::_breakpoint; }
|