| Submitter | Boris Figovsky |
|---|---|
| Date | Aug. 30, 2011, 7 a.m. |
| Message ID | <4e5c8d01.05cbe30a.22c4.ffffe8ac@mx.google.com> |
| Download | mbox | patch |
| Permalink | /patch/112183/ |
| State | New |
| Headers | show |
Comments
On 30 August 2011 08:00, Boris Figovsky <boris.figovsky@ravellosystems.com> wrote: > The second if statement should consider the original al register value, > and not the new one. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> (It took me some time to convince myself that the line CF <- old_CF or (Carry from AL <- AL + 6) in the Intel architecture manual is actually redundant; the AMD docs are much clearer here...) -- PMM
On Tue, Aug 30, 2011 at 10:00:55AM +0300, Boris Figovsky wrote: > The second if statement should consider the original al register value, > and not the new one. > > Signed-off-by: Boris Figovsky <boris.figovksy@ravellosystems.com> > --- > target-i386/op_helper.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) Thanks, applied to the trivial patches tree: http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/trivial-patches Stefan
Patch
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c index 1bbc3b5..1fc248f 100644 --- a/target-i386/op_helper.c +++ b/target-i386/op_helper.c @@ -1970,20 +1970,20 @@ void helper_aas(void) void helper_daa(void) { - int al, af, cf; + int old_al, al, af, cf; int eflags; eflags = helper_cc_compute_all(CC_OP); cf = eflags & CC_C; af = eflags & CC_A; - al = EAX & 0xff; + old_al = al = EAX & 0xff; eflags = 0; if (((al & 0x0f) > 9 ) || af) { al = (al + 6) & 0xff; eflags |= CC_A; } - if ((al > 0x9f) || cf) { + if ((old_al > 0x99) || cf) { al = (al + 0x60) & 0xff; eflags |= CC_C; }
The second if statement should consider the original al register value, and not the new one. Signed-off-by: Boris Figovsky <boris.figovksy@ravellosystems.com> --- target-i386/op_helper.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)