From 6a1754a359b12faa37a7c766474962d0c9b30abc Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Fri, 2 Mar 2007 12:15:01 +0000 Subject: [PATCH] 2007-03-02 Andrew Stubbs * gencode.c (tab): Correct pre-decrement instructions when m == n. --- sim/sh/ChangeLog | 4 ++++ sim/sh/gencode.c | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog index 0fe787786b9..8207483e99e 100644 --- a/sim/sh/ChangeLog +++ b/sim/sh/ChangeLog @@ -1,3 +1,7 @@ +2007-03-02 Andrew Stubbs + + * gencode.c (tab): Correct pre-decrement instructions when m == n. + 2006-12-21 Hans-Peter Nilsson * acconfig.h: Remove. diff --git a/sim/sh/gencode.c b/sim/sh/gencode.c index e86bd298f68..15313b0be0a 100644 --- a/sim/sh/gencode.c +++ b/sim/sh/gencode.c @@ -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);", -- 2.30.2