Mercurial > hg > truffle
comparison src/share/vm/adlc/adlparse.cpp @ 4121:db2e64ca2d5a
7090968: Allow adlc register class to depend on runtime conditions
Summary: allow reg_class definition as a function.
Reviewed-by: kvn, never
author | roland |
---|---|
date | Tue, 22 Nov 2011 09:45:57 +0100 |
parents | f03a3c8bd5e5 |
children | 8c92982cbbc4 |
comparison
equal
deleted
inserted
replaced
4120:f03a3c8bd5e5 | 4121:db2e64ca2d5a |
---|---|
980 if (strcmp(token,"frame_pointer")==0) { | 980 if (strcmp(token,"frame_pointer")==0) { |
981 frame_pointer_parse(frame, false); | 981 frame_pointer_parse(frame, false); |
982 } | 982 } |
983 if (strcmp(token,"interpreter_frame_pointer")==0) { | 983 if (strcmp(token,"interpreter_frame_pointer")==0) { |
984 interpreter_frame_pointer_parse(frame, false); | 984 interpreter_frame_pointer_parse(frame, false); |
985 // Add reg_class interpreter_frame_pointer_reg | |
986 if( _AD._register != NULL ) { | |
987 RegClass *reg_class = _AD._register->addRegClass("interpreter_frame_pointer_reg"); | |
988 char *interpreter_frame_pointer_reg = frame->_interpreter_frame_pointer_reg; | |
989 if( interpreter_frame_pointer_reg != NULL ) { | |
990 RegDef *regDef = _AD._register->getRegDef(interpreter_frame_pointer_reg); | |
991 reg_class->addReg(regDef); // add regDef to regClass | |
992 } | |
993 } | |
994 } | 985 } |
995 if (strcmp(token,"inline_cache_reg")==0) { | 986 if (strcmp(token,"inline_cache_reg")==0) { |
996 inline_cache_parse(frame, false); | 987 inline_cache_parse(frame, false); |
997 // Add reg_class inline_cache_reg | |
998 if( _AD._register != NULL ) { | |
999 RegClass *reg_class = _AD._register->addRegClass("inline_cache_reg"); | |
1000 char *inline_cache_reg = frame->_inline_cache_reg; | |
1001 if( inline_cache_reg != NULL ) { | |
1002 RegDef *regDef = _AD._register->getRegDef(inline_cache_reg); | |
1003 reg_class->addReg(regDef); // add regDef to regClass | |
1004 } | |
1005 } | |
1006 } | 988 } |
1007 if (strcmp(token,"compiler_method_oop_reg")==0) { | 989 if (strcmp(token,"compiler_method_oop_reg")==0) { |
1008 parse_err(WARN, "Using obsolete Token, compiler_method_oop_reg"); | 990 parse_err(WARN, "Using obsolete Token, compiler_method_oop_reg"); |
1009 skipws(); | 991 skipws(); |
1010 } | 992 } |
1011 if (strcmp(token,"interpreter_method_oop_reg")==0) { | 993 if (strcmp(token,"interpreter_method_oop_reg")==0) { |
1012 interpreter_method_oop_parse(frame, false); | 994 interpreter_method_oop_parse(frame, false); |
1013 // Add reg_class interpreter_method_oop_reg | |
1014 if( _AD._register != NULL ) { | |
1015 RegClass *reg_class = _AD._register->addRegClass("interpreter_method_oop_reg"); | |
1016 char *method_oop_reg = frame->_interpreter_method_oop_reg; | |
1017 if( method_oop_reg != NULL ) { | |
1018 RegDef *regDef = _AD._register->getRegDef(method_oop_reg); | |
1019 reg_class->addReg(regDef); // add regDef to regClass | |
1020 } | |
1021 } | |
1022 } | 995 } |
1023 if (strcmp(token,"cisc_spilling_operand_name")==0) { | 996 if (strcmp(token,"cisc_spilling_operand_name")==0) { |
1024 cisc_spilling_operand_name_parse(frame, false); | 997 cisc_spilling_operand_name_parse(frame, false); |
1025 } | 998 } |
1026 if (strcmp(token,"stack_alignment")==0) { | 999 if (strcmp(token,"stack_alignment")==0) { |
2361 next_char(); // Skip trailing ',' | 2334 next_char(); // Skip trailing ',' |
2362 skipws(); | 2335 skipws(); |
2363 } | 2336 } |
2364 } | 2337 } |
2365 next_char(); // Skip closing ')' | 2338 next_char(); // Skip closing ')' |
2339 } else if (_curchar == '%') { | |
2340 char *code = find_cpp_block("reg class"); | |
2341 if (code == NULL) { | |
2342 parse_err(SYNERR, "missing code declaration for reg class.\n"); | |
2343 return; | |
2344 } | |
2345 reg_class->_user_defined = code; | |
2346 return; | |
2366 } | 2347 } |
2367 | 2348 |
2368 // Check for terminating ';' | 2349 // Check for terminating ';' |
2369 skipws(); | 2350 skipws(); |
2370 if (_curchar != ';') { | 2351 if (_curchar != ';') { |