1999-05-03 15:29:11 +08:00
|
|
|
/* BFD support for the SPARC architecture.
|
2018-01-03 13:17:27 +08:00
|
|
|
Copyright (C) 1992-2018 Free Software Foundation, Inc.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-03 22:26:43 +08:00
|
|
|
This file is part of BFD, the Binary File Descriptor library.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-03 22:26:43 +08:00
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-03 22:26:43 +08:00
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-03 22:26:43 +08:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
|
|
MA 02110-1301, USA. */
|
1999-05-03 15:29:11 +08:00
|
|
|
|
|
|
|
#include "sysdep.h"
|
2007-04-26 22:47:00 +08:00
|
|
|
#include "bfd.h"
|
1999-05-03 15:29:11 +08:00
|
|
|
#include "libbfd.h"
|
|
|
|
|
|
|
|
static const bfd_arch_info_type arch_info_struct[] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_sparclet,
|
|
|
|
"sparc",
|
|
|
|
"sparc:sparclet",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[1],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_sparclite,
|
|
|
|
"sparc",
|
|
|
|
"sparc:sparclite",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[2],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plus,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plus",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[3],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusa,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusa",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[4],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_sparclite_le,
|
|
|
|
"sparc",
|
|
|
|
"sparc:sparclite_le",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[5],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[6],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9a,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9a",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
2000-10-20 18:38:47 +08:00
|
|
|
&arch_info_struct[7],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusb,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusb",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
2000-10-20 18:38:47 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
2000-10-20 18:38:47 +08:00
|
|
|
&arch_info_struct[8],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9b,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9b",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
FALSE,
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
2000-10-20 18:38:47 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
bfd,opcodes: sparc: new opcode v9{c,d,e,v,m} architectures and bfd machine numbers.
This patch adds support for the opcode architectures
SPARC_OPCODE_ARCH_V9{C,D,E,V,M} and its associated BFD machine numbers
bfd_mach_sparc_v9{c,d,e,v,m} and bfd_mach_sparc_v8plus{c,d,e,v,m}.
Note that for arches up to v9b (UltraSPARC III), the detection of the
BFD machine type was based on the bits in the e_machine field of the ELF
header. However, there are no more available bits in that field, so
this patch takes the approach of using the hardware capabilities stored
in the object attributes HWCAPS/HWCAPS2 in order to characterize the
machine the object was built for.
bfd/ChangeLog:
2016-06-17 Jose E. Marchesi <jose.marchesi@oracle.com>
* archures.c (bfd_mach_sparc_v8plusc): Define.
(bfd_mach_sparc_v9c): Likewise.
(bfd_mach_sparc_v8plusd): Likewise.
(bfd_mach_sparc_v9d): Likewise.
(bfd_mach_sparc_v8pluse): Likewise.
(bfd_mach_sparc_v9e): Likewise.
(bfd_mach_sparc_v8plusv): Likewise
(bfd_mach_sparc_v9v): Likewise.
(bfd_mach_sparc_v8plusm): Likewise.
(bfd_mach_sparc_v9m): Likewise.
(bfd_mach_sparc_v9_p): Adapt to v8plusm and v9m.
(bfd_mach_sparc_64bit_p): Likewise.
* bfd-in2.h: Regenerate.
* cpu-sparc.c (arch_info_struct): Add entries for
bfd_mach_sparc_v8plus{c,d,e,v,m} and bfd_mach_sparc_v9{c,d,e,v,m}.
* aoutx.h (machine_type): Handle bfd_mach_sparc_v8plus{c,d,e,v,m}
and bfd_mach_sparc_v9{c,d,e,v,m}.
* elf32-sparc.c (elf32_sparc_final_write_processing): Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_object_p): Likewise.
include/ChangeLog:
2016-06-17 Jose E. Marchesi <jose.marchesi@oracle.com>
* opcode/sparc.h (enum sparc_opcode_arch_val): Add
SPARC_OPCODE_ARCH_V9C, SPARC_OPCODE_ARCH_V9D,
SPARC_OPCODE_ARCH_V9E, SPARC_OPCODE_ARCH_V9V and
SPARC_OPCODE_ARCH_V9M.
opcodes/ChangeLog:
2016-06-17 Jose E. Marchesi <jose.marchesi@oracle.com>
* sparc-dis.c (MASK_V9): Add SPARC_OPCODE_ARCH_V9{C,D,E,V,M}.
(compute_arch_mask): Handle bfd_mach_sparc_v8plus{c,d,e,v,m} and
bfd_mach_sparc_v9{c,d,e,v,m}.
* sparc-opc.c (MASK_V9C): Define.
(MASK_V9D): Likewise.
(MASK_V9E): Likewise.
(MASK_V9V): Likewise.
(MASK_V9M): Likewise.
(v6): Add MASK_V9{C,D,E,V,M}.
(v6notlet): Likewise.
(v7): Likewise.
(v8): Likewise.
(v9): Likewise.
(v9andleon): Likewise.
(v9a): Likewise.
(v9b): Likewise.
(v9c): Define.
(v9d): Likewise.
(v9e): Likewise.
(v9v): Likewise.
(v9m): Likewise.
(sparc_opcode_archs): Add entry for v9{c,d,e,v,m}.
2016-06-17 17:12:48 +08:00
|
|
|
&arch_info_struct[9],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusc,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusc",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[10],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9c,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9c",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[11],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusd,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusd",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[12],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9d,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9d",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[13],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8pluse,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8pluse",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[14],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9e,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9e",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[15],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusv,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusv",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[16],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9v,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9v",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[17],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusm,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusm",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[18],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9m,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9m",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
binutils: support for the SPARC M8 processor
This patch adds support for the new SPARC M8 processor (implementing OSA
2017) to binutils.
New instructions:
- Dictionary Unpack
+ dictunpack
- Partitioned Compare with shifted result
+ Signed variants: fpcmp{le,gt,eq,ne}{8,16,32}shl
+ Unsigned variants: fpcmpu{le,gt}{8,16,32}shl
- Partitioned Dual-Equal compared, with shifted result
+ fpcmpde{8,16,32}shl
- Partitioned Unsigned Range Compare, with shifted result
+ fpcmpur{8,16,32}shl
- 64-bit shifts on Floating-Point registers
+ fps{ll,ra,rl}64x
- Misaligned loads and stores
+ ldm{sh,uh,sw,uw,x,ux}
+ ldm{sh,uh,sw,uw,x,ux}a
+ ldmf{s,d}
+ ldmf{s,d}a
+ stm{h,w,x}
+ stm{h,w,x}a
+ stmf{s,d}
+ stmf{s,d}a
- Oracle Numbers
+ on{add,sub,mul,div}
- Reverse Bytes/Bits
+ revbitsb
+ revbytes{h,w,x}
- Run-Length instructions
+ rle_burst
+ rle_length
- New crypto instructions
+ sha3
- Instruction to read the new register %entropy
+ rd %entropy
New Alternate Address Identifiers:
- 0x24, #ASI_CORE_COMMIT_COUNT
- 0x24, #ASI_CORE_SELECT_COUNT
- 0x48, #ASI_ARF_ECC_REG
- 0x53, #ASI_ITLB_PROBE
- 0x58, #ASI_DSFAR
- 0x5a, #ASI_DTLB_PROBE_PRIMARY
- 0x5b, #ASI_DTLB_PROBE_REAL
- 0x64, #ASI_CORE_SELECT_COMMIT_NHT
The new assembler command-line options for selecting the M8 architecture
are:
-Av9m8 or -Asparc6 for 64-bit binaries.
-Av8plusm8 for 32-bit (v8+) binaries.
The corresponding disassembler command-line options are:
-msparc:v9m8 for 64-bit binaries.
-msparc:v8plusm8 for 32-bit (v8+) binaries.
Tested for regressions in the following targets:
sparc-aout sparc-linux sparc-vxworks sparc64-linux
bfd/ChangeLog:
2017-05-19 Jose E. Marchesi <jose.marchesi@oracle.com>
* archures.c (bfd_mach_sparc_v9m8): Define.
(bfd_mach_sparc_v8plusm8): Likewise.
(bfd_mach_sparc_v9_p): Adjust to M8.
(bfd_mach_sparc_64bit_p): Likewise.
* aoutx.h (machine_type): Handle bfd_mach_sparc_v9m8 and
bfd_mach_sparc_v8plusm8.
* bfd-in2.h: Regenerated.
* cpu-sparc.c (arch_info_struct): Entries for sparc:v9m8 and
sparc:v8plusm8.
* elfxx-sparc.c (_bfd_sparc_elf_object_p): Handle
bfd_mach_sparc_v8plusm8 and bfd_mach_sparc_v9m8 using the new hw
capabilities ONADDSUB, ONMUL, ONDIV, DICTUNP, FPCPSHL, RLE and
SHA3.
* elf32-sparc.c (elf32_sparc_final_write_processing): Handle
bfd_mach_sparc_v8plusm8.
binutils/ChangeLog:
2017-05-19 Jose E. Marchesi <jose.marchesi@oracle.com>
* NEWS: Mention the SPARC M8 support.
gas/ChangeLog:
2017-05-19 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/tc-sparc.c (sparc_arch_table): Entries for `sparc6',
`v9m8' and `v8plusm8'.
(sparc_md_end): Handle SPARC_OPCODE_ARCH_M8.
(get_hwcap_name): Support the M8 hardware capabilities.
(sparc_ip): Handle new operand types.
* doc/c-sparc.texi (Sparc-Opts): Document -Av9m8, -Av8plusm8 and
-Asparc6, and the corresponding -xarch aliases.
* testsuite/gas/sparc/sparc6.s: New file.
* testsuite/gas/sparc/sparc6.d: Likewise.
* testsuite/gas/sparc/sparc6-diag.s: Likewise.
* testsuite/gas/sparc/sparc6-diag.l: Likewise.
* testsuite/gas/sparc/fpcmpshl.s: Likewise.
* testsuite/gas/sparc/fpcmpshl.d: Likewise.
* testsuite/gas/sparc/fpcmpshl-diag.s: Likewise.
* testsuite/gas/sparc/fpcmpshl-diag.l: Likewise.
* testsuite/gas/sparc/ldm-stm.s: Likewise.
* testsuite/gas/sparc/ldm-stm.d: Likewise.
* testsuite/gas/sparc/ldm-stm-diag.s: Likewise.
* testsuite/gas/sparc/ldm-stm-diag.l: Likewise.
* testsuite/gas/sparc/ldmf-stmf.s: Likewise.
* testsuite/gas/sparc/ldmf-stmf.d: Likewise.
* testsuite/gas/sparc/ldmf-stmf-diag.s: Likewise.
* testsuite/gas/sparc/ldmf-stmf-diag.l: Likewise.
* testsuite/gas/sparc/on.s: Likewise.
* testsuite/gas/sparc/on.d: Likewise.
* testsuite/gas/sparc/on-diag.s: Likewise.
* testsuite/gas/sparc/on-diag.l: Likewise.
* testsuite/gas/sparc/rle.s: Likewise.
* testsuite/gas/sparc/rle.d: Likewise.
* testsuite/gas/sparc/sparc.exp (gas_64_check): Run new tests.
* testsuite/gas/sparc/rdasr.s: Add test for RDENTROPY.
* testsuite/gas/sparc/rdasr.d: Likewise.
include/ChangeLog:
2017-05-19 Jose E. Marchesi <jose.marchesi@oracle.com>
* elf/sparc.h (ELF_SPARC_HWCAP2_SPARC6): Define.
(ELF_SPARC_HWCAP2_ONADDSUB): Likewise.
(ELF_SPARC_HWCAP2_ONMUL): Likewise.
(ELF_SPARC_HWCAP2_ONDIV): Likewise.
(ELF_SPARC_HWCAP2_DICTUNP): Likewise.
(ELF_SPARC_HWCAP2_FPCMPSHL): Likewise.
(ELF_SPARC_HWCAP2_RLE): Likewise.
(ELF_SPARC_HWCAP2_SHA3): Likewise.
* opcode/sparc.h (sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_M8
and adjust SPARC_OPCODE_ARCH_MAX.
(HWCAP2_SPARC6): Define.
(HWCAP2_ONADDSUB): Likewise.
(HWCAP2_ONMUL): Likewise.
(HWCAP2_ONDIV): Likewise.
(HWCAP2_DICTUNP): Likewise.
(HWCAP2_FPCMPSHL): Likewise.
(HWCAP2_RLE): Likewise.
(HWCAP2_SHA3): Likewise.
(OPM): Likewise.
(OPMI): Likewise.
(ONFCN): Likewise.
(REVFCN): Likewise.
(SIMM10): Likewise.
opcodes/ChangeLog:
2017-05-19 Jose E. Marchesi <jose.marchesi@oracle.com>
* sparc-dis.c (MASK_V9): Include SPARC_OPCODE_ARCH_M8.
(X_IMM2): Define.
(compute_arch_mask): Handle bfd_mach_sparc_v8plusm8 and
bfd_mach_sparc_v9m8.
(print_insn_sparc): Handle new operand types.
* sparc-opc.c (MASK_M8): Define.
(v6): Add MASK_M8.
(v6notlet): Likewise.
(v7): Likewise.
(v8): Likewise.
(v9): Likewise.
(v9a): Likewise.
(v9b): Likewise.
(v9c): Likewise.
(v9d): Likewise.
(v9e): Likewise.
(v9v): Likewise.
(v9m): Likewise.
(v9andleon): Likewise.
(m8): Define.
(HWS_VM8): Define.
(HWS2_VM8): Likewise.
(sparc_opcode_archs): Add entry for "m8".
(sparc_opcodes): Add OSA2017 and M8 instructions
dictunpack, fpcmp{ule,ugt,eq,ne,de,ur}{8,16,32}shl,
fpx{ll,ra,rl}64x,
ldm{sh,uh,sw,uw,x,ux}, ldm{sh,uh,sw,uw,x,ux}a, ldmf{s,d},
ldmf{s,d}a, on{add,sub,mul,div}, rdentropy, revbitsb,
revbytes{h,w,x}, rle_burst, rle_length, sha3, stm{h,w,x},
stm{h,w,x}a, stmf{s,d}, stmf{s,d}a.
(asi_table): New M8 ASIs ASI_CORE_COMMIT_COUNT,
ASI_CORE_SELECT_COUNT, ASI_ARF_ECC_REG, ASI_ITLB_PROBE, ASI_DSFAR,
ASI_DTLB_PROBE_PRIMARY, ASI_DTLB_PROBE_REAL,
ASI_CORE_SELECT_COMMIT_NHT.
2017-05-20 00:27:08 +08:00
|
|
|
&arch_info_struct[19],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v8plusm8,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v8plusm8",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
|
|
|
&arch_info_struct[20],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
64, /* bits in a word */
|
|
|
|
64, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc_v9m8,
|
|
|
|
"sparc",
|
|
|
|
"sparc:v9m8",
|
|
|
|
3,
|
|
|
|
FALSE,
|
|
|
|
bfd_default_compatible,
|
|
|
|
bfd_default_scan,
|
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
0,
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const bfd_arch_info_type bfd_sparc_arch =
|
|
|
|
{
|
|
|
|
32, /* bits in a word */
|
|
|
|
32, /* bits in an address */
|
|
|
|
8, /* bits in a byte */
|
|
|
|
bfd_arch_sparc,
|
|
|
|
bfd_mach_sparc,
|
|
|
|
"sparc",
|
|
|
|
"sparc",
|
|
|
|
3,
|
2002-11-30 16:39:46 +08:00
|
|
|
TRUE, /* the default */
|
2002-03-13 15:30:45 +08:00
|
|
|
bfd_default_compatible,
|
1999-05-03 15:29:11 +08:00
|
|
|
bfd_default_scan,
|
2012-02-01 01:54:39 +08:00
|
|
|
bfd_arch_default_fill,
|
1999-05-03 15:29:11 +08:00
|
|
|
&arch_info_struct[0],
|
|
|
|
};
|