remove earlyclobber constraint from extendqisi2_insn
authorNick Clifton <nickc@cygnus.com>
Wed, 29 Jul 1998 14:11:16 +0000 (14:11 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 29 Jul 1998 14:11:16 +0000 (14:11 +0000)
From-SVN: r21471

gcc/ChangeLog
gcc/config/arm/thumb.md

index fc00c8452e8eece96b89f55724c50d64e1a4a7df..0b87938f408e85d36f1d6a00247d959b9c81847b 100644 (file)
@@ -1,3 +1,8 @@
+Wed Jul 29 11:47:10 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * config/arm/thumb.md (extendqisi2_insn): Remove earlyclobber
+       constraint from second alternative.
+
 Tue Jul 28 23:29:04 1998  Jason Merrill  <jason@yorick.cygnus.com>
 
        * configure.in: Fix --without/--disable cases for local-prefix, 
index 6886b8e24968cdc737a49f0d4a1fd816e84a4e22..0369bb1c6b01a960bbfe540dea29afed35e015d2 100644 (file)
 ")
 
 (define_insn "*extendqisi2_insn"
-  [(set (match_operand:SI 0 "register_operand" "=l,&l")
+  [(set (match_operand:SI 0 "register_operand" "=l,l")
        (sign_extend:SI (match_operand:QI 1 "memory_operand" "V,m")))]
   ""
   "*
     {
       ops[1] = XEXP (XEXP (operands[1], 0), 0);
       ops[2] = XEXP (XEXP (operands[1], 0), 1);
+      output_asm_insn (\"ldrsb\\t%0, [%1, %2]\", ops);
+    }
+  else if (REGNO (operands[0]) == REGNO (XEXP (operands[1], 0)))
+    {
+      output_asm_insn (\"ldrb\\t%0, [%0, #0]\;lsl\\t%0, %0, #24\;asr\\t%0, %0, #24\", ops);
     }
   else
     {
       ops[1] = XEXP (operands[1], 0);
       ops[2] = const0_rtx;
+      output_asm_insn (\"mov\\t%0, %2\;ldrsb\\t%0, [%1, %0]\", ops);
     }
-  output_asm_insn (\"mov\\t%0, %2\;ldrsb\\t%0, [%1, %0]\", ops);
   return \"\";
 }"
-[(set_attr "length" "2,4")])
+[(set_attr "length" "2,6")])
 
 ;; We don't really have extzv, but defining this using shifts helps
 ;; to reduce register pressure later on.