Fix formatting.
This commit is contained in:
parent
8098403c53
commit
87271fa61d
3 changed files with 322 additions and 264 deletions
|
@ -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,7 +31,8 @@ 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[] = "#";
|
||||||
|
@ -51,7 +52,6 @@ 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},
|
||||||
|
@ -70,7 +70,8 @@ const relax_typeS md_relax_table[] = {
|
||||||
{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[] =
|
||||||
|
@ -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,14 +128,16 @@ 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
|
||||||
|
@ -167,7 +170,6 @@ reg_name_search (regs, regcount, name)
|
||||||
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,29 +294,34 @@ 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -310,7 +330,7 @@ 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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +390,6 @@ 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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -1012,7 +1031,7 @@ keep_going:
|
||||||
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;
|
||||||
|
@ -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)
|
||||||
|
@ -1231,7 +1252,7 @@ tc_gen_reloc (seg, fixp)
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
@ -1347,7 +1368,6 @@ mn10200_insert_operand (insnp, extensionp, operand, val, file, line, shift)
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
{
|
{
|
||||||
const char *err =
|
const char *err =
|
||||||
|
@ -1404,7 +1424,6 @@ check_operand (insn, operand, val)
|
||||||
|
|
||||||
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,7 +34,8 @@ 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[] = "#";
|
||||||
|
@ -54,7 +55,6 @@ 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},
|
||||||
|
@ -81,7 +81,7 @@ const relax_typeS md_relax_table[] = {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 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[] =
|
||||||
|
@ -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,7 +238,9 @@ 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
|
||||||
|
@ -265,7 +273,6 @@ reg_name_search (regs, regcount, name)
|
||||||
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,29 +502,34 @@ 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -500,7 +538,7 @@ 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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,7 +598,6 @@ 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;
|
||||||
|
@ -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. */
|
||||||
|
@ -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;
|
||||||
|
@ -1426,7 +1461,7 @@ keep_going:
|
||||||
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;
|
||||||
|
@ -1619,13 +1654,15 @@ 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);
|
||||||
|
@ -1633,6 +1670,7 @@ keep_going:
|
||||||
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, (insn >> 8) & 0xffffff, 3);
|
||||||
number_to_chars_bigendian (f + 3, (temp & 0xff), 1);
|
number_to_chars_bigendian (f + 3, (temp & 0xff), 1);
|
||||||
number_to_chars_littleendian (f + 4, temp >> 8, 2);
|
number_to_chars_littleendian (f + 4, temp >> 8, 2);
|
||||||
|
@ -1640,6 +1678,7 @@ keep_going:
|
||||||
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_bigendian (f, (insn >> 8) & 0xffffff, 3);
|
||||||
number_to_chars_littleendian (f + 3, temp, 4);
|
number_to_chars_littleendian (f + 3, temp, 4);
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -1786,7 +1825,7 @@ tc_gen_reloc (seg, fixp)
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
@ -1924,7 +1963,6 @@ mn10300_insert_operand (insnp, extensionp, operand, val, file, line, shift)
|
||||||
|
|
||||||
test = val;
|
test = val;
|
||||||
|
|
||||||
|
|
||||||
if (test < (offsetT) min || test > (offsetT) max)
|
if (test < (offsetT) min || test > (offsetT) max)
|
||||||
{
|
{
|
||||||
const char *err =
|
const char *err =
|
||||||
|
@ -2003,7 +2041,6 @@ check_operand (insn, operand, val)
|
||||||
|
|
||||||
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…
Add table
Add a link
Reference in a new issue