projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[AArch64][SVE 08/32] Generalise aarch64_double_precision_fmovable
[deliverable/binutils-gdb.git]
/
gas
/
config
/
tc-z8k.c
diff --git
a/gas/config/tc-z8k.c
b/gas/config/tc-z8k.c
index 5be02605387fcd5b3fb0e4b7e0779c6993b39176..9b6ee3867a5761f790938db9db198a3635e8887d 100644
(file)
--- a/
gas/config/tc-z8k.c
+++ b/
gas/config/tc-z8k.c
@@
-1,6
+1,5
@@
/* tc-z8k.c -- Assemble code for the Zilog Z800n
/* tc-z8k.c -- Assemble code for the Zilog Z800n
- Copyright 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2003,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1992-2016 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
This file is part of GAS, the GNU Assembler.
@@
-34,7
+33,8
@@
extern int machine;
extern int coff_flags;
int segmented_mode;
extern int coff_flags;
int segmented_mode;
-/* This is non-zero if target was set from the command line. */
+/* This is non-zero if target was set from the command line.
+ If non-zero, 1 means Z8002 (non-segmented), 2 means Z8001 (segmented). */
static int z8k_target_from_cmdline;
static void
static int z8k_target_from_cmdline;
static void
@@
-156,14
+156,13
@@
md_begin (void)
}
/* Default to z8002. */
}
/* Default to z8002. */
- if (! z8k_target_from_cmdline)
- s_segm (0);
+ s_segm (z8k_target_from_cmdline ? z8k_target_from_cmdline - 1 : 0);
/* Insert the pseudo ops, too. */
for (idx = 0; md_pseudo_table[idx].poc_name; idx++)
{
opcode_entry_type *fake_opcode;
/* Insert the pseudo ops, too. */
for (idx = 0; md_pseudo_table[idx].poc_name; idx++)
{
opcode_entry_type *fake_opcode;
- fake_opcode =
(opcode_entry_type *) malloc (sizeof (opcode_entry_type)
);
+ fake_opcode =
XNEW (opcode_entry_type
);
fake_opcode->name = md_pseudo_table[idx].poc_name;
fake_opcode->func = (void *) (md_pseudo_table + idx);
fake_opcode->opcode = 250;
fake_opcode->name = md_pseudo_table[idx].poc_name;
fake_opcode->func = (void *) (md_pseudo_table + idx);
fake_opcode->opcode = 250;
@@
-203,7
+202,7
@@
static int the_interrupt;
number. */
static char *
number. */
static char *
-whatreg (unsigned int *reg, char *src)
+whatreg (unsigned int *
p
reg, char *src)
{
unsigned int new_reg;
{
unsigned int new_reg;
@@
-222,7
+221,7
@@
whatreg (unsigned int *reg, char *src)
if (src[0] != 0 && src[0] != ',' && src[0] != '(' && src[0] != ')')
return NULL;
if (src[0] != 0 && src[0] != ',' && src[0] != '(' && src[0] != ')')
return NULL;
- *reg = new_reg;
+ *
p
reg = new_reg;
return src;
}
return src;
}
@@
-244,7
+243,7
@@
whatreg (unsigned int *reg, char *src)
in SRC after the reg name. */
static char *
in SRC after the reg name. */
static char *
-parse_reg (char *src, int *mode, unsigned int *reg)
+parse_reg (char *src, int *mode, unsigned int *
p
reg)
{
char *res = NULL;
char regno;
{
char *res = NULL;
char regno;
@@
-257,12
+256,12
@@
parse_reg (char *src, int *mode, unsigned int *reg)
if (segmented_mode)
{
*mode = CLASS_REG_LONG;
if (segmented_mode)
{
*mode = CLASS_REG_LONG;
- *reg = 14;
+ *
p
reg = 14;
}
else
{
*mode = CLASS_REG_WORD;
}
else
{
*mode = CLASS_REG_WORD;
- *reg = 15;
+ *
p
reg = 15;
}
return src + 2;
}
}
return src + 2;
}
@@
-274,10
+273,10
@@
parse_reg (char *src, int *mode, unsigned int *reg)
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rr'. */
*mode = CLASS_REG_LONG;
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rr'. */
*mode = CLASS_REG_LONG;
- res = whatreg (reg, src + 2);
+ res = whatreg (
p
reg, src + 2);
if (res == NULL)
return NULL; /* Not a valid register name. */
if (res == NULL)
return NULL; /* Not a valid register name. */
- regno = *reg;
+ regno = *
p
reg;
if (regno > 14)
as_bad (_("register rr%d out of range"), regno);
if (regno & 1)
if (regno > 14)
as_bad (_("register rr%d out of range"), regno);
if (regno & 1)
@@
-288,10
+287,10
@@
parse_reg (char *src, int *mode, unsigned int *reg)
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rh'. */
*mode = CLASS_REG_BYTE;
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rh'. */
*mode = CLASS_REG_BYTE;
- res = whatreg (reg, src + 2);
+ res = whatreg (
p
reg, src + 2);
if (res == NULL)
return NULL; /* Not a valid register name. */
if (res == NULL)
return NULL; /* Not a valid register name. */
- regno = *reg;
+ regno = *
p
reg;
if (regno > 7)
as_bad (_("register rh%d out of range"), regno);
}
if (regno > 7)
as_bad (_("register rh%d out of range"), regno);
}
@@
-300,23
+299,23
@@
parse_reg (char *src, int *mode, unsigned int *reg)
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rl'. */
*mode = CLASS_REG_BYTE;
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rl'. */
*mode = CLASS_REG_BYTE;
- res = whatreg (reg, src + 2);
+ res = whatreg (
p
reg, src + 2);
if (res == NULL)
return NULL; /* Not a valid register name. */
if (res == NULL)
return NULL; /* Not a valid register name. */
- regno = *reg;
+ regno = *
p
reg;
if (regno > 7)
as_bad (_("register rl%d out of range"), regno);
if (regno > 7)
as_bad (_("register rl%d out of range"), regno);
- *reg += 8;
+ *
p
reg += 8;
}
else if (src[1] == 'q' || src[1] == 'Q')
{
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rq'. */
*mode = CLASS_REG_QUAD;
}
else if (src[1] == 'q' || src[1] == 'Q')
{
if (src[2] < '0' || src[2] > '9')
return NULL; /* Assume no register name but a label starting with 'rq'. */
*mode = CLASS_REG_QUAD;
- res = whatreg (reg, src + 2);
+ res = whatreg (
p
reg, src + 2);
if (res == NULL)
return NULL; /* Not a valid register name. */
if (res == NULL)
return NULL; /* Not a valid register name. */
- regno = *reg;
+ regno = *
p
reg;
if (regno > 12)
as_bad (_("register rq%d out of range"), regno);
if (regno & 3)
if (regno > 12)
as_bad (_("register rq%d out of range"), regno);
if (regno & 3)
@@
-327,10
+326,10
@@
parse_reg (char *src, int *mode, unsigned int *reg)
if (src[1] < '0' || src[1] > '9')
return NULL; /* Assume no register name but a label starting with 'r'. */
*mode = CLASS_REG_WORD;
if (src[1] < '0' || src[1] > '9')
return NULL; /* Assume no register name but a label starting with 'r'. */
*mode = CLASS_REG_WORD;
- res = whatreg (reg, src + 1);
+ res = whatreg (
p
reg, src + 1);
if (res == NULL)
return NULL; /* Not a valid register name. */
if (res == NULL)
return NULL; /* Not a valid register name. */
- regno = *reg;
+ regno = *
p
reg;
if (regno > 15)
as_bad (_("register r%d out of range"), regno);
}
if (regno > 15)
as_bad (_("register r%d out of range"), regno);
}
@@
-381,7
+380,7
@@
checkfor (char *ptr, char what)
/* Make sure the mode supplied is the size of a word. */
static void
/* Make sure the mode supplied is the size of a word. */
static void
-regword (int mode, char *string)
+regword (int mode, c
onst c
har *string)
{
int ok;
{
int ok;
@@
-395,7
+394,7
@@
regword (int mode, char *string)
/* Make sure the mode supplied is the size of an address. */
static void
/* Make sure the mode supplied is the size of an address. */
static void
-regaddr (int mode, char *string)
+regaddr (int mode, c
onst c
har *string)
{
int ok;
{
int ok;
@@
-408,7
+407,7
@@
regaddr (int mode, char *string)
struct ctrl_names {
int value;
struct ctrl_names {
int value;
- char *name;
+ c
onst c
har *name;
};
static struct ctrl_names ctrl_table[] = {
};
static struct ctrl_names ctrl_table[] = {
@@
-451,7
+450,7
@@
get_ctrl_operand (char **ptr, struct z8k_op *mode, unsigned int dst ATTRIBUTE_UN
struct flag_names {
int value;
struct flag_names {
int value;
- char *name;
+ c
onst c
har *name;
};
static struct flag_names flag_table[] = {
};
static struct flag_names flag_table[] = {
@@
-501,7
+500,7
@@
get_flags_operand (char **ptr, struct z8k_op *mode, unsigned int dst ATTRIBUTE_U
struct interrupt_names {
int value;
struct interrupt_names {
int value;
- char *name;
+ c
onst c
har *name;
};
static struct interrupt_names intr_table[] = {
};
static struct interrupt_names intr_table[] = {
@@
-565,7
+564,7
@@
get_interrupt_operand (char **ptr, struct z8k_op *mode, unsigned int dst ATTRIBU
struct cc_names {
int value;
struct cc_names {
int value;
- char *name;
+ c
onst c
har *name;
};
static struct cc_names table[] = {
};
static struct cc_names table[] = {
@@
-957,9
+956,8
@@
get_specific (opcode_entry_type *opcode, op_type *operands)
static char buffer[20];
static void
static char buffer[20];
static void
-newfix (int ptr,
int
type, int size, expressionS *operand)
+newfix (int ptr,
bfd_reloc_code_real_type
type, int size, expressionS *operand)
{
{
- int is_pcrel = 0;
fixS *fixP;
/* Size is in nibbles. */
fixS *fixP;
/* Size is in nibbles. */
@@
-967,12
+965,17
@@
newfix (int ptr, int type, int size, expressionS *operand)
|| operand->X_op_symbol
|| operand->X_add_number)
{
|| operand->X_op_symbol
|| operand->X_add_number)
{
+ int is_pcrel;
switch(type)
{
case BFD_RELOC_8_PCREL:
case BFD_RELOC_Z8K_CALLR:
case BFD_RELOC_Z8K_DISP7:
is_pcrel = 1;
switch(type)
{
case BFD_RELOC_8_PCREL:
case BFD_RELOC_Z8K_CALLR:
case BFD_RELOC_Z8K_DISP7:
is_pcrel = 1;
+ break;
+ default:
+ is_pcrel = 0;
+ break;
}
fixP = fix_new_exp (frag_now, ptr, size / 2,
operand, is_pcrel, type);
}
fixP = fix_new_exp (frag_now, ptr, size / 2,
operand, is_pcrel, type);
@@
-982,7
+985,8
@@
newfix (int ptr, int type, int size, expressionS *operand)
}
static char *
}
static char *
-apply_fix (char *ptr, int type, expressionS *operand, int size)
+apply_fix (char *ptr, bfd_reloc_code_real_type type, expressionS *operand,
+ int size)
{
long n = operand->X_add_number;
{
long n = operand->X_add_number;
@@
-1286,7
+1290,7
@@
md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
/* Various routines to kill one day. */
/* Various routines to kill one day. */
-char *
+c
onst c
har *
md_atof (int type, char *litP, int *sizeP)
{
return ieee_md_atof (type, litP, sizeP, TRUE);
md_atof (int type, char *litP, int *sizeP)
{
return ieee_md_atof (type, litP, sizeP, TRUE);
@@
-1304,21
+1308,20
@@
struct option md_longopts[] =
size_t md_longopts_size = sizeof (md_longopts);
int
size_t md_longopts_size = sizeof (md_longopts);
int
-md_parse_option (int c, char *arg)
+md_parse_option (int c, c
onst c
har *arg)
{
switch (c)
{
case 'z':
if (!strcmp (arg, "8001"))
{
switch (c)
{
case 'z':
if (!strcmp (arg, "8001"))
-
s_segm (1)
;
+
z8k_target_from_cmdline = 2
;
else if (!strcmp (arg, "8002"))
else if (!strcmp (arg, "8002"))
-
s_segm (0)
;
+
z8k_target_from_cmdline = 1
;
else
{
as_bad (_("invalid architecture -z%s"), arg);
return 0;
}
else
{
as_bad (_("invalid architecture -z%s"), arg);
return 0;
}
- z8k_target_from_cmdline = 1;
break;
case OPTION_RELAX:
break;
case OPTION_RELAX:
@@
-1359,8
+1362,8
@@
tc_gen_reloc (asection *section ATTRIBUTE_UNUSED,
{
arelent *reloc;
{
arelent *reloc;
- reloc =
xmalloc (sizeof (*reloc)
);
- reloc->sym_ptr_ptr =
xmalloc (sizeof (asymbol *)
);
+ reloc =
XNEW (arelent
);
+ reloc->sym_ptr_ptr =
XNEW (asymbol *
);
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
reloc->addend = fixp->fx_offset;
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
reloc->addend = fixp->fx_offset;
This page took
0.028594 seconds
and
4
git commands to generate.