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);
|