aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-csky.c
diff options
context:
space:
mode:
authorCooper Qu <cooper.qu@linux.alibaba.com>2020-08-24 20:13:47 +0800
committerLifang Xia <lifang_xia@c-sky.com>2020-08-24 20:27:07 +0800
commit531c73a37bb4477f8337bb9dddc36d552ee76056 (patch)
treee9602367da318d2f52ee872304c8fe3f95d6dc60 /gas/config/tc-csky.c
parentf1a9fbd995b8997b7ed7e8e6a83129e923400a58 (diff)
downloadfsf-binutils-gdb-531c73a37bb4477f8337bb9dddc36d552ee76056.zip
fsf-binutils-gdb-531c73a37bb4477f8337bb9dddc36d552ee76056.tar.gz
fsf-binutils-gdb-531c73a37bb4477f8337bb9dddc36d552ee76056.tar.bz2
CSKY: Add new arch CK860.
bfd/ * bfd-in2.h (bfd_mach_ck860): New. * cpu-csky.c (arch_info_struct): Add item for CK860. gas/ * config/tc-csky.c (csky_archs): Add item for CK860, change ck810 and ck807's arch_flag. (csky_cpus): Add item for CK860. (md_begin): Enable DSP for CK810 and CK807 by default. (md_apply_fix): Fix CKCORE_TLS_IE32 relocation failure. * gas/testsuite/gas/csky/cskyv2_all.d: Change 'sync 0' to 'sync'. * gas/testsuite/gas/csky/cskyv2_all.s: Likewise. * gas/testsuite/gas/csky/cskyv2_ck860.d: New. * gas/testsuite/gas/csky/cskyv2_ck860.s: New. * gas/testsuite/gas/csky/enhance_dsp.d: Change plsli.u16 to plsli.16. * gas/testsuite/gas/csky/enhance_dsp.s: Likewise. include/ * opcode/csky.h (CSKYV2_ISA_10E60): New. (CSKY_ARCH_860): New. opcode/ * csky-dis.c (csky_find_inst_info): Skip CK860's instructions in other CPUs to speed up disassembling. * csky-opc.h (csky_v2_opcodes): Add CK860's instructions, Change plsli.u16 to plsli.16, change sync's operand format. Change-Id: I80ec1a9c0cc600d668082a9b91ae6d45b33ec0fc
Diffstat (limited to 'gas/config/tc-csky.c')
-rw-r--r--gas/config/tc-csky.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/gas/config/tc-csky.c b/gas/config/tc-csky.c
index d16c448..f621fa9 100644
--- a/gas/config/tc-csky.c
+++ b/gas/config/tc-csky.c
@@ -564,13 +564,15 @@ const struct csky_arch_info csky_archs[] =
{"ck801", CSKY_ARCH_801, bfd_mach_ck801},
{"ck802", CSKY_ARCH_802, bfd_mach_ck802},
{"ck803", CSKY_ARCH_803, bfd_mach_ck803},
-#define CSKY_ARCH_807_BASE CSKY_ARCH_807 | CSKY_ARCH_DSP
-#define CSKY_ARCH_810_BASE CSKY_ARCH_810 | CSKY_ARCH_DSP
- {"ck807", CSKY_ARCH_807_BASE, bfd_mach_ck807},
- {"ck810", CSKY_ARCH_810_BASE, bfd_mach_ck810},
+ {"ck807", CSKY_ARCH_807, bfd_mach_ck807},
+ {"ck810", CSKY_ARCH_810, bfd_mach_ck810},
+ {"ck860", CSKY_ARCH_860, bfd_mach_ck860},
{NULL, 0, 0}
};
+#define CSKY_ARCH_807_BASE CSKY_ARCH_807 | CSKY_ARCH_DSP
+#define CSKY_ARCH_810_BASE CSKY_ARCH_810 | CSKY_ARCH_DSP
+
/* C-SKY cpus table. */
const struct csky_cpu_info csky_cpus[] =
{
@@ -683,6 +685,11 @@ const struct csky_cpu_info csky_cpus[] =
{"ck810ft", CSKY_ARCH_810_BASE | CSKY_ARCH_FLOAT, CSKY_ISA_810 | CSKYV2_ISA_DSP | CSKY_ISA_VDSP | CSKY_ISA_FLOAT_810 | CSKY_ISA_TRUST},
{"ck810ftv", CSKY_ARCH_810_BASE | CSKY_ARCH_FLOAT, CSKY_ISA_810 | CSKYV2_ISA_DSP | CSKY_ISA_VDSP | CSKY_ISA_FLOAT_810 | CSKY_ISA_TRUST},
+ /* CK860 Series. */
+#define CSKY_ISA_860 (CSKY_ISA_810 | CSKYV2_ISA_10E60)
+#define CSKY_ISA_FLOAT_860 (CSKY_ISA_FLOAT_810)
+ {"ck860", CSKY_ARCH_860, CSKY_ISA_860},
+
{NULL, 0, 0}
};
@@ -1207,7 +1214,14 @@ md_begin (void)
as_warn (_("-mcpu conflict with other model parameters, using -mcpu"));
}
else if (arch_flag != 0)
- mach_flag |= arch_flag | flags;
+ {
+ if ((arch_flag & CSKY_ARCH_MASK) == CSKY_ARCH_810
+ || ((arch_flag & CSKY_ARCH_MASK) == CSKY_ARCH_807)) {
+ /* CK807 and CK810 have DSP instruction by default. */
+ mach_flag |= CSKY_ARCH_DSP;
+ }
+ mach_flag |= arch_flag | flags;
+ }
else
{
#ifdef TARGET_WITH_CPU
@@ -4941,6 +4955,7 @@ md_apply_fix (fixS *fixP,
struct tls_addend *ta = &(fixP->tc_fix_data);
fixP->fx_offset = (fixP->fx_frag->fr_address + fixP->fx_where
- (ta->frag->fr_address + ta->offset));
+ *valP = fixP->fx_offset;
}
/* Fall through. */
case BFD_RELOC_CKCORE_TLS_LE32:
@@ -5002,6 +5017,7 @@ md_apply_fix (fixS *fixP,
struct tls_addend *ta = &(fixP->tc_fix_data);
fixP->fx_offset = (fixP->fx_frag->fr_address + fixP->fx_where
- (ta->frag->fr_address + ta->offset));
+ *valP = fixP->fx_offset;
}
/* Fall through. */
case BFD_RELOC_CKCORE_TLS_LE32: