diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/config/m68k-parse.h | 6 | ||||
-rw-r--r-- | gas/config/tc-m68k.c | 45 |
2 files changed, 40 insertions, 11 deletions
diff --git a/gas/config/m68k-parse.h b/gas/config/m68k-parse.h index 128944c..95a1cd8 100644 --- a/gas/config/m68k-parse.h +++ b/gas/config/m68k-parse.h @@ -38,7 +38,6 @@ #define DATA DATA0 #define ADDR ADDR0 #define SP ADDR7 -#define COPNUM COP0 #define BAD BAD0 #define BAC BAC0 @@ -71,10 +70,7 @@ enum m68k_register FP6, FP7, - /* Note that COP0==processor #1 -- COP0+7==#8, which stores as 000 */ - /* I think. . . */ - - COP0, /* Co-processor #1-#8 */ + COP0, /* Co-processor #0-#7 */ COP1, COP2, COP3, diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c index 046b44c..6412a5d 100644 --- a/gas/config/tc-m68k.c +++ b/gas/config/tc-m68k.c @@ -73,6 +73,9 @@ int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL; int flag_reg_prefix_optional; #endif +/* The floating point coprocessor to use by default. */ +static enum m68k_register m68k_float_copnum = COP1; + /* Its an arbitrary name: This means I don't approve of it */ /* See flames below */ static struct obstack robyn; @@ -276,6 +279,7 @@ static void s_even PARAMS ((int)); static void s_proc PARAMS ((int)); static void mri_chip PARAMS ((void)); static void s_chip PARAMS ((int)); +static void s_fopt PARAMS ((int)); static int current_architecture; @@ -404,6 +408,8 @@ CONST pseudo_typeS md_pseudo_table[] = /* The following pseudo-ops are supported for MRI compatibility. */ {"chip", s_chip, 0}, {"comline", s_space, 1}, + {"fopt", s_fopt, 0}, + {"mask2", s_ignore, 0}, {0, 0, 0} }; @@ -670,7 +676,7 @@ m68k_ip (instring) memset ((char *) (&the_ins.operands[0]), '\0', sizeof (the_ins.operands[0])); the_ins.operands[0].mode = CONTROL; - the_ins.operands[0].reg = COPNUM; /* COP #1 */ + the_ins.operands[0].reg = m68k_float_copnum; opsfound++; } @@ -953,8 +959,8 @@ m68k_ip (instring) case 'I': if (opP->mode != CONTROL - || opP->reg < COPNUM - || opP->reg >= COPNUM + 7) + || opP->reg < COP0 + || opP->reg > COP7) losing++; break; @@ -1927,9 +1933,7 @@ m68k_ip (instring) break; case 'I': - tmpreg = 1 + opP->reg - COPNUM; - if (tmpreg == 8) - tmpreg = 0; + tmpreg = opP->reg - COP0; install_operand (s[1], tmpreg); break; @@ -4034,6 +4038,35 @@ s_chip (ignore) mri_chip (); demand_empty_rest_of_line (); } + +/* The MRI FOPT pseudo-op. */ + +static void +s_fopt (ignore) + int ignore; +{ + SKIP_WHITESPACE (); + + if (strncasecmp (input_line_pointer, "ID=", 3) == 0) + { + int temp; + + input_line_pointer += 3; + temp = get_absolute_expression (); + if (temp < 0 || temp > 7) + as_bad ("bad coprocessor id"); + else + m68k_float_copnum = COP0 + temp; + } + else + { + as_bad ("unrecognized fopt option"); + ignore_rest_of_line (); + return; + } + + demand_empty_rest_of_line (); +} /* * md_parse_option |