gas/
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 29 Dec 2006 21:48:48 +0000 (21:48 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 29 Dec 2006 21:48:48 +0000 (21:48 +0000)
2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>

* config/tc-i386.c (build_modrm_byte): Handle shift count
register with 3 operands.

gas/testsuite/

2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>

* gas/i386/intel.s: Add tests for "shrd %cl,%edx,%eax" and
"shld %cl,%edx,%eax".
* gas/i386/opcode.s: Likewise.

* gas/i386/intel.d: Updated.
* gas/i386/opcode-intel.d: Likewise.
* gas/i386/opcode-suffix.d: Likewise.
* gas/i386/opcode.d: Likewise.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/intel.d
gas/testsuite/gas/i386/intel.s
gas/testsuite/gas/i386/opcode-intel.d
gas/testsuite/gas/i386/opcode-suffix.d
gas/testsuite/gas/i386/opcode.d
gas/testsuite/gas/i386/opcode.s

index bb811e3e2cc63c7abd6eb518f4383bea362f8271..a44e94d548e0869ea0d9262ad28a4b6eca0580e6 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (build_modrm_byte): Handle shift count
+       register with 3 operands.
+
 2006-12-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/tc-i386.c (process_operands): Check i.reg_operands
index 079e9d88660c6ae2f45bcd7f3aa22b0c6350d6ac..daa0ddb56b51e91e15c0b52a4f1ddd96176a94a4 100644 (file)
@@ -3436,10 +3436,13 @@ build_modrm_byte ()
          source = 0;
          break;
        case 3:
-         /* When there are 3 operands, one of them must be immediate,
-            which may be the first or the last operand.  */
-         assert (i.imm_operands == 1);
-         source = (i.types[0] & Imm) ? 1 : 0;
+         /* When there are 3 operands, one of them may be immediate,
+            which may be the first or the last operand.  Otherwise,
+            the first operand must be shift count register (cl). */
+         assert (i.imm_operands == 1
+                 || (i.imm_operands == 0
+                     && (i.types[0] & ShiftCount)));
+         source = (i.types[0] & (Imm | ShiftCount)) ? 1 : 0;
          break;
        case 4:
          /* When there are 4 operands, the first two must be immediate
index 9c3800840f0e8771d961ba0ae5cf22f120b97cc2..3561fd9ddd619f0875a622ab0004a79ecaca8740 100644 (file)
@@ -1,3 +1,14 @@
+2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gas/i386/intel.s: Add tests for "shrd %cl,%edx,%eax" and
+       "shld %cl,%edx,%eax".
+       * gas/i386/opcode.s: Likewise.
+
+       * gas/i386/intel.d: Updated.
+       * gas/i386/opcode-intel.d: Likewise.
+       * gas/i386/opcode-suffix.d: Likewise.
+       * gas/i386/opcode.d: Likewise.
+
 2006-12-27  Kazu Hirata  <kazu@codesourcery.com>
 
        * gas/m68k/all.exp: Add support for fido.
index 184cdbca4fb2cefd6b772630725eda1189adb444..69202ce8d43af1aecae1b37bfa78d5656401c3dc 100644 (file)
@@ -628,5 +628,6 @@ Disassembly of section .text:
  a87:  b0 11 [         ]*mov    \$0x11,%al
  a89:  b3 47 [         ]*mov    \$0x47,%bl
  a8b:  b3 47 [         ]*mov    \$0x47,%bl
- a8d:  00 00 .*
+ a8d:  0f ad d0 [      ]*shrd   %cl,%edx,%eax
+ a90:  0f a5 d0 [      ]*shld   %cl,%edx,%eax
 [      ]*...
index e0eedc9971c4986312e008455a4938c4a3f01f95..ef65aa9c30f09a2609f75aa5896ca165095c495b 100644 (file)
@@ -624,5 +624,8 @@ rot5:
        mov     %al, 0x11
        mov     %bl, ((( 0x4711  ) >> 8) & 0xff) 
        mov     %bl, 0x47
-       
+
+ shrd   eax, edx, cl
+ shld   eax, edx, cl
+
  .p2align 4,0
index c4ea83523d81f0604237e7b98bac42fcf16f0581..2a3c44bb69e84a301c2c8c14476d083af3c2ef89 100644 (file)
@@ -606,4 +606,6 @@ Disassembly of section .text:
  *[0-9a-f]+:   0f 00 c8[       ]+str[  ]+eax
  *[0-9a-f]+:   66 0f 00 c8[    ]+str[  ]+ax
  *[0-9a-f]+:   0f 00 08[       ]+str[  ]+(WORD PTR )?\[eax\]
+ *[0-9a-f]+:   0f ad d0 [      ]*shrd[         ]+eax,edx,cl
+ *[0-9a-f]+:   0f a5 d0 [      ]*shld[         ]+eax,edx,cl
        \.\.\.
index 95788b41fa29d304df3dabe9027abff86970868d..de9c745d4d5db12615c3dbf389410db32c52caad 100644 (file)
@@ -583,4 +583,6 @@ Disassembly of section .text:
  *[0-9a-f]+:   0f 00 c8[       ]+strl[         ]+%eax
  *[0-9a-f]+:   66 0f 00 c8[    ]+strw[         ]+%ax
  *[0-9a-f]+:   0f 00 08[       ]+strw[         ]+\(%eax\)
+ *[0-9a-f]+:   0f ad d0 [      ]*shrdl[        ]+%cl,%edx,%eax
+ *[0-9a-f]+:   0f a5 d0 [      ]*shldl[        ]+%cl,%edx,%eax
        \.\.\.
index b0eea3ca5fe6d1f803f9c9dec8630810f095b818..f7ae9213537e7e37a1ea4292a19c7df6f70663fa 100644 (file)
@@ -582,4 +582,6 @@ Disassembly of section .text:
  9e5:  0f 00 c8 [      ]*str    %eax
  9e8:  66 0f 00 c8 [   ]*str    %ax
  9ec:  0f 00 08 [      ]*str    \(%eax\)
+ 9ef:  0f ad d0 [      ]*shrd   %cl,%edx,%eax
+ 9f2:  0f a5 d0 [      ]*shld   %cl,%edx,%eax
        \.\.\.
index f289042be46a3f388680a0e08a9a9768884b120a..d5641dc28d76752a84e366bf27bac1a2b2c2658a 100644 (file)
@@ -578,5 +578,8 @@ foo:
  str   %ax
  str   (%eax)
 
+ shrd   %cl,%edx,%eax
+ shld   %cl,%edx,%eax
+
 # Force a good alignment.
  .p2align 4,0