2163 ArgInfoData *arg_info();
2164
2165 enum {
2166 no_type_profile = 0,
2167 type_profile_jsr292 = 1,
2168 type_profile_all = 2
2169 };
2170
2171 static bool profile_jsr292(methodHandle m, int bci);
2172 static int profile_arguments_flag();
2173 static bool profile_arguments_jsr292_only();
2174 static bool profile_all_arguments();
2175 static bool profile_arguments_for_invoke(methodHandle m, int bci);
2176 static int profile_return_flag();
2177 static bool profile_all_return();
2178 static bool profile_return_for_invoke(methodHandle m, int bci);
2179 static int profile_parameters_flag();
2180 static bool profile_parameters_jsr292_only();
2181 static bool profile_all_parameters();
2182
2183 public:
2184 static int header_size() {
2185 return sizeof(MethodData)/wordSize;
2186 }
2187
2188 // Compute the size of a MethodData* before it is created.
2189 static int compute_allocation_size_in_bytes(methodHandle method);
2190 static int compute_allocation_size_in_words(methodHandle method);
2191 static int compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps);
2192
2193 // Determine if a given bytecode can have profile information.
2194 static bool bytecode_has_profile(Bytecodes::Code code) {
2195 return bytecode_cell_count(code) != no_profile_data;
2196 }
2197
2198 // reset into original state
2199 void init();
2200
2201 // My size
2202 int size_in_bytes() const { return _size; }
|
2163 ArgInfoData *arg_info();
2164
2165 enum {
2166 no_type_profile = 0,
2167 type_profile_jsr292 = 1,
2168 type_profile_all = 2
2169 };
2170
2171 static bool profile_jsr292(methodHandle m, int bci);
2172 static int profile_arguments_flag();
2173 static bool profile_arguments_jsr292_only();
2174 static bool profile_all_arguments();
2175 static bool profile_arguments_for_invoke(methodHandle m, int bci);
2176 static int profile_return_flag();
2177 static bool profile_all_return();
2178 static bool profile_return_for_invoke(methodHandle m, int bci);
2179 static int profile_parameters_flag();
2180 static bool profile_parameters_jsr292_only();
2181 static bool profile_all_parameters();
2182
2183 void clean_extra_data(BoolObjectClosure* is_alive);
2184 void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false);
2185 void verify_extra_data_clean(BoolObjectClosure* is_alive);
2186
2187 public:
2188 static int header_size() {
2189 return sizeof(MethodData)/wordSize;
2190 }
2191
2192 // Compute the size of a MethodData* before it is created.
2193 static int compute_allocation_size_in_bytes(methodHandle method);
2194 static int compute_allocation_size_in_words(methodHandle method);
2195 static int compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps);
2196
2197 // Determine if a given bytecode can have profile information.
2198 static bool bytecode_has_profile(Bytecodes::Code code) {
2199 return bytecode_cell_count(code) != no_profile_data;
2200 }
2201
2202 // reset into original state
2203 void init();
2204
2205 // My size
2206 int size_in_bytes() const { return _size; }
|