This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[arm] Thumb mul assembly


The thumb mul instruction takes two operands:
  mul rd, rm
Technically the three-operand form of this instruction would be
  mul rd, rm, rd
not
  mul rd, rd, rm

While these are the same on recent arm architectures, the latter is undefined 
on earlier architecture revisions. Unfortunately GAS only allows the first 
three-argument form in thumb mode, which is inconsistent with arm mode.

The patch below changes gcc to generate the two argument form 

Paul

2005-04-26  Paul Brook  <paul@codesourcery.com>

	* config/arm/arm.md (thumb_mulsi3): Use two-operand assembly form.

Index: gcc/config/arm/arm.md
===================================================================
RCS file: /var/cvsroot/gcc-cvs/gcc/gcc/config/arm/arm.md,v
retrieving revision 1.145.2.31
diff -u -p -r1.145.2.31 arm.md
--- gcc/config/arm/arm.md	28 Mar 2005 19:04:37 -0000	1.145.2.31
+++ gcc/config/arm/arm.md	26 Apr 2005 16:32:44 -0000
@@ -1080,9 +1080,9 @@
   "TARGET_THUMB"
   "*
   if (which_alternative < 2)
-    return \"mov\\t%0, %1\;mul\\t%0, %0, %2\";
+    return \"mov\\t%0, %1\;mul\\t%0, %2\";
   else
-    return \"mul\\t%0, %0, %2\";
+    return \"mul\\t%0, %2\";
   "
   [(set_attr "length" "4,4,2")
    (set_attr "insn" "mul")]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]