Commit 2d37be61e3a377843f4e8b8fcc837838294b8b3f
1 parent
483dcf53
M68k build fix.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2212 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
7 additions
and
4 deletions
target-m68k/op.c
@@ -412,7 +412,10 @@ OP(divu) | @@ -412,7 +412,10 @@ OP(divu) | ||
412 | quot = num / den; | 412 | quot = num / den; |
413 | rem = num % den; | 413 | rem = num % den; |
414 | flags = 0; | 414 | flags = 0; |
415 | - if (PARAM1 && quot > 0xffff) | 415 | + /* Avoid using a PARAM1 of zero. This breaks dyngen because it uses |
416 | + the address of a symbol, and gcc knows symbols can't have address | ||
417 | + zero. */ | ||
418 | + if (PARAM1 == 2 && quot > 0xffff) | ||
416 | flags |= CCF_V; | 419 | flags |= CCF_V; |
417 | if (quot == 0) | 420 | if (quot == 0) |
418 | flags |= CCF_Z; | 421 | flags |= CCF_Z; |
@@ -439,7 +442,7 @@ OP(divs) | @@ -439,7 +442,7 @@ OP(divs) | ||
439 | quot = num / den; | 442 | quot = num / den; |
440 | rem = num % den; | 443 | rem = num % den; |
441 | flags = 0; | 444 | flags = 0; |
442 | - if (PARAM1 && quot != (int16_t)quot) | 445 | + if (PARAM1 == 2 && quot != (int16_t)quot) |
443 | flags |= CCF_V; | 446 | flags |= CCF_V; |
444 | if (quot == 0) | 447 | if (quot == 0) |
445 | flags |= CCF_Z; | 448 | flags |= CCF_Z; |
target-m68k/translate.c
@@ -747,9 +747,9 @@ DISAS_INSN(divl) | @@ -747,9 +747,9 @@ DISAS_INSN(divl) | ||
747 | den = gen_ea(s, insn, OS_LONG, 0, NULL); | 747 | den = gen_ea(s, insn, OS_LONG, 0, NULL); |
748 | gen_op_mov32(QREG_DIV2, den); | 748 | gen_op_mov32(QREG_DIV2, den); |
749 | if (ext & 0x0800) { | 749 | if (ext & 0x0800) { |
750 | - gen_op_divs(0); | 750 | + gen_op_divs(2); |
751 | } else { | 751 | } else { |
752 | - gen_op_divu(0); | 752 | + gen_op_divu(2); |
753 | } | 753 | } |
754 | if (num == reg) { | 754 | if (num == reg) { |
755 | /* div */ | 755 | /* div */ |