[ARC] Check if an input asm file is rf16 compliant

Check if an input asm file is rf16 compliant; if not, and the tag says
otherwise, fix the tag and emit a warning.

gas/
2017-09-20  Claudiu Zissulescu <claziss@synopsys.com>

	* config/tc-arc.c (rf16_only): New static variable.
	(autodetect_attributes): Check if we are rf16 compliant.
	(arc_set_public_attributes): Fix and emit the warning is required.
	* testsuite/gas/arc/attr-rf16.d: New file.
	* testsuite/gas/arc/attr-rf16.err: Likewise.
	* testsuite/gas/arc/attr-rf16.s: Likewise.
This commit is contained in:
claziss 2018-08-06 16:41:32 +03:00 committed by Claudiu Zissulescu
parent 6af0448446
commit 63741043bd
5 changed files with 50 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2018-08-06 Claudiu Zissulescu <claziss@synopsys.com>
* config/tc-arc.c (rf16_only): New static variable.
(autodetect_attributes): Check if we are rf16 compliant.
(arc_set_public_attributes): Fix and emit the warning is required.
* testsuite/gas/arc/attr-rf16.d: New file.
* testsuite/gas/arc/attr-rf16.err: Likewise.
* testsuite/gas/arc/attr-rf16.s: Likewise.
2018-08-06 Claudiu Zissulescu <claziss@synopsys.com>
* config/tc-arc.c (arc_set_public_attributes): Add

View File

@ -475,6 +475,9 @@ static const struct cpu_type
/* Information about the cpu/variant we're assembling for. */
static struct cpu_type selected_cpu = { 0, 0, 0, E_ARC_OSABI_CURRENT, 0 };
/* TRUE if current assembly code uses RF16 only registers. */
static bfd_boolean rf16_only = TRUE;
/* MPY option. */
static unsigned mpy_option = 0;
@ -2383,6 +2386,17 @@ autodetect_attributes (const struct arc_opcode *opcode,
default:
break;
}
switch (tok[i].X_op)
{
case O_register:
if ((tok[i].X_add_number >= 4 && tok[i].X_add_number <= 9)
|| (tok[i].X_add_number >= 16 && tok[i].X_add_number <= 25))
rf16_only = FALSE;
break;
default:
break;
}
}
}
@ -5017,6 +5031,17 @@ arc_set_public_attributes (void)
/* Tag_ARC_ATR_version. */
arc_set_attribute_int (Tag_ARC_ATR_version, 1);
/* Tag_ARC_ABI_rf16. */
if (attributes_set_explicitly[Tag_ARC_ABI_rf16]
&& bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_PROC,
Tag_ARC_ABI_rf16)
&& !rf16_only)
{
as_warn (_("Overwrite explicitly set Tag_ARC_ABI_rf16 to full "
"register file"));
bfd_elf_add_proc_attr_int (stdoutput, Tag_ARC_ABI_rf16, 0);
}
}
/* Add the default contents for the .ARC.attributes section. */

View File

@ -0,0 +1,10 @@
#error-output: attr-rf16.err
#as:
#readelf: -A
Attribute Section: ARC
File Attributes
Tag_ARC_CPU_base: ARCEM
Tag_ARC_CPU_name: "em"
Tag_ARC_ABI_osver: v4
Tag_ARC_ATR_version: 1

View File

@ -0,0 +1,2 @@
[^:]*: Assembler messages:
[^:]*: Warning: Overwrite explicitly set Tag_ARC_ABI_rf16 to full register file

View File

@ -0,0 +1,4 @@
.cpu em
.arc_attribute Tag_ARC_ABI_rf16,1
mov r8,0
mov r16,0