Fix formatting.
This commit is contained in:
parent
8098403c53
commit
87271fa61d
|
@ -1,6 +1,8 @@
|
||||||
2000-07-17 Kazu Hirata <kazu@hxi.com>
|
2000-07-17 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
* config/tc-w65.c: Fix formatting.
|
* config/tc-w65.c: Fix formatting.
|
||||||
|
* config/tc-mn10200.c: Fix formatting.
|
||||||
|
* config/tc-mn10300.c: Likewise.
|
||||||
|
|
||||||
2000-07-17 Frank Ch. Eigler <fche@redhat.com>
|
2000-07-17 Frank Ch. Eigler <fche@redhat.com>
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,10 @@ struct reg_name
|
||||||
int value;
|
int value;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Generic assembler global variables which must be defined by all targets. */
|
/* Generic assembler global variables which must be defined by all
|
||||||
|
targets. */
|
||||||
|
|
||||||
/* Characters which always start a comment. */
|
/* Characters which always start a comment. */
|
||||||
const char comment_chars[] = "#";
|
const char comment_chars[] = "#";
|
||||||
|
|
||||||
/* Characters which start a comment at the beginning of a line. */
|
/* Characters which start a comment at the beginning of a line. */
|
||||||
|
@ -51,26 +52,26 @@ const char EXP_CHARS[] = "eE";
|
||||||
as in 0d1.0. */
|
as in 0d1.0. */
|
||||||
const char FLT_CHARS[] = "dD";
|
const char FLT_CHARS[] = "dD";
|
||||||
|
|
||||||
|
|
||||||
const relax_typeS md_relax_table[] = {
|
const relax_typeS md_relax_table[] = {
|
||||||
/* bCC relaxing */
|
/* bCC relaxing */
|
||||||
{0x81, -0x7e, 2, 1},
|
{0x81, -0x7e, 2, 1},
|
||||||
{0x8004, -0x7ffb, 5, 2},
|
{0x8004, -0x7ffb, 5, 2},
|
||||||
{0x800006, -0x7ffff9, 7, 0},
|
{0x800006, -0x7ffff9, 7, 0},
|
||||||
/* bCCx relaxing */
|
/* bCCx relaxing */
|
||||||
{0x81, -0x7e, 3, 4},
|
{0x81, -0x7e, 3, 4},
|
||||||
{0x8004, -0x7ffb, 6, 5},
|
{0x8004, -0x7ffb, 6, 5},
|
||||||
{0x800006, -0x7ffff9, 8, 0},
|
{0x800006, -0x7ffff9, 8, 0},
|
||||||
/* jsr relaxing */
|
/* jsr relaxing */
|
||||||
{0x8004, -0x7ffb, 3, 7},
|
{0x8004, -0x7ffb, 3, 7},
|
||||||
{0x800006, -0x7ffff9, 5, 0},
|
{0x800006, -0x7ffff9, 5, 0},
|
||||||
/* jmp relaxing */
|
/* jmp relaxing */
|
||||||
{0x81, -0x7e, 2, 9},
|
{0x81, -0x7e, 2, 9},
|
||||||
{0x8004, -0x7ffb, 3, 10},
|
{0x8004, -0x7ffb, 3, 10},
|
||||||
{0x800006, -0x7ffff9, 5, 0},
|
{0x800006, -0x7ffff9, 5, 0},
|
||||||
|
|
||||||
};
|
};
|
||||||
/* local functions */
|
|
||||||
|
/* Local functions. */
|
||||||
static void mn10200_insert_operand PARAMS ((unsigned long *, unsigned long *,
|
static void mn10200_insert_operand PARAMS ((unsigned long *, unsigned long *,
|
||||||
const struct mn10200_operand *,
|
const struct mn10200_operand *,
|
||||||
offsetT, char *, unsigned,
|
offsetT, char *, unsigned,
|
||||||
|
@ -83,8 +84,7 @@ static boolean data_register_name PARAMS ((expressionS *expressionP));
|
||||||
static boolean address_register_name PARAMS ((expressionS *expressionP));
|
static boolean address_register_name PARAMS ((expressionS *expressionP));
|
||||||
static boolean other_register_name PARAMS ((expressionS *expressionP));
|
static boolean other_register_name PARAMS ((expressionS *expressionP));
|
||||||
|
|
||||||
|
/* Fixups. */
|
||||||
/* fixups */
|
|
||||||
#define MAX_INSN_FIXUPS (5)
|
#define MAX_INSN_FIXUPS (5)
|
||||||
struct mn10200_fixup
|
struct mn10200_fixup
|
||||||
{
|
{
|
||||||
|
@ -99,7 +99,7 @@ const char *md_shortopts = "";
|
||||||
struct option md_longopts[] = {
|
struct option md_longopts[] = {
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
size_t md_longopts_size = sizeof(md_longopts);
|
size_t md_longopts_size = sizeof (md_longopts);
|
||||||
|
|
||||||
/* The target specific pseudo-ops which we support. */
|
/* The target specific pseudo-ops which we support. */
|
||||||
const pseudo_typeS md_pseudo_table[] =
|
const pseudo_typeS md_pseudo_table[] =
|
||||||
|
@ -110,7 +110,7 @@ const pseudo_typeS md_pseudo_table[] =
|
||||||
/* Opcode hash table. */
|
/* Opcode hash table. */
|
||||||
static struct hash_control *mn10200_hash;
|
static struct hash_control *mn10200_hash;
|
||||||
|
|
||||||
/* This table is sorted. Suitable for searching by a binary search. */
|
/* This table is sorted. Suitable for searching by a binary search. */
|
||||||
static const struct reg_name data_registers[] =
|
static const struct reg_name data_registers[] =
|
||||||
{
|
{
|
||||||
{ "d0", 0 },
|
{ "d0", 0 },
|
||||||
|
@ -118,7 +118,8 @@ static const struct reg_name data_registers[] =
|
||||||
{ "d2", 2 },
|
{ "d2", 2 },
|
||||||
{ "d3", 3 },
|
{ "d3", 3 },
|
||||||
};
|
};
|
||||||
#define DATA_REG_NAME_CNT (sizeof(data_registers) / sizeof(struct reg_name))
|
#define DATA_REG_NAME_CNT \
|
||||||
|
(sizeof (data_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name address_registers[] =
|
static const struct reg_name address_registers[] =
|
||||||
{
|
{
|
||||||
|
@ -127,18 +128,20 @@ static const struct reg_name address_registers[] =
|
||||||
{ "a2", 2 },
|
{ "a2", 2 },
|
||||||
{ "a3", 3 },
|
{ "a3", 3 },
|
||||||
};
|
};
|
||||||
#define ADDRESS_REG_NAME_CNT (sizeof(address_registers) / sizeof(struct reg_name))
|
#define ADDRESS_REG_NAME_CNT \
|
||||||
|
(sizeof (address_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name other_registers[] =
|
static const struct reg_name other_registers[] =
|
||||||
{
|
{
|
||||||
{ "mdr", 0 },
|
{ "mdr", 0 },
|
||||||
{ "psw", 0 },
|
{ "psw", 0 },
|
||||||
};
|
};
|
||||||
#define OTHER_REG_NAME_CNT (sizeof(other_registers) / sizeof(struct reg_name))
|
#define OTHER_REG_NAME_CNT \
|
||||||
|
(sizeof (other_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
/* reg_name_search does a binary search of the given register table
|
/* reg_name_search does a binary search of the given register table
|
||||||
to see if "name" is a valid regiter name. Returns the register
|
to see if "name" is a valid regiter name. Returns the register
|
||||||
number from the array on success, or -1 on failure. */
|
number from the array on success, or -1 on failure. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
reg_name_search (regs, regcount, name)
|
reg_name_search (regs, regcount, name)
|
||||||
|
@ -161,13 +164,12 @@ reg_name_search (regs, regcount, name)
|
||||||
else if (cmp > 0)
|
else if (cmp > 0)
|
||||||
low = middle + 1;
|
low = middle + 1;
|
||||||
else
|
else
|
||||||
return regs[middle].value;
|
return regs[middle].value;
|
||||||
}
|
}
|
||||||
while (low <= high);
|
while (low <= high);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Summary of register_name().
|
/* Summary of register_name().
|
||||||
*
|
*
|
||||||
* in: Input_line_pointer points to 1st char of operand.
|
* in: Input_line_pointer points to 1st char of operand.
|
||||||
|
@ -178,6 +180,7 @@ reg_name_search (regs, regcount, name)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
data_register_name (expressionP)
|
data_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -187,29 +190,34 @@ data_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (data_registers, DATA_REG_NAME_CNT, name);
|
reg_number = reg_name_search (data_registers, DATA_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,6 +232,7 @@ data_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
address_register_name (expressionP)
|
address_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -233,29 +242,34 @@ address_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (address_registers, ADDRESS_REG_NAME_CNT, name);
|
reg_number = reg_name_search (address_registers, ADDRESS_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -270,6 +284,7 @@ address_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
other_register_name (expressionP)
|
other_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -279,38 +294,43 @@ other_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (other_registers, OTHER_REG_NAME_CNT, name);
|
reg_number = reg_name_search (other_registers, OTHER_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
md_show_usage (stream)
|
md_show_usage (stream)
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
{
|
{
|
||||||
fprintf(stream, _("MN10200 options:\n\
|
fprintf (stream, _("MN10200 options:\n\
|
||||||
none yet\n"));
|
none yet\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,16 +344,16 @@ md_parse_option (c, arg)
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
md_undefined_symbol (name)
|
md_undefined_symbol (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
md_atof (type, litp, sizep)
|
md_atof (type, litp, sizep)
|
||||||
int type;
|
int type;
|
||||||
char *litp;
|
char *litp;
|
||||||
int *sizep;
|
int *sizep;
|
||||||
{
|
{
|
||||||
int prec;
|
int prec;
|
||||||
LITTLENUM_TYPE words[4];
|
LITTLENUM_TYPE words[4];
|
||||||
|
@ -370,12 +390,11 @@ md_atof (type, litp, sizep)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
md_convert_frag (abfd, sec, fragP)
|
md_convert_frag (abfd, sec, fragP)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
asection *sec;
|
asection *sec;
|
||||||
fragS *fragP;
|
fragS *fragP;
|
||||||
{
|
{
|
||||||
static unsigned long label_count = 0;
|
static unsigned long label_count = 0;
|
||||||
char buf[40];
|
char buf[40];
|
||||||
|
@ -737,7 +756,7 @@ md_begin ()
|
||||||
char *prev_name = "";
|
char *prev_name = "";
|
||||||
register const struct mn10200_opcode *op;
|
register const struct mn10200_opcode *op;
|
||||||
|
|
||||||
mn10200_hash = hash_new();
|
mn10200_hash = hash_new ();
|
||||||
|
|
||||||
/* Insert unique names into hash table. The MN10200 instruction set
|
/* Insert unique names into hash table. The MN10200 instruction set
|
||||||
has many identical opcode names that have different opcodes based
|
has many identical opcode names that have different opcodes based
|
||||||
|
@ -776,13 +795,13 @@ md_assemble (str)
|
||||||
int match;
|
int match;
|
||||||
|
|
||||||
/* Get the opcode. */
|
/* Get the opcode. */
|
||||||
for (s = str; *s != '\0' && ! isspace (*s); s++)
|
for (s = str; *s != '\0' && !isspace (*s); s++)
|
||||||
;
|
;
|
||||||
if (*s != '\0')
|
if (*s != '\0')
|
||||||
*s++ = '\0';
|
*s++ = '\0';
|
||||||
|
|
||||||
/* find the first opcode with the proper name */
|
/* Find the first opcode with the proper name. */
|
||||||
opcode = (struct mn10200_opcode *)hash_find (mn10200_hash, str);
|
opcode = (struct mn10200_opcode *) hash_find (mn10200_hash, str);
|
||||||
if (opcode == NULL)
|
if (opcode == NULL)
|
||||||
{
|
{
|
||||||
as_bad (_("Unrecognized opcode: `%s'"), str);
|
as_bad (_("Unrecognized opcode: `%s'"), str);
|
||||||
|
@ -795,7 +814,7 @@ md_assemble (str)
|
||||||
|
|
||||||
input_line_pointer = str;
|
input_line_pointer = str;
|
||||||
|
|
||||||
for(;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
const char *errmsg = NULL;
|
const char *errmsg = NULL;
|
||||||
int op_idx;
|
int op_idx;
|
||||||
|
@ -833,7 +852,7 @@ md_assemble (str)
|
||||||
if (operand->flags & MN10200_OPERAND_RELAX)
|
if (operand->flags & MN10200_OPERAND_RELAX)
|
||||||
relaxable = 1;
|
relaxable = 1;
|
||||||
|
|
||||||
/* Gather the operand. */
|
/* Gather the operand. */
|
||||||
hold = input_line_pointer;
|
hold = input_line_pointer;
|
||||||
input_line_pointer = str;
|
input_line_pointer = str;
|
||||||
|
|
||||||
|
@ -936,7 +955,7 @@ md_assemble (str)
|
||||||
goto error;
|
goto error;
|
||||||
case O_register:
|
case O_register:
|
||||||
if ((operand->flags
|
if ((operand->flags
|
||||||
& (MN10200_OPERAND_DREG | MN10200_OPERAND_AREG)) == 0)
|
& (MN10200_OPERAND_DREG | MN10200_OPERAND_AREG)) == 0)
|
||||||
{
|
{
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
str = hold;
|
str = hold;
|
||||||
|
@ -963,7 +982,7 @@ md_assemble (str)
|
||||||
then promote it (ie this opcode does not match). */
|
then promote it (ie this opcode does not match). */
|
||||||
if (operand->flags
|
if (operand->flags
|
||||||
& (MN10200_OPERAND_PROMOTE | MN10200_OPERAND_RELAX)
|
& (MN10200_OPERAND_PROMOTE | MN10200_OPERAND_RELAX)
|
||||||
&& ! check_operand (insn, operand, ex.X_add_number))
|
&& !check_operand (insn, operand, ex.X_add_number))
|
||||||
{
|
{
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
str = hold;
|
str = hold;
|
||||||
|
@ -1010,9 +1029,9 @@ keep_going:
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (match == 0)
|
if (match == 0)
|
||||||
{
|
{
|
||||||
next_opcode = opcode + 1;
|
next_opcode = opcode + 1;
|
||||||
if (!strcmp(next_opcode->name, opcode->name))
|
if (!strcmp (next_opcode->name, opcode->name))
|
||||||
{
|
{
|
||||||
opcode = next_opcode;
|
opcode = next_opcode;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1020,7 +1039,7 @@ keep_going:
|
||||||
|
|
||||||
as_bad ("%s", errmsg);
|
as_bad ("%s", errmsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1051,7 +1070,7 @@ keep_going:
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
/* bCC */
|
/* bCC */
|
||||||
if (size == 2 && opcode->opcode != 0xfc0000)
|
if (size == 2 && opcode->opcode != 0xfc0000)
|
||||||
{
|
{
|
||||||
/* Handle bra specially. Basically treat it like jmp so
|
/* Handle bra specially. Basically treat it like jmp so
|
||||||
|
@ -1061,18 +1080,18 @@ keep_going:
|
||||||
It is also important to not treat it like other bCC
|
It is also important to not treat it like other bCC
|
||||||
instructions since the long forms of bra is different
|
instructions since the long forms of bra is different
|
||||||
from other bCC instructions. */
|
from other bCC instructions. */
|
||||||
if (opcode->opcode == 0xea00)
|
if (opcode->opcode == 0xea00)
|
||||||
type = 8;
|
type = 8;
|
||||||
else
|
else
|
||||||
type = 0;
|
type = 0;
|
||||||
}
|
}
|
||||||
/* jsr */
|
/* jsr */
|
||||||
else if (size == 3 && opcode->opcode == 0xfd0000)
|
else if (size == 3 && opcode->opcode == 0xfd0000)
|
||||||
type = 6;
|
type = 6;
|
||||||
/* jmp */
|
/* jmp */
|
||||||
else if (size == 3 && opcode->opcode == 0xfc0000)
|
else if (size == 3 && opcode->opcode == 0xfc0000)
|
||||||
type = 8;
|
type = 8;
|
||||||
/* bCCx */
|
/* bCCx */
|
||||||
else
|
else
|
||||||
type = 3;
|
type = 3;
|
||||||
|
|
||||||
|
@ -1130,15 +1149,16 @@ keep_going:
|
||||||
int offset;
|
int offset;
|
||||||
fixS *fixP;
|
fixS *fixP;
|
||||||
|
|
||||||
reloc_howto = bfd_reloc_type_lookup (stdoutput, fixups[i].reloc);
|
reloc_howto = bfd_reloc_type_lookup (stdoutput,
|
||||||
|
fixups[i].reloc);
|
||||||
|
|
||||||
if (!reloc_howto)
|
if (!reloc_howto)
|
||||||
abort();
|
abort ();
|
||||||
|
|
||||||
size = bfd_get_reloc_size (reloc_howto);
|
size = bfd_get_reloc_size (reloc_howto);
|
||||||
|
|
||||||
if (size < 1 || size > 4)
|
if (size < 1 || size > 4)
|
||||||
abort();
|
abort ();
|
||||||
|
|
||||||
offset = 4 - size;
|
offset = 4 - size;
|
||||||
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset,
|
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset,
|
||||||
|
@ -1147,8 +1167,9 @@ keep_going:
|
||||||
reloc_howto->pc_relative,
|
reloc_howto->pc_relative,
|
||||||
fixups[i].reloc);
|
fixups[i].reloc);
|
||||||
|
|
||||||
/* PC-relative offsets are from the first byte of the next
|
/* PC-relative offsets are from the first byte of the
|
||||||
instruction, not from the start of the current instruction. */
|
next instruction, not from the start of the current
|
||||||
|
instruction. */
|
||||||
if (reloc_howto->pc_relative)
|
if (reloc_howto->pc_relative)
|
||||||
fixP->fx_offset += size;
|
fixP->fx_offset += size;
|
||||||
}
|
}
|
||||||
|
@ -1167,7 +1188,6 @@ keep_going:
|
||||||
/* Is the reloc pc-relative? */
|
/* Is the reloc pc-relative? */
|
||||||
pcrel = (operand->flags & MN10200_OPERAND_PCREL) != 0;
|
pcrel = (operand->flags & MN10200_OPERAND_PCREL) != 0;
|
||||||
|
|
||||||
|
|
||||||
/* Choose a proper BFD relocation type. */
|
/* Choose a proper BFD relocation type. */
|
||||||
if (pcrel)
|
if (pcrel)
|
||||||
{
|
{
|
||||||
|
@ -1192,7 +1212,8 @@ keep_going:
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert the size of the reloc into what fix_new_exp wants. */
|
/* Convert the size of the reloc into what fix_new_exp
|
||||||
|
wants. */
|
||||||
reloc_size = reloc_size / 8;
|
reloc_size = reloc_size / 8;
|
||||||
if (reloc_size == 8)
|
if (reloc_size == 8)
|
||||||
reloc_size = 0;
|
reloc_size = 0;
|
||||||
|
@ -1205,8 +1226,9 @@ keep_going:
|
||||||
reloc_size, &fixups[i].exp, pcrel,
|
reloc_size, &fixups[i].exp, pcrel,
|
||||||
((bfd_reloc_code_real_type) reloc));
|
((bfd_reloc_code_real_type) reloc));
|
||||||
|
|
||||||
/* PC-relative offsets are from the first byte of the next
|
/* PC-relative offsets are from the first byte of the
|
||||||
instruction, not from the start of the current instruction. */
|
next instruction, not from the start of the current
|
||||||
|
instruction. */
|
||||||
if (pcrel)
|
if (pcrel)
|
||||||
fixP->fx_offset += size;
|
fixP->fx_offset += size;
|
||||||
}
|
}
|
||||||
|
@ -1214,9 +1236,8 @@ keep_going:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If while processing a fixup, a reloc really needs to be created
|
||||||
/* if while processing a fixup, a reloc really needs to be created */
|
Then it is done here. */
|
||||||
/* then it is done here */
|
|
||||||
|
|
||||||
arelent *
|
arelent *
|
||||||
tc_gen_reloc (seg, fixp)
|
tc_gen_reloc (seg, fixp)
|
||||||
|
@ -1230,8 +1251,8 @@ tc_gen_reloc (seg, fixp)
|
||||||
if (reloc->howto == (reloc_howto_type *) NULL)
|
if (reloc->howto == (reloc_howto_type *) NULL)
|
||||||
{
|
{
|
||||||
as_bad_where (fixp->fx_file, fixp->fx_line,
|
as_bad_where (fixp->fx_file, fixp->fx_line,
|
||||||
_("reloc %d not supported by object file format"),
|
_("reloc %d not supported by object file format"),
|
||||||
(int)fixp->fx_r_type);
|
(int) fixp->fx_r_type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
||||||
|
@ -1294,7 +1315,7 @@ md_pcrel_from (fixp)
|
||||||
{
|
{
|
||||||
return fixp->fx_frag->fr_address;
|
return fixp->fx_frag->fr_address;
|
||||||
#if 0
|
#if 0
|
||||||
if (fixp->fx_addsy != (symbolS *) NULL && ! S_IS_DEFINED (fixp->fx_addsy))
|
if (fixp->fx_addsy != (symbolS *) NULL && !S_IS_DEFINED (fixp->fx_addsy))
|
||||||
{
|
{
|
||||||
/* The symbol is undefined. Let the linker figure it out. */
|
/* The symbol is undefined. Let the linker figure it out. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1340,14 +1361,13 @@ mn10200_insert_operand (insnp, extensionp, operand, val, file, line, shift)
|
||||||
min = - (1 << (operand->bits - 1));
|
min = - (1 << (operand->bits - 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
max = (1 << operand->bits) - 1;
|
max = (1 << operand->bits) - 1;
|
||||||
min = 0;
|
min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
{
|
{
|
||||||
const char *err =
|
const char *err =
|
||||||
|
@ -1397,14 +1417,13 @@ check_operand (insn, operand, val)
|
||||||
min = - (1 << (operand->bits - 1));
|
min = - (1 << (operand->bits - 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
max = (1 << operand->bits) - 1;
|
max = (1 << operand->bits) - 1;
|
||||||
min = 0;
|
min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,9 +34,10 @@ struct reg_name
|
||||||
|
|
||||||
struct dwarf2_line_info debug_line;
|
struct dwarf2_line_info debug_line;
|
||||||
|
|
||||||
/* Generic assembler global variables which must be defined by all targets. */
|
/* Generic assembler global variables which must be defined by all
|
||||||
|
targets. */
|
||||||
|
|
||||||
/* Characters which always start a comment. */
|
/* Characters which always start a comment. */
|
||||||
const char comment_chars[] = "#";
|
const char comment_chars[] = "#";
|
||||||
|
|
||||||
/* Characters which start a comment at the beginning of a line. */
|
/* Characters which start a comment at the beginning of a line. */
|
||||||
|
@ -54,34 +55,33 @@ const char EXP_CHARS[] = "eE";
|
||||||
as in 0d1.0. */
|
as in 0d1.0. */
|
||||||
const char FLT_CHARS[] = "dD";
|
const char FLT_CHARS[] = "dD";
|
||||||
|
|
||||||
|
|
||||||
const relax_typeS md_relax_table[] = {
|
const relax_typeS md_relax_table[] = {
|
||||||
/* bCC relaxing */
|
/* bCC relaxing */
|
||||||
{0x7f, -0x80, 2, 1},
|
{0x7f, -0x80, 2, 1},
|
||||||
{0x7fff, -0x8000, 5, 2},
|
{0x7fff, -0x8000, 5, 2},
|
||||||
{0x7fffffff, -0x80000000, 7, 0},
|
{0x7fffffff, -0x80000000, 7, 0},
|
||||||
|
|
||||||
/* bCC relaxing (uncommon cases) */
|
/* bCC relaxing (uncommon cases) */
|
||||||
{0x7f, -0x80, 3, 4},
|
{0x7f, -0x80, 3, 4},
|
||||||
{0x7fff, -0x8000, 6, 5},
|
{0x7fff, -0x8000, 6, 5},
|
||||||
{0x7fffffff, -0x80000000, 8, 0},
|
{0x7fffffff, -0x80000000, 8, 0},
|
||||||
|
|
||||||
/* call relaxing */
|
/* call relaxing */
|
||||||
{0x7fff, -0x8000, 5, 7},
|
{0x7fff, -0x8000, 5, 7},
|
||||||
{0x7fffffff, -0x80000000, 7, 0},
|
{0x7fffffff, -0x80000000, 7, 0},
|
||||||
|
|
||||||
/* calls relaxing */
|
/* calls relaxing */
|
||||||
{0x7fff, -0x8000, 4, 9},
|
{0x7fff, -0x8000, 4, 9},
|
||||||
{0x7fffffff, -0x80000000, 6, 0},
|
{0x7fffffff, -0x80000000, 6, 0},
|
||||||
|
|
||||||
/* jmp relaxing */
|
/* jmp relaxing */
|
||||||
{0x7f, -0x80, 2, 11},
|
{0x7f, -0x80, 2, 11},
|
||||||
{0x7fff, -0x8000, 3, 12},
|
{0x7fff, -0x8000, 3, 12},
|
||||||
{0x7fffffff, -0x80000000, 5, 0},
|
{0x7fffffff, -0x80000000, 5, 0},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* local functions */
|
/* Local functions. */
|
||||||
static void mn10300_insert_operand PARAMS ((unsigned long *, unsigned long *,
|
static void mn10300_insert_operand PARAMS ((unsigned long *, unsigned long *,
|
||||||
const struct mn10300_operand *,
|
const struct mn10300_operand *,
|
||||||
offsetT, char *, unsigned,
|
offsetT, char *, unsigned,
|
||||||
|
@ -97,7 +97,7 @@ static void set_arch_mach PARAMS ((int));
|
||||||
|
|
||||||
static int current_machine;
|
static int current_machine;
|
||||||
|
|
||||||
/* fixups */
|
/* Fixups. */
|
||||||
#define MAX_INSN_FIXUPS (5)
|
#define MAX_INSN_FIXUPS (5)
|
||||||
struct mn10300_fixup
|
struct mn10300_fixup
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ const char *md_shortopts = "";
|
||||||
struct option md_longopts[] = {
|
struct option md_longopts[] = {
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
size_t md_longopts_size = sizeof(md_longopts);
|
size_t md_longopts_size = sizeof (md_longopts);
|
||||||
|
|
||||||
/* The target specific pseudo-ops which we support. */
|
/* The target specific pseudo-ops which we support. */
|
||||||
const pseudo_typeS md_pseudo_table[] =
|
const pseudo_typeS md_pseudo_table[] =
|
||||||
|
@ -135,7 +135,7 @@ const pseudo_typeS md_pseudo_table[] =
|
||||||
/* Opcode hash table. */
|
/* Opcode hash table. */
|
||||||
static struct hash_control *mn10300_hash;
|
static struct hash_control *mn10300_hash;
|
||||||
|
|
||||||
/* This table is sorted. Suitable for searching by a binary search. */
|
/* This table is sorted. Suitable for searching by a binary search. */
|
||||||
static const struct reg_name data_registers[] =
|
static const struct reg_name data_registers[] =
|
||||||
{
|
{
|
||||||
{ "d0", 0 },
|
{ "d0", 0 },
|
||||||
|
@ -143,7 +143,8 @@ static const struct reg_name data_registers[] =
|
||||||
{ "d2", 2 },
|
{ "d2", 2 },
|
||||||
{ "d3", 3 },
|
{ "d3", 3 },
|
||||||
};
|
};
|
||||||
#define DATA_REG_NAME_CNT (sizeof(data_registers) / sizeof(struct reg_name))
|
#define DATA_REG_NAME_CNT \
|
||||||
|
(sizeof (data_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name address_registers[] =
|
static const struct reg_name address_registers[] =
|
||||||
{
|
{
|
||||||
|
@ -152,7 +153,9 @@ static const struct reg_name address_registers[] =
|
||||||
{ "a2", 2 },
|
{ "a2", 2 },
|
||||||
{ "a3", 3 },
|
{ "a3", 3 },
|
||||||
};
|
};
|
||||||
#define ADDRESS_REG_NAME_CNT (sizeof(address_registers) / sizeof(struct reg_name))
|
|
||||||
|
#define ADDRESS_REG_NAME_CNT \
|
||||||
|
(sizeof (address_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name r_registers[] =
|
static const struct reg_name r_registers[] =
|
||||||
{
|
{
|
||||||
|
@ -197,7 +200,9 @@ static const struct reg_name r_registers[] =
|
||||||
{ "r8", 8 },
|
{ "r8", 8 },
|
||||||
{ "r9", 9 },
|
{ "r9", 9 },
|
||||||
};
|
};
|
||||||
#define R_REG_NAME_CNT (sizeof(r_registers) / sizeof(struct reg_name))
|
|
||||||
|
#define R_REG_NAME_CNT \
|
||||||
|
(sizeof (r_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name xr_registers[] =
|
static const struct reg_name xr_registers[] =
|
||||||
{
|
{
|
||||||
|
@ -223,8 +228,9 @@ static const struct reg_name xr_registers[] =
|
||||||
{ "xr8", 8 },
|
{ "xr8", 8 },
|
||||||
{ "xr9", 9 },
|
{ "xr9", 9 },
|
||||||
};
|
};
|
||||||
#define XR_REG_NAME_CNT (sizeof(xr_registers) / sizeof(struct reg_name))
|
|
||||||
|
|
||||||
|
#define XR_REG_NAME_CNT \
|
||||||
|
(sizeof (xr_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
static const struct reg_name other_registers[] =
|
static const struct reg_name other_registers[] =
|
||||||
{
|
{
|
||||||
|
@ -232,11 +238,13 @@ static const struct reg_name other_registers[] =
|
||||||
{ "psw", 0 },
|
{ "psw", 0 },
|
||||||
{ "sp", 0 },
|
{ "sp", 0 },
|
||||||
};
|
};
|
||||||
#define OTHER_REG_NAME_CNT (sizeof(other_registers) / sizeof(struct reg_name))
|
|
||||||
|
#define OTHER_REG_NAME_CNT \
|
||||||
|
(sizeof (other_registers) / sizeof (struct reg_name))
|
||||||
|
|
||||||
/* reg_name_search does a binary search of the given register table
|
/* reg_name_search does a binary search of the given register table
|
||||||
to see if "name" is a valid regiter name. Returns the register
|
to see if "name" is a valid regiter name. Returns the register
|
||||||
number from the array on success, or -1 on failure. */
|
number from the array on success, or -1 on failure. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
reg_name_search (regs, regcount, name)
|
reg_name_search (regs, regcount, name)
|
||||||
|
@ -259,13 +267,12 @@ reg_name_search (regs, regcount, name)
|
||||||
else if (cmp > 0)
|
else if (cmp > 0)
|
||||||
low = middle + 1;
|
low = middle + 1;
|
||||||
else
|
else
|
||||||
return regs[middle].value;
|
return regs[middle].value;
|
||||||
}
|
}
|
||||||
while (low <= high);
|
while (low <= high);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Summary of register_name().
|
/* Summary of register_name().
|
||||||
*
|
*
|
||||||
* in: Input_line_pointer points to 1st char of operand.
|
* in: Input_line_pointer points to 1st char of operand.
|
||||||
|
@ -276,6 +283,7 @@ reg_name_search (regs, regcount, name)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
r_register_name (expressionP)
|
r_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -285,29 +293,34 @@ r_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (r_registers, R_REG_NAME_CNT, name);
|
reg_number = reg_name_search (r_registers, R_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,6 +335,7 @@ r_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
xr_register_name (expressionP)
|
xr_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -331,29 +345,34 @@ xr_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (xr_registers, XR_REG_NAME_CNT, name);
|
reg_number = reg_name_search (xr_registers, XR_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -368,6 +387,7 @@ xr_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
data_register_name (expressionP)
|
data_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -377,29 +397,34 @@ data_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (data_registers, DATA_REG_NAME_CNT, name);
|
reg_number = reg_name_search (data_registers, DATA_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -414,6 +439,7 @@ data_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
address_register_name (expressionP)
|
address_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -423,29 +449,35 @@ address_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (address_registers, ADDRESS_REG_NAME_CNT, name);
|
reg_number = reg_name_search (address_registers, ADDRESS_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -460,6 +492,7 @@ address_register_name (expressionP)
|
||||||
* Input_line_pointer->(next non-blank) char after operand, or is in
|
* Input_line_pointer->(next non-blank) char after operand, or is in
|
||||||
* its original state.
|
* its original state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
other_register_name (expressionP)
|
other_register_name (expressionP)
|
||||||
expressionS *expressionP;
|
expressionS *expressionP;
|
||||||
|
@ -469,38 +502,43 @@ other_register_name (expressionP)
|
||||||
char *start;
|
char *start;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
/* Find the spelling of the operand */
|
/* Find the spelling of the operand. */
|
||||||
start = name = input_line_pointer;
|
start = name = input_line_pointer;
|
||||||
|
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
reg_number = reg_name_search (other_registers, OTHER_REG_NAME_CNT, name);
|
reg_number = reg_name_search (other_registers, OTHER_REG_NAME_CNT, name);
|
||||||
|
|
||||||
/* look to see if it's in the register table */
|
/* Look to see if it's in the register table. */
|
||||||
if (reg_number >= 0)
|
if (reg_number >= 0)
|
||||||
{
|
{
|
||||||
expressionP->X_op = O_register;
|
expressionP->X_op = O_register;
|
||||||
expressionP->X_add_number = reg_number;
|
expressionP->X_add_number = reg_number;
|
||||||
|
|
||||||
/* make the rest nice */
|
/* Make the rest nice. */
|
||||||
expressionP->X_add_symbol = NULL;
|
expressionP->X_add_symbol = NULL;
|
||||||
expressionP->X_op_symbol = NULL;
|
expressionP->X_op_symbol = NULL;
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
|
||||||
|
/* Put back the delimiting char. */
|
||||||
|
*input_line_pointer = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* reset the line as if we had not done anything */
|
/* Reset the line as if we had not done anything. */
|
||||||
*input_line_pointer = c; /* put back the delimiting char */
|
/* Put back the delimiting char. */
|
||||||
input_line_pointer = start; /* reset input_line pointer */
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
/* Reset input_line pointer. */
|
||||||
|
input_line_pointer = start;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
md_show_usage (stream)
|
md_show_usage (stream)
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
{
|
{
|
||||||
fprintf(stream, _("MN10300 options:\n\
|
fprintf (stream, _("MN10300 options:\n\
|
||||||
none yet\n"));
|
none yet\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,16 +552,16 @@ md_parse_option (c, arg)
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
md_undefined_symbol (name)
|
md_undefined_symbol (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
md_atof (type, litp, sizep)
|
md_atof (type, litp, sizep)
|
||||||
int type;
|
int type;
|
||||||
char *litp;
|
char *litp;
|
||||||
int *sizep;
|
int *sizep;
|
||||||
{
|
{
|
||||||
int prec;
|
int prec;
|
||||||
LITTLENUM_TYPE words[4];
|
LITTLENUM_TYPE words[4];
|
||||||
|
@ -560,12 +598,11 @@ md_atof (type, litp, sizep)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
md_convert_frag (abfd, sec, fragP)
|
md_convert_frag (abfd, sec, fragP)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
asection *sec;
|
asection *sec;
|
||||||
fragS *fragP;
|
fragS *fragP;
|
||||||
{
|
{
|
||||||
static unsigned long label_count = 0;
|
static unsigned long label_count = 0;
|
||||||
char buf[40];
|
char buf[40];
|
||||||
|
@ -863,7 +900,7 @@ md_begin ()
|
||||||
char *prev_name = "";
|
char *prev_name = "";
|
||||||
register const struct mn10300_opcode *op;
|
register const struct mn10300_opcode *op;
|
||||||
|
|
||||||
mn10300_hash = hash_new();
|
mn10300_hash = hash_new ();
|
||||||
|
|
||||||
/* Insert unique names into hash table. The MN10300 instruction set
|
/* Insert unique names into hash table. The MN10300 instruction set
|
||||||
has many identical opcode names that have different opcodes based
|
has many identical opcode names that have different opcodes based
|
||||||
|
@ -908,13 +945,13 @@ md_assemble (str)
|
||||||
int match;
|
int match;
|
||||||
|
|
||||||
/* Get the opcode. */
|
/* Get the opcode. */
|
||||||
for (s = str; *s != '\0' && ! isspace (*s); s++)
|
for (s = str; *s != '\0' && !isspace (*s); s++)
|
||||||
;
|
;
|
||||||
if (*s != '\0')
|
if (*s != '\0')
|
||||||
*s++ = '\0';
|
*s++ = '\0';
|
||||||
|
|
||||||
/* find the first opcode with the proper name */
|
/* Find the first opcode with the proper name. */
|
||||||
opcode = (struct mn10300_opcode *)hash_find (mn10300_hash, str);
|
opcode = (struct mn10300_opcode *) hash_find (mn10300_hash, str);
|
||||||
if (opcode == NULL)
|
if (opcode == NULL)
|
||||||
{
|
{
|
||||||
as_bad (_("Unrecognized opcode: `%s'"), str);
|
as_bad (_("Unrecognized opcode: `%s'"), str);
|
||||||
|
@ -927,14 +964,13 @@ md_assemble (str)
|
||||||
|
|
||||||
input_line_pointer = str;
|
input_line_pointer = str;
|
||||||
|
|
||||||
for(;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
const char *errmsg;
|
const char *errmsg;
|
||||||
int op_idx;
|
int op_idx;
|
||||||
char *hold;
|
char *hold;
|
||||||
int extra_shift = 0;
|
int extra_shift = 0;
|
||||||
|
|
||||||
|
|
||||||
errmsg = _("Invalid opcode/operands");
|
errmsg = _("Invalid opcode/operands");
|
||||||
|
|
||||||
/* Reset the array of register operands. */
|
/* Reset the array of register operands. */
|
||||||
|
@ -977,7 +1013,7 @@ md_assemble (str)
|
||||||
if (operand->flags & MN10300_OPERAND_RELAX)
|
if (operand->flags & MN10300_OPERAND_RELAX)
|
||||||
relaxable = 1;
|
relaxable = 1;
|
||||||
|
|
||||||
/* Gather the operand. */
|
/* Gather the operand. */
|
||||||
hold = input_line_pointer;
|
hold = input_line_pointer;
|
||||||
input_line_pointer = str;
|
input_line_pointer = str;
|
||||||
|
|
||||||
|
@ -1174,8 +1210,8 @@ md_assemble (str)
|
||||||
input_line_pointer++;
|
input_line_pointer++;
|
||||||
|
|
||||||
/* We used to reject a null register list here; however,
|
/* We used to reject a null register list here; however,
|
||||||
we accept it now so the compiler can emit "call" instructions
|
we accept it now so the compiler can emit "call"
|
||||||
for all calls to named functions.
|
instructions for all calls to named functions.
|
||||||
|
|
||||||
The linker can then fill in the appropriate bits for the
|
The linker can then fill in the appropriate bits for the
|
||||||
register list and stack size or change the instruction
|
register list and stack size or change the instruction
|
||||||
|
@ -1336,7 +1372,6 @@ md_assemble (str)
|
||||||
ex.X_add_number, (char *) NULL,
|
ex.X_add_number, (char *) NULL,
|
||||||
0, extra_shift);
|
0, extra_shift);
|
||||||
|
|
||||||
|
|
||||||
/* And note the register number in the register array. */
|
/* And note the register number in the register array. */
|
||||||
mn10300_reg_operands[op_idx - 1] = ex.X_add_number;
|
mn10300_reg_operands[op_idx - 1] = ex.X_add_number;
|
||||||
break;
|
break;
|
||||||
|
@ -1348,7 +1383,7 @@ md_assemble (str)
|
||||||
then promote it (ie this opcode does not match). */
|
then promote it (ie this opcode does not match). */
|
||||||
if (operand->flags
|
if (operand->flags
|
||||||
& (MN10300_OPERAND_PROMOTE | MN10300_OPERAND_RELAX)
|
& (MN10300_OPERAND_PROMOTE | MN10300_OPERAND_RELAX)
|
||||||
&& ! check_operand (insn, operand, ex.X_add_number))
|
&& !check_operand (insn, operand, ex.X_add_number))
|
||||||
{
|
{
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
str = hold;
|
str = hold;
|
||||||
|
@ -1424,9 +1459,9 @@ keep_going:
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (match == 0)
|
if (match == 0)
|
||||||
{
|
{
|
||||||
next_opcode = opcode + 1;
|
next_opcode = opcode + 1;
|
||||||
if (!strcmp(next_opcode->name, opcode->name))
|
if (!strcmp (next_opcode->name, opcode->name))
|
||||||
{
|
{
|
||||||
opcode = next_opcode;
|
opcode = next_opcode;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1434,7 +1469,7 @@ keep_going:
|
||||||
|
|
||||||
as_bad ("%s", errmsg);
|
as_bad ("%s", errmsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1486,7 +1521,7 @@ keep_going:
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
/* bCC */
|
/* bCC */
|
||||||
if (size == 2)
|
if (size == 2)
|
||||||
{
|
{
|
||||||
/* Handle bra specially. Basically treat it like jmp so
|
/* Handle bra specially. Basically treat it like jmp so
|
||||||
|
@ -1501,16 +1536,16 @@ keep_going:
|
||||||
else
|
else
|
||||||
type = 0;
|
type = 0;
|
||||||
}
|
}
|
||||||
/* call */
|
/* call */
|
||||||
else if (size == 5)
|
else if (size == 5)
|
||||||
type = 6;
|
type = 6;
|
||||||
/* calls */
|
/* calls */
|
||||||
else if (size == 4)
|
else if (size == 4)
|
||||||
type = 8;
|
type = 8;
|
||||||
/* jmp */
|
/* jmp */
|
||||||
else if (size == 3 && opcode->opcode == 0xcc0000)
|
else if (size == 3 && opcode->opcode == 0xcc0000)
|
||||||
type = 10;
|
type = 10;
|
||||||
/* bCC (uncommon cases) */
|
/* bCC (uncommon cases) */
|
||||||
else
|
else
|
||||||
type = 3;
|
type = 3;
|
||||||
|
|
||||||
|
@ -1619,29 +1654,33 @@ keep_going:
|
||||||
else if (opcode->format == FMT_D4)
|
else if (opcode->format == FMT_D4)
|
||||||
{
|
{
|
||||||
unsigned long temp = ((insn & 0xffff) << 16) | (extension & 0xffff);
|
unsigned long temp = ((insn & 0xffff) << 16) | (extension & 0xffff);
|
||||||
|
|
||||||
number_to_chars_bigendian (f, (insn >> 16) & 0xffff, 2);
|
number_to_chars_bigendian (f, (insn >> 16) & 0xffff, 2);
|
||||||
number_to_chars_littleendian (f + 2, temp, 4);
|
number_to_chars_littleendian (f + 2, temp, 4);
|
||||||
}
|
}
|
||||||
else if (opcode->format == FMT_D5)
|
else if (opcode->format == FMT_D5)
|
||||||
{
|
{
|
||||||
unsigned long temp = ((insn & 0xffff) << 16)
|
unsigned long temp = (((insn & 0xffff) << 16)
|
||||||
| ((extension >> 8) & 0xffff);
|
| ((extension >> 8) & 0xffff));
|
||||||
|
|
||||||
number_to_chars_bigendian (f, (insn >> 16) & 0xffff, 2);
|
number_to_chars_bigendian (f, (insn >> 16) & 0xffff, 2);
|
||||||
number_to_chars_littleendian (f + 2, temp, 4);
|
number_to_chars_littleendian (f + 2, temp, 4);
|
||||||
number_to_chars_bigendian (f + 6, extension & 0xff, 1);
|
number_to_chars_bigendian (f + 6, extension & 0xff, 1);
|
||||||
}
|
}
|
||||||
else if (opcode->format == FMT_D8)
|
else if (opcode->format == FMT_D8)
|
||||||
{
|
{
|
||||||
unsigned long temp = ((insn & 0xff) << 16) | (extension & 0xffff);
|
unsigned long temp = ((insn & 0xff) << 16) | (extension & 0xffff);
|
||||||
number_to_chars_bigendian (f, (insn >> 8) & 0xffffff, 3);
|
|
||||||
number_to_chars_bigendian (f + 3, (temp & 0xff), 1);
|
number_to_chars_bigendian (f, (insn >> 8) & 0xffffff, 3);
|
||||||
number_to_chars_littleendian (f + 4, temp >> 8, 2);
|
number_to_chars_bigendian (f + 3, (temp & 0xff), 1);
|
||||||
|
number_to_chars_littleendian (f + 4, temp >> 8, 2);
|
||||||
}
|
}
|
||||||
else if (opcode->format == FMT_D9)
|
else if (opcode->format == FMT_D9)
|
||||||
{
|
{
|
||||||
unsigned long temp = ((insn & 0xff) << 24) | (extension & 0xffffff);
|
unsigned long temp = ((insn & 0xff) << 24) | (extension & 0xffffff);
|
||||||
number_to_chars_bigendian (f, (insn >> 8) & 0xffffff, 3);
|
|
||||||
number_to_chars_littleendian (f + 3, temp, 4);
|
number_to_chars_bigendian (f, (insn >> 8) & 0xffffff, 3);
|
||||||
|
number_to_chars_littleendian (f + 3, temp, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create any fixups. */
|
/* Create any fixups. */
|
||||||
|
@ -1657,15 +1696,16 @@ keep_going:
|
||||||
int offset;
|
int offset;
|
||||||
fixS *fixP;
|
fixS *fixP;
|
||||||
|
|
||||||
reloc_howto = bfd_reloc_type_lookup (stdoutput, fixups[i].reloc);
|
reloc_howto = bfd_reloc_type_lookup (stdoutput,
|
||||||
|
fixups[i].reloc);
|
||||||
|
|
||||||
if (!reloc_howto)
|
if (!reloc_howto)
|
||||||
abort();
|
abort ();
|
||||||
|
|
||||||
size = bfd_get_reloc_size (reloc_howto);
|
size = bfd_get_reloc_size (reloc_howto);
|
||||||
|
|
||||||
if (size < 1 || size > 4)
|
if (size < 1 || size > 4)
|
||||||
abort();
|
abort ();
|
||||||
|
|
||||||
offset = 4 - size;
|
offset = 4 - size;
|
||||||
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset,
|
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset,
|
||||||
|
@ -1769,9 +1809,8 @@ keep_going:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If while processing a fixup, a reloc really needs to be created
|
||||||
/* if while processing a fixup, a reloc really needs to be created */
|
then it is done here. */
|
||||||
/* then it is done here */
|
|
||||||
|
|
||||||
arelent *
|
arelent *
|
||||||
tc_gen_reloc (seg, fixp)
|
tc_gen_reloc (seg, fixp)
|
||||||
|
@ -1785,8 +1824,8 @@ tc_gen_reloc (seg, fixp)
|
||||||
if (reloc->howto == (reloc_howto_type *) NULL)
|
if (reloc->howto == (reloc_howto_type *) NULL)
|
||||||
{
|
{
|
||||||
as_bad_where (fixp->fx_file, fixp->fx_line,
|
as_bad_where (fixp->fx_file, fixp->fx_line,
|
||||||
_("reloc %d not supported by object file format"),
|
_("reloc %d not supported by object file format"),
|
||||||
(int)fixp->fx_r_type);
|
(int) fixp->fx_r_type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
||||||
|
@ -1808,7 +1847,7 @@ tc_gen_reloc (seg, fixp)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof( asymbol *));
|
reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
|
||||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
||||||
reloc->addend = fixp->fx_offset;
|
reloc->addend = fixp->fx_offset;
|
||||||
}
|
}
|
||||||
|
@ -1865,7 +1904,7 @@ md_pcrel_from (fixp)
|
||||||
{
|
{
|
||||||
return fixp->fx_frag->fr_address;
|
return fixp->fx_frag->fr_address;
|
||||||
#if 0
|
#if 0
|
||||||
if (fixp->fx_addsy != (symbolS *) NULL && ! S_IS_DEFINED (fixp->fx_addsy))
|
if (fixp->fx_addsy != (symbolS *) NULL && !S_IS_DEFINED (fixp->fx_addsy))
|
||||||
{
|
{
|
||||||
/* The symbol is undefined. Let the linker figure it out. */
|
/* The symbol is undefined. Let the linker figure it out. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1917,26 +1956,25 @@ mn10300_insert_operand (insnp, extensionp, operand, val, file, line, shift)
|
||||||
min = - (1 << (bits - 1));
|
min = - (1 << (bits - 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
max = (1 << bits) - 1;
|
max = (1 << bits) - 1;
|
||||||
min = 0;
|
min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
{
|
{
|
||||||
const char *err =
|
const char *err =
|
||||||
_("operand out of range (%s not between %ld and %ld)");
|
_("operand out of range (%s not between %ld and %ld)");
|
||||||
char buf[100];
|
char buf[100];
|
||||||
|
|
||||||
sprint_value (buf, test);
|
sprint_value (buf, test);
|
||||||
if (file == (char *) NULL)
|
if (file == (char *) NULL)
|
||||||
as_warn (err, buf, min, max);
|
as_warn (err, buf, min, max);
|
||||||
else
|
else
|
||||||
as_warn_where (file, line, err, buf, min, max);
|
as_warn_where (file, line, err, buf, min, max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((operand->flags & MN10300_OPERAND_SPLIT) != 0)
|
if ((operand->flags & MN10300_OPERAND_SPLIT) != 0)
|
||||||
|
@ -1996,14 +2034,13 @@ check_operand (insn, operand, val)
|
||||||
min = - (1 << (bits - 1));
|
min = - (1 << (bits - 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
max = (1 << bits) - 1;
|
max = (1 << bits) - 1;
|
||||||
min = 0;
|
min = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue