2007-02-22 Andrew Stubbs * gencode.c (tab): Correct pre-decrement instructions when m == n. Index: src/sim/sh/gencode.c =================================================================== --- src.orig/sim/sh/gencode.c 2005-06-17 04:13:07.000000000 +0100 +++ src/sim/sh/gencode.c 2007-02-23 12:04:35.000000000 +0000 @@ -970,9 +970,11 @@ op tab[] = "WBAT (R[n] + R0, R[m]);", }, { "n", "nm", "mov.b ,@-", "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,@+", "0100nnnn10001011", "MA (1);", @@ -1035,9 +1037,11 @@ op tab[] = "WLAT (R0 + R[n], R[m]);", }, { "n", "nm", "mov.l ,@-", "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,@+", "0100nnnn10101011", "MA (1) ;", @@ -1099,9 +1103,11 @@ op tab[] = "WWAT (R0 + R[n], R[m]);", }, { "n", "mn", "mov.w ,@-", "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,@+", "0100nnnn10011011", "MA (1);",