Commit c0b24a1dd67495dec07fb4740face382f471f9c4
1 parent
de758150
div64 fix (aka ssh bug)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1570 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
3 additions
and
2 deletions
target-i386/helper.c
| @@ -3261,7 +3261,7 @@ static void imul64(uint64_t *plow, uint64_t *phigh, int64_t a, int64_t b) | @@ -3261,7 +3261,7 @@ static void imul64(uint64_t *plow, uint64_t *phigh, int64_t a, int64_t b) | ||
| 3261 | static int div64(uint64_t *plow, uint64_t *phigh, uint64_t b) | 3261 | static int div64(uint64_t *plow, uint64_t *phigh, uint64_t b) |
| 3262 | { | 3262 | { |
| 3263 | uint64_t q, r, a1, a0; | 3263 | uint64_t q, r, a1, a0; |
| 3264 | - int i, qb; | 3264 | + int i, qb, ab; |
| 3265 | 3265 | ||
| 3266 | a0 = *plow; | 3266 | a0 = *plow; |
| 3267 | a1 = *phigh; | 3267 | a1 = *phigh; |
| @@ -3275,8 +3275,9 @@ static int div64(uint64_t *plow, uint64_t *phigh, uint64_t b) | @@ -3275,8 +3275,9 @@ static int div64(uint64_t *plow, uint64_t *phigh, uint64_t b) | ||
| 3275 | return 1; | 3275 | return 1; |
| 3276 | /* XXX: use a better algorithm */ | 3276 | /* XXX: use a better algorithm */ |
| 3277 | for(i = 0; i < 64; i++) { | 3277 | for(i = 0; i < 64; i++) { |
| 3278 | + ab = a1 >> 63; | ||
| 3278 | a1 = (a1 << 1) | (a0 >> 63); | 3279 | a1 = (a1 << 1) | (a0 >> 63); |
| 3279 | - if (a1 >= b) { | 3280 | + if (ab || a1 >= b) { |
| 3280 | a1 -= b; | 3281 | a1 -= b; |
| 3281 | qb = 1; | 3282 | qb = 1; |
| 3282 | } else { | 3283 | } else { |