2007-03-02 Andrew Stubbs <andrew.stubbs@st.com>
authorDaniel Jacobowitz <drow@false.org>
Fri, 2 Mar 2007 12:15:01 +0000 (12:15 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 2 Mar 2007 12:15:01 +0000 (12:15 +0000)
* gencode.c (tab): Correct pre-decrement instructions when m == n.

sim/sh/ChangeLog
sim/sh/gencode.c

index 0fe787786b95dfb54659b2cc655f1686b143b9c9..8207483e99eab75e3a5c5b146ec31fb17cfd5e65 100644 (file)
@@ -1,3 +1,7 @@
+2007-03-02  Andrew Stubbs  <andrew.stubbs@st.com>
+
+       * gencode.c (tab): Correct pre-decrement instructions when m == n.
+
 2006-12-21  Hans-Peter Nilsson  <hp@axis.com>
 
        * acconfig.h: Remove.
index e86bd298f68fd4e16301a2aefd90270620ef923a..15313b0be0a6838afc42317513a7ccd41f6c586c 100644 (file)
@@ -970,9 +970,11 @@ op tab[] =
     "WBAT (R[n] + R0, R[m]);",
   },
   { "n", "nm", "mov.b <REG_M>,@-<REG_N>", "0010nnnnmmmm0100",
+    /* Allow for the case where m == n.  */
+    "int t = R[m];",
     "MA (1);",
     "R[n] -= 1;",
-    "WBAT (R[n], R[m]);",
+    "WBAT (R[n], t);",
   },
   { "n", "n0", "mov.b R0,@<REG_N>+", "0100nnnn10001011",
     "MA (1);",
@@ -1035,9 +1037,11 @@ op tab[] =
     "WLAT (R0 + R[n], R[m]);",
   },
   { "n", "nm", "mov.l <REG_M>,@-<REG_N>", "0010nnnnmmmm0110",
+    /* Allow for the case where m == n.  */
+    "int t = R[m];",
     "MA (1) ;",
     "R[n] -= 4;",
-    "WLAT (R[n], R[m]);",
+    "WLAT (R[n], t);",
   },
   { "n", "n0", "mov.l R0,@<REG_N>+", "0100nnnn10101011",
     "MA (1) ;",
@@ -1099,9 +1103,11 @@ op tab[] =
     "WWAT (R0 + R[n], R[m]);",
   },
   { "n", "mn", "mov.w <REG_M>,@-<REG_N>", "0010nnnnmmmm0101",
+    /* Allow for the case where m == n.  */
+    "int t = R[m];",
     "MA (1);",
     "R[n] -= 2;",
-    "WWAT (R[n], R[m]);",
+    "WWAT (R[n], t);",
   },
   { "n", "0n", "mov.w R0,@<REG_N>+", "0100nnnn10011011",
     "MA (1);",