Mercurial > hg > graal-compiler
comparison src/share/vm/adlc/output_h.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | a61af66fc99e |
children | d1605aabd0a1 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
201 } | 201 } |
202 else if (!strcmp(type, "ConP")) { | 202 else if (!strcmp(type, "ConP")) { |
203 if (i > 0) fprintf(fp,", "); | 203 if (i > 0) fprintf(fp,", "); |
204 fprintf(fp," const TypePtr *_c%d;\n", i); | 204 fprintf(fp," const TypePtr *_c%d;\n", i); |
205 } | 205 } |
206 else if (!strcmp(type, "ConN")) { | |
207 if (i > 0) fprintf(fp,", "); | |
208 fprintf(fp," const TypeNarrowOop *_c%d;\n", i); | |
209 } | |
206 else if (!strcmp(type, "ConL")) { | 210 else if (!strcmp(type, "ConL")) { |
207 if (i > 0) fprintf(fp,", "); | 211 if (i > 0) fprintf(fp,", "); |
208 fprintf(fp," jlong _c%d;\n", i); | 212 fprintf(fp," jlong _c%d;\n", i); |
209 } | 213 } |
210 else if (!strcmp(type, "ConF")) { | 214 else if (!strcmp(type, "ConF")) { |
230 if (!strcmp(comp->base_type(globals), "ConI")) { | 234 if (!strcmp(comp->base_type(globals), "ConI")) { |
231 fprintf(fp," jint _c%d;\n", i); | 235 fprintf(fp," jint _c%d;\n", i); |
232 i++; | 236 i++; |
233 } | 237 } |
234 else if (!strcmp(comp->base_type(globals), "ConP")) { | 238 else if (!strcmp(comp->base_type(globals), "ConP")) { |
239 fprintf(fp," const TypePtr *_c%d;\n", i); | |
240 i++; | |
241 } | |
242 else if (!strcmp(comp->base_type(globals), "ConN")) { | |
235 fprintf(fp," const TypePtr *_c%d;\n", i); | 243 fprintf(fp," const TypePtr *_c%d;\n", i); |
236 i++; | 244 i++; |
237 } | 245 } |
238 else if (!strcmp(comp->base_type(globals), "ConL")) { | 246 else if (!strcmp(comp->base_type(globals), "ConL")) { |
239 fprintf(fp," jlong _c%d;\n", i); | 247 fprintf(fp," jlong _c%d;\n", i); |
278 switch( constant_type ) { | 286 switch( constant_type ) { |
279 case Form::idealI : { | 287 case Form::idealI : { |
280 fprintf(fp,is_ideal_bool ? "BoolTest::mask c%d" : "int32 c%d", i); | 288 fprintf(fp,is_ideal_bool ? "BoolTest::mask c%d" : "int32 c%d", i); |
281 break; | 289 break; |
282 } | 290 } |
291 case Form::idealN : { fprintf(fp,"const TypeNarrowOop *c%d", i); break; } | |
283 case Form::idealP : { fprintf(fp,"const TypePtr *c%d", i); break; } | 292 case Form::idealP : { fprintf(fp,"const TypePtr *c%d", i); break; } |
284 case Form::idealL : { fprintf(fp,"jlong c%d", i); break; } | 293 case Form::idealL : { fprintf(fp,"jlong c%d", i); break; } |
285 case Form::idealF : { fprintf(fp,"jfloat c%d", i); break; } | 294 case Form::idealF : { fprintf(fp,"jfloat c%d", i); break; } |
286 case Form::idealD : { fprintf(fp,"jdouble c%d", i); break; } | 295 case Form::idealD : { fprintf(fp,"jdouble c%d", i); break; } |
287 default: | 296 default: |
300 else if (!strcmp(comp->base_type(globals), "ConP")) { | 309 else if (!strcmp(comp->base_type(globals), "ConP")) { |
301 if (i > 0) fprintf(fp,", "); | 310 if (i > 0) fprintf(fp,", "); |
302 fprintf(fp,"const TypePtr *c%d", i); | 311 fprintf(fp,"const TypePtr *c%d", i); |
303 i++; | 312 i++; |
304 } | 313 } |
314 else if (!strcmp(comp->base_type(globals), "ConN")) { | |
315 if (i > 0) fprintf(fp,", "); | |
316 fprintf(fp,"const TypePtr *c%d", i); | |
317 i++; | |
318 } | |
305 else if (!strcmp(comp->base_type(globals), "ConL")) { | 319 else if (!strcmp(comp->base_type(globals), "ConL")) { |
306 if (i > 0) fprintf(fp,", "); | 320 if (i > 0) fprintf(fp,", "); |
307 fprintf(fp,"jlong c%d", i); | 321 fprintf(fp,"jlong c%d", i); |
308 i++; | 322 i++; |
309 } | 323 } |
356 fprintf(fp," st->print(\"#%%d\", _c%d);\n", i); | 370 fprintf(fp," st->print(\"#%%d\", _c%d);\n", i); |
357 ++i; | 371 ++i; |
358 } | 372 } |
359 else if (!strcmp(ideal_type, "ConP")) { | 373 else if (!strcmp(ideal_type, "ConP")) { |
360 fprintf(fp," _c%d->dump_on(st);\n", i); | 374 fprintf(fp," _c%d->dump_on(st);\n", i); |
375 ++i; | |
376 } | |
377 else if (!strcmp(ideal_type, "ConN")) { | |
378 fprintf(fp," _c%d->dump();\n", i); | |
361 ++i; | 379 ++i; |
362 } | 380 } |
363 else if (!strcmp(ideal_type, "ConL")) { | 381 else if (!strcmp(ideal_type, "ConL")) { |
364 fprintf(fp," st->print(\"#\" INT64_FORMAT, _c%d);\n", i); | 382 fprintf(fp," st->print(\"#\" INT64_FORMAT, _c%d);\n", i); |
365 ++i; | 383 ++i; |
415 fprintf(fp,"st->print(\"%s\");\n", string); | 433 fprintf(fp,"st->print(\"%s\");\n", string); |
416 } else { | 434 } else { |
417 // Replacement variable | 435 // Replacement variable |
418 const char *rep_var = oper._format->_rep_vars.iter(); | 436 const char *rep_var = oper._format->_rep_vars.iter(); |
419 // Check that it is a local name, and an operand | 437 // Check that it is a local name, and an operand |
420 OperandForm *op = oper._localNames[rep_var]->is_operand(); | 438 const Form* form = oper._localNames[rep_var]; |
421 assert( op, "replacement variable was not found in local names"); | 439 if (form == NULL) { |
440 globalAD->syntax_err(oper._linenum, | |
441 "\'%s\' not found in format for %s\n", rep_var, oper._ident); | |
442 assert(form, "replacement variable was not found in local names"); | |
443 } | |
444 OperandForm *op = form->is_operand(); | |
422 // Get index if register or constant | 445 // Get index if register or constant |
423 if ( op->_matrule && op->_matrule->is_base_register(globals) ) { | 446 if ( op->_matrule && op->_matrule->is_base_register(globals) ) { |
424 idx = oper.register_position( globals, rep_var); | 447 idx = oper.register_position( globals, rep_var); |
425 } | 448 } |
426 else if (op->_matrule && op->_matrule->is_base_constant(globals)) { | 449 else if (op->_matrule && op->_matrule->is_base_constant(globals)) { |
481 // Pass through to st->print | 504 // Pass through to st->print |
482 fprintf(fp,"st->print(\"%s\");\n", string); | 505 fprintf(fp,"st->print(\"%s\");\n", string); |
483 } else { | 506 } else { |
484 // Replacement variable | 507 // Replacement variable |
485 const char *rep_var = oper._format->_rep_vars.iter(); | 508 const char *rep_var = oper._format->_rep_vars.iter(); |
486 // Check that it is a local name, and an operand | 509 // Check that it is a local name, and an operand |
487 OperandForm *op = oper._localNames[rep_var]->is_operand(); | 510 const Form* form = oper._localNames[rep_var]; |
488 assert( op, "replacement variable was not found in local names"); | 511 if (form == NULL) { |
512 globalAD->syntax_err(oper._linenum, | |
513 "\'%s\' not found in format for %s\n", rep_var, oper._ident); | |
514 assert(form, "replacement variable was not found in local names"); | |
515 } | |
516 OperandForm *op = form->is_operand(); | |
489 // Get index if register or constant | 517 // Get index if register or constant |
490 if ( op->_matrule && op->_matrule->is_base_register(globals) ) { | 518 if ( op->_matrule && op->_matrule->is_base_register(globals) ) { |
491 idx = oper.register_position( globals, rep_var); | 519 idx = oper.register_position( globals, rep_var); |
492 } | 520 } |
493 else if (op->_matrule && op->_matrule->is_base_constant(globals)) { | 521 else if (op->_matrule && op->_matrule->is_base_constant(globals)) { |
1161 fprintf(fp," virtual const Type *type() const {"); | 1189 fprintf(fp," virtual const Type *type() const {"); |
1162 const char *type = getIdealType(optype); | 1190 const char *type = getIdealType(optype); |
1163 if( type != NULL ) { | 1191 if( type != NULL ) { |
1164 Form::DataType data_type = oper->is_base_constant(_globalNames); | 1192 Form::DataType data_type = oper->is_base_constant(_globalNames); |
1165 // Check if we are an ideal pointer type | 1193 // Check if we are an ideal pointer type |
1166 if( data_type == Form::idealP ) { | 1194 if( data_type == Form::idealP || data_type == Form::idealN ) { |
1167 // Return the ideal type we already have: <TypePtr *> | 1195 // Return the ideal type we already have: <TypePtr *> |
1168 fprintf(fp," return _c0;"); | 1196 fprintf(fp," return _c0;"); |
1169 } else { | 1197 } else { |
1170 // Return the appropriate bottom type | 1198 // Return the appropriate bottom type |
1171 fprintf(fp," return %s;", getIdealType(optype)); | 1199 fprintf(fp," return %s;", getIdealType(optype)); |
1289 // Generate query to determine if this pointer is an oop | 1317 // Generate query to determine if this pointer is an oop |
1290 fprintf(fp," virtual bool constant_is_oop() const {"); | 1318 fprintf(fp," virtual bool constant_is_oop() const {"); |
1291 fprintf(fp, " return _c0->isa_oop_ptr();"); | 1319 fprintf(fp, " return _c0->isa_oop_ptr();"); |
1292 fprintf(fp, " }\n"); | 1320 fprintf(fp, " }\n"); |
1293 } | 1321 } |
1322 else if (!strcmp(oper->ideal_type(_globalNames), "ConN")) { | |
1323 // Access the locally stored constant | |
1324 fprintf(fp," virtual intptr_t constant() const {"); | |
1325 fprintf(fp, " return _c0->make_oopptr()->get_con();"); | |
1326 fprintf(fp, " }\n"); | |
1327 // Generate query to determine if this pointer is an oop | |
1328 fprintf(fp," virtual bool constant_is_oop() const {"); | |
1329 fprintf(fp, " return _c0->make_oopptr()->isa_oop_ptr();"); | |
1330 fprintf(fp, " }\n"); | |
1331 } | |
1294 else if (!strcmp(oper->ideal_type(_globalNames), "ConL")) { | 1332 else if (!strcmp(oper->ideal_type(_globalNames), "ConL")) { |
1295 fprintf(fp," virtual intptr_t constant() const {"); | 1333 fprintf(fp," virtual intptr_t constant() const {"); |
1296 // We don't support addressing modes with > 4Gig offsets. | 1334 // We don't support addressing modes with > 4Gig offsets. |
1297 // Truncate to int. | 1335 // Truncate to int. |
1298 fprintf(fp, " return (intptr_t)_c0;"); | 1336 fprintf(fp, " return (intptr_t)_c0;"); |
1746 switch( data_type ) { | 1784 switch( data_type ) { |
1747 case Form::idealI: | 1785 case Form::idealI: |
1748 fprintf(fp," return TypeInt::make(opnd_array(1)->constant());\n"); | 1786 fprintf(fp," return TypeInt::make(opnd_array(1)->constant());\n"); |
1749 break; | 1787 break; |
1750 case Form::idealP: | 1788 case Form::idealP: |
1789 case Form::idealN: | |
1751 fprintf(fp," return opnd_array(1)->type();\n",result); | 1790 fprintf(fp," return opnd_array(1)->type();\n",result); |
1752 break; | 1791 break; |
1753 case Form::idealD: | 1792 case Form::idealD: |
1754 fprintf(fp," return TypeD::make(opnd_array(1)->constantD());\n"); | 1793 fprintf(fp," return TypeD::make(opnd_array(1)->constantD());\n"); |
1755 break; | 1794 break; |