mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
CSKY: Support option -mfloat-abi.
The option corresponds to GCC to control the float calling conversion, and the value will be stored in .csky.attributes section. Co-Authored-By: Lifang Xia <lifang_xia@c-sky.com> gas/ * config/tc-csky.c (float_abi): New. (md_longopts): Add mfloat-abi. (struct sky_option_value_table): New. (csky_float_abis): New, the possible values for -mfloat-abi. (parse_float_abi): New funtion. (md_show_usage): Show help information for -mfloat-abi. (set_csky_attribute): Store float-abi value.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com>
|
||||||
|
|
||||||
|
* config/tc-csky.c (float_abi): New.
|
||||||
|
(md_longopts): Add mfloat-abi.
|
||||||
|
(struct sky_option_value_table): New.
|
||||||
|
(csky_float_abis): New, the possible values for -mfloat-abi.
|
||||||
|
(parse_float_abi): New funtion.
|
||||||
|
(md_show_usage): Show help information for -mfloat-abi.
|
||||||
|
(set_csky_attribute): Store float-abi value.
|
||||||
|
|
||||||
2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com>
|
2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com>
|
||||||
|
|
||||||
* config/tc-csky.c (float_work_fpuv3_fmovi): New function,
|
* config/tc-csky.c (float_work_fpuv3_fmovi): New function,
|
||||||
|
@ -463,6 +463,7 @@ static int do_func_dump = 0; /* dump literals after every function. */
|
|||||||
static int do_br_dump = 1; /* work for -mabr/-mno-abr, control the literals dump. */
|
static int do_br_dump = 1; /* work for -mabr/-mno-abr, control the literals dump. */
|
||||||
static int do_intr_stack = -1; /* control interrupt stack module, 801&802&803
|
static int do_intr_stack = -1; /* control interrupt stack module, 801&802&803
|
||||||
default on, 807&810, default off. */
|
default on, 807&810, default off. */
|
||||||
|
static int float_abi = 0;
|
||||||
|
|
||||||
#ifdef INCLUDE_BRANCH_STUB
|
#ifdef INCLUDE_BRANCH_STUB
|
||||||
static int do_use_branchstub = -1;
|
static int do_use_branchstub = -1;
|
||||||
@ -750,6 +751,8 @@ struct option md_longopts[] = {
|
|||||||
{"march", required_argument, NULL, OPTION_MARCH},
|
{"march", required_argument, NULL, OPTION_MARCH},
|
||||||
#define OPTION_MCPU (OPTION_MD_BASE + 1)
|
#define OPTION_MCPU (OPTION_MD_BASE + 1)
|
||||||
{"mcpu", required_argument, NULL, OPTION_MCPU},
|
{"mcpu", required_argument, NULL, OPTION_MCPU},
|
||||||
|
#define OPTION_FLOAT_ABI (OPTION_MD_BASE + 2)
|
||||||
|
{"mfloat-abi", required_argument, NULL, OPTION_FLOAT_ABI},
|
||||||
|
|
||||||
/* Remaining options just set boolean flags. */
|
/* Remaining options just set boolean flags. */
|
||||||
{"EL", no_argument, &target_big_endian, 0},
|
{"EL", no_argument, &target_big_endian, 0},
|
||||||
@ -960,6 +963,35 @@ parse_arch (const char *str)
|
|||||||
as_bad (_("unknown architecture `%s'"), str);
|
as_bad (_("unknown architecture `%s'"), str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct csky_option_value_table
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
long value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct csky_option_value_table csky_float_abis[] =
|
||||||
|
{
|
||||||
|
{"hard", VAL_CSKY_FPU_ABI_HARD},
|
||||||
|
{"softfp", VAL_CSKY_FPU_ABI_SOFTFP},
|
||||||
|
{"soft", VAL_CSKY_FPU_ABI_SOFT},
|
||||||
|
{NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
parse_float_abi (const char *str)
|
||||||
|
{
|
||||||
|
const struct csky_option_value_table * opt;
|
||||||
|
|
||||||
|
for (opt = csky_float_abis; opt->name != NULL; opt++)
|
||||||
|
if (strcasecmp (opt->name, str) == 0)
|
||||||
|
{
|
||||||
|
float_abi = opt->value;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
as_bad (_("unknown floating point abi `%s'\n"), str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
#ifdef OBJ_ELF
|
||||||
/* Implement the TARGET_FORMAT macro. */
|
/* Implement the TARGET_FORMAT macro. */
|
||||||
@ -1141,6 +1173,25 @@ md_show_usage (FILE *fp)
|
|||||||
}
|
}
|
||||||
fprintf (fp, "\n");
|
fprintf (fp, "\n");
|
||||||
|
|
||||||
|
fprintf (fp, _("\
|
||||||
|
-mfloat-abi=ABI select float ABI:"));
|
||||||
|
for (i = 0, n = margin; csky_float_abis[i].name != NULL; i++)
|
||||||
|
{
|
||||||
|
int l = strlen (csky_float_abis[i].name);
|
||||||
|
if (n + l >= margin)
|
||||||
|
{
|
||||||
|
fprintf (fp, "\n\t\t\t\t");
|
||||||
|
n = l;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf (fp, " ");
|
||||||
|
n += l + 1;
|
||||||
|
}
|
||||||
|
fprintf (fp, "%s", csky_float_abis[i].name);
|
||||||
|
}
|
||||||
|
fprintf (fp, "\n");
|
||||||
|
|
||||||
fprintf (fp, _("\
|
fprintf (fp, _("\
|
||||||
-EL -mlittle-endian generate little-endian output\n"));
|
-EL -mlittle-endian generate little-endian output\n"));
|
||||||
fprintf (fp, _("\
|
fprintf (fp, _("\
|
||||||
@ -1271,6 +1322,9 @@ static void set_csky_attribute (void)
|
|||||||
bfd_elf_add_obj_attr_string (stdoutput, OBJ_ATTR_PROC,
|
bfd_elf_add_obj_attr_string (stdoutput, OBJ_ATTR_PROC,
|
||||||
Tag_CSKY_FPU_NUMBER_MODULE,
|
Tag_CSKY_FPU_NUMBER_MODULE,
|
||||||
"IEEE 754");
|
"IEEE 754");
|
||||||
|
bfd_elf_add_obj_attr_int (stdoutput, OBJ_ATTR_PROC,
|
||||||
|
Tag_CSKY_FPU_ABI,
|
||||||
|
float_abi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4506,6 +4560,9 @@ md_parse_option (int c, const char *arg)
|
|||||||
case OPTION_MCPU:
|
case OPTION_MCPU:
|
||||||
parse_cpu (arg);
|
parse_cpu (arg);
|
||||||
break;
|
break;
|
||||||
|
case OPTION_FLOAT_ABI:
|
||||||
|
parse_float_abi (arg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user