Revision c6bfc164 target-i386/op_helper.c
b/target-i386/op_helper.c | ||
---|---|---|
1970 | 1970 |
|
1971 | 1971 |
void helper_daa(void) |
1972 | 1972 |
{ |
1973 |
int al, af, cf; |
|
1973 |
int old_al, al, af, cf;
|
|
1974 | 1974 |
int eflags; |
1975 | 1975 |
|
1976 | 1976 |
eflags = helper_cc_compute_all(CC_OP); |
1977 | 1977 |
cf = eflags & CC_C; |
1978 | 1978 |
af = eflags & CC_A; |
1979 |
al = EAX & 0xff; |
|
1979 |
old_al = al = EAX & 0xff;
|
|
1980 | 1980 |
|
1981 | 1981 |
eflags = 0; |
1982 | 1982 |
if (((al & 0x0f) > 9 ) || af) { |
1983 | 1983 |
al = (al + 6) & 0xff; |
1984 | 1984 |
eflags |= CC_A; |
1985 | 1985 |
} |
1986 |
if ((al > 0x9f) || cf) {
|
|
1986 |
if ((old_al > 0x99) || cf) {
|
|
1987 | 1987 |
al = (al + 0x60) & 0xff; |
1988 | 1988 |
eflags |= CC_C; |
1989 | 1989 |
} |
Also available in: Unified diff