< prev index next >

src/share/vm/adlc/output_c.cpp

Print this page




2246       // No relocation done for 8-bit values
2247     }
2248     else {
2249       // Not an emit# command, just output the replacement string.
2250       emit_replacement();
2251     }
2252 
2253     // Get ready for next state collection.
2254     clear();
2255   }
2256 
2257 private:
2258 
2259   // recognizes names which represent MacroAssembler register types
2260   // and return the conversion function to build them from OptoReg
2261   const char* reg_conversion(const char* rep_var) {
2262     if (strcmp(rep_var,"$Register") == 0)      return "as_Register";
2263     if (strcmp(rep_var,"$FloatRegister") == 0) return "as_FloatRegister";
2264 #if defined(IA32) || defined(AMD64)
2265     if (strcmp(rep_var,"$XMMRegister") == 0)   return "as_XMMRegister";

2266 #endif
2267     if (strcmp(rep_var,"$CondRegister") == 0)  return "as_ConditionRegister";
2268     return NULL;
2269   }
2270 
2271   void emit_field(const char *rep_var) {
2272     const char* reg_convert = reg_conversion(rep_var);
2273 
2274     // A subfield variable, '$$subfield'
2275     if ( strcmp(rep_var, "$reg") == 0 || reg_convert != NULL) {
2276       // $reg form or the $Register MacroAssembler type conversions
2277       assert( _operand_idx != -1,
2278               "Must use this subfield after operand");
2279       if( _reg_status == LITERAL_NOT_SEEN ) {
2280         if (_processing_noninput) {
2281           const Form  *local     = _inst._localNames[_operand_name];
2282           OperandForm *oper      = local->is_operand();
2283           const RegDef* first = oper->get_RegClass()->find_first_elem();
2284           if (reg_convert != NULL) {
2285             fprintf(_fp, "%s(%s_enc)", reg_convert, first->_regname);




2246       // No relocation done for 8-bit values
2247     }
2248     else {
2249       // Not an emit# command, just output the replacement string.
2250       emit_replacement();
2251     }
2252 
2253     // Get ready for next state collection.
2254     clear();
2255   }
2256 
2257 private:
2258 
2259   // recognizes names which represent MacroAssembler register types
2260   // and return the conversion function to build them from OptoReg
2261   const char* reg_conversion(const char* rep_var) {
2262     if (strcmp(rep_var,"$Register") == 0)      return "as_Register";
2263     if (strcmp(rep_var,"$FloatRegister") == 0) return "as_FloatRegister";
2264 #if defined(IA32) || defined(AMD64)
2265     if (strcmp(rep_var,"$XMMRegister") == 0)   return "as_XMMRegister";
2266     if (strcmp(rep_var,"$KRegister") == 0)     return "as_KRegister";
2267 #endif
2268     if (strcmp(rep_var,"$CondRegister") == 0)  return "as_ConditionRegister";
2269     return NULL;
2270   }
2271 
2272   void emit_field(const char *rep_var) {
2273     const char* reg_convert = reg_conversion(rep_var);
2274 
2275     // A subfield variable, '$$subfield'
2276     if ( strcmp(rep_var, "$reg") == 0 || reg_convert != NULL) {
2277       // $reg form or the $Register MacroAssembler type conversions
2278       assert( _operand_idx != -1,
2279               "Must use this subfield after operand");
2280       if( _reg_status == LITERAL_NOT_SEEN ) {
2281         if (_processing_noninput) {
2282           const Form  *local     = _inst._localNames[_operand_name];
2283           OperandForm *oper      = local->is_operand();
2284           const RegDef* first = oper->get_RegClass()->find_first_elem();
2285           if (reg_convert != NULL) {
2286             fprintf(_fp, "%s(%s_enc)", reg_convert, first->_regname);


< prev index next >