]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - sim/sh/gencode.c
daily update
[thirdparty/binutils-gdb.git] / sim / sh / gencode.c
index c3c8c055b774418ea9ec8d0e09295ea3a35058d7..738b718e23ab86e3a7bda2e665b15d5cf270d177 100644 (file)
@@ -215,7 +215,9 @@ op tab[] =
     "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
     "if (R0 == 0)",
     "  R[n] = 0xffffffff;",
-    "else (unsigned int) R[n] = (unsigned int) R[n] / (unsigned int) R0;",
+    "/* FIXME: The result may be implementation-defined if it is outside */",
+    "/* the range of signed int (i.e. if R[n] was negative and R0 == 1).  */",
+    "else R[n] = R[n] / (unsigned int) R0;",
     "L (n);",
   },
   { "n", "0n", "mulr R0,<REG_N>", "0100nnnn10000000",
@@ -968,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);",
@@ -989,6 +993,7 @@ op tab[] =
     "L (0);",
   },
   { "n", "", "mov.l @(<disp>,PC),<REG_N>", "1101nnnni8p4....",
+    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
     "MA (1);",
     "R[n] = RLAT ((PH2T (PC) & ~3) + 4 + i);",
     "L (n);",
@@ -1033,9 +1038,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) ;",
@@ -1053,6 +1060,7 @@ op tab[] =
     "L (0);",
   },
   { "n", "", "mov.w @(<disp>,PC),<REG_N>", "1001nnnni8p2....",
+    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
     "MA (1);",
     "R[n] = RSWAT (PH2T (PC + 4 + i));",
     "L (n);",
@@ -1097,9 +1105,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);",
@@ -1112,6 +1122,7 @@ op tab[] =
   },
 
   { "0", "", "mova @(<disp>,PC),R0", "11000111i8p4....",
+    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
     "R0 = ((i + 4 + PH2T (PC)) & ~0x3);",
   },