From fc615b0b1eb002a7304b68665c65d3a2a84dfb05 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Tue, 11 Nov 1997 17:37:04 +0000 Subject: [PATCH] * simops.c (call:16 call:32): Stack adjustment is determined solely by the imm8 field. --- sim/mn10300/simops.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sim/mn10300/simops.c b/sim/mn10300/simops.c index 3d82952..9a3f3a3 100644 --- a/sim/mn10300/simops.c +++ b/sim/mn10300/simops.c @@ -2586,8 +2586,10 @@ void OP_CD000000 (insn, extension) sp -= 4; } - /* Update the stack pointer. */ - State.regs[REG_SP] = sp - extension; + /* Update the stack pointer, note that the register saves to do not + modify SP. The SP adjustment is derived totally from the imm8 + field. */ + State.regs[REG_SP] -= extension; State.regs[REG_MDR] = next_pc; State.regs[REG_PC] += SEXT16 ((insn & 0xffff00) >> 8) - 5; } @@ -2651,8 +2653,10 @@ void OP_DD000000 (insn, extension) sp -= 4; } - /* Update the stack pointer. */ - State.regs[REG_SP] = sp - (extension & 0xff); + /* Update the stack pointer, note that the register saves to do not + modify SP. The SP adjustment is derived totally from the imm8 + field. */ + State.regs[REG_SP] -= (extension & 0xff); State.regs[REG_MDR] = next_pc; State.regs[REG_PC] += (((insn & 0xffffff) << 8) | ((extension & 0xff0000) >> 16)) - 7; } -- 2.7.4