+2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com>
+
+ * bfd-in2.h (bfd_mach_ck860): New.
+ * cpu-csky.c (arch_info_struct): Add item for CK860.
+
2020-08-24 Alan Modra <amodra@gmail.com>
* elf32-ppc.c (ppc_elf_check_relocs): Set has_tls_reloc for
#define bfd_mach_ck803 5
#define bfd_mach_ck807 6
#define bfd_mach_ck810 7
+#define bfd_mach_ck860 8
bfd_arch_last
};
N (bfd_mach_ck803, "csky:ck803", FALSE, & arch_info_struct[5]),
N (bfd_mach_ck807, "csky:ck807", FALSE, & arch_info_struct[6]),
N (bfd_mach_ck810, "csky:ck810", FALSE, & arch_info_struct[7]),
+ N (bfd_mach_ck860, "csky:ck860", FALSE, & arch_info_struct[8]),
N (bfd_mach_ck_unknown, "csky:any", FALSE, NULL)
};
+2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com>
+
+ * 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.
+
2020-08-24 Alan Modra <amodra@gmail.com>
* config/tc-tic54x.c (stag_add_field_symbols): Don't free "name"
{"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[] =
{
{"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}
};
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
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:
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:
\s*[0-9a-f]*:\s*c4139c40\s*mthi\s*r19
\s*[0-9a-f]*:\s*c4009c83\s*mflo\s*r3
\s*[0-9a-f]*:\s*c4089d00\s*mtlo\s*r8
-\s*[0-9a-f]*:\s*c0000420\s*sync\s*0
+\s*[0-9a-f]*:\s*c0000420\s*sync
\s*[0-9a-f]*:\s*c0200420\s*sync\s*1
\s*[0-9a-f]*:\s*c2800420\s*sync\s*20
\s*[0-9a-f]*:\s*c0601c20\s*idly\s*4
mthi r19
mflo r3
mtlo r8
- sync 0
+ sync
sync 1
sync 20
idly 0
--- /dev/null
+# name: csky - ck860
+#as: -mcpu=ck860
+#objdump: -D
+
+.*: +file format .*csky.*
+
+Disassembly of section \.text:
+#...
+\s*[0-9a-f]*:\s*c0008820\s*tlbi.all
+\s*[0-9a-f]*:\s*c2008820\s*tlbi.alls
+\s*[0-9a-f]*:\s*c0618820\s*tlbi.va\s*r1
+\s*[0-9a-f]*:\s*c26f8820\s*tlbi.vas\s*r15
+\s*[0-9a-f]*:\s*c0218820\s*tlbi.asid\s*r1
+\s*[0-9a-f]*:\s*c22f8820\s*tlbi.asids\s*r15
+\s*[0-9a-f]*:\s*c04f8820\s*tlbi.vaa\s*r15
+\s*[0-9a-f]*:\s*c24f8820\s*tlbi.vaas\s*r15
+\s*[0-9a-f]*:\s*c1df9420\s*dcache.cisw\s*r31
+\s*[0-9a-f]*:\s*c1ff9420\s*dcache.civa\s*r31
+\s*[0-9a-f]*:\s*c1809420\s*dcache.ciall
+\s*[0-9a-f]*:\s*c0df9420\s*dcache.csw\s*r31
+\s*[0-9a-f]*:\s*c0ff9420\s*dcache.cva\s*r31
+\s*[0-9a-f]*:\s*c2ff9420\s*dcache.cval1\s*r31
+\s*[0-9a-f]*:\s*c0809420\s*dcache.call
+\s*[0-9a-f]*:\s*c15f9420\s*dcache.isw\s*r31
+\s*[0-9a-f]*:\s*c17f9420\s*dcache.iva\s*r31
+\s*[0-9a-f]*:\s*c1009420\s*dcache.iall
+\s*[0-9a-f]*:\s*c1009020\s*icache.iall
+\s*[0-9a-f]*:\s*c3009020\s*icache.ialls
+\s*[0-9a-f]*:\s*c0bf9020\s*icache.iva\s*r31
+\s*[0-9a-f]*:\s*c000842f\s*bar.brwarw
+\s*[0-9a-f]*:\s*c200842f\s*bar.brwarws
+\s*[0-9a-f]*:\s*c0008425\s*bar.brar
+\s*[0-9a-f]*:\s*c2008425\s*bar.brars
+\s*[0-9a-f]*:\s*c000842a\s*bar.bwaw
+\s*[0-9a-f]*:\s*c200842a\s*bar.bwaws
+\s*[0-9a-f]*:\s*c2200420\s*sync.is
+\s*[0-9a-f]*:\s*c0200420\s*sync.i
+\s*[0-9a-f]*:\s*c2000420\s*sync.s
+\s*[0-9a-f]*:\s*c0000420\s*sync
+\s*[0-9a-f]*:\s*d8437000\s*ldex.w\s*r2,\s*\(r3,\s*0x0\)
+\s*[0-9a-f]*:\s*dc437000\s*stex.w\s*r2,\s*\(r3,\s*0x0\)
\ No newline at end of file
--- /dev/null
+ck860:
+ tlbi.all
+ tlbi.alls
+ tlbi.va r1
+ tlbi.vas r15
+ tlbi.asid r1
+ tlbi.asids r15
+ tlbi.vaa r15
+ tlbi.vaas r15
+ dcache.cisw r31
+ dcache.civa r31
+ dcache.ciall
+ dcache.csw r31
+ dcache.cva r31
+ dcache.cval1 r31
+ dcache.call
+ dcache.isw r31
+ dcache.iva r31
+ dcache.iall
+ icache.iall
+ icache.ialls
+ icache.iva r31
+ bar.brwarw
+ bar.brwarws
+ bar.brar
+ bar.brars
+ bar.bwaw
+ bar.bwaws
+ sync.is
+ sync.i
+ sync.s
+ sync
+
+ ldex.w r2, (r3, 0)
+ stex.w r2, (r3, 0)
\s*[0-9a-f]*:\s*f883d242\s*plsr\.u16\s*r2,\s*r3,\s*r4
\s*[0-9a-f]*:\s*f8e3d302\s*plsri\.u16\.r\s*r2,\s*r3,\s*8
\s*[0-9a-f]*:\s*f883d342\s*plsr\.u16\.r\s*r2,\s*r3,\s*r4
-\s*[0-9a-f]*:\s*f8e3d402\s*plsli\.u16\s*r2,\s*r3,\s*8
+\s*[0-9a-f]*:\s*f8e3d402\s*plsli\.16\s*r2,\s*r3,\s*8
\s*[0-9a-f]*:\s*fa03d442\s*plsl\.u16\s*r2,\s*r3,\s*r16
\s*[0-9a-f]*:\s*f8e3d502\s*plsli\.u16\.s\s*r2,\s*r3,\s*8
\s*[0-9a-f]*:\s*f8e3d582\s*plsli\.s16\.s\s*r2,\s*r3,\s*8
plsr.u16 r2, r3, r4
plsri.u16.r r2, r3, 8
plsr.u16.r r2, r3, r4
- plsli.u16 r2, r3, 8
+ plsli.16 r2, r3, 8
plsl.u16 r2, r3, r16
plsli.u16.s r2, r3, 8
plsli.s16.s r2, r3, 8
+2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com>
+
+ * opcode/csky.h (CSKYV2_ISA_10E60): New.
+ (CSKY_ARCH_860): New.
+
2020-08-21 Cooper Qu <cooper.qu@linux.alibaba.com>
* csky.h (CSKYV2_ISA_3E3R2): New.
#define CSKYV2_ISA_7E10 (1 << 5)
#define CSKYV2_ISA_3E3R1 (1 << 6)
#define CSKYV2_ISA_3E3R2 (1 << 7)
+#define CSKYV2_ISA_10E60 (1 << 8)
#define CSKY_ISA_TRUST (1 << 11)
#define CSKY_ISA_CACHE (1 << 12)
#define CSKY_ARCH_803 0x9
#define CSKY_ARCH_807 0x6
#define CSKY_ARCH_810 0x8
+#define CSKY_ARCH_860 0xb
#define CSKY_ARCH_MAC (1 << 15)
#define CSKY_ARCH_DSP (1 << 14)
+2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com>
+
+ * 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.
+
2020-08-21 Cooper Qu <cooper.qu@linux.alibaba.com>
* csky-opc.h (csky_v2_opcodes): Add instruction bnezad.
p = g_opcodeP;
while (p->mnemonic)
{
+ /* FIXME: Skip 860's instruction in other CPUs. It is not suitable.
+ These codes need to be optimized. */
+ if (((CSKY_ARCH_MASK & mach_flag) != CSKY_ARCH_860)
+ && (p->isa_flag32 & CSKYV2_ISA_10E60))
+ {
+ p++;
+ continue;
+ }
+
/* Get the opcode mask. */
for (i = 0; i < OP_TABLE_NUM; i++)
if (length == 2)
(0_3or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT),
(16_20, AREG_WITH_BRACKET, OPRND_SHIFT_0_BIT)),
CSKY_ISA_FLOAT_1E2),
- DOP32 ("sync",
- OPCODE_INFO1 (0xc0000420,
- (21_25, IMM5b, OPRND_SHIFT_0_BIT)),
- OPCODE_INFO0 (0xc0000420),
- CSKYV2_ISA_E1),
DOP32 ("idly",
OPCODE_INFO1 (0xc0001c20,
(21_25, OIMM5b_IDLY, OPRND_SHIFT_0_BIT)),
#undef _RELAX
#define _RELAX 0
+ /* CK860 instructions. */
+ OP32("sync.is",
+ OPCODE_INFO0(0xc2200420),
+ CSKYV2_ISA_10E60),
+ OP32("sync.i",
+ OPCODE_INFO0(0xc0200420),
+ CSKYV2_ISA_10E60),
+ OP32("sync.s",
+ OPCODE_INFO0(0xc2000420),
+ CSKYV2_ISA_10E60),
+ OP32("bar.brwarw",
+ OPCODE_INFO0(0xc000842f),
+ CSKYV2_ISA_10E60),
+ OP32("bar.brwarws",
+ OPCODE_INFO0(0xc200842f),
+ CSKYV2_ISA_10E60),
+ OP32("bar.brar",
+ OPCODE_INFO0(0xc0008425),
+ CSKYV2_ISA_10E60),
+ OP32("bar.brars",
+ OPCODE_INFO0(0xc2008425),
+ CSKYV2_ISA_10E60),
+ OP32("bar.bwaw",
+ OPCODE_INFO0(0xc000842a),
+ CSKYV2_ISA_10E60),
+ OP32("bar.bwaws",
+ OPCODE_INFO0(0xc200842a),
+ CSKYV2_ISA_10E60),
+ OP32("icache.iall",
+ OPCODE_INFO0(0xc1009020),
+ CSKYV2_ISA_10E60),
+ OP32("icache.ialls",
+ OPCODE_INFO0(0xc3009020),
+ CSKYV2_ISA_10E60),
+ OP32("icache.iva",
+ OPCODE_INFO1(0xc0a09020,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.iall",
+ OPCODE_INFO0(0xc1009420),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.iva",
+ OPCODE_INFO1(0xc1609420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.isw",
+ OPCODE_INFO1(0xc1409420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.call",
+ OPCODE_INFO0(0xc0809420),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.cva",
+ OPCODE_INFO1(0xc0e09420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.cval1",
+ OPCODE_INFO1(0xc2e09420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.csw",
+ OPCODE_INFO1(0xc0c09420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.ciall",
+ OPCODE_INFO0(0xc1809420),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.civa",
+ OPCODE_INFO1(0xc1e09420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("dcache.cisw",
+ OPCODE_INFO1(0xc1c09420,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.vaa",
+ OPCODE_INFO1(0xc0408820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.vaas",
+ OPCODE_INFO1(0xc2408820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.asid",
+ OPCODE_INFO1(0xc0208820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.asids",
+ OPCODE_INFO1(0xc2208820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.va",
+ OPCODE_INFO1(0xc0608820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.vas",
+ OPCODE_INFO1(0xc2608820,
+ (16_20, AREG, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.all",
+ OPCODE_INFO0(0xc0008820),
+ CSKYV2_ISA_10E60),
+ OP32("tlbi.alls",
+ OPCODE_INFO0(0xc2008820),
+ CSKYV2_ISA_10E60),
+ DOP32("sync",
+ OPCODE_INFO0(0xc0000420),
+ OPCODE_INFO1(0xc0000420,
+ (21_25, IMM5b, OPRND_SHIFT_0_BIT)),
+ CSKYV2_ISA_E1),
+
/* The followings are enhance DSP instructions. */
DOP32_WITH_WORK ("bloop",
OPCODE_INFO3 (0xe9c00000,
(16_20, AREG, OPRND_SHIFT_0_BIT),
(21_25, AREG, OPRND_SHIFT_0_BIT)),
CSKY_ISA_DSP_ENHANCE),
- OP32 ("plsli.u16",
+ OP32 ("plsli.16",
OPCODE_INFO3 (0xf800d400,
(0_4, AREG, OPRND_SHIFT_0_BIT),
(16_20, AREG, OPRND_SHIFT_0_BIT),