* pj.h (pj_opc_info_t): Add union.
* pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change. * config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype. (c_to_r, ipush_code, fake_opcode, alias): Likewise. (fake_opcode): Adjust for pj_opc_int_t change. (md_begin): Likewise. (md_assemble): Likewise. (ipush_code): Correct parse_exp_save_ilp call. Test pending_reloc instead of non-existent third arg of parse_exp_save_ilp. (md_parse_option): Correct "little" and "big" calls.
This commit is contained in:
parent
a798260029
commit
0e073f4ce8
6 changed files with 50 additions and 17 deletions
|
@ -1,5 +1,13 @@
|
|||
2002-12-13 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype.
|
||||
(c_to_r, ipush_code, fake_opcode, alias): Likewise.
|
||||
(fake_opcode): Adjust for pj_opc_int_t change.
|
||||
(md_begin): Likewise.
|
||||
(md_assemble): Likewise.
|
||||
(ipush_code): Correct parse_exp_save_ilp call. Test pending_reloc
|
||||
instead of non-existent third arg of parse_exp_save_ilp.
|
||||
(md_parse_option): Correct "little" and "big" calls.
|
||||
* config/tc-sparc.c (s_register): Only declare #ifdef OBJ_ELF.
|
||||
(md_apply_fix3 <segment>): Add ATTRIBUTE_UNUSED.
|
||||
(tc_gen_reloc <section>): Likewise.
|
||||
|
|
|
@ -34,6 +34,21 @@ const char line_comment_chars[] = "/!#";
|
|||
static int pending_reloc;
|
||||
static struct hash_control *opcode_hash_control;
|
||||
|
||||
static void little
|
||||
PARAMS ((int));
|
||||
static void big
|
||||
PARAMS ((int));
|
||||
static char *parse_exp_save_ilp
|
||||
PARAMS ((char *, expressionS *));
|
||||
static int c_to_r
|
||||
PARAMS ((char));
|
||||
static void ipush_code
|
||||
PARAMS ((pj_opc_info_t *, char *));
|
||||
static void fake_opcode
|
||||
PARAMS ((const char *, void (*) (struct pj_opc_info_t *, char *)));
|
||||
static void alias
|
||||
PARAMS ((const char *, const char *));
|
||||
|
||||
static void
|
||||
little (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
|
@ -155,15 +170,17 @@ ipush_code (opcode, str)
|
|||
pj_opc_info_t *opcode ATTRIBUTE_UNUSED;
|
||||
char *str;
|
||||
{
|
||||
int mod = 0;
|
||||
char *b = frag_more (6);
|
||||
expressionS arg;
|
||||
|
||||
b[0] = 0x11;
|
||||
b[3] = 0xed;
|
||||
parse_exp_save_ilp (str + 1, &arg, &mod);
|
||||
if (mod)
|
||||
as_bad (_("can't have relocation for ipush"));
|
||||
parse_exp_save_ilp (str + 1, &arg);
|
||||
if (pending_reloc)
|
||||
{
|
||||
as_bad (_("can't have relocation for ipush"));
|
||||
pending_reloc = 0;
|
||||
}
|
||||
|
||||
fix_new_exp (frag_now, b - frag_now->fr_literal + 1, 2,
|
||||
&arg, 0, BFD_RELOC_PJ_CODE_DIR16);
|
||||
|
@ -177,13 +194,13 @@ ipush_code (opcode, str)
|
|||
static void
|
||||
fake_opcode (name, func)
|
||||
const char *name;
|
||||
void (*func) ();
|
||||
void (*func) PARAMS ((struct pj_opc_info_t *, char *));
|
||||
{
|
||||
pj_opc_info_t *fake = (pj_opc_info_t *) xmalloc (sizeof (pj_opc_info_t));
|
||||
|
||||
fake->opcode = -1;
|
||||
fake->opcode_next = -1;
|
||||
fake->name = (const char *) func;
|
||||
fake->u.func = func;
|
||||
hash_insert (opcode_hash_control, name, (char *) fake);
|
||||
}
|
||||
|
||||
|
@ -210,8 +227,8 @@ md_begin ()
|
|||
opcode_hash_control = hash_new ();
|
||||
|
||||
/* Insert names into hash table. */
|
||||
for (opcode = pj_opc_info; opcode->name; opcode++)
|
||||
hash_insert (opcode_hash_control, opcode->name, (char *) opcode);
|
||||
for (opcode = pj_opc_info; opcode->u.name; opcode++)
|
||||
hash_insert (opcode_hash_control, opcode->u.name, (char *) opcode);
|
||||
|
||||
/* Insert the only fake opcode. */
|
||||
fake_opcode ("ipush", ipush_code);
|
||||
|
@ -278,7 +295,7 @@ md_assemble (str)
|
|||
{
|
||||
/* It's a fake opcode. Dig out the args and pretend that was
|
||||
what we were passed. */
|
||||
((void (*) ()) opcode->name) (opcode, op_end);
|
||||
(*opcode->u.func) (opcode, op_end);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -404,10 +421,10 @@ md_parse_option (c, arg)
|
|||
switch (c)
|
||||
{
|
||||
case OPTION_LITTLE:
|
||||
little ();
|
||||
little (0);
|
||||
break;
|
||||
case OPTION_BIG:
|
||||
big ();
|
||||
big (0);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2002-12-13 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* pj.h (pj_opc_info_t): Add union.
|
||||
|
||||
2002-12-04 David Mosberger <davidm@hpl.hp.com>
|
||||
|
||||
* ia64.h: Fix copyright message.
|
||||
|
|
|
@ -36,11 +36,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
#define UNS(x) (!!((x) & (1<<3)))
|
||||
|
||||
|
||||
typedef struct
|
||||
typedef struct pj_opc_info_t
|
||||
{
|
||||
short opcode;
|
||||
short opcode_next;
|
||||
char len;
|
||||
unsigned char arg[2];
|
||||
const char *name;
|
||||
union {
|
||||
const char *name;
|
||||
void (*func) PARAMS ((struct pj_opc_info_t *, char *));
|
||||
} u;
|
||||
} pj_opc_info_t;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
2002-12-13 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change.
|
||||
* z8kgen.c: Include "libiberty.h".
|
||||
(opt, args, toks): Fix initializer warnings.
|
||||
(chewname): Make "name" a char **. Return mnemonic trimmed of
|
||||
|
|
|
@ -62,7 +62,7 @@ print_insn_pj (addr, info)
|
|||
unsigned char byte_2;
|
||||
if ((status = info->read_memory_func (addr + 1, &byte_2, 1, info)))
|
||||
goto fail;
|
||||
fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].name);
|
||||
fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].u.name);
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
|
@ -72,12 +72,12 @@ print_insn_pj (addr, info)
|
|||
const pj_opc_info_t *op = &pj_opc_info[opcode];
|
||||
int a;
|
||||
addr++;
|
||||
fprintf_fn (stream, "%s", op->name);
|
||||
fprintf_fn (stream, "%s", op->u.name);
|
||||
|
||||
/* The tableswitch instruction is followed by the default
|
||||
address, low value, high value and the destinations. */
|
||||
|
||||
if (strcmp (op->name, "tableswitch") == 0)
|
||||
if (strcmp (op->u.name, "tableswitch") == 0)
|
||||
{
|
||||
int lowval;
|
||||
int highval;
|
||||
|
@ -116,7 +116,7 @@ print_insn_pj (addr, info)
|
|||
address, element count and pairs of values and
|
||||
addresses. */
|
||||
|
||||
if (strcmp (op->name, "lookupswitch") == 0)
|
||||
if (strcmp (op->u.name, "lookupswitch") == 0)
|
||||
{
|
||||
int count;
|
||||
int val;
|
||||
|
|
Loading…
Add table
Reference in a new issue