From 32e08a78a4a8932369bafb9f36081a4a3a794a57 Mon Sep 17 00:00:00 2001 From: sewardj Date: Wed, 19 Dec 2001 17:07:49 +0000 Subject: [PATCH] [project @ 2001-12-19 17:07:49 by sewardj] Correctly handle signed vs unsigned integer division on x86. --- ghc/compiler/nativeGen/PprMach.lhs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ghc/compiler/nativeGen/PprMach.lhs b/ghc/compiler/nativeGen/PprMach.lhs index 0e3ae29..13b1759 100644 --- a/ghc/compiler/nativeGen/PprMach.lhs +++ b/ghc/compiler/nativeGen/PprMach.lhs @@ -1133,12 +1133,14 @@ pprInstr_quotRem signed isQuot sz src dst = vcat [ (text "\t# BEGIN " <> fakeInsn), (text "\tpushl $0; pushl %eax; pushl %edx; pushl " <> pprOperand sz src), - (text "\tmovl " <> pprOperand sz dst <> text ",%eax; xorl %edx,%edx; cltd"), + (text "\tmovl " <> pprOperand sz dst <> text ",%eax; " <> widen_to_64), (x86op <> text " 0(%esp); movl " <> text resReg <> text ",12(%esp)"), (text "\tpopl %edx; popl %edx; popl %eax; popl " <> pprOperand sz dst), (text "\t# END " <> fakeInsn) ] where + widen_to_64 | signed = text "cltd" + | not signed = text "xorl %edx,%edx" x86op = if signed then text "\tidivl" else text "\tdivl" resReg = if isQuot then "%eax" else "%edx" opStr | signed = if isQuot then "IQUOT" else "IREM" -- 1.7.10.4