44
45 static void set_bcp_and_mdp(address bcp, JavaThread* current);
46 static void note_trap_inner(JavaThread* current, int reason,
47 const methodHandle& trap_method, int trap_bci);
48 static void note_trap(JavaThread* current, int reason);
49
50 // Inner work method for Interpreter's frequency counter overflow.
51 static nmethod* frequency_counter_overflow_inner(JavaThread* current, address branch_bcp);
52
53 public:
54 // Constants
55 static void ldc (JavaThread* current, bool wide);
56 static void resolve_ldc (JavaThread* current, Bytecodes::Code bytecode);
57
58 // Allocation
59 static void _new (JavaThread* current, ConstantPool* pool, int index);
60 static void newarray (JavaThread* current, BasicType type, jint size);
61 static void anewarray (JavaThread* current, ConstantPool* pool, int index, jint size);
62 static void multianewarray(JavaThread* current, jint* first_size_address);
63 static void register_finalizer(JavaThread* current, oopDesc* obj);
64
65 // Quicken instance-of and check-cast bytecodes
66 static void quicken_io_cc(JavaThread* current);
67
68 // Exceptions thrown by the interpreter
69 static void throw_AbstractMethodError(JavaThread* current);
70 static void throw_AbstractMethodErrorWithMethod(JavaThread* current, Method* oop);
71 static void throw_AbstractMethodErrorVerbose(JavaThread* current,
72 Klass* recvKlass,
73 Method* missingMethod);
74
75 static void throw_IncompatibleClassChangeError(JavaThread* current);
76 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
77 Klass* resc,
78 Klass* interfaceKlass);
79 static void throw_StackOverflowError(JavaThread* current);
80 static void throw_delayed_StackOverflowError(JavaThread* current);
81 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
82 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
83 static void throw_NullPointerException(JavaThread* current);
104 private:
105 // Statics & fields
106 static void resolve_get_put(Bytecodes::Code bytecode, TRAPS);
107
108 // Calls
109 static void resolve_invoke(Bytecodes::Code bytecode, TRAPS);
110 static void resolve_invokehandle (TRAPS);
111 static void resolve_invokedynamic(TRAPS);
112
113 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
114 methodHandle& resolved_method,
115 constantPoolHandle& pool, int method_index);
116 public:
117 // Synchronization
118 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
119 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
120 static void monitorexit (BasicObjectLock* elem);
121
122 static void throw_illegal_monitor_state_exception(JavaThread* current);
123 static void new_illegal_monitor_state_exception(JavaThread* current);
124
125 // Breakpoints
126 static void _breakpoint(JavaThread* current, Method* method, address bcp);
127 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
128 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
129
130 // Safepoints
131 static void at_safepoint(JavaThread* current);
132 static void at_unwind(JavaThread* current);
133
134 // Debugger support
135 static void post_field_access(JavaThread* current, oopDesc* obj,
136 ResolvedFieldEntry* entry);
137 static void post_field_modification(JavaThread* current, oopDesc* obj,
138 ResolvedFieldEntry* entry, jvalue *value);
139 static void post_method_entry(JavaThread* current);
140 static void post_method_exit (JavaThread* current);
141 static int interpreter_contains(address pc);
142
143 // Native signature handlers
|
44
45 static void set_bcp_and_mdp(address bcp, JavaThread* current);
46 static void note_trap_inner(JavaThread* current, int reason,
47 const methodHandle& trap_method, int trap_bci);
48 static void note_trap(JavaThread* current, int reason);
49
50 // Inner work method for Interpreter's frequency counter overflow.
51 static nmethod* frequency_counter_overflow_inner(JavaThread* current, address branch_bcp);
52
53 public:
54 // Constants
55 static void ldc (JavaThread* current, bool wide);
56 static void resolve_ldc (JavaThread* current, Bytecodes::Code bytecode);
57
58 // Allocation
59 static void _new (JavaThread* current, ConstantPool* pool, int index);
60 static void newarray (JavaThread* current, BasicType type, jint size);
61 static void anewarray (JavaThread* current, ConstantPool* pool, int index, jint size);
62 static void multianewarray(JavaThread* current, jint* first_size_address);
63 static void register_finalizer(JavaThread* current, oopDesc* obj);
64 static void read_flat_field(JavaThread* current, oopDesc* object, ResolvedFieldEntry* entry);
65 static void write_flat_field(JavaThread* current, oopDesc* object, oopDesc* value, ResolvedFieldEntry* entry);
66
67 static void flat_array_load(JavaThread* current, arrayOopDesc* array, int index);
68 static void flat_array_store(JavaThread* current, oopDesc* val, arrayOopDesc* array, int index);
69
70 static jboolean is_substitutable(JavaThread* current, oopDesc* aobj, oopDesc* bobj);
71
72 // Quicken instance-of and check-cast bytecodes
73 static void quicken_io_cc(JavaThread* current);
74
75 // Exceptions thrown by the interpreter
76 static void throw_AbstractMethodError(JavaThread* current);
77 static void throw_AbstractMethodErrorWithMethod(JavaThread* current, Method* oop);
78 static void throw_AbstractMethodErrorVerbose(JavaThread* current,
79 Klass* recvKlass,
80 Method* missingMethod);
81
82 static void throw_IncompatibleClassChangeError(JavaThread* current);
83 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
84 Klass* resc,
85 Klass* interfaceKlass);
86 static void throw_StackOverflowError(JavaThread* current);
87 static void throw_delayed_StackOverflowError(JavaThread* current);
88 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
89 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
90 static void throw_NullPointerException(JavaThread* current);
111 private:
112 // Statics & fields
113 static void resolve_get_put(Bytecodes::Code bytecode, TRAPS);
114
115 // Calls
116 static void resolve_invoke(Bytecodes::Code bytecode, TRAPS);
117 static void resolve_invokehandle (TRAPS);
118 static void resolve_invokedynamic(TRAPS);
119
120 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
121 methodHandle& resolved_method,
122 constantPoolHandle& pool, int method_index);
123 public:
124 // Synchronization
125 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
126 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
127 static void monitorexit (BasicObjectLock* elem);
128
129 static void throw_illegal_monitor_state_exception(JavaThread* current);
130 static void new_illegal_monitor_state_exception(JavaThread* current);
131 static void throw_identity_exception(JavaThread* current, oopDesc* obj);
132
133 // Breakpoints
134 static void _breakpoint(JavaThread* current, Method* method, address bcp);
135 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
136 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
137
138 // Safepoints
139 static void at_safepoint(JavaThread* current);
140 static void at_unwind(JavaThread* current);
141
142 // Debugger support
143 static void post_field_access(JavaThread* current, oopDesc* obj,
144 ResolvedFieldEntry* entry);
145 static void post_field_modification(JavaThread* current, oopDesc* obj,
146 ResolvedFieldEntry* entry, jvalue *value);
147 static void post_method_entry(JavaThread* current);
148 static void post_method_exit (JavaThread* current);
149 static int interpreter_contains(address pc);
150
151 // Native signature handlers
|