]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
authorSandra Loosemore <sandra@codesourcery.com>
Tue, 12 Mar 2013 02:41:26 +0000 (02:41 +0000)
committerSandra Loosemore <sandra@codesourcery.com>
Tue, 12 Mar 2013 02:41:26 +0000 (02:41 +0000)
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.

gas/ChangeLog
gas/config/tc-nios2.c
gas/testsuite/ChangeLog
gas/testsuite/gas/nios2/nios2.exp
gas/testsuite/gas/nios2/wrprs.d [new file with mode: 0644]
gas/testsuite/gas/nios2/wrprs.s [new file with mode: 0644]
include/ChangeLog
include/opcode/nios2.h
opcodes/ChangeLog
opcodes/nios2-opc.c

index de1a91e91cc8e9e9f8c60b1664d303847499324f..92ad5df1e30dfc744734533f86e98abb700d55fe 100644 (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.
index 841c45404d41a074ffd0ef3ce40b05b1372ee694..d669c604aaf893b1a25c7e5b20a53c3c22e18bf1 100644 (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},
index ad321f764a6c5c59ecbdb6b878e58d388c9d7c85..a672651d9b71b8760accaf88fc6137a0cf58707e 100644 (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.
index 173db00bbb66ca69faeda26a68404f7a3d5cb890..af22bf8b229ddb1cb9e14d72e63b1fe36aa7431e 100644 (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"
diff --git a/gas/testsuite/gas/nios2/wrprs.d b/gas/testsuite/gas/nios2/wrprs.d
new file mode 100644 (file)
index 0000000..2e6de57
--- /dev/null
@@ -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
diff --git a/gas/testsuite/gas/nios2/wrprs.s b/gas/testsuite/gas/nios2/wrprs.s
new file mode 100644 (file)
index 0000000..c722ce5
--- /dev/null
@@ -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
index f186941263ce438d3127f6566453906dcb7ee29d..a6722b693bf71bb43e18e9836a83a7743c2ed6f0 100644 (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.
index 83773d5f37838f5de36341200b2ccaae2ead7d6c..3405f55f8bd1ed370f884ed39b0072a122970bba 100644 (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)
index 846bc941257e39e28b2859ebc6557c80e001521b..554d8a0a86524ba0720bfdad4876dcdcf20ac583 100644 (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.
index 9617d47e0b141abf00943a8e05fd618a96ff6518..41903d06bdc11d951e3a994018173898bbe94e2f 100644 (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,