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:
Sandra Loosemore 2013-03-12 02:41:26 +00:00
parent f5cb796a1e
commit dad60f8e13
10 changed files with 84 additions and 0 deletions

View file

@ -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.

View file

@ -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},

View file

@ -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.

View file

@ -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"

View 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

View 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

View file

@ -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.

View file

@ -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)

View file

@ -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.

View file

@ -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,