Add swap byte (swapb) and swap halfword (swaph) opcodes.
authorMichael Eager <eager@eagercon.com>
Wed, 21 Nov 2012 17:54:11 +0000 (17:54 +0000)
committerMichael Eager <eager@eagercon.com>
Wed, 21 Nov 2012 17:54:11 +0000 (17:54 +0000)
binutils/opcodes
          * microblaze-opc.h (op_code_struct): Add swapb, swaph Increase MAX_OPCODES.
          * microblaze-opcm.h (microblaze_instr): Likewise
binutils/gas/testsuite
          * gas/microblaze/allinsn.s: Add swapb, swaph
          * gas/microblaze/allinsn.d: Likewise

gas/testsuite/ChangeLog
gas/testsuite/gas/microblaze/allinsn.d
gas/testsuite/gas/microblaze/allinsn.s
opcodes/ChangeLog
opcodes/microblaze-opc.h
opcodes/microblaze-opcm.h

index f460b47041e203afd01c7ceadd67d503e5b421fd..2661ff4b216a8f5fafb17ccdedf554f108211666 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-21  David Holsgrove  <david.holsgrove@xilinx.com>
+
+       * gas/microblaze/allinsn.s: Add swapb, swaph
+       * gas/microblaze/allinsn.d: Likewise
+
 2012-11-21  David Holsgrove  <david.holsgrove@xilinx.com>
 
        * gas/microblaze/allinsn.s: Test use of SHR, SLR
index 4a033404a875a5443f2025d946983000cc327124..b454fdb30fcbde00a74c201d12c5e08620b47b59 100644 (file)
@@ -41,3 +41,9 @@ Disassembly of section .text:
   30:  b0000000        imm     0
   34:  31600000        addik   r11, r0, 0
   38:  940bc802        mts     rshr, r11
+
+0000003c <swapb>:
+  3c:  900001e0        swapb   r0, r0
+
+00000040 <swaph>:
+  40:  900001e2        swaph   r0, r0
index 437444f9644738283ab50eb2fe962c5b72a04915..ffe91ca8eb0ac6d4d1f75bd4239d6f75a2857d0a 100644 (file)
@@ -46,4 +46,12 @@ regslr:
 regshr:
     la r11,r0,r0
     mts rshr,r11
+    .text
+    .global swapb
+swapb:
+    swapb r0,r0
+    .text
+    .global swaph
+swaph:
+    swaph r0,r0
 
index e5d08b0d223d7872945e654d0f064d8ece9563dd..ed74935eb73a7f7ca1df42f24ef945976ee53cf7 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-21  David Holsgrove  <david.holsgrove@xilinx.com>
+
+       * microblaze-opc.h (op_code_struct): Add swapb, swaph Increase MAX_OPCODES.
+       * microblaze-opcm.h (microblaze_instr): Likewise
+
 2012-11-21  Edgar E. Iglesias <edgar.iglesias@gmail.com>
 
        * microblaze-opcm.h: Add REG_SLR_MASK, REG_SHR_MASK, REG_SHR and REG_SLR
index 0447fc593377c8733ae1caeeeeee4e1d1beeda4d..404985b821f3fa33811e45fab19247f23a989901 100644 (file)
 #define DELAY_SLOT 1
 #define NO_DELAY_SLOT 0
 
-#define MAX_OPCODES 287
+#define MAX_OPCODES 289
 
 struct op_code_struct
 {
@@ -402,6 +402,8 @@ struct op_code_struct
   {"clz",       INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900000E0, OPCODE_MASK_H34,  clz,       special_inst },
   {"mbar",      INST_TYPE_IMM5,  INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8020004, OPCODE_MASK_HN,   mbar,      special_inst },
   {"sleep",     INST_TYPE_NONE,  INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBA020004, OPCODE_MASK_HN,   invalid_inst, special_inst }, /* translates to mbar 16.  */
+  {"swapb",     INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E0, OPCODE_MASK_H4,   swapb,     arithmetic_inst },
+  {"swaph",     INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E2, OPCODE_MASK_H4,   swaph,     arithmetic_inst },
   {"", 0, 0, 0, 0, 0, 0, 0, 0},
 };
 
index a2a42d0b9dd9118c7a545e9b8f6b6d8cfa24dc20..124cdec5485ca00428afac21a0742803936f113a 100644 (file)
@@ -27,7 +27,7 @@ enum microblaze_instr
 {
   add, rsub, addc, rsubc, addk, rsubk, addkc, rsubkc, clz, cmp, cmpu,
   addi, rsubi, addic, rsubic, addik, rsubik, addikc, rsubikc, mul, 
-  mulh, mulhu, mulhsu,
+  mulh, mulhu, mulhsu,swapb,swaph,
   idiv, idivu, bsll, bsra, bsrl, get, put, nget, nput, cget, cput,
   ncget, ncput, muli, bslli, bsrai, bsrli, mului, or, and, xor,
   andn, pcmpbf, pcmpbc, pcmpeq, pcmpne, sra, src, srl, sext8, sext16,