(md_pseudo_table): Add fopt and mask2.
(m68k_ip): Use m68k_float_copnum, not COPNUM, when setting
coprocessor register to use. In case 'I' when checking operands,
correct coprocessor register numbers. In case 'I' when setting
operands, don't add 1.
(s_fopt): New static function.
* config/m68k-parse.h (COPNUM): Don't define.
#define DATA DATA0
#define ADDR ADDR0
#define SP ADDR7
#define DATA DATA0
#define ADDR ADDR0
#define SP ADDR7
#define BAD BAD0
#define BAC BAC0
#define BAD BAD0
#define BAC BAC0
- /* Note that COP0==processor #1 -- COP0+7==#8, which stores as 000 */
- /* I think. . . */
-
- COP0, /* Co-processor #1-#8 */
+ COP0, /* Co-processor #0-#7 */
int flag_reg_prefix_optional;
#endif
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;
/* Its an arbitrary name: This means I don't approve of it */
/* See flames below */
static struct obstack robyn;
static void s_proc PARAMS ((int));
static void mri_chip PARAMS ((void));
static void s_chip 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;
static int current_architecture;
/* The following pseudo-ops are supported for MRI compatibility. */
{"chip", s_chip, 0},
{"comline", s_space, 1},
/* 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},
memset ((char *) (&the_ins.operands[0]), '\0',
sizeof (the_ins.operands[0]));
the_ins.operands[0].mode = CONTROL;
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;
case 'I':
if (opP->mode != CONTROL
case 'I':
if (opP->mode != CONTROL
- || opP->reg < COPNUM
- || opP->reg >= COPNUM + 7)
+ || opP->reg < COP0
+ || opP->reg > COP7)
- tmpreg = 1 + opP->reg - COPNUM;
- if (tmpreg == 8)
- tmpreg = 0;
+ tmpreg = opP->reg - COP0;
install_operand (s[1], tmpreg);
break;
install_operand (s[1], tmpreg);
break;
mri_chip ();
demand_empty_rest_of_line ();
}
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 ();
+}