2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
include/ * opcode/nios2.h (OPX_WRPRS): New define. (OP_MATCH_WRPRS): Likewise. opcodes/ * nios2-opc.c (nios2_builtin_opcodes): Add entry for wrprs. gas/ * config/tc-nios2.c (nios2_assemble_args_ds): New function. (nios2_arg_info_structs): Add "d,s" and "d,s,E" entries. gas/testsuite/ * gas/nios2/nios2.exp: Run wrprs. * gas/nios2/wrprs.d: New file. * gas/nios2/wrprs.s: Likewise.
This commit is contained in:
parent
f5cb796a1e
commit
dad60f8e13
10 changed files with 84 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* config/tc-nios2.c (nios2_assemble_args_ds): New function.
|
||||
(nios2_arg_info_structs): Add "d,s" and "d,s,E" entries.
|
||||
|
||||
2013-03-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/tc-arm.c (crc_ext_armv8): New feature set.
|
||||
|
|
|
@ -1693,6 +1693,28 @@ nios2_assemble_args_cs (nios2_insn_infoS *insn_info)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nios2_assemble_args_ds (nios2_insn_infoS * insn_info)
|
||||
{
|
||||
if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL)
|
||||
{
|
||||
struct nios2_reg *dst = nios2_reg_lookup (insn_info->insn_tokens[1]);
|
||||
struct nios2_reg *src = nios2_reg_lookup (insn_info->insn_tokens[2]);
|
||||
|
||||
if (dst == NULL)
|
||||
as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
|
||||
else
|
||||
SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
|
||||
|
||||
if (src == NULL)
|
||||
as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
|
||||
else
|
||||
SET_INSN_FIELD (RRS, insn_info->insn_code, src->index);
|
||||
|
||||
nios2_check_assembly (insn_info->insn_code, insn_info->insn_tokens[3]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nios2_assemble_args_ldst (nios2_insn_infoS *insn_info)
|
||||
{
|
||||
|
@ -1850,6 +1872,8 @@ const nios2_arg_infoS nios2_arg_info_structs[] = {
|
|||
{"d,c,E", nios2_assemble_args_dc},
|
||||
{"c,s", nios2_assemble_args_cs},
|
||||
{"c,s,E", nios2_assemble_args_cs},
|
||||
{"d,s", nios2_assemble_args_ds},
|
||||
{"d,s,E", nios2_assemble_args_ds},
|
||||
{"l,d,s,t", nios2_assemble_args_ldst},
|
||||
{"l,d,s,t,E", nios2_assemble_args_ldst},
|
||||
{"d,s,j", nios2_assemble_args_dsj},
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* gas/nios2/nios2.exp: Run wrprs.
|
||||
* gas/nios2/wrprs.d: New file.
|
||||
* gas/nios2/wrprs.s: Likewise.
|
||||
|
||||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* gas/nios2/nios2.exp: Run rdprs.
|
||||
|
|
|
@ -54,6 +54,7 @@ if { [istarget nios2-*-*] } then {
|
|||
run_dump_test "rotate"
|
||||
run_dump_test "registers"
|
||||
run_dump_test "rdprs"
|
||||
run_dump_test "wrprs"
|
||||
|
||||
run_dump_test "stw"
|
||||
run_dump_test "sth"
|
||||
|
|
19
gas/testsuite/gas/nios2/wrprs.d
Normal file
19
gas/testsuite/gas/nios2/wrprs.d
Normal file
|
@ -0,0 +1,19 @@
|
|||
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||
#name: NIOS2 wrprs
|
||||
|
||||
# Test the wrprs instruction
|
||||
|
||||
.*: +file format elf32-littlenios2
|
||||
|
||||
Disassembly of section .text:
|
||||
0+0000 <[^>]*> 0000a03a wrprs zero,zero
|
||||
0+0004 <[^>]*> 0002a03a wrprs at,zero
|
||||
0+0008 <[^>]*> 0004a03a wrprs r2,zero
|
||||
0+000c <[^>]*> 0008a03a wrprs r4,zero
|
||||
0+0010 <[^>]*> 0010a03a wrprs r8,zero
|
||||
0+0014 <[^>]*> 0020a03a wrprs r16,zero
|
||||
0+0018 <[^>]*> 0800a03a wrprs zero,at
|
||||
0+001c <[^>]*> 1000a03a wrprs zero,r2
|
||||
0+0020 <[^>]*> 2000a03a wrprs zero,r4
|
||||
0+0024 <[^>]*> 4000a03a wrprs zero,r8
|
||||
0+0028 <[^>]*> 8000a03a wrprs zero,r16
|
16
gas/testsuite/gas/nios2/wrprs.s
Normal file
16
gas/testsuite/gas/nios2/wrprs.s
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Source file used to test the wrprs instruction
|
||||
|
||||
.set noat
|
||||
|
||||
foo:
|
||||
wrprs zero, zero
|
||||
wrprs at, zero
|
||||
wrprs r2, zero
|
||||
wrprs r4, zero
|
||||
wrprs r8, zero
|
||||
wrprs r16, zero
|
||||
wrprs zero, at
|
||||
wrprs zero, r2
|
||||
wrprs zero, r4
|
||||
wrprs zero, r8
|
||||
wrprs zero, r16
|
|
@ -1,3 +1,8 @@
|
|||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* opcode/nios2.h (OPX_WRPRS): New define.
|
||||
(OP_MATCH_WRPRS): Likewise.
|
||||
|
||||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* opcode/nios2.h (OP_RDPRS): New define.
|
||||
|
|
|
@ -344,6 +344,7 @@ struct nios2_reg
|
|||
#define OPX_SYNC 54
|
||||
#define OPX_TRAP 45
|
||||
#define OPX_WRCTL 46
|
||||
#define OPX_WRPRS 20
|
||||
#define OPX_XOR 30
|
||||
|
||||
/* The following macros define the opcode matches for each
|
||||
|
@ -440,6 +441,7 @@ struct nios2_reg
|
|||
#define OP_MATCH_TRAP ((0x1d << 17) | OPX_MATCH (OPX_TRAP))
|
||||
#define OP_MATCH_ERET (0xe8000000 | OPX_MATCH (OPX_ERET))
|
||||
#define OP_MATCH_WRCTL OPX_MATCH (OPX_WRCTL)
|
||||
#define OP_MATCH_WRPRS OPX_MATCH (OPX_WRPRS)
|
||||
#define OP_MATCH_XOR OPX_MATCH (OPX_XOR)
|
||||
#define OP_MATCH_FLUSHI OPX_MATCH (OPX_FLUSHI)
|
||||
#define OP_MATCH_FLUSHP OPX_MATCH (OPX_FLUSHP)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* nios2-opc.c (nios2_builtin_opcodes): Add entry for wrprs.
|
||||
|
||||
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* nios2-opc.c (nios2_builtin_opcodes): Add entry for rdprs.
|
||||
|
|
|
@ -393,6 +393,8 @@ const struct nios2_opcode nios2_builtin_opcodes[] =
|
|||
OP_MATCH_CUSTOM, OP_MASK_ROP, 0, custom_opcode_overflow},
|
||||
{"wrctl", "c,s", "c,s,E", 2,
|
||||
OP_MATCH_WRCTL, OP_MASK_WRCTL, 0, no_overflow},
|
||||
{"wrprs", "d,s", "d,s,E", 2,
|
||||
OP_MATCH_WRPRS, OP_MASK_RRT|OP_MASK_ROPX|OP_MASK_ROP, 0, no_overflow},
|
||||
{"xor", "d,s,t", "d,s,t,E", 3,
|
||||
OP_MATCH_XOR, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow},
|
||||
{"xorhi", "t,s,u", "t,s,u,E", 3,
|
||||
|
|
Loading…
Add table
Reference in a new issue