From: Frank Ch. Eigler Date: Thu, 5 Mar 1998 20:23:59 +0000 (+0000) Subject: * Fixed a double-buffering bug in PKE, due to naive use of X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=370e0ef781738ddc0171c86823323d46eae8c0fe;p=binutils-gdb.git * Fixed a double-buffering bug in PKE, due to naive use of complex macros with side-effects. Gripes. --- diff --git a/sim/mips/sky-pke.c b/sim/mips/sky-pke.c index c9dfe0e711e..db9ecc420e8 100644 --- a/sim/mips/sky-pke.c +++ b/sim/mips/sky-pke.c @@ -913,18 +913,19 @@ pke_check_stall(struct pke_device* me, enum pke_check_target what) void pke_flip_dbf(struct pke_device* me) { + int newdf; /* compute new TOP */ PKE_REG_MASK_SET(me, TOP, TOP, PKE_REG_MASK_GET(me, TOPS, TOPS)); /* flip DBF */ - PKE_REG_MASK_SET(me, DBF, DF, - PKE_REG_MASK_GET(me, DBF, DF) ? 0 : 1); - PKE_REG_MASK_SET(me, STAT, DBF, PKE_REG_MASK_GET(me, DBF, DF)); + newdf = PKE_REG_MASK_GET(me, DBF, DF) ? 0 : 1; + PKE_REG_MASK_SET(me, DBF, DF, newdf); + PKE_REG_MASK_SET(me, STAT, DBF, newdf); /* compute new TOPS */ PKE_REG_MASK_SET(me, TOPS, TOPS, (PKE_REG_MASK_GET(me, BASE, BASE) + - (PKE_REG_MASK_GET(me, DBF, DF) * - PKE_REG_MASK_GET(me, OFST, OFFSET)))); + newdf * PKE_REG_MASK_GET(me, OFST, OFFSET))); + /* this is equivalent to last word from okadaa (98-02-25): 1) TOP=TOPS; 2) TOPS=BASE + !DBF*OFFSET