From 97169c5dd31537b28f5f8ad08cd6cdf82c1ecefd Mon Sep 17 00:00:00 2001 From: Bertram Felgenhauer Date: Wed, 21 Nov 2007 10:26:27 +0000 Subject: [PATCH] FIX #1910: fix code generated for GDTOI on x86_32 --- compiler/nativeGen/PprMach.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/compiler/nativeGen/PprMach.hs b/compiler/nativeGen/PprMach.hs index 5115955..26a6f28 100644 --- a/compiler/nativeGen/PprMach.hs +++ b/compiler/nativeGen/PprMach.hs @@ -1415,9 +1415,18 @@ pprInstr g@(GDTOI src dst) pprInstr g@(GITOF src dst) = pprInstr (GITOD src dst) pprInstr g@(GITOD src dst) - = pprG g (hcat [gtab, text "pushl ", pprReg I32 src, - text " ; ffree %st(7); fildl (%esp) ; ", - gpop dst 1, text " ; addl $4,%esp"]) + = pprG g (vcat [ + hcat [gtab, text "subl $8, %esp ; fnstcw 4(%esp)"], + hcat [gtab, gpush src 0], + hcat [gtab, text "movzwl 4(%esp), ", reg, + text " ; orl $0xC00, ", reg], + hcat [gtab, text "movl ", reg, text ", 0(%esp) ; fldcw 0(%esp)"], + hcat [gtab, text "fistpl 0(%esp)"], + hcat [gtab, text "fldcw 4(%esp) ; movl 0(%esp), ", reg], + hcat [gtab, text "addl $8, %esp"] + ]) + where + reg = pprReg I32 dst {- Gruesome swamp follows. If you're unfortunate enough to have ventured this far into the jungle AND you give a Rat's Ass (tm) what's going -- 1.7.10.4