mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
* config/tc-m68k.c (m68k_float_copnum): New static variable.
(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.
This commit is contained in:
@ -38,7 +38,6 @@
|
|||||||
#define DATA DATA0
|
#define DATA DATA0
|
||||||
#define ADDR ADDR0
|
#define ADDR ADDR0
|
||||||
#define SP ADDR7
|
#define SP ADDR7
|
||||||
#define COPNUM COP0
|
|
||||||
#define BAD BAD0
|
#define BAD BAD0
|
||||||
#define BAC BAC0
|
#define BAC BAC0
|
||||||
|
|
||||||
@ -71,10 +70,7 @@ enum m68k_register
|
|||||||
FP6,
|
FP6,
|
||||||
FP7,
|
FP7,
|
||||||
|
|
||||||
/* Note that COP0==processor #1 -- COP0+7==#8, which stores as 000 */
|
COP0, /* Co-processor #0-#7 */
|
||||||
/* I think. . . */
|
|
||||||
|
|
||||||
COP0, /* Co-processor #1-#8 */
|
|
||||||
COP1,
|
COP1,
|
||||||
COP2,
|
COP2,
|
||||||
COP3,
|
COP3,
|
||||||
|
@ -73,6 +73,9 @@ int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
|
|||||||
int flag_reg_prefix_optional;
|
int flag_reg_prefix_optional;
|
||||||
#endif
|
#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 */
|
/* Its an arbitrary name: This means I don't approve of it */
|
||||||
/* See flames below */
|
/* See flames below */
|
||||||
static struct obstack robyn;
|
static struct obstack robyn;
|
||||||
@ -276,6 +279,7 @@ static void s_even PARAMS ((int));
|
|||||||
static void s_proc PARAMS ((int));
|
static void s_proc PARAMS ((int));
|
||||||
static void mri_chip PARAMS ((void));
|
static void mri_chip PARAMS ((void));
|
||||||
static void s_chip PARAMS ((int));
|
static void s_chip PARAMS ((int));
|
||||||
|
static void s_fopt PARAMS ((int));
|
||||||
|
|
||||||
static int current_architecture;
|
static int current_architecture;
|
||||||
|
|
||||||
@ -404,6 +408,8 @@ CONST pseudo_typeS md_pseudo_table[] =
|
|||||||
/* The following pseudo-ops are supported for MRI compatibility. */
|
/* The following pseudo-ops are supported for MRI compatibility. */
|
||||||
{"chip", s_chip, 0},
|
{"chip", s_chip, 0},
|
||||||
{"comline", s_space, 1},
|
{"comline", s_space, 1},
|
||||||
|
{"fopt", s_fopt, 0},
|
||||||
|
{"mask2", s_ignore, 0},
|
||||||
|
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
};
|
};
|
||||||
@ -670,7 +676,7 @@ m68k_ip (instring)
|
|||||||
memset ((char *) (&the_ins.operands[0]), '\0',
|
memset ((char *) (&the_ins.operands[0]), '\0',
|
||||||
sizeof (the_ins.operands[0]));
|
sizeof (the_ins.operands[0]));
|
||||||
the_ins.operands[0].mode = CONTROL;
|
the_ins.operands[0].mode = CONTROL;
|
||||||
the_ins.operands[0].reg = COPNUM; /* COP #1 */
|
the_ins.operands[0].reg = m68k_float_copnum;
|
||||||
opsfound++;
|
opsfound++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,8 +959,8 @@ m68k_ip (instring)
|
|||||||
|
|
||||||
case 'I':
|
case 'I':
|
||||||
if (opP->mode != CONTROL
|
if (opP->mode != CONTROL
|
||||||
|| opP->reg < COPNUM
|
|| opP->reg < COP0
|
||||||
|| opP->reg >= COPNUM + 7)
|
|| opP->reg > COP7)
|
||||||
losing++;
|
losing++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1927,9 +1933,7 @@ m68k_ip (instring)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'I':
|
case 'I':
|
||||||
tmpreg = 1 + opP->reg - COPNUM;
|
tmpreg = opP->reg - COP0;
|
||||||
if (tmpreg == 8)
|
|
||||||
tmpreg = 0;
|
|
||||||
install_operand (s[1], tmpreg);
|
install_operand (s[1], tmpreg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4034,6 +4038,35 @@ s_chip (ignore)
|
|||||||
mri_chip ();
|
mri_chip ();
|
||||||
demand_empty_rest_of_line ();
|
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
|
* md_parse_option
|
||||||
|
Reference in New Issue
Block a user