[project @ 2000-06-29 13:51:38 by sewardj]
authorsewardj <unknown>
Thu, 29 Jun 2000 13:51:38 +0000 (13:51 +0000)
committersewardj <unknown>
Thu, 29 Jun 2000 13:51:38 +0000 (13:51 +0000)
Add the x86 annotator part of cacheprof as a new nofib test.

real/cacheprof/Arch_x86.hs [new file with mode: 0644]
real/cacheprof/CacheAnn.hs [new file with mode: 0644]
real/cacheprof/Generics.hs [new file with mode: 0644]
real/cacheprof/Makefile [new file with mode: 0644]
real/cacheprof/cacheprof.stdin [new file with mode: 0644]
real/cacheprof/cacheprof.stdout [new file with mode: 0644]
real/cacheprof/cacheprof_hooks2_x86.s [new file with mode: 0644]

diff --git a/real/cacheprof/Arch_x86.hs b/real/cacheprof/Arch_x86.hs
new file mode 100644 (file)
index 0000000..f1c4334
--- /dev/null
@@ -0,0 +1,452 @@
+
+{------------------------------------------------------------------------}
+{--- Beginnings of X86 specific stuff                Arch_X86.hs      ---}
+{------------------------------------------------------------------------}
+
+{- 
+   This file is part of Cacheprof, a profiling tool for finding
+   sources of cache misses in programs.
+
+   Copyright (C) 1999 Julian Seward (jseward@acm.org) 
+   Home page: http://www.cacheprof.org
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file LICENSE.
+-}
+
+module Arch_x86 (
+   Opcode(..),
+   OperandInfo(..),
+   OperandEffect(..),
+   x86info,
+   nonJumpyOpcodes
+)
+
+where
+
+data Opcode 
+   = O_movl | O_movw | O_movb
+   | O_movzbw | O_movzbl | O_movzwl 
+   | O_movsbw | O_movsbl | O_movswl 
+   | O_pushl | O_popl 
+   | O_pushfl | O_popfl
+   | O_notl | O_notw | O_notb
+   | O_sall | O_salw | O_salb
+   | O_sarl | O_sarw | O_sarb
+   | O_shrl | O_shrw | O_shrb
+   | O_roll | O_rolw | O_rolb
+   | O_rorl | O_rorw | O_rorb
+   | O_shldl | O_shrdl
+   | O_addl | O_addw | O_addb
+   | O_adcl
+   | O_subl | O_subw | O_subb
+   | O_sbbl
+   | O_imull | O_imulw | O_imulb
+   | O_mull
+   | O_divl | O_divw | O_divb
+   | O_idivl
+   | O_xorl | O_xorw | O_xorb
+   | O_andl | O_andw | O_andb
+   | O_orl  | O_orw  | O_orb
+   | O_incl | O_incw | O_incb
+   | O_decl | O_decw | O_decb
+   | O_negl | O_negw | O_negb
+   | O_testl | O_testw | O_testb
+   | O_leal
+   | O_cmpl | O_cmpw | O_cmpb
+
+   | O_cmpsb
+   | O_scasb
+   | O_movsl | O_movsw | O_movsb
+   | O_stosl | O_stosw | O_stosb
+
+   | O_leave | O_ret | O_call | O_jmp
+   | O_je | O_jne 
+   | O_jl | O_jle 
+   | O_jg | O_jge
+   | O_js | O_jns
+   | O_jz | O_jnz
+   | O_jc | O_jnc
+   | O_jo | O_jno
+   | O_ja | O_jae
+   | O_jb | O_jbe
+   | O_jp
+   | O_seta | O_setae
+   | O_setb | O_setbe
+   | O_sete | O_setne
+   | O_setl | O_setle
+   | O_setg | O_setge
+   | O_setc | O_setcb
+   | O_btl | O_btsl | O_btrl | O_btcl
+   | O_cld
+   | O_cltd
+   | O_cwtl
+   | O_cbtw
+   | O_rep | O_repz | O_repnz
+   | O_fild | O_fildl | O_fildll
+   | O_fsubp | O_fsubr | O_fsubrp | O_fsubrl | O_fsubrs 
+             | O_fsubs | O_fsubl | O_fsub
+   | O_faddp | O_fadds | O_faddl | O_fadd | O_fiaddl
+   | O_fmul | O_fmuls | O_fmull | O_fmulp
+   | O_fimull
+   | O_fdiv | O_fdivp | O_fdivr | O_fdivrs | O_fdivrl | O_fdivrp
+   | O_fidivl | O_fidivrl | O_fdivl | O_fdivs
+   | O_fprem                -- remainder (st(0) / st(1))
+   | O_fstp | O_fsts | O_fstps | O_fstl | O_fstpl | O_fstpt | O_fst
+   | O_fistl | O_fistpl | O_fistpll              -- store (int)st(0)
+   | O_fld
+   | O_flds
+   | O_fldl
+   | O_fldt
+   | O_fldz | O_fld1 | O_fldl2e | O_fldln2
+   | O_fchs
+   | O_fsin | O_fcos | O_fptan | O_fsqrt | O_fpatan | O_fabs
+   | O_f2xm1 | O_fscale | O_fyl2x
+   | O_fucom | O_fucomp | O_fucompp
+   | O_fcomp | O_fcompp | O_fcoml | O_fcompl | O_ficompl
+   | O_fcoms | O_fcom | O_fcomps
+   | O_fnstsw               -- store FP status word
+   | O_fnstcw               -- store FP control word
+   | O_fldcw                -- load FP control word
+   | O_frndint              -- round ST(0) to nearest int
+   | O_fxch
+   | O_sahf                 -- store AH into flags
+   | O_nop
+     deriving (Show, Eq)
+
+
+x86info :: [(Opcode, OperandInfo)]
+x86info 
+  = [
+      (O_movl,    OI [OE_RW 4 4]),
+      (O_movw,    OI [OE_RW 2 2]),
+      (O_movb,    OI [OE_RW 1 1]),
+
+      (O_movzbw,  OI [OE_RW 1 2]),
+      (O_movzbl,  OI [OE_RW 1 4]),
+      (O_movzwl,  OI [OE_RW 2 4]),
+
+      (O_movsbw,  OI [OE_RW 1 2]),
+      (O_movsbl,  OI [OE_RW 1 4]),
+      (O_movswl,  OI [OE_RW 2 4]),
+
+      (O_pushl,   OI_Special),
+      (O_popl,    OI_Special),
+      (O_pushfl,  OI_Error),    -- only generated by simplify?
+      (O_popfl,   OI_Error),    -- only generated by simplify?
+
+      (O_sall,    OI [OE_RM 1 4]),
+      (O_salw,    OI [OE_RM 1 2]),
+      (O_salb,    OI [OE_RM 1 1]),
+
+      (O_sarl,    OI [OE_RM 1 4]),
+      (O_sarw,    OI [OE_RM 1 2]),
+      (O_sarb,    OI [OE_RM 1 1]),
+
+      (O_shrl,    OI [OE_RM 1 4]),
+      (O_shrw,    OI [OE_RM 1 2]),
+      (O_shrb,    OI [OE_RM 1 1]),
+
+      (O_roll,    OI [OE_RM 1 4]),
+      (O_rolw,    OI [OE_RM 1 2]),
+      (O_rolb,    OI [OE_RM 1 1]),
+
+      (O_rorl,    OI [OE_RM 1 4]),
+      (O_rorw,    OI [OE_RM 1 2]),
+      (O_rorb,    OI [OE_RM 1 1]),
+
+      (O_shldl,   OI [OE_RRM 4 4 4, OE_RM 4 4]),  -- dubious
+      (O_shrdl,   OI [OE_RRM 4 4 4, OE_RM 4 4]),  -- equally dubious
+
+      (O_addl,    OI [OE_RM 4 4]),
+      (O_addw,    OI [OE_RM 2 2]),
+      (O_addb,    OI [OE_RM 1 1]),
+
+      (O_adcl,    OI [OE_RM 4 4]),
+
+      (O_subl,    OI [OE_RM 4 4]),
+      (O_subw,    OI [OE_RM 2 2]),
+      (O_subb,    OI [OE_RM 1 1]),
+
+      (O_sbbl,    OI [OE_RM 4 4]),   -- check this!
+
+      (O_imull,   OI [OE_M 4, OE_RM 4 4, OE_RRM 4 4 4]),   -- dubious
+      (O_imulb,   OI [OE_M 1]),              -- dubious
+      (O_imulw,   OI [OE_M 2, OE_RM 2 2]),   -- dubious
+      (O_mull,    OI [OE_M 4]),              -- dubious
+      (O_idivl,   OI [OE_M 4]),
+      (O_divl,    OI [OE_M 4]),
+      (O_divw,    OI [OE_M 2]),
+      (O_divb,    OI [OE_M 1]),
+
+      (O_xorl,    OI [OE_RM 4 4]),
+      (O_xorw,    OI [OE_RM 2 2]),
+      (O_xorb,    OI [OE_RM 1 1]),
+
+      (O_andl,    OI [OE_RM 4 4]),
+      (O_andw,    OI [OE_RM 2 2]),
+      (O_andb,    OI [OE_RM 1 1]),
+
+      (O_orl,     OI [OE_RM 4 4]),
+      (O_orw,     OI [OE_RM 2 2]),
+      (O_orb,     OI [OE_RM 1 1]),
+
+      (O_incl,    OI [OE_M 4]),
+      (O_incw,    OI [OE_M 2]),
+      (O_incb,    OI [OE_M 1]),
+
+      (O_decl,    OI [OE_M 4]),
+      (O_decw,    OI [OE_M 2]),
+      (O_decb,    OI [OE_M 1]),
+
+      (O_negl,    OI [OE_M 4]),
+      (O_negw,    OI [OE_M 2]),
+      (O_negb,    OI [OE_M 1]),
+
+      (O_notl,    OI [OE_M 4]),
+      (O_notw,    OI [OE_M 2]),
+      (O_notb,    OI [OE_M 1]),
+
+      (O_testl,   OI [OE_RR 4 4]),
+      (O_testw,   OI [OE_RR 2 2]),
+      (O_testb,   OI [OE_RR 1 1]),
+
+      (O_leal,    OI [OE_nW 4]),
+
+      (O_cmpl,    OI [OE_RR 4 4]),
+      (O_cmpw,    OI [OE_RR 2 2]),
+      (O_cmpb,    OI [OE_RR 1 1]),
+
+      (O_cmpsb,   OI_Special),  -- really is
+      (O_scasb,   OI_Special),  -- really is
+      (O_movsl,   OI_Special),
+      (O_movsw,   OI_Special),
+      (O_movsb,   OI_Special),
+      (O_stosl,   OI_Special),
+      (O_stosw,   OI_Special),
+      (O_stosb,   OI_Special),
+
+      (O_leave,   OI_Error),
+      (O_ret,     OI_Special),
+      (O_call,    OI_Special),
+
+      (O_jmp,     OI_Jumpy),
+      (O_je,      OI_Jumpy),
+      (O_jne,     OI_Jumpy),
+      (O_jl,      OI_Jumpy),
+      (O_jle,     OI_Jumpy),
+      (O_jg,      OI_Jumpy),
+      (O_jge,     OI_Jumpy),
+      (O_js,      OI_Jumpy),
+      (O_jns,     OI_Jumpy),
+      (O_jz,      OI_Jumpy),
+      (O_jnz,     OI_Jumpy),
+      (O_jc,      OI_Jumpy),
+      (O_jnc,     OI_Jumpy),
+      (O_jo,      OI_Jumpy),
+      (O_jno,     OI_Jumpy),
+      (O_ja,      OI_Jumpy),
+      (O_jae,     OI_Jumpy),
+      (O_jb,      OI_Jumpy),
+      (O_jbe,     OI_Jumpy),
+      (O_jp,      OI_Jumpy),
+
+      (O_seta,    OI [OE_W 1]),
+      (O_setae,   OI [OE_W 1]),
+      (O_setb,    OI [OE_W 1]),
+      (O_setbe,   OI [OE_W 1]),
+      (O_sete,    OI [OE_W 1]),       -- check
+      (O_setne,   OI [OE_W 1]),
+      (O_setl,    OI [OE_W 1]),       -- check
+      (O_setle,   OI [OE_W 1]),       -- check
+      (O_setg,    OI [OE_W 1]),       -- check
+      (O_setge,   OI [OE_W 1]),       -- check
+      (O_setc,    OI [OE_W 1]),       -- check
+      (O_setcb,   OI [OE_W 1]),       -- check
+
+      (O_btl,     OI [OE_RR 4 4]),    -- check
+      (O_btsl,    OI [OE_RM 4 4]),    -- check
+      (O_btcl,    OI [OE_RM 4 4]),    -- check
+      (O_btrl,    OI [OE_RM 4 4]),    -- check
+
+      (O_cld,     OI_NoEffect),  -- dubious
+      (O_cltd,    OI_NoEffect),  -- dubious
+      (O_cwtl,    OI_NoEffect),  -- dubious
+      (O_cbtw,    OI_NoEffect),  -- dubious
+
+      (O_rep,     OI_Error),
+      (O_repz,    OI_Error),
+      (O_repnz,   OI_Error),
+
+      (O_fld,     OI [OE_R 8]),       -- very dubious
+      (O_fldt,    OI [OE_R 8]),       -- very dubious
+      (O_fldl,    OI [OE_R 8]),       -- dubious
+      (O_flds,    OI [OE_R 4]),       -- dubious
+      (O_fild,    OI [OE_R 4]),       -- or is it OE_R 2
+      (O_fildl,   OI [OE_R 4]),       -- dubious
+      (O_fildll,  OI [OE_R 8]),
+
+      (O_fstl,    OI [OE_W 8]),       -- dubious
+      (O_fstpl,   OI [OE_W 8]),       -- dubious
+      (O_fstp,    OI [OE_W 8]),       -- dubious
+      (O_fstps,   OI [OE_W 4]),       -- dubious
+      (O_fsts,    OI [OE_W 4]),       -- dubious
+      (O_fstpt,   OI [OE_W 8]),       -- dubious
+      (O_fistl,   OI [OE_W 4]),       -- dubious
+      (O_fistpl,  OI [OE_W 4]),       -- dubious
+      (O_fistpll, OI [OE_W 8]),       -- dubious
+      (O_fst,     OI [OE_W 8]),       -- dubious
+
+      (O_fldz,    OI_NoEffect),  -- dubious
+      (O_fld1,    OI_NoEffect),  -- dubious
+      (O_fldl2e,  OI_NoEffect),
+      (O_fldln2,  OI_NoEffect),
+
+      (O_fchs,    OI_NoEffect),
+
+      (O_fsin,    OI_NoEffect),
+      (O_fcos,    OI_NoEffect),
+      (O_fptan,   OI_NoEffect),
+      (O_fsqrt,   OI_NoEffect),
+      (O_fpatan,  OI_NoEffect),
+      (O_fabs,    OI_NoEffect),
+      (O_f2xm1,   OI_NoEffect),
+      (O_fscale,  OI_NoEffect),
+      (O_fyl2x,   OI_NoEffect),
+
+      (O_faddp,   OI [OE_R 8, OE_RM 8 8]),
+      (O_fadds,   OI [OE_R 4]),
+      (O_faddl,   OI [OE_R 8]),
+      (O_fiaddl,  OI [OE_R 4]),
+      (O_fadd,    OI [OE_R 8, OE_RM 8 8]),
+
+      (O_fsubp,   OI [OE_RM 8 8]),
+      (O_fsubrp,  OI [OE_RM 8 8]),
+      (O_fsubrl,  OI [OE_R 8]),
+      (O_fsubrs,  OI [OE_R 4]),
+      (O_fsubs,   OI [OE_R 4]),
+      (O_fsubl,   OI [OE_R 8]),       -- dubious
+      (O_fsub,    OI [OE_R 8, OE_RM 8 8]),
+      (O_fsubr,   OI [OE_R 8, OE_RM 8 8]),
+
+      (O_fmul,    OI [OE_R 8, OE_RM 8 8]),
+      (O_fmuls,   OI [OE_R 4]),
+      (O_fmull,   OI [OE_R 8]),
+      (O_fmulp,   OI [OE_R 8, OE_RM 8 8]),
+      (O_fimull,  OI [OE_R 8]),       -- dubious
+
+      (O_fdiv,    OI [OE_RM 8 8]),    -- dubious
+      (O_fdivp,   OI [OE_RM 8 8]),    -- dubious
+      (O_fdivr,   OI [OE_RM 8 8]),    -- dubious
+      (O_fdivrl,  OI [OE_R 8]),       -- haven't got a clue
+      (O_fdivrs,  OI [OE_R 4]),       -- haven't got a clue
+      (O_fdivrp,  OI [OE_RM 8 8]),    -- dubious
+      (O_fidivrl, OI [OE_R 4]),
+      (O_fidivl,  OI [OE_R 4]),
+      (O_fdivl,   OI [OE_R 8]),
+      (O_fdivs,   OI [OE_R 4]),
+
+      (O_fprem,   OI_NoEffect),
+
+      (O_fucom,   OI_NoEffect),  -- dubious
+      (O_fucomp,  OI_NoEffect),  -- dubious
+      (O_fucompp, OI_NoEffect),  -- dubious
+
+      (O_fcomp,   OI_NoEffect),  -- dubious
+      (O_fcompp,  OI_NoEffect),  -- dubious
+      (O_fcoms,   OI [OE_R 4]),       -- dubious
+      (O_fcoml,   OI [OE_R 8]),       -- dubious
+      (O_fcom,    OI [OE_R 8]),       -- dubious
+      (O_fcomps,  OI [OE_R 4]),       -- dubious
+      (O_fcompl,  OI [OE_R 8]),       -- dubious
+      (O_ficompl, OI [OE_R 4]),       -- dubious
+
+      (O_fnstsw,  OI [OE_W 2]),
+      (O_fnstcw,  OI [OE_W 2]),
+      (O_fldcw,   OI [OE_R 2]),
+      (O_fxch,    OI_NoEffect),
+
+      (O_frndint, OI_NoEffect),
+      (O_sahf,    OI_NoEffect),
+      (O_nop,     OI_NoEffect)
+   ]
+
+
+
+data OperandInfo
+   = OI_Special
+   | OI_Jumpy
+   | OI_NoEffect
+   | OI_Error
+   | OI [OperandEffect]
+     deriving (Show, Eq)
+
+data OperandEffect
+   = OE_RR  Int Int
+   | OE_RM  Int Int
+   | OE_RW  Int Int
+   | OE_nW      Int
+   | OE_RRM Int Int Int
+   | OE_R   Int
+   | OE_M   Int
+   | OE_W   Int
+     deriving (Show, Eq)
+
+
+-- Only put an opcode in here if it definitely doesn't
+-- cause a control flow transfer.  It's safe to not put
+-- stuff in here.
+-- Contents are quite arbitrary, and based on looking at
+-- common sequences of annotated code.  Arbitrary is safe
+-- because it's always safe to leave opcodes out of this list.
+nonJumpyOpcodes :: [Opcode]
+nonJumpyOpcodes
+   = [
+         O_pushl, O_popl
+        ,O_movl ,O_movw ,O_movb
+        ,O_andl ,O_andw ,O_andb
+        ,O_orl  ,O_orw  ,O_orb
+        ,O_xorl ,O_xorw ,O_xorb
+        ,O_addl ,O_addw ,O_addb
+        ,O_subl ,O_subw ,O_subb
+        ,O_incl ,O_incw ,O_incb
+        ,O_decl ,O_decw ,O_decb
+        ,O_cmpl ,O_cmpw ,O_cmpb
+        ,O_sall ,O_salw ,O_salb
+        ,O_shrl ,O_shrw ,O_shrb
+        ,O_sarl
+        ,O_leal
+        ,O_movzbw ,O_movzbl ,O_movzwl 
+        ,O_movsbw ,O_movsbl ,O_movswl 
+
+        , O_seta , O_setae
+        , O_setb , O_setbe
+        , O_sete , O_setne
+        , O_setl , O_setle
+        , O_setg , O_setge
+        , O_setc , O_setcb
+
+        , O_testl , O_testw , O_testb
+
+        , O_fld1 , O_fcoml , O_fnstsw , O_fstpl
+        , O_fstp , O_fsubrl , O_fldl , O_faddl , O_fsubl
+
+     ]
+
+{------------------------------------------------------------------------}
+{--- end                                             Arch_X86.hs      ---}
+{------------------------------------------------------------------------}
diff --git a/real/cacheprof/CacheAnn.hs b/real/cacheprof/CacheAnn.hs
new file mode 100644 (file)
index 0000000..18772bf
--- /dev/null
@@ -0,0 +1,1518 @@
+
+{------------------------------------------------------------------------}
+{--- An assembly code annotator for gcc >= 2.7.X on x86-linux-2.X     ---}
+{---                                                      CacheAnn.hs ---}
+{------------------------------------------------------------------------}
+
+{- 
+   This file is part of Cacheprof, a profiling tool for finding
+   sources of cache misses in programs.
+
+   Copyright (C) 1999 Julian Seward (jseward@acm.org)
+   Home page: http://www.cacheprof.org
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file LICENSE.
+-}
+
+module Main ( main ) where
+import Char
+import List
+import IO
+import System
+import Arch_x86
+import Generics
+
+
+{-----------------------------------------------------------}
+{--- Stage 1.  Break input string into pre-parsed lines  ---}
+{-----------------------------------------------------------}
+
+-- This stage is separated from instruction parsing
+-- proper mostly for conceptual cleanliness.
+
+-- Lines can either be:
+--    a label definition, on its own (Label)
+--    an instruction (Real)
+--    anything else (Pseudo)
+-- If instruction counting is to work properly,
+-- labels should not be concealed inside Pseudos. 
+
+data PreLine
+   = PrePseudo Int String
+   | PreLabel  Int String
+   | PreReal   Int String
+     deriving Show
+
+instance PP PreLine where
+   pp m (PrePseudo ln s)  = "preP: " ++ s
+   pp m (PreLabel  ln s)  = "preL: " ++ s
+   pp m (PreReal   ln s)  = "preR: " ++ s
+
+-- section-main
+preparse :: String -> [PreLine]
+preparse  
+   = concatMap preparseLine . zip [1..] . lines
+
+
+preparseLine :: (Int, String) -> [PreLine]
+preparseLine (line_number,s)
+   | null cleaned 
+   = []
+   | looks_like_label cleaned
+   = case span isLabelIsh cleaned of
+        (label_name, rest) 
+           -> (PreLabel line_number (label_name ++ [head rest]))
+              : preparseLine (line_number, tail rest)
+   | head cleaned `elem` ".#"
+   = [PrePseudo line_number s]
+   | otherwise
+   = case span (/= ';') cleaned of
+        (presemi, postsemi)
+           -> (PreReal line_number presemi)
+              : preparseLine (line_number, drop 1 postsemi)
+
+     where
+        cleaned    = dropWhile isSpace s
+        untabbed x = not (null x) && head x /= '\t'
+
+        looks_like_label :: String -> Bool
+        looks_like_label x 
+           = case span isLabelIsh x of
+                (label_name, rest) 
+                   -> not (null label_name) 
+                      && take 1 rest == ":"
+                      && (null (tail rest) 
+                          || isSpace (head (tail rest)))
+
+
+{-----------------------------------------------------------}
+{--- Stage 2.  Parse instructions.                       ---}
+{-----------------------------------------------------------}
+
+-- Turn the list of PreLines into Lines by parsing
+-- the instructions.
+
+data PPM 
+   = PPM_Debug | PPM_User
+     deriving Eq
+
+class PP a where
+   pp  :: PPM -> a -> String
+   ppu :: a -> String
+   ppd :: a -> String
+   ppl :: PPM -> [a] -> String
+
+   ppu = pp PPM_User
+   ppd = pp PPM_Debug
+   ppl m = concat . intersperse "," . map (pp m)
+
+
+data Line 
+   = Pseudo Int String
+   | Label  Int String
+   | Real   Int CC Insn
+     deriving (Show, Eq)
+
+instance PP Line where
+   pp PPM_User  (Pseudo ln s)     = s
+   pp PPM_Debug (Pseudo ln s)     = "P: " ++ s
+   pp PPM_User  (Label ln s)      = s
+   pp PPM_Debug (Label ln s)      = "L: " ++ s
+
+   pp PPM_User  (Real ln cc insn) 
+      = "\t" ++ pp PPM_User insn
+   pp PPM_Debug (Real ln cc insn) 
+      = "R:        " ++ pp PPM_Debug insn ++
+       if   isNoCC cc 
+       then ""
+       else "\n             CC = " ++ pp PPM_Debug cc
+
+getLineNo (Pseudo ln s)    = ln
+getLineNo (Label  ln s)    = ln
+getLineNo (Real   ln cc i) = ln
+
+insnOfLine (Real ln cc i) = i
+insnOfLine other          = internal "insnOfLine"
+
+isReal (Real ln cc i) = True
+isReal other          = False
+
+isPseudo (Pseudo ln s) = True
+isPseudo other         = False
+
+data CC
+   = NoCC
+   | CC String Int String  -- file name, line no, fn name
+     deriving (Show, Eq)
+
+instance PP CC where
+   pp ppm NoCC = "NoCC"
+   pp ppm (CC filename lineno fnname)
+      = filename ++ ":" ++ show lineno ++ " " ++ fnname
+
+setCC (Real ln oldcc i) cc = Real ln cc i
+setCC other             cc = internal "setCC"
+
+getCC (Real ln cc i) = cc
+getCC other          = NoCC
+
+isNoCC NoCC       = True
+isNoCC (CC _ _ _) = False
+
+ccGetFileNm (CC filenm ln funcnm) = filenm
+ccGetLineNo (CC filenm ln funcnm) = ln
+ccGetFuncNm (CC filenm ln funcnm) = funcnm
+
+
+
+-- section-main
+parse :: [PreLine] -> [Line]
+parse 
+   = map f
+     where 
+        f (PrePseudo ln s) = Pseudo ln s
+        f (PreLabel  ln s) = Label  ln s
+        f (PreReal   ln s)
+           = case pInsn (olex s) of
+                POk i [] -> Real ln NoCC i
+                _        -> bomb ln s
+   
+        bomb ln s
+           = inputerr ("(stdin):" ++ show ln
+                       ++ ": syntax error on `" ++ s ++ "'\n" )
+
+{-------------------------------------------}
+{--- an lexer for x86,                   ---}
+{--- using the AT&T syntax               ---}
+{-------------------------------------------}
+
+olex :: String -> [Lex]
+
+olex [] = []
+olex (c:cs)
+   | isSpace c = olex cs
+   | c == '('  = LLParen : olex cs
+   | c == ')'  = LRParen : olex cs
+   | c == ','  = LComma  : olex cs
+   | c == '+'  = LPlus   : olex cs
+   | c == '-'  = LMinus  : olex cs
+   | c == '*'  = LStar   : olex cs
+   | c == '$'  = LDollar : olex cs
+   | c == '#'  = []   -- comment; arch specific
+
+   | c == '%'
+   = case span isAlpha cs of 
+        (rname, rest)
+           | rname == "st" && not (null rest) 
+             && head rest == '('
+           -> case span (`elem` "(01234567)") rest of
+                 (frname,rest2) -> (LReg (c:rname++frname)) : olex rest2
+           | (c:rname) `elem` reg_names
+           -> (LReg (c:rname)) : olex rest
+           | otherwise
+           -> barf (c:cs)
+   | isDigit c
+   = case span isDigitish cs of 
+        (num, rest) -> (LNum (c:num)) : olex rest
+   | isAlpha c || c == '_'
+   = case span isNameIsh cs of
+        (nmcs, rest) -> (LName (c:nmcs)) : olex rest
+   | c == '.'
+   = case span isLabelIsh cs of
+        (lbcs, rest) -> (LLabel (c:lbcs)) : olex rest
+
+   | otherwise
+   = barf (c:cs)
+
+
+isDigitish c = isDigit c || c `elem` "xabcdefABCDEF"
+isNameIsh c  = isAlpha c || isDigit c || c == '_' || c == '.'
+isLabelIsh c = isAlpha c || isDigit c || c == '.' || c == '_'
+isRegChar c  = isAlpha c || c `elem` "(0)"
+
+barf s = inputerr ( "lexical error on: `" ++ s ++ "'")
+
+
+{-------------------------------------------}
+{--- an instruction parser for x86,      ---}
+{--- using the AT&T syntax               ---}
+{-------------------------------------------}
+
+
+{- operand ::= reg
+             | $ const
+             | const
+             | const amode
+             | amode
+
+   amode ::= (reg)          -- B
+           | (reg,reg)      -- B I
+           | (,reg,num)     -- I S
+           | (reg,reg,num)  -- B I S 
+
+   const  ::= (OPTIONAL '-') const_factor 
+                             (ZEROORMORE signed_const_factor)
+
+   signed_const_factor ::=   + const_factor
+                         |   - const_factor
+
+   const_factor ::= const_atom
+                  | const_atom '*' const_factor
+                  | '(' const_factor ')'
+
+   const_atom ::= number
+                | label
+                | name
+
+   reg ::=  %eax | %ebx | %ecx | %edx | %esi | %edi | %ebp | %esp ...
+-}
+
+data Annot
+   = AnnR Int Operand
+   | AnnM Int Operand
+   | AnnW Int Operand
+   | AnnC String        -- just a comment
+     deriving (Show, Eq)
+
+getAnnOp (AnnR w o) = o
+getAnnOp (AnnM w o) = o
+getAnnOp (AnnW w o) = o
+
+isAnnC (AnnC _) = True
+isAnnC _        = False
+
+mkAnnC comment = SomeAnns [AnnC comment]
+mkNoAnns = SomeAnns []
+
+hasRealAnns (Insn ann _ _)
+   = (not . null . filter (not.isAnnC) . getAnns) ann
+
+data Anns
+   = DontAnnMe
+   | SomeAnns [Annot]
+     deriving (Show, Eq)
+
+getAnns DontAnnMe       = []
+getAnns (SomeAnns anns) = anns
+
+isDontAnnMe DontAnnMe = True
+isDontAnnMe _         = False
+
+data Insn 
+   = Insn Anns Opcode [Operand]
+     deriving (Show, Eq)
+
+annsOfInsn   (Insn anns opcode operand) = anns
+opcodeOfInsn (Insn anns opcode operand) = opcode
+
+data Operand
+   = OP_REG   Reg
+   | OP_LIT   Const
+   | OP_D     Const
+   | OP_DA    Const AMode
+   | OP_A     AMode
+   | OP_STAR  Operand
+     deriving (Show, Eq)
+
+data AMode
+   = AM_B   Reg  
+   | AM_BI  Reg Reg
+   | AM_IS  Reg String
+   | AM_BIS Reg Reg String
+     deriving (Show, Eq)
+
+
+
+newtype Const 
+   = Const [SignedFactor]
+     deriving (Show, Eq)
+
+data SignedFactor  = Neg UnsignedFactor | Pos UnsignedFactor
+     deriving (Show, Eq)
+
+data UnsignedFactor
+   = UF_NUM String  
+   | UF_NAME String 
+   | UF_LABEL String
+   | UF_TIMES UnsignedFactor UnsignedFactor
+     deriving (Show, Eq)
+
+data Reg 
+   = EAX | EBX | ECX | EDX | EDI | ESI | EBP | ESP
+   | AX | BX | CX | DX | SI | DI | BP
+   | AL | BL | CL | DL
+   | AH | BH | CH | DH
+   | ST_0 | ST_1 | ST_2 | ST_3 
+   | ST_4 | ST_5 | ST_6 | ST_7
+     deriving (Show, Eq)
+
+pOpcode :: Parser Opcode
+pOpcode
+   = pAlts (map (\o -> pName (drop 2 (show (fst o))) (fst o)) x86info)
+
+pInsn :: Parser Insn
+pInsn 
+   = p2 (Insn (SomeAnns [])) pOpcode (pStarComma pOperand)
+
+pOperand :: Parser Operand
+pOperand
+   = pAlts [
+        pApply OP_REG pReg,
+        p2 (\_ c -> OP_LIT c) pLDollar pConst,
+        p2 (\c a -> OP_DA c a) pConst pAMode,
+        pApply (\c -> OP_D c) pConst,
+        pApply (\a -> OP_A a) pAMode,
+        p2 (\_ operand -> OP_STAR operand) pLStar pOperand
+     ]
+
+pAMode :: Parser AMode
+pAMode
+   = pInParens (
+        pAlts [
+           p3 AM_BIS pReg (pPreComma pReg) (pPreComma pLNum),
+           p2 AM_BI  pReg (pPreComma pReg),
+           p2 AM_IS  (pPreComma pReg) (pPreComma pLNum),
+           pApply AM_B pReg
+        ]
+     )
+
+pUnsignedA :: Parser UnsignedFactor
+pUnsignedA
+   = pAlts [
+        pApply UF_NUM pLNum,
+        pApply UF_NAME pLName,
+        pApply UF_LABEL pLLabel
+     ]
+
+pUnsignedF :: Parser UnsignedFactor
+pUnsignedF
+   = pAlts [
+        p3 (\x times y -> UF_TIMES x y) pUnsignedA pLStar pUnsignedF,
+        p3 (\left x right -> x) pLLParen pUnsignedF pLRParen,
+        pUnsignedA
+     ]
+
+pSignedF :: Parser SignedFactor
+pSignedF
+   = pAlts [
+        p2 (\_ ca -> Pos ca) pLPlus  pUnsignedF,
+        p2 (\_ ca -> Neg ca) pLMinus pUnsignedF
+     ]
+
+pConst :: Parser Const
+pConst
+   = pAlts [
+        p2 (\  ca cas -> Const ((Pos ca):cas))
+           pUnsignedF (pStar pSignedF),
+        p3 (\_ ca cas -> Const ((Neg ca):cas)) 
+           pLMinus pUnsignedF (pStar pSignedF)
+     ]
+
+pReg
+   = pApply findReg pLReg
+     where
+        findReg r = case lookup r reg_map of
+                       Nothing  -> incomplete ("findReg: `" ++ r ++ "'")
+                       Just reg -> reg
+
+test = pInsn . olex
+
+pLLiteral = pApply unLLiteral (pSat isLLiteral)
+pLNum     = pApply unLNum     (pSat isLNum)
+pLReg     = pApply unLReg     (pSat isLReg)
+pLName    = pApply unLName    (pSat isLName)
+pLLabel   = pApply unLLabel   (pSat isLLabel)
+
+reg_map
+   = [("%eax",EAX),("%ebx",EBX),("%ecx",ECX),("%edx",EDX),
+      ("%edi",EDI),("%esi",ESI),("%ebp",EBP),("%esp",ESP),
+
+      ("%ax",AX), ("%bx",BX), ("%cx",CX), ("%dx",DX), 
+      ("%si",SI), ("%di",DI), ("%bp",BP),
+
+      ("%al",AL), ("%bl",BL), ("%cl",CL), ("%dl",DL),
+      ("%ah",AH), ("%bh",BH), ("%ch",CH), ("%dh",DH),
+
+      ("%st", ST_0), ("%st(0)", ST_0), 
+      ("%st(1)", ST_1), ("%st(2)", ST_2), ("%st(3)", ST_3), 
+      ("%st(4)", ST_4), ("%st(5)", ST_5), ("%st(6)", ST_6),
+      ("%st(7)", ST_7)
+     ]
+
+reg_names
+   = map fst reg_map
+
+
+
+
+instance PP Insn where
+   pp ppm insn@(Insn ann opcode operands)
+      = main_part 
+        ++ (if   ppm == PPM_User
+                 || null (getAnns ann)
+            then [] 
+            else take (max 0 (36 - length main_part)) (repeat ' ')
+                 ++ (if hasRealAnns insn 
+                     then " # ANN " else " #     ") 
+                 ++ ppl ppm (getAnns ann)
+           )
+        where
+           main_part
+              = pp ppm opcode 
+                ++ (if   null operands 
+                    then [] 
+                    else " " ++ ppl ppm operands)
+
+instance PP Annot where
+   pp ppm (AnnR w op) = "r" ++ show w ++ ": " ++ pp ppm op
+   pp ppm (AnnM w op) = "m" ++ show w ++ ": " ++ pp ppm op
+   pp ppm (AnnW w op) = "w" ++ show w ++ ": " ++ pp ppm op
+   pp ppm (AnnC comm) = comm
+   ppl ppm = concat . intersperse "   " . map (pp ppm)
+
+instance PP Operand where
+   pp ppm (OP_REG r)  = pp ppm r
+   pp ppm (OP_LIT c)  = "$" ++ pp ppm c
+   pp ppm (OP_D c)    = pp ppm c
+   pp ppm (OP_A a)    = pp ppm a
+   pp ppm (OP_DA c a) = pp ppm c ++ pp ppm a
+   pp ppm (OP_STAR o) = "*" ++ pp ppm o
+
+instance PP AMode where
+   pp ppm (AM_B r1)        = paren (pp ppm r1)
+   pp ppm (AM_BI r1 r2)    = paren (pp ppm r1 ++ "," ++ pp ppm r2)
+   pp ppm (AM_IS r1  n)    = paren ("," ++ pp ppm r1 ++ "," ++ n)
+   pp ppm (AM_BIS r1 r2 n) 
+      = paren (pp ppm r1 ++ "," ++ pp ppm r2 ++ "," ++ n)
+
+instance PP Const where
+   pp ppm (Const signed_factors)
+      = dropWhile (== '+') (concatMap (pp ppm) signed_factors)
+
+instance PP SignedFactor where
+   pp ppm (Neg factor) = "-" ++ pp ppm factor
+   pp ppm (Pos factor) = "+" ++ pp ppm factor
+
+instance PP UnsignedFactor where
+   pp ppm (UF_NUM n)     = n
+   pp ppm (UF_NAME n)    = n
+   pp ppm (UF_LABEL l)   = l
+   pp ppm (UF_TIMES a b) = pp ppm a ++ "*" ++ pp ppm b
+
+instance PP Reg where
+   pp ppm ST_0 = "%st"
+   pp ppm ST_1 = "%st(1)"
+   pp ppm ST_2 = "%st(2)"
+   pp ppm ST_3 = "%st(3)"
+   pp ppm ST_4 = "%st(4)"
+   pp ppm ST_5 = "%st(5)"
+   pp ppm ST_6 = "%st(6)"
+   pp ppm ST_7 = "%st(7)"
+   pp ppm r    = "%" ++ map toLower (show r)
+
+instance PP Opcode where
+   pp ppm o = (drop 2 . show) o
+
+paren s = "(" ++ s ++ ")"
+
+{-----------------------------------------------------------}
+{--- Stage 3.  Simplify some complex instructions into   ---}
+{--- equivalent sequences of simpler ones.               ---}
+{-----------------------------------------------------------}
+
+-- we carry along a counter `lc' so as to be able to
+-- manufacture labels.
+
+-- section-main
+simplify :: [Line] -> [Line]
+simplify = simpl_wrk 0
+
+
+simpl_wrk lc []
+   = []
+
+simpl_wrk lc ((Real ln cc (Insn (SomeAnns []) O_rep [])) :
+              (Real _   _ (Insn (SomeAnns []) o_op [])) : lines)
+   | o_op `elem` [O_movsl, O_movsw, O_movsb, 
+                  O_stosl, O_stosw, O_stosb]
+   = let (l1,l2)
+            = (lc,lc+1)
+         -- This lot gratuitiously cloned below
+         labelName n
+            = "cacheprof_x86_rep_expansion" ++ show n
+         mkInsn oc ops
+            = Real ln cc (Insn DontAnnMe oc ops)
+         mkInsnA oc ops
+            = Real ln cc (Insn (SomeAnns []) oc ops)
+         mkLabelD ln
+            = Pseudo ln (mk_arch_label_def (labelName ln))
+         mkLabelU ln
+            = OP_D (Const [Pos (UF_LABEL 
+                               (mk_arch_label_use (labelName ln)))])
+     in
+         [mkInsn   O_pushfl  [],
+          mkLabelD l1,
+          mkInsn   O_testl  [OP_REG ECX, OP_REG ECX],
+          mkInsn   O_jz     [mkLabelU l2],
+          mkInsn   O_decl   [OP_REG ECX],
+          mkInsnA  o_op     [],
+          mkInsn   O_jmp    [mkLabelU l1],
+          mkLabelD l2,
+          mkInsn   O_popfl   []
+         ]
+         ++ simpl_wrk (lc+2) lines
+
+simpl_wrk lc ((Real ln cc (Insn (SomeAnns []) o_reppy [])) :
+              (Real _   _ (Insn (SomeAnns []) o_op [])) : lines)
+   | o_reppy `elem` [O_repz, O_repnz]
+     && o_op `elem` [O_cmpsb, O_scasb] -- also w and l sizes
+   = let o_exit
+            | o_reppy `elem` [O_repnz]
+            = O_jz
+            | o_reppy `elem` [O_repz]
+            = O_jnz
+            | otherwise
+            = incomplete ("simpl_wrk rep: can't handle " 
+                          ++ show (o_reppy, o_op) ++ "\n")
+         (l1,l2,l3)
+            = (lc,lc+1,lc+2)
+
+         -- This lot gratuitiously cloned from above
+         labelName n
+            = "cacheprof_x86_rep_expansion" ++ show n
+         mkInsn oc ops
+            = Real ln cc (Insn DontAnnMe oc ops)
+         mkInsnA oc ops
+            = Real ln cc (Insn (SomeAnns []) oc ops)
+         mkLabelD ln
+            = Pseudo ln (mk_arch_label_def (labelName ln))
+         mkLabelU ln
+            = OP_D (Const [Pos (UF_LABEL 
+                               (mk_arch_label_use (labelName ln)))])
+
+
+     in
+         [mkLabelD l1,
+          mkInsn   O_pushfl [],
+          mkInsn   O_testl  [OP_REG ECX, OP_REG ECX],
+          mkInsn   O_jz     [mkLabelU l2],
+          mkInsn   O_popfl  [],
+          mkInsnA  o_op     [],
+          mkInsn   O_pushfl [],
+          mkInsn   O_decl   [OP_REG ECX],
+          mkInsn   O_popfl  [],
+          mkInsn   o_exit   [mkLabelU l3],
+          mkInsn   O_jmp    [mkLabelU l1],
+          mkLabelD l2,
+          mkInsn   O_popfl  [],
+          mkLabelD l3
+         ]
+         ++ simpl_wrk (lc+3) lines
+
+simpl_wrk lc ((Real ln cc (Insn (SomeAnns []) O_leave [])):lines)
+   = [Real ln cc (Insn mkNoAnns O_movl [OP_REG EBP, OP_REG ESP]),
+      Real ln cc (Insn mkNoAnns O_popl [OP_REG EBP])]
+     ++ simpl_wrk lc lines
+
+simpl_wrk lc (line:lines)
+   = line : simpl_wrk lc lines
+
+
+{-----------------------------------------------------------}
+{--- Stage 4.  Identify basic blocks.                    ---}
+{-----------------------------------------------------------}
+
+-- This is to make instruction counting tolerably
+-- efficient.  It's safe but inefficient to put
+-- each instruction into its own basic block.
+
+newtype BB = BB [Line]
+
+instance PP BB where
+   pp ppm (BB ls)
+      = "{ -- basic block\n" 
+        ++ unlines (map (pp ppm) ls)
+        ++ "}"
+
+-- section-main
+identify_bbs :: [Line] -> [BB]
+{-
+-- brain-dead, reference implementation
+identify_bbs = map (\line -> BB [line])
+-}
+
+-- something a bit better
+-- It could still be improved.  
+-- Use --ddump-ident-bbs to get ideas.
+identify_bbs 
+   = merge_bbs . map (\line -> BB [line])
+     where
+        merge_bbs []   = []
+        merge_bbs [bb] = [bb]
+        merge_bbs (bb1@(BB lines1) : bb2@(BB [line]) : bbs)
+
+           | isPseudo line
+           = let bigger_bb = BB (lines1++[line])
+             in  merge_bbs (bigger_bb : bbs)
+
+           | isOriginalInsn line 
+             && any isReal lines1
+             && isOriginalInsn last_Real_lines1
+             && opcodeOfInsn (insnOfLine last_Real_lines1)
+                   `elem` nonJumpyOpcodes
+
+           = let bigger_bb = BB (lines1++[line])
+             in  merge_bbs (bigger_bb : bbs)
+
+           | otherwise
+           = bb1 : merge_bbs (bb2:bbs)
+
+             where
+                last_Real_lines1 = last (filter isReal lines1)
+
+{-----------------------------------------------------------}
+{--- Stage 5.  Add insn count annotations to BBs.        ---}
+{-----------------------------------------------------------}
+
+-- section-main
+use_bbs :: [BB] -> [Line]
+use_bbs = concatMap use_bb
+
+use_bb :: BB -> [Line]
+use_bb (BB [])
+   = internal "use_bb: empty bb"
+use_bb (BB lines)
+   = let n_original_insns
+            = length (filter isOriginalInsn lines)
+         lineNo
+            = getLineNo (head lines)
+         synthd_insns
+            = map (Real lineNo NoCC)
+                  (incSequence n_original_insns "cacheprof_icount")
+     in
+         if   n_original_insns == 0
+         then lines
+         else synthd_insns ++ lines
+
+-- Instructions haven't been annotated yet.
+-- So the way to detect an original insn (ie, one
+-- not generated by simplification) is:
+--    insns created by simplify have DontAnnMe,
+--    whereas originals have SomeAnns [].
+
+isOriginalInsn (Real ln cc insn)
+   = case annsOfInsn insn of
+        DontAnnMe   -> False
+        SomeAnns [] -> True
+        other       -> internal "isOriginalInsn"
+isOriginalInsn other
+   = False
+
+{-----------------------------------------------------------}
+{--- Stage 6.  Annotate instructions with memory         ---}
+{--- read/modify/write info.                             ---}
+{-----------------------------------------------------------}
+
+-- section-main
+annotate :: [Line] -> [Line]
+annotate
+   = map f
+     where
+        f (Real ln cc insn) = Real ln cc (annotate_insn insn)
+        f label_or_pseudo   = label_or_pseudo
+
+annotate_insn :: Insn -> Insn
+annotate_insn insn@(Insn old_ann opcode operands)
+   | isDontAnnMe old_ann
+   = insn
+   | otherwise
+   = Insn (SomeAnns (filter (isMemOp.getAnnOp) 
+                            (annsOf opcode operands)))
+          opcode operands
+
+isMemOp (OP_REG r)  = False
+isMemOp (OP_LIT c)  = False
+isMemOp (OP_D d)    = True
+isMemOp (OP_DA d a) = True
+isMemOp (OP_A a)    = True
+isMemOp (OP_STAR o) = incomplete "isMemOp: not sure about *-form"
+
+the_edi       = OP_A (AM_B EDI)
+the_esi       = OP_A (AM_B ESI)
+the_sp        = OP_A (AM_B ESP)
+the_sp_plus_4 = OP_DA (Const [Pos (UF_NUM "4")]) (AM_B ESP)
+the_sp_plus_8 = OP_DA (Const [Pos (UF_NUM "8")]) (AM_B ESP)
+
+annsOf :: Opcode -> [Operand] -> [Annot]
+annsOf opcode operands
+   = let opInfo
+            = getOperandInfo opcode
+         no_applicable_info
+            = incomplete ("operand info (" 
+                     ++ show opInfo
+                     ++ ") doesn't match operand(s): "
+                     ++ ppd (Insn mkNoAnns opcode operands))
+
+     in case opInfo of
+
+           OI effects
+              -> case annsFromEffects effects operands of
+                    Just anns -> anns
+                    Nothing   -> no_applicable_info
+
+           OI_Jumpy
+              -> case operands of 
+                    [op1] -> case op1 of 
+                                { OP_STAR o -> [AnnR 4 o]; _ -> [] }
+                    other -> no_applicable_info
+
+           OI_NoEffect
+              -> []
+   
+           OI_Error
+              -> internal ( "unsimplified opcode: "
+                            ++ ppd (Insn mkNoAnns opcode operands))
+   
+           OI_Special
+              |  opcode == O_pushl
+              -> case operands of 
+                    [op1] -> [AnnR 4 op1, AnnW 4 the_sp_plus_4]
+                    other -> no_applicable_info
+   
+              |  opcode == O_call
+              -> case operands of 
+                    [op1] -> case op1 of
+                       OP_STAR o -> [AnnR 4 o, AnnW 4 the_sp_plus_4]
+                       direct    -> [AnnW 4 the_sp_plus_4]
+                    other -> no_applicable_info
+
+              |  opcode == O_popl
+              -> case operands of 
+                    [op1] -> [AnnR 4 the_sp_plus_8, AnnW 4 op1]
+   
+              |  opcode == O_ret
+              -> [AnnR 4 the_sp_plus_8]
+   
+              |  opcode == O_scasb
+              -> [AnnR 1 the_edi]
+              |  opcode == O_cmpsb
+              -> [AnnR 1 the_edi, AnnR 1 the_esi]
+              |  opcode == O_movsl
+              -> [AnnR 4 the_esi, AnnW 4 the_edi]
+              |  opcode == O_movsw
+              -> [AnnR 2 the_esi, AnnW 2 the_edi]
+              |  opcode == O_movsb
+              -> [AnnR 1 the_esi, AnnW 1 the_edi]
+              |  opcode == O_stosl
+              -> [AnnW 4 the_edi]  -- a guess
+              |  opcode == O_stosw
+              -> [AnnW 2 the_edi]  -- a guess
+              |  opcode == O_stosb
+              -> [AnnW 1 the_edi]  -- a guess
+           other
+              -> incomplete ("\nunclassifiable opcode: " 
+                             ++ ppd (Insn mkNoAnns opcode operands) )
+     
+
+annsFromEffects :: [OperandEffect] -> [Operand] -> Maybe [Annot]
+annsFromEffects effects operands
+   | null effects
+   = Nothing
+   | otherwise
+   = let mismatch = annsFromEffects (tail effects) operands
+     in
+     case head effects of
+
+        OE_RR s1 s2
+           -> case operands of 
+                 [op1, op2] -> Just [AnnR s1 op1, AnnR s2 op2]
+                 other      -> mismatch
+
+        OE_RM s1 s2
+           -> case operands of 
+                 [op1, op2] -> Just [AnnR s1 op1, AnnM s2 op2]
+                 other      -> mismatch
+
+        OE_RW s1 s2
+           -> case operands of 
+                 [op1, op2] -> Just [AnnR s1 op1, AnnW s2 op2]
+                 other      -> mismatch
+   
+        OE_R s1
+           -> case operands of 
+                 [op1] -> Just [AnnR s1 op1]
+                 other -> mismatch
+   
+        OE_M s1
+           -> case operands of 
+                 [op1] -> Just [AnnM s1 op1]
+                 other -> mismatch
+   
+        OE_W s1
+           -> case operands of 
+                 [op1] -> Just [AnnW s1 op1]
+                 other -> mismatch
+      
+        OE_nW s2
+           -> case operands of 
+                 [op1,op2] -> Just [AnnW s2 op2]
+                 other     -> mismatch
+   
+        OE_RRM s1 s2 s3
+           -> case operands of 
+                 [op1,op2,op3] -> Just [AnnR s1 op1, AnnR s2 op2,
+                                                     AnnM s3 op3]
+                 other         -> mismatch
+
+
+getOperandInfo :: Opcode -> OperandInfo
+getOperandInfo opcR
+   = case [oi | (opc, oi) <- x86info, opc == opcR] of
+        [oi] -> oi
+        _    -> incomplete ("getOperandInfo: no info for: " 
+                            ++ show opcR ++ "\n")
+
+
+{-----------------------------------------------------------}
+{--- Stage 7a for level 2 profiling.  Look at the        ---}
+{--- debugging info, so as to guess file and function    ---}
+{--- names, and line numbers.  Stick this info onto      ---}
+{--- every instruction for which we want to bill a       ---}
+{--- memory transaction.                                 ---}
+{-----------------------------------------------------------}
+
+-- section-main
+addCCs :: [Line] -> [Line]
+addCCs 
+   = addCCs_wrk (Guessed "_unknown_file_")
+                0 
+                (Guessed "_unknown_function_")
+
+data PossiblyString
+   = Stated  String
+   | Guessed String
+
+isGuessed ps = case ps of { Guessed _ -> True;  _ -> False }
+getTheString (Stated s)  = s
+getTheString (Guessed s) = s
+
+-- file name, line number, function name
+addCCs_wrk :: PossiblyString -> Int -> PossiblyString
+              -> [Line] -> [Line]
+addCCs_wrk inm lno fnm [] 
+   = []
+addCCs_wrk inm lno fnm (l:ls)
+   = case l of
+        Real _ _ insn
+           |  hasRealAnns insn
+           -> setCC l (CC (getTheString inm) lno (getTheString fnm))
+              : addCCs_wrk inm lno fnm ls
+           |  otherwise
+           -> l : addCCs_wrk inm lno fnm ls
+        Pseudo ln s
+           -> case updCC s of
+                 (inm2, lno2, fnm2)
+                    -> l : addCCs_wrk inm2 lno2 fnm2 ls
+        Label ln s
+           -> case updL s of
+                 (inm2, lno2, fnm2)
+                    -> l : addCCs_wrk inm2 lno2 fnm2 ls
+     where
+        updCC s 
+            = upd2 (words (dropWhile isSpace s))
+
+        upd2 (".stabn" : args : _)
+            = case splitArgs args of
+                 ("68":_:lns:_) -> (inm, read lns, fnm)
+                 _              -> (inm, lno, fnm)
+
+        upd2 (".stabs" : args : _)
+            = case splitArgs args of
+                 (filenm:"100":_) | last filenm /= '/'
+                                  -> (Stated (deQuote filenm), lno, fnm)
+                 (filenm:"132":_) -> (Stated (deQuote filenm), lno, fnm)
+                 (fnnm:"36":_)    |  (not.null.deQuote) fnnm
+                                  -> (inm, lno, 
+                                      Stated (deQuote 
+                                                (takeWhile (/=':') fnnm)))
+                 _                -> (inm, lno, fnm)
+        upd2 [".file", filenm]
+           | isGuessed inm && isQuoted filenm
+           = (Guessed (deQuote filenm), lno, fnm)
+
+        upd2 _
+            = (inm, lno, fnm)
+
+        -- Try to guess function names from labels
+        -- if no debugging info is available.
+        -- If debugging info is available, don't override it.
+        updL label_text
+            | isGuessed fnm && take 2 cleaned /= ".L"
+            = (inm, lno, Guessed (init cleaned))
+            | otherwise
+            = (inm, lno, fnm)
+              where 
+                 cleaned = dropWhile isSpace label_text
+
+        splitArgs = breakOnComma . zapCIQ
+
+        zapCIQ s = out s   -- zap commas inside quotes
+        out []                  = []
+        out (c:cs) | c == '"'   = c   : inn cs
+                   | otherwise  = c   : out cs
+
+        inn []                  = []
+        inn (c:cs) | c == '"'   = c   : out cs
+                   | c == ','   = '_' : inn cs
+                   | otherwise  = c   : inn cs
+
+        breakOnComma :: String -> [String]
+        breakOnComma [] = []
+        breakOnComma s
+           = case span (/= ',') s of
+                (pre,post) -> pre : breakOnComma (drop 1 post)
+
+        isQuoted s
+           = length s >= 2 && head s == '"' && last s == '"'
+        deQuote s 
+           = filter (/= '"') s    -- " fool Haskell-mode highlighting
+
+
+{-----------------------------------------------------------}
+{--- Stage 7b for level 2 profiling.  Examine the CC     ---}
+{--- descriptors that stage 7a created.  Each one will   ---}
+{--- require some storage in the final assembly output.  ---}
+{--- Also, run over the annotated instructions, and      ---}
+{--- insert calls to the cache simulator.                ---}
+{-----------------------------------------------------------}
+
+{-- A complex stage.
+
+    1.  Round up the CCs that Stage 7a attached.
+
+    2.  Condense them into a convenient form
+        holding the names of source files, source functions 
+        and sourcepoints mentioned in this file.
+        (this is makeCCdescriptors)
+
+    3.  Using (2), generate a data area in which holds
+        the file & function names, and the array of counters,
+        one per source point.
+        (this is useCCdescriptors)
+
+    4.  Independently of 1, 2 and 3, travel over the
+        output of section 7a, and insert calls to the
+        cache simulator around every insn marked as doing
+        a memory access which we want to know about.
+        (mapAccumL synthLine)
+---}
+
+
+-- section-main
+synth_2 :: [Line] -> [Line]
+synth_2 ccd_assy
+   = let -- get the ccs (part 1)
+         ccs
+            = map getCC ccd_assy
+         -- make a handy package (part 2)
+         cc_descriptors
+            = makeCCdescriptors ccs
+         -- generate the data areas (part 3)
+         data_areas
+            = useCCdescriptors cc_descriptors
+         -- insert calls to cache simulator (part 4)
+         num_ccs_avail
+            = case cc_descriptors of
+                 (dbg, file_names, fn_names, src_points)
+                    -> length src_points
+         (num_ccs_used, synthd_assy_grps)
+            = mapAccumL synthLine 0 ccd_assy
+         synthd_assy
+            = if   num_ccs_used == num_ccs_avail -- paranoid :-)
+              then concat synthd_assy_grps
+              else internal "doFile: cc supply/usage mismatch\n"
+     in
+         synthd_assy ++ data_areas
+
+
+{-------------------------------------------}
+{--- part 2.                             ---}
+{--- Roll CC info into a handy package.  ---}
+{--- Is arch independant.                ---}
+{-------------------------------------------}
+
+makeCCdescriptors :: [CC] -> ([String],[String],[String],[(Int,Int,Int)])
+makeCCdescriptors allCcs
+   = let -- interesting ccs
+         ccs = filter (not.isNoCC) allCcs
+
+         -- the filenames
+         filenames = nub (map ccGetFileNm ccs)
+         
+         -- make a map from each function to its
+         -- canonical name, by adding the name of the
+         -- function in which it first appears
+         canonical_fn_map
+            = canonicalise (
+                 zip (map ccGetFuncNm ccs) (map ccGetFileNm ccs))
+         (canonical_fn_map_fsts, canonical_fn_map_snds)
+            = unzip canonical_fn_map
+
+         canonicalise [] = []
+         canonicalise ((fn,file):rest)
+            = (fn,fn++"("++file++")")
+              : canonicalise (filter ((/= fn).fst) rest)
+
+         toSrcPoint :: CC -> (Int,Int,Int)
+         toSrcPoint cc
+            = (indexOf filenames (ccGetFileNm cc),
+               ccGetLineNo cc,
+               indexOf canonical_fn_map_fsts (ccGetFuncNm cc))
+
+         srcPoints = map toSrcPoint ccs
+
+         debugging_text
+            = ["file names:"]
+              ++ map indent filenames
+              ++ ["canonicalised function names:"]
+              ++ map indent canonical_fn_map_snds
+              ++ ["raw source points:"]
+              ++ map indent (map show ccs)
+              ++ ["cooked source points:"]
+              ++ map indent (map show srcPoints)
+
+         indent s = "   " ++ s
+         indexOf xs y
+            = f 0 xs 
+              where
+                 f n [] = internal ("indexOf: " ++ show y ++ "\n")
+                 f n (z:zs) = if y == z then n else f (n+1) zs
+     in
+         (debugging_text, 
+          filenames,
+          canonical_fn_map_snds,
+          srcPoints)
+
+
+
+{-------------------------------------------}
+{--- part 3.                             ---}
+{--- Generate data area from the handy   ---}
+{--- package.  Is arch dependant.        ---}
+{-------------------------------------------}
+
+{- Generate assembly code to define a data area like this:
+
+      <msb_first_word> #filenames
+      <msb_first_word> #funcnames
+      <msb_first_word> #sourcepoints
+      filenames, 0 terminated, end-to-end
+      funcnames, 0 terminated, end-to-end
+      sourcepoints
+
+   The comment text can be included too.
+
+   Each sourcepoint is a 28-byte area with
+      the following format:
+         4 bytes    file number
+         4 bytes    line number
+         4 bytes    function number
+         8 bytes    number of references, initially zero
+         8 bytes    number of misses, initially zero
+   The fields are regarded as integers stored in the
+   native endianness, ie on x86 the byte order is
+   3 2 1 0 for the first three and 7 6 5 4 3 2 1 0
+   for the last two.
+-}
+
+mk_arch_label_def s = ".L" ++ s ++ ":"
+mk_arch_label_use s = ".L" ++ s
+tABLE_START_STRING  = "cacheprof_magic_table"
+bUCKETS_START_STRING = "cacheprof_magic_buckets"
+
+useCCdescriptors :: ([String],[String],[String],[(Int,Int,Int)]) 
+                    -> [Line]
+useCCdescriptors (debugging_text, filenames, funcnames, points)
+   = let length_words
+            = [mk_comment "number of filenames, funcnames, points, cc addr"]
+              ++ map mk_word [length filenames, 
+                              length funcnames, 
+                              length points]
+              ++ [mk_word_l bUCKETS_START_STRING]
+         strings
+            = filenames ++ funcnames
+         string_bytes
+            = concatMap mk_string strings
+         point_words
+            = concatMap mk_point_words points
+         comments
+            = map mk_comment debugging_text
+         pre_comments
+            = map mk_comment ["", "---- start of the cost centers ----"]
+         post_comments
+            = map mk_comment ["", "---- end of the cost centers ----"]
+         mk_point_words p@(fileno,lineno,funcno)
+            = mk_comment (show p)
+              : map mk_word [fileno, lineno, funcno, 0,0, 0,0]
+         preamble
+            = mk_dataSeg ++ mk_align
+
+         mk_Pseudo      = Pseudo 0
+         mk_label_def s = mk_arch_label_def s
+         mk_word i      = "\t.long " ++ show i
+         mk_word_l l    = "\t.long " ++ mk_arch_label_use l
+         mk_byte i      = "\t.byte " ++ show i
+         mk_comment s   = "\t# " ++ s
+         mk_string s    = [mk_comment (show s)]
+                          ++ map (mk_byte.ord) s
+                          ++ [mk_byte 0]
+         mk_dataSeg     = ["\t.data"]
+         mk_align       = ["\t.align 4"]
+     in
+         map mk_Pseudo (
+            concat [pre_comments, comments, 
+                    preamble,
+                    [mk_label_def tABLE_START_STRING],
+                    length_words, string_bytes,
+                    mk_align,
+                    [mk_label_def bUCKETS_START_STRING],
+                    point_words, post_comments]
+         )
+
+
+
+{-------------------------------------------}
+{--- Generate calls to the               ---}
+{--- cache simulator (part 4)            ---}
+{-------------------------------------------}
+
+synthLine :: Int -> Line -> (Int, [Line])
+synthLine nextcc (Pseudo ln stuff) 
+   = (nextcc, [Pseudo ln stuff])
+synthLine nextcc (Label ln stuff) 
+   = (nextcc, [Label ln stuff])
+synthLine nextcc (Real ln cc insn)
+   | hasRealAnns insn
+   = (nextcc+1, map (Real ln cc) (synth_wrk nextcc insn))
+   | otherwise
+   = (nextcc, [Real ln cc insn])
+
+
+
+synth_wrk :: Int -> Insn -> [Insn]
+synth_wrk ccid_to_use insn@(Insn ann opcode operands)
+   = concatMap (useAnnot ccid_to_use) (getAnns ann)
+     ++ [insn]
+
+insn_pushl reg
+   = Insn (mkAnnC "save") O_pushl [OP_REG reg]
+insn_popl reg
+   = Insn (mkAnnC "rest") O_popl [OP_REG reg]
+
+std_preamble
+   = [insn_pushl EAX, insn_pushl EBX]
+std_postamble
+   = [insn_popl EBX, insn_popl EAX]
+
+useAnnot :: Int -> Annot -> [Insn]
+useAnnot ccid (AnnC c) 
+   = internal "useAnnot on comment annotation"
+
+useAnnot ccid (AnnR sz op)
+   = std_preamble 
+     ++
+     [ Insn (mkAnnC "rd-1") O_leal 
+                            [op, OP_REG EAX],
+       Insn (mkAnnC "rd-2") O_movl 
+                            [mk_bucket_addr ccid, OP_REG EBX],
+       Insn (mkAnnC "rd-3") O_call 
+                            [OP_D (Const [Pos (mk_rd_hook_name sz)])]
+     ]
+     ++ std_postamble
+
+useAnnot ccid (AnnM sz op)
+   = std_preamble 
+     ++
+     [ Insn (mkAnnC "mo-1") O_leal 
+                            [op, OP_REG EAX],
+       Insn (mkAnnC "mo-2") O_movl 
+                            [mk_bucket_addr ccid, OP_REG EBX],
+       Insn (mkAnnC "mo-3") O_call 
+                            [OP_D (Const [Pos (mk_mo_hook_name sz)])]
+     ]
+     ++ std_postamble
+
+useAnnot ccid (AnnW sz op)
+   = std_preamble
+     ++ 
+     [ Insn (mkAnnC "wr-1") O_leal 
+                            [op, OP_REG EAX],
+       Insn (mkAnnC "wr-2") O_movl 
+                            [mk_bucket_addr ccid, OP_REG EBX],
+       Insn (mkAnnC "wr-3") O_call 
+                            [OP_D (Const [Pos (mk_wr_hook_name sz)])]
+     ]
+     ++ std_postamble
+
+mk_bucket_addr ccid
+   = OP_D (Const [Pos (UF_LABEL 
+                         ("$" ++ mk_arch_label_use bUCKETS_START_STRING)),
+                  Pos (UF_NUM (show (28 * ccid)))])
+
+mk_rd_hook_name sz
+   = UF_NAME ("cacheprof_hook_Rd" ++ show sz)
+mk_mo_hook_name sz
+   = UF_NAME ("cacheprof_hook_Mo" ++ show sz)
+mk_wr_hook_name sz
+   = UF_NAME ("cacheprof_hook_Wr" ++ show sz)
+
+
+{-----------------------------------------------------------}
+{--- Stage 7 for level 1 profiling.  At each notifiable  ---}
+{--- memory reference (ie, at each place where level 2   ---}
+{--- profiling would insert a call to the cache          ---}
+{--- simulator, just increment the total read/write      ---}
+{--- counts.                                             ---}
+{-----------------------------------------------------------}
+
+-- section-main
+synth_1 :: [Line] -> [Line]
+synth_1 = concatMap synth_1_wrk
+
+synth_1_wrk :: Line -> [Line]
+synth_1_wrk (Pseudo ln stuff) 
+   = [Pseudo ln stuff]
+synth_1_wrk (Label ln stuff) 
+   = [Label ln stuff]
+synth_1_wrk line@(Real ln cc insn@(Insn ann opcode operands))
+   | hasRealAnns insn
+   = map (Real ln cc) (concatMap useIncAnns (getAnns ann))
+     ++ [line]
+   | otherwise
+   = [Real ln cc insn]
+     where
+        useIncAnns (AnnW sz op)
+           = incSequence 1 "cacheprof_level1_writes"
+        useIncAnns (AnnR sz op)
+           = incSequence 1 "cacheprof_level1_reads"
+        useIncAnns (AnnM sz op)
+           = incSequence 1 "cacheprof_level1_reads" ++
+             incSequence 1 "cacheprof_level1_writes"
+
+-- generate a sequence to increment a 64-bit counter in
+-- memory, labelled "name", by k
+incSequence :: Int -> String -> [Insn]
+incSequence k name
+   = [Insn DontAnnMe O_pushfl [],
+      Insn DontAnnMe O_addl
+                [OP_LIT (Const [Pos (UF_NUM (show k))]),
+                 OP_D   (Const [Pos (UF_NAME name)])],
+      Insn DontAnnMe O_adcl
+                [OP_LIT (Const [Pos (UF_NUM "0")]),
+                 OP_D   (Const [Pos (UF_NUM "4"),
+                                Pos (UF_NAME name)])],
+      Insn DontAnnMe O_popfl []
+     ]
+
+
+{-----------------------------------------------------------}
+{--- Stage 8.  Peephole opt to remove some stupidities.  ---}
+{-----------------------------------------------------------}
+
+{- The idea is to clean up (eg)
+        pushfl
+        addl $3,cacheprof_icount
+        adcl $0,4+cacheprof_icount
+        popfl
+        pushfl
+        addl $1,cacheprof_level1_writes
+        adcl $0,4+cacheprof_level1_writes
+        popfl
+   into 
+        pushfl
+        addl $3,cacheprof_icount
+        adcl $0,4+cacheprof_icount
+        addl $1,cacheprof_level1_writes
+        adcl $0,4+cacheprof_level1_writes
+        popfl
+-}
+
+-- section-main
+peephole :: [Line] -> [Line]
+
+peephole ( line1@(Real ln1 cc1 insn1) :
+           line2@(Real ln2 cc2 insn2) :
+           line3@(Real ln3 cc3 (Insn anns3 O_popfl [])) :
+           line4@(Real ln4 cc4 (Insn anns4 O_pushfl [])) :
+           line5@(Real ln5 cc5 insn5) :
+           line6@(Real ln6 cc6 insn6) :
+           the_rest )
+   | incs_a_counter insn1 insn2 
+     && incs_a_counter insn5 insn6
+   = peephole (line1 : line2 : line5 : line6 : the_rest)
+
+peephole ( line: the_rest)
+   = line : peephole the_rest
+peephole []
+   = []
+
+
+-- Say after me: We love pattern matching
+incs_a_counter (Insn anns1 O_addl
+                     [OP_LIT (Const [Pos (UF_NUM n)]),
+                      OP_D   (Const [Pos (UF_NAME name1)])])
+               (Insn anns2 O_adcl
+                     [OP_LIT (Const [Pos (UF_NUM zero)]),
+                      OP_D   (Const [Pos (UF_NUM four),
+                                     Pos (UF_NAME name2)])])
+   = take 10 name1 == "cacheprof_"
+     && take 10 name2 == "cacheprof_"
+     && zero == "0" && four == "4"
+
+incs_a_counter insn1 insn2
+   = False
+
+
+{-----------------------------------------------------------}
+{--- Stage 9.  Final cleanup -- zap debugging info.      ---}
+{-----------------------------------------------------------}
+
+-- section-main
+final_cleanup :: [Line] -> String
+final_cleanup
+   = unlines . map ppu . filter (not.isStabLine)
+     where
+        isStabLine (Pseudo ln s) 
+           = take 5 (dropWhile isSpace s) == ".stab"
+        isStabLine other
+           = False
+
+
+{-----------------------------------------------------------}
+{--- Main!                                               ---}
+{-----------------------------------------------------------}
+
+main = seq stderr (       -- avoid bug in ghc-4.04
+       do args <- --getArgs
+                  return ["--level2"]
+
+          let prof_level
+                 = if "--level0" `elem` args then 0
+                   else if "--level1" `elem` args then 1
+                   else if "--level2" `elem` args then 2
+                   else internal 
+                           "profiling level not supplied by `cacheprof'"
+
+          let bad_ddump_flags
+                 = filter (`notElem` ddump_flags) 
+                      (filter ((== "--ddump-") . take 8) args)
+
+          if (not (null bad_ddump_flags))
+           then do hPutStr stderr (
+                        "cacheann: bad debugging flag(s): " ++ 
+                        unwords bad_ddump_flags ++ 
+                        "\n   valid debugging flags are\n" ++
+                        unlines (map ("      "++) ddump_flags)
+                      )
+                   exitWith (ExitFailure 1)
+           else return ()
+
+          ifVerb args (hPutStr stderr "cacheann-0.01: annotating ...\n")
+          f   <- getContents
+          aux <- case prof_level of
+                  0 -> return ""
+                  1 -> readFile "cacheprof_hooks1_x86.s"
+                  2 -> readFile "cacheprof_hooks2_x86.s"
+
+          out <- doFile prof_level args f
+          putStr out
+          putStr aux
+          ifVerb args (hPutStr stderr "cacheann-0.01: done\n")
+       )
+
+ifVerb :: [String] -> IO () -> IO ()
+ifVerb flags ioact 
+   = if "-v" `elem` flags then ioact else return ()
+
+doFile :: Int -> [String] -> String -> IO String
+doFile prof_level args input_text
+   = let preparsed      = preparse input_text
+         parsed         = map forceLine (parse preparsed)
+         simplified     = simplify parsed
+         with_bbs_ident = identify_bbs simplified
+         with_icounts   = use_bbs with_bbs_ident
+         annotated      = annotate with_icounts
+         with_ccs       = addCCs annotated
+         with_synth_2   = synth_2 with_ccs
+         with_synth_1   = synth_1 annotated
+         with_synth     = case prof_level of
+                             0 -> simplified
+                             1 -> with_synth_1
+                             2 -> with_synth_2
+         peepholed      = peephole with_synth
+         final          = final_cleanup peepholed
+
+         debugging_io
+            = do ifopt [0,1,2] ddump_preparsed  preparsed
+                 ifopt [0,1,2] ddump_parsed     parsed
+                 ifopt [0,1,2] ddump_simplified simplified
+                 ifopt   [1,2] ddump_ident_bbs  with_bbs_ident
+                 ifopt   [1,2] ddump_use_bbs    with_icounts
+                 ifopt   [1,2] ddump_annotated  annotated
+                 ifopt     [2] ddump_ccs        with_ccs
+                 ifopt [0,1,2] ddump_synth      with_synth
+                 ifopt [0,1,2] ddump_peephole   peepholed
+
+         ifopt valid_levels flag stuff
+            | prof_level `elem` valid_levels 
+              && flag `elem` args
+            = hPutStr stderr (
+                 "\n\n-------- DEBUGGING OUTPUT FOR " 
+                 ++ flag ++ ":\n\n"
+                 ++ unlines (map ppd stuff)
+                 ++ "\n\n" )
+            | otherwise
+            = return ()
+
+         forceLine :: Line -> Line
+         forceLine line | line == line = line
+                        | otherwise    = internal "forceLine"
+     in
+         debugging_io >> return final
+
+
+ddump_preparsed   = "--ddump-preparsed"
+ddump_parsed      = "--ddump-parsed"
+ddump_simplified  = "--ddump-simplified"
+ddump_ident_bbs   = "--ddump-ident-bbs"
+ddump_use_bbs     = "--ddump-use-bbs"
+ddump_annotated   = "--ddump-annotated"
+ddump_ccs         = "--ddump-ccs"
+ddump_synth       = "--ddump-synth"
+ddump_peephole    = "--ddump-peephole"
+
+ddump_flags
+   = [ddump_preparsed, ddump_parsed, ddump_simplified,
+      ddump_ident_bbs, ddump_use_bbs, ddump_annotated,
+      ddump_ccs, ddump_synth, ddump_peephole]
+
+{------------------------------------------------------------------------}
+{--- end                                                  CacheAnn.hs ---}
+{------------------------------------------------------------------------}
diff --git a/real/cacheprof/Generics.hs b/real/cacheprof/Generics.hs
new file mode 100644 (file)
index 0000000..f169700
--- /dev/null
@@ -0,0 +1,181 @@
+
+{------------------------------------------------------------------------}
+{--- Generic stuff for all architectures.                 Generics.hs ---}
+{------------------------------------------------------------------------}
+
+{- 
+   This file is part of Cacheprof, a profiling tool for finding
+   sources of cache misses in programs.
+
+   Copyright (C) 1999 Julian Seward (jseward@acm.org) 
+   Home page: http://www.cacheprof.org
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file LICENSE.
+-}
+
+module Generics where
+
+internal msg
+   = error ("\ncacheann: Internal error: " ++ msg ++ "\n")
+incomplete msg
+   = error ("\ncacheann: Unhandled instruction set artefact:\n   " 
+            ++ msg ++ "\n")
+inputerr msg
+   = error ("\ncacheann: Bad input: " ++ msg ++ "\n")
+
+{-----------------------------------------------------------}
+{--- A data type for lexemes                             ---}
+{-----------------------------------------------------------}
+
+{- In here, LReg, LLiteral and LName are arch/syntax
+   specific, but I don't think this matters, so long
+   as the arch-specific lexer produces the Right Things.
+   Note that lexers themselves are arch/syntax
+   specific.
+-}
+data Lex
+   = LReg     String  -- a register name eg "%eax"
+   | LNum     String  -- a number           "456"
+   | LLiteral String  -- a literal value    "$12"
+   | LName    String  -- a name             "fprintf"
+   | LLabel   String  -- a label            ".L3345"
+   | LComma
+   | LLParen
+   | LRParen
+   | LPlus
+   | LMinus
+   | LStar
+   | LDollar
+     deriving (Show, Eq)
+
+
+unLReg (LReg s) = s
+isLReg lx = case lx of { LReg _ -> True; _ -> False }
+
+unLNum (LNum s) = s
+isLNum lx = case lx of { LNum _ -> True; _ -> False }
+
+unLLiteral (LLiteral s) = s
+isLLiteral lx = case lx of { LLiteral _ -> True; _ -> False }
+
+unLName (LName s) = s
+isLName lx = case lx of { LName _ -> True; _ -> False }
+
+unLLabel (LLabel s) = s
+isLLabel lx = case lx of { LLabel _ -> True; _ -> False }
+
+
+
+{-----------------------------------------------------------}
+{--- Combinator parser generics -- building blocks for   ---}
+{--- parsers                                             ---}
+{-----------------------------------------------------------}
+
+data PResult a
+   = PFail
+   | POk a [Lex]
+     deriving Show
+
+type Parser a = [Lex] -> PResult a
+
+pEmpty :: a -> Parser a
+pEmpty x ts = POk x ts
+
+pSat :: (Lex -> Bool) -> Parser Lex
+pSat p []     = PFail
+pSat p (t:ts) = if p t then POk t ts else PFail
+
+pApply :: (a -> b) -> Parser a -> Parser b
+pApply f p ts
+   = case p ts of
+        PFail -> PFail
+        POk x uu -> POk (f x) uu
+   
+
+pName :: String -> a -> Parser a
+pName w x ((LName w2):lxs)
+   = if w == w2 then POk x lxs else PFail
+pName w x _ = PFail
+
+p2 :: (a -> b -> c) 
+      -> Parser a -> Parser b -> Parser c
+p2 f p1 p2 ts1
+   = case p1 ts1 of { PFail -> PFail ; POk x1 uu1 ->
+     case p2 uu1 of { PFail -> PFail ; POk x2 uu2 ->
+     POk (f x1 x2) uu2
+     }}
+
+p3 :: (a -> b -> c -> d) 
+      -> Parser a -> Parser b -> Parser c -> Parser d
+p3 f p1 p2 p3 ts1
+   = case p1 ts1 of { PFail -> PFail ; POk x1 uu1 ->
+     case p2 uu1 of { PFail -> PFail ; POk x2 uu2 ->
+     case p3 uu2 of { PFail -> PFail ; POk x3 uu3 ->
+     POk (f x1 x2 x3) uu3
+     }}}
+
+pStar :: Parser a -> Parser [a]
+pStar p ts
+   = case p ts of
+        PFail     -> POk [] ts
+        POk x uu1 -> case pStar p uu1 of
+                        POk xs uu2 -> POk (x:xs) uu2
+                        PFail      -> internal "pStar failed"
+
+pPlus :: Parser a -> Parser [a]
+pPlus p = p2 (:) p (pStar p)
+
+pAlt2 :: Parser a -> Parser a -> Parser a
+pAlt2 p1 p2 ts
+   = case p1 ts of
+        POk x1 uu -> POk x1 uu
+        PFail     -> p2 ts
+
+pAlts :: [Parser a] -> Parser a
+pAlts = foldl1 pAlt2
+
+pOpt :: Parser a -> Parser (Maybe a)
+pOpt p ts
+   = case p ts of
+        PFail    -> POk Nothing ts
+        POk x uu -> POk (Just x) uu
+
+pStarComma p
+   = pAlts [
+        p2 (\xs y -> xs++[y]) (pPlus (p2 (\x y -> x) p pLComma)) p,
+        pApply (\x -> [x]) p,
+        pEmpty []
+     ]
+
+pLComma  = pSat (== LComma)
+pLMinus  = pSat (== LMinus)
+pLPlus   = pSat (== LPlus)
+pLLParen = pSat (== LLParen)
+pLRParen = pSat (== LRParen)
+pLStar   = pSat (== LStar)
+pLDollar = pSat (== LDollar)
+
+pInParens p    = p3 (\_ r _ -> r) pLLParen p pLRParen
+pPreComma p    = p2 (\_ r -> r) pLComma p
+pPreCommaOpt p = p2 (\_ r -> r) (pOpt pLComma) p
+
+
+
+{------------------------------------------------------------------------}
+{--- end                                                  Generics.hs ---}
+{------------------------------------------------------------------------}
diff --git a/real/cacheprof/Makefile b/real/cacheprof/Makefile
new file mode 100644 (file)
index 0000000..b9798ec
--- /dev/null
@@ -0,0 +1,7 @@
+TOP = ../..
+include $(TOP)/mk/boilerplate.mk
+
+SRC_HC_OPTS += -fglasgow-exts
+
+include $(TOP)/mk/target.mk
+
diff --git a/real/cacheprof/cacheprof.stdin b/real/cacheprof/cacheprof.stdin
new file mode 100644 (file)
index 0000000..7c3def6
--- /dev/null
@@ -0,0 +1,13708 @@
+       .file   "heimdall.c"
+       .version        "01.01"
+gcc2_compiled.:
+.data
+       .align 4
+       .type    num_insns_done,@object
+       .size    num_insns_done,4
+num_insns_done:
+       .long 0
+.section       .rodata
+       .align 32
+.LC46:
+       .string "heimdall: fatal error near insn %d:\n\t%s\n"
+.text
+       .align 4
+       .type    panic,@function
+panic:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       pushl %eax
+       movl num_insns_done,%eax
+       pushl %eax
+       pushl $.LC46
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $-12,%esp
+       pushl $1
+       call exit
+.Lfe1:
+       .size    panic,.Lfe1-panic
+.section       .rodata
+.LC47:
+       .string "getIMem"
+.text
+       .align 4
+       .type    getIMem,@function
+getIMem:
+       subl $12,%esp
+       movl 16(%esp),%edx
+       movl 20(%esp),%eax
+       cmpl $4,%edx
+       jne .L341
+       movl (%eax),%eax
+       jmp .L345
+       .p2align 4,,7
+.L341:
+       cmpl $1,%edx
+       jne .L342
+       movzbl (%eax),%eax
+       jmp .L345
+       .p2align 4,,7
+.L342:
+       cmpl $2,%edx
+       je .L343
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %eax,%eax
+       addl $16,%esp
+       jmp .L340
+       .p2align 4,,7
+.L343:
+       movzwl (%eax),%eax
+.L345:
+.L340:
+       addl $12,%esp
+       ret
+.Lfe2:
+       .size    getIMem,.Lfe2-getIMem
+.section       .rodata
+.LC48:
+       .string "setIMem"
+.text
+       .align 4
+       .type    setIMem,@function
+setIMem:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       movl 20(%esp),%ecx
+       movl 24(%esp),%edx
+       cmpl $4,%eax
+       jne .L347
+       movl %edx,(%ecx)
+       jmp .L346
+       .p2align 4,,7
+.L347:
+       cmpl $1,%eax
+       jne .L348
+       movb %dl,(%ecx)
+       jmp .L346
+       .p2align 4,,7
+.L348:
+       cmpl $2,%eax
+       jne .L349
+       movw %dx,(%ecx)
+       jmp .L346
+       .p2align 4,,7
+.L349:
+       addl $-12,%esp
+       pushl $.LC48
+       call panic
+       addl $16,%esp
+.L346:
+       addl $12,%esp
+       ret
+.Lfe3:
+       .size    setIMem,.Lfe3-setIMem
+       .align 4
+       .type    getIRoM,@function
+getIRoM:
+       subl $12,%esp
+       movl 16(%esp),%edx
+       movl 20(%esp),%eax
+       cmpb $0,24(%esp)
+       je .L373
+       cmpl $4,%edx
+       jne .L374
+       movl m_regs(,%eax,4),%eax
+       jmp .L372
+       .p2align 4,,7
+.L374:
+       cmpl $1,%edx
+       jne .L376
+       cmpl $3,%eax
+       ja .L377
+       movzbl m_regs(,%eax,4),%eax
+       jmp .L372
+       .p2align 4,,7
+.L377:
+       movzbl m_regs-15(,%eax,4),%eax
+       jmp .L372
+       .p2align 4,,7
+.L376:
+       cmpl $2,%edx
+       jne .L379
+       movzwl m_regs(,%eax,4),%eax
+       jmp .L372
+       .p2align 4,,7
+.L379:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %eax,%eax
+       jmp .L383
+       .p2align 4,,7
+.L373:
+       addl $-8,%esp
+       pushl %eax
+       pushl %edx
+       call getIMem
+.L383:
+       addl $16,%esp
+.L372:
+       addl $12,%esp
+       ret
+.Lfe4:
+       .size    getIRoM,.Lfe4-getIRoM
+.section       .rodata
+.LC49:
+       .string "calcBSF(1)"
+.LC50:
+       .string "calcBSF(2)"
+.text
+       .align 4
+       .type    calcBSF,@function
+calcBSF:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%eax
+       movl 36(%esp),%ebx
+       cmpl $4,%eax
+       je .L385
+       cmpl $2,%eax
+       je .L385
+       cmpl $1,%eax
+       je .L385
+       addl $-12,%esp
+       pushl $.LC49
+       call panic
+       addl $16,%esp
+.L385:
+       testl %ebx,%ebx
+       jne .L386
+       addl $-12,%esp
+       pushl $.LC50
+       call panic
+       addl $16,%esp
+.L386:
+       xorl %eax,%eax
+       testb $1,%bl
+       jne .L388
+       .p2align 4,,7
+.L389:
+       incl %eax
+       btl %eax,%ebx
+       jnc .L389
+.L388:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe5:
+       .size    calcBSF,.Lfe5-calcBSF
+.section       .rodata
+.LC51:
+       .string "calcBSR(1)"
+.LC52:
+       .string "calcBSR(2)"
+.text
+       .align 4
+       .type    calcBSR,@function
+calcBSR:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ebx
+       movl 36(%esp),%esi
+       cmpl $4,%ebx
+       je .L392
+       cmpl $2,%ebx
+       je .L392
+       cmpl $1,%ebx
+       je .L392
+       addl $-12,%esp
+       pushl $.LC51
+       call panic
+       addl $16,%esp
+.L392:
+       testl %esi,%esi
+       jne .L393
+       addl $-12,%esp
+       pushl $.LC52
+       call panic
+       addl $16,%esp
+.L393:
+       leal -1(,%ebx,8),%eax
+       btl %eax,%esi
+       jc .L395
+       .p2align 4,,7
+.L396:
+       decl %eax
+       btl %eax,%esi
+       jnc .L396
+.L395:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe6:
+       .size    calcBSR,.Lfe6-calcBSR
+.section       .rodata
+.LC53:
+       .string "calcSHLD"
+.text
+       .align 4
+       .type    calcSHLD,@function
+calcSHLD:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%edx
+       movl 36(%esp),%ecx
+       movl 40(%esp),%ebx
+       movl 44(%esp),%eax
+       cmpl $2,%edx
+       je .L401
+       ja .L405
+       cmpl $1,%edx
+       je .L402
+       jmp .L403
+       .p2align 4,,7
+.L405:
+       cmpl $4,%edx
+       jne .L403
+       movl %eax,%edx
+       sall %cl,%edx
+       movl $32,%eax
+       jmp .L407
+       .p2align 4,,7
+.L401:
+       movl %eax,%edx
+       sall %cl,%edx
+       movl $16,%eax
+       jmp .L407
+       .p2align 4,,7
+.L402:
+       movl %eax,%edx
+       sall %cl,%edx
+       movl $8,%eax
+.L407:
+       subl %ecx,%eax
+       movl %eax,%ecx
+       movl %ebx,%eax
+       shrl %cl,%eax
+       orl %eax,%edx
+       movl %edx,%eax
+       jmp .L406
+       .p2align 4,,7
+.L403:
+       addl $-12,%esp
+       pushl $.LC53
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L406:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe7:
+       .size    calcSHLD,.Lfe7-calcSHLD
+.section       .rodata
+.LC54:
+       .string "calcSHRD"
+.text
+       .align 4
+       .type    calcSHRD,@function
+calcSHRD:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%edx
+       movl 36(%esp),%ecx
+       movl 40(%esp),%ebx
+       movl 44(%esp),%eax
+       cmpl $2,%edx
+       je .L411
+       ja .L415
+       cmpl $1,%edx
+       je .L412
+       jmp .L413
+       .p2align 4,,7
+.L415:
+       cmpl $4,%edx
+       jne .L413
+       movl %eax,%edx
+       shrl %cl,%edx
+       movl $32,%eax
+       jmp .L417
+       .p2align 4,,7
+.L411:
+       movl %eax,%edx
+       shrl %cl,%edx
+       movl $16,%eax
+       jmp .L417
+       .p2align 4,,7
+.L412:
+       movl %eax,%edx
+       shrl %cl,%edx
+       movl $8,%eax
+.L417:
+       subl %ecx,%eax
+       movl %eax,%ecx
+       movl %ebx,%eax
+       sall %cl,%eax
+       orl %eax,%edx
+       movl %edx,%eax
+       jmp .L416
+       .p2align 4,,7
+.L413:
+       addl $-12,%esp
+       pushl $.LC54
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L416:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe8:
+       .size    calcSHRD,.Lfe8-calcSHRD
+.section       .rodata
+.LC55:
+       .string "calcROL"
+.text
+       .align 4
+       .type    calcROL,@function
+calcROL:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%edi
+       movl 36(%esp),%esi
+       movl 40(%esp),%ebx
+       testl %esi,%esi
+       je .L420
+       .p2align 4,,7
+.L421:
+       cmpl $2,%edi
+       je .L424
+       ja .L428
+       cmpl $1,%edi
+       je .L425
+       jmp .L426
+       .p2align 4,,7
+.L428:
+       cmpl $4,%edi
+       jne .L426
+       movl %ebx,%eax
+       shrl $31,%eax
+       jmp .L430
+       .p2align 4,,7
+.L424:
+       movl %ebx,%eax
+       shrl $15,%eax
+       jmp .L431
+       .p2align 4,,7
+.L425:
+       movl %ebx,%eax
+       shrl $7,%eax
+.L431:
+       andl $1,%eax
+.L430:
+       addl %ebx,%ebx
+       orl %eax,%ebx
+       jmp .L422
+       .p2align 4,,7
+.L426:
+       addl $-12,%esp
+       pushl $.LC55
+       call panic
+       addl $16,%esp
+.L422:
+       decl %esi
+       jnz .L421
+.L420:
+       movl %ebx,%eax
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe9:
+       .size    calcROL,.Lfe9-calcROL
+.section       .rodata
+.LC56:
+       .string "calcROR"
+.text
+       .align 4
+       .type    calcROR,@function
+calcROR:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%edi
+       movl 36(%esp),%esi
+       movl 40(%esp),%ebx
+       testl %esi,%esi
+       je .L434
+       .p2align 4,,7
+.L435:
+       cmpl $2,%edi
+       je .L438
+       ja .L442
+       cmpl $1,%edi
+       je .L439
+       jmp .L440
+       .p2align 4,,7
+.L442:
+       cmpl $4,%edi
+       jne .L440
+       movl %ebx,%eax
+       andl $1,%eax
+       shrl $1,%ebx
+       sall $31,%eax
+       orl %eax,%ebx
+       jmp .L436
+       .p2align 4,,7
+.L438:
+       movl %ebx,%eax
+       andl $1,%eax
+       shrl $1,%ebx
+       sall $15,%eax
+       orl %eax,%ebx
+       jmp .L436
+       .p2align 4,,7
+.L439:
+       movl %ebx,%eax
+       andl $1,%eax
+       shrl $1,%ebx
+       sall $7,%eax
+       orl %eax,%ebx
+       jmp .L436
+       .p2align 4,,7
+.L440:
+       addl $-12,%esp
+       pushl $.LC56
+       call panic
+       addl $16,%esp
+.L436:
+       decl %esi
+       jnz .L435
+.L434:
+       movl %ebx,%eax
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe10:
+       .size    calcROR,.Lfe10-calcROR
+.section       .rodata
+.LC57:
+       .string "calcSAR"
+.text
+       .align 4
+       .type    calcSAR,@function
+calcSAR:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%eax
+       movl 40(%esp),%ebx
+       cmpl $2,%eax
+       je .L447
+       ja .L451
+       cmpl $1,%eax
+       je .L448
+       jmp .L449
+       .p2align 4,,7
+.L451:
+       cmpl $4,%eax
+       jne .L449
+       jmp .L445
+       .p2align 4,,7
+.L447:
+       movswl %bx,%ebx
+       jmp .L445
+       .p2align 4,,7
+.L448:
+       movsbl %bl,%ebx
+       jmp .L445
+       .p2align 4,,7
+.L449:
+       addl $-12,%esp
+       pushl $.LC57
+       call panic
+       addl $16,%esp
+.L445:
+       movl 36(%esp),%ecx
+       sarl %cl,%ebx
+       movl %ebx,%eax
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe11:
+       .size    calcSAR,.Lfe11-calcSAR
+.section       .rodata
+.LC58:
+       .string "topBitOf"
+.text
+       .align 4
+       .type    topBitOf,@function
+topBitOf:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%esi
+       movl 36(%esp),%ebx
+       cmpl $4,%esi
+       je .L453
+       cmpl $2,%esi
+       je .L453
+       cmpl $1,%esi
+       je .L453
+       addl $-12,%esp
+       pushl $.LC58
+       call panic
+       addl $16,%esp
+.L453:
+       leal -1(,%esi,8),%ecx
+       shrl %cl,%ebx
+       movl %ebx,%eax
+       andl $1,%eax
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe12:
+       .size    topBitOf,.Lfe12-topBitOf
+       .align 4
+       .type    extend_s_8to16,@function
+extend_s_8to16:
+       movswl 4(%esp),%eax
+       ret
+.Lfe13:
+       .size    extend_s_8to16,.Lfe13-extend_s_8to16
+       .align 4
+       .type    extend_s_16to32,@function
+extend_s_16to32:
+       movswl 4(%esp),%eax
+       ret
+.Lfe14:
+       .size    extend_s_16to32,.Lfe14-extend_s_16to32
+.section       .rodata
+.LC59:
+       .string "extend_s_to32"
+.LC60:
+       .string "extend_s_8to"
+.text
+       .align 4
+       .type    extend_s_8to,@function
+extend_s_8to:
+       subl $12,%esp
+       movl 16(%esp),%edx
+       movl 20(%esp),%eax
+       cmpl $2,%edx
+       je .L470
+       ja .L474
+       cmpl $1,%edx
+       je .L466
+       jmp .L472
+       .p2align 4,,7
+.L474:
+       cmpl $4,%edx
+       jne .L472
+       movsbl %al,%eax
+       jmp .L476
+       .p2align 4,,7
+.L470:
+       addl $-12,%esp
+       pushl %eax
+       call extend_s_8to16
+       addl $16,%esp
+       jmp .L466
+       .p2align 4,,7
+.L472:
+       addl $-12,%esp
+       pushl $.LC60
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L476:
+.L466:
+       addl $12,%esp
+       ret
+.Lfe15:
+       .size    extend_s_8to,.Lfe15-extend_s_8to
+.section       .rodata
+.LC61:
+       .string "extend_s_16to"
+.text
+       .align 4
+       .type    extend_s_16to,@function
+extend_s_16to:
+       subl $12,%esp
+       movl 16(%esp),%edx
+       movl 20(%esp),%eax
+       cmpl $2,%edx
+       je .L477
+       cmpl $4,%edx
+       jne .L481
+       addl $-12,%esp
+       pushl %eax
+       call extend_s_16to32
+       addl $16,%esp
+       jmp .L477
+       .p2align 4,,7
+.L481:
+       addl $-12,%esp
+       pushl $.LC61
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L477:
+       addl $12,%esp
+       ret
+.Lfe16:
+       .size    extend_s_16to,.Lfe16-extend_s_16to
+       .align 4
+       .type    getSDisp16,@function
+getSDisp16:
+       subl $12,%esp
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl $-12,%esp
+       pushl %edx
+       call extend_s_16to32
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe17:
+       .size    getSDisp16,.Lfe17-getSDisp16
+       .align 4
+       .type    getUDisp16,@function
+getUDisp16:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl %edx,%eax
+       ret
+.Lfe18:
+       .size    getUDisp16,.Lfe18-getUDisp16
+.section       .rodata
+.LC62:
+       .string "getSDisp"
+.text
+       .align 4
+       .type    getSDisp,@function
+getSDisp:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       cmpl $2,%eax
+       je .L494
+       jg .L500
+       cmpl $1,%eax
+       je .L495
+       jmp .L498
+       .p2align 4,,7
+.L500:
+       cmpl $4,%eax
+       jne .L498
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl %edx,%eax
+       jmp .L501
+       .p2align 4,,7
+.L494:
+       call getSDisp16
+       jmp .L501
+       .p2align 4,,7
+.L495:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       jmp .L501
+       .p2align 4,,7
+.L498:
+       addl $-12,%esp
+       pushl $.LC62
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L501:
+       addl $12,%esp
+       ret
+.Lfe19:
+       .size    getSDisp,.Lfe19-getSDisp
+.section       .rodata
+.LC63:
+       .string "getUDisp"
+.text
+       .align 4
+       .type    getUDisp,@function
+getUDisp:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       cmpl $2,%eax
+       je .L506
+       jg .L511
+       cmpl $1,%eax
+       je .L507
+       jmp .L509
+       .p2align 4,,7
+.L511:
+       cmpl $4,%eax
+       jne .L509
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl %edx,%eax
+       jmp .L512
+       .p2align 4,,7
+.L506:
+       call getUDisp16
+       jmp .L512
+       .p2align 4,,7
+.L507:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       jmp .L512
+       .p2align 4,,7
+.L509:
+       addl $-12,%esp
+       pushl $.LC63
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L512:
+       addl $12,%esp
+       ret
+.Lfe20:
+       .size    getUDisp,.Lfe20-getUDisp
+.data
+       .align 32
+       .type    cases.468,@object
+       .size    cases.468,128
+cases.468:
+       .long .L515
+       .long .L516
+       .long .L517
+       .long .L518
+       .long .L519
+       .long .L520
+       .long .L521
+       .long .L522
+       .long .L523
+       .long .L524
+       .long .L525
+       .long .L526
+       .long .L527
+       .long .L528
+       .long .L529
+       .long .L530
+       .long .L531
+       .long .L532
+       .long .L533
+       .long .L534
+       .long .L535
+       .long .L536
+       .long .L537
+       .long .L538
+       .long .L539
+       .long .L540
+       .long .L541
+       .long .L542
+       .long .L543
+       .long .L544
+       .long .L545
+       .long .L546
+       .align 32
+       .type    parityIsEven,@object
+       .size    parityIsEven,256
+parityIsEven:
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.byte 1
+.byte 0
+.byte 1
+.byte 0
+.byte 0
+.byte 1
+.section       .rodata
+       .align 32
+.LC64:
+       .string "SET_OCSZ_ARITH: src=%u(%d)   dst=%u(%d)   sres=%lld   ures=%llu\n"
+.LC67:
+       .string "update_flags_ADD"
+       .align 4
+.LC65:
+       .long -2147483648
+       .long 0
+       .align 4
+.LC66:
+       .long -1
+       .long 0
+.text
+       .align 4
+.globl update_flags_ADD
+       .type    update_flags_ADD,@function
+update_flags_ADD:
+       subl $12,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 36(%esp),%ebp
+       movl 40(%esp),%ecx
+       movl %ebp,%eax
+       xorl %edx,%edx
+       movl %eax,%esi
+       movl %edx,%edi
+       addl %ecx,%esi
+       adcl $0,%edi
+       movl %ecx,%ebx
+       sarl $31,%ebx
+       movl %ebp,%eax
+       cltd
+       addl %eax,%ecx
+       adcl %edx,%ebx
+       cmpl $2,32(%esp)
+       je .L624
+       jg .L646
+       cmpl $1,32(%esp)
+       je .L634
+       jmp .L644
+       .p2align 4,,7
+.L646:
+       cmpl $4,32(%esp)
+       jne .L644
+       movl %ecx,%eax
+       movl %ebx,%edx
+       addl .LC65,%eax
+       adcl .LC65+4,%edx
+       je .L615
+       orb $8,m_eflags+1
+       jmp .L617
+       .p2align 4,,7
+.L615:
+       andb $247,m_eflags+1
+.L617:
+       movl %edi,%edx
+       xorl %ecx,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L618
+       orb $1,m_eflags
+       jmp .L619
+       .p2align 4,,7
+.L618:
+       andb $254,m_eflags
+.L619:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC66,%edx
+       andl .LC66+4,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L620
+       orb $64,m_eflags
+       jmp .L621
+       .p2align 4,,7
+.L620:
+       andb $191,m_eflags
+.L621:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC65,%edx
+       andl .LC65+4,%ecx
+.L648:
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L647
+       jmp .L642
+       .p2align 4,,7
+.L624:
+       movl %ecx,%eax
+       movl %ebx,%edx
+       addl $32768,%eax
+       adcl $0,%edx
+       jne .L626
+       jne .L625
+       cmpl $65535,%eax
+       jbe .L625
+.L626:
+       orb $8,m_eflags+1
+       jmp .L627
+       .p2align 4,,7
+.L625:
+       andb $247,m_eflags+1
+.L627:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $16,%ecx,%edx
+       shrl $16,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L628
+       orb $1,m_eflags
+       jmp .L629
+       .p2align 4,,7
+.L628:
+       andb $254,m_eflags
+.L629:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzwl %dx,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L630
+       orb $64,m_eflags
+       jmp .L631
+       .p2align 4,,7
+.L630:
+       andb $191,m_eflags
+.L631:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $32768,%edx
+       andl $0,%ecx
+       jmp .L648
+       .p2align 4,,7
+.L634:
+       movl %ecx,%eax
+       movl %ebx,%edx
+       addl $128,%eax
+       adcl $0,%edx
+       jne .L636
+       jne .L635
+       cmpl $255,%eax
+       jbe .L635
+.L636:
+       orb $8,m_eflags+1
+       jmp .L637
+       .p2align 4,,7
+.L635:
+       andb $247,m_eflags+1
+.L637:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $8,%ecx,%edx
+       shrl $8,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L638
+       orb $1,m_eflags
+       jmp .L639
+       .p2align 4,,7
+.L638:
+       andb $254,m_eflags
+.L639:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzbl %dl,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L640
+       orb $64,m_eflags
+       jmp .L641
+       .p2align 4,,7
+.L640:
+       andb $191,m_eflags
+.L641:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $128,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L642
+.L647:
+       orb $128,m_eflags
+       jmp .L613
+       .p2align 4,,7
+.L642:
+       andb $127,m_eflags
+       jmp .L613
+       .p2align 4,,7
+.L644:
+       addl $-12,%esp
+       pushl $.LC67
+       call panic
+       addl $16,%esp
+.L613:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $12,%esp
+       ret
+.Lfe21:
+       .size    update_flags_ADD,.Lfe21-update_flags_ADD
+.section       .rodata
+.LC68:
+       .string "update_flags_SUB"
+.text
+       .align 4
+       .type    update_flags_SUB,@function
+update_flags_SUB:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%eax
+       movl 36(%esp),%ebx
+       movl 40(%esp),%ecx
+       cmpl $1,%eax
+       jne .L650
+       movzbl %cl,%ecx
+       movzbl %bl,%ebx
+       movl %ecx,%edx
+       subl %ebx,%edx
+       movzbl %dl,%edx
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L651
+       orb $4,m_eflags
+       jmp .L652
+       .p2align 4,,7
+.L651:
+       andb $251,m_eflags
+.L652:
+       testl %edx,%edx
+       jne .L653
+       orb $64,m_eflags
+       jmp .L654
+       .p2align 4,,7
+.L653:
+       andb $191,m_eflags
+.L654:
+       cmpl $127,%edx
+       jbe .L655
+       orb $128,m_eflags
+       jmp .L656
+       .p2align 4,,7
+.L655:
+       andb $127,m_eflags
+.L656:
+       cmpl %ecx,%ebx
+       jbe .L657
+       orb $1,m_eflags
+       jmp .L658
+       .p2align 4,,7
+.L657:
+       andb $254,m_eflags
+.L658:
+       andl $128,%ecx
+       movl %ebx,%eax
+       andl $128,%eax
+       cmpl %eax,%ecx
+       je .L683
+       movl %edx,%eax
+       andl $128,%eax
+.L687:
+       cmpl %eax,%ecx
+       jne .L686
+       jmp .L683
+       .p2align 4,,7
+.L650:
+       cmpl $4,%eax
+       jne .L662
+       movl %ecx,%edx
+       subl %ebx,%edx
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L663
+       orb $4,m_eflags
+       jmp .L664
+       .p2align 4,,7
+.L663:
+       andb $251,m_eflags
+.L664:
+       testl %edx,%edx
+       jne .L665
+       orb $64,m_eflags
+       jmp .L666
+       .p2align 4,,7
+.L665:
+       andb $191,m_eflags
+.L666:
+       testl %edx,%edx
+       jge .L667
+       orb $128,m_eflags
+       jmp .L668
+       .p2align 4,,7
+.L667:
+       andb $127,m_eflags
+.L668:
+       cmpl %ecx,%ebx
+       jbe .L669
+       orb $1,m_eflags
+       jmp .L670
+       .p2align 4,,7
+.L669:
+       andb $254,m_eflags
+.L670:
+       andl $-2147483648,%ecx
+       movl %ebx,%eax
+       andl $-2147483648,%eax
+       cmpl %eax,%ecx
+       je .L683
+       movl %edx,%eax
+       andl $-2147483648,%eax
+       jmp .L687
+       .p2align 4,,7
+.L662:
+       cmpl $2,%eax
+       jne .L674
+       movzwl %cx,%ecx
+       movzwl %bx,%ebx
+       movl %ecx,%edx
+       subl %ebx,%edx
+       movzwl %dx,%edx
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L675
+       orb $4,m_eflags
+       jmp .L676
+       .p2align 4,,7
+.L675:
+       andb $251,m_eflags
+.L676:
+       testl %edx,%edx
+       jne .L677
+       orb $64,m_eflags
+       jmp .L678
+       .p2align 4,,7
+.L677:
+       andb $191,m_eflags
+.L678:
+       cmpl $32767,%edx
+       jbe .L679
+       orb $128,m_eflags
+       jmp .L680
+       .p2align 4,,7
+.L679:
+       andb $127,m_eflags
+.L680:
+       cmpl %ecx,%ebx
+       jbe .L681
+       orb $1,m_eflags
+       jmp .L682
+       .p2align 4,,7
+.L681:
+       andb $254,m_eflags
+.L682:
+       andl $32768,%ecx
+       movl %ebx,%eax
+       andl $32768,%eax
+       cmpl %eax,%ecx
+       je .L683
+       movl %edx,%eax
+       andl $32768,%eax
+       cmpl %eax,%ecx
+       je .L683
+.L686:
+       orb $8,m_eflags+1
+       jmp .L661
+       .p2align 4,,7
+.L683:
+       andb $247,m_eflags+1
+       jmp .L661
+       .p2align 4,,7
+.L674:
+       addl $-12,%esp
+       pushl $.LC68
+       call panic
+       addl $16,%esp
+.L661:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe22:
+       .size    update_flags_SUB,.Lfe22-update_flags_SUB
+.section       .rodata
+.LC71:
+       .string "update_flags_ADC"
+       .align 4
+.LC69:
+       .long -2147483648
+       .long 0
+       .align 4
+.LC70:
+       .long -1
+       .long 0
+.text
+       .align 4
+       .type    update_flags_ADC,@function
+update_flags_ADC:
+       subl $28,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 52(%esp),%ebp
+       movl 56(%esp),%ecx
+       movb m_eflags,%al
+       andb $1,%al
+       movb %al,31(%esp)
+       movl %ebp,%eax
+       xorl %edx,%edx
+       movl %eax,%esi
+       movl %edx,%edi
+       addl %ecx,%esi
+       adcl $0,%edi
+       cmpb $0,31(%esp)
+       je .L689
+       addl $1,%esi
+       adcl $0,%edi
+.L689:
+       movl %ecx,%ebx
+       sarl $31,%ebx
+       movl %ebp,%eax
+       cltd
+       addl %ecx,%eax
+       adcl %ebx,%edx
+       cmpb $0,31(%esp)
+       je .L691
+       addl $1,%eax
+       adcl $0,%edx
+.L691:
+       cmpl $2,48(%esp)
+       je .L703
+       jg .L725
+       cmpl $1,48(%esp)
+       je .L713
+       jmp .L723
+       .p2align 4,,7
+.L725:
+       cmpl $4,48(%esp)
+       jne .L723
+       addl .LC69,%eax
+       adcl .LC69+4,%edx
+       je .L694
+       orb $8,m_eflags+1
+       jmp .L696
+       .p2align 4,,7
+.L694:
+       andb $247,m_eflags+1
+.L696:
+       movl %edi,%edx
+       xorl %ecx,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L697
+       orb $1,m_eflags
+       jmp .L698
+       .p2align 4,,7
+.L697:
+       andb $254,m_eflags
+.L698:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC70,%edx
+       andl .LC70+4,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L699
+       orb $64,m_eflags
+       jmp .L700
+       .p2align 4,,7
+.L699:
+       andb $191,m_eflags
+.L700:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC69,%edx
+       andl .LC69+4,%ecx
+.L727:
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L726
+       jmp .L721
+       .p2align 4,,7
+.L703:
+       addl $32768,%eax
+       adcl $0,%edx
+       jne .L705
+       jne .L704
+       cmpl $65535,%eax
+       jbe .L704
+.L705:
+       orb $8,m_eflags+1
+       jmp .L706
+       .p2align 4,,7
+.L704:
+       andb $247,m_eflags+1
+.L706:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $16,%ecx,%edx
+       shrl $16,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L707
+       orb $1,m_eflags
+       jmp .L708
+       .p2align 4,,7
+.L707:
+       andb $254,m_eflags
+.L708:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzwl %dx,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L709
+       orb $64,m_eflags
+       jmp .L710
+       .p2align 4,,7
+.L709:
+       andb $191,m_eflags
+.L710:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $32768,%edx
+       andl $0,%ecx
+       jmp .L727
+       .p2align 4,,7
+.L713:
+       addl $128,%eax
+       adcl $0,%edx
+       jne .L715
+       jne .L714
+       cmpl $255,%eax
+       jbe .L714
+.L715:
+       orb $8,m_eflags+1
+       jmp .L716
+       .p2align 4,,7
+.L714:
+       andb $247,m_eflags+1
+.L716:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $8,%ecx,%edx
+       shrl $8,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L717
+       orb $1,m_eflags
+       jmp .L718
+       .p2align 4,,7
+.L717:
+       andb $254,m_eflags
+.L718:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzbl %dl,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L719
+       orb $64,m_eflags
+       jmp .L720
+       .p2align 4,,7
+.L719:
+       andb $191,m_eflags
+.L720:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $128,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L721
+.L726:
+       orb $128,m_eflags
+       jmp .L692
+       .p2align 4,,7
+.L721:
+       andb $127,m_eflags
+       jmp .L692
+       .p2align 4,,7
+.L723:
+       addl $-12,%esp
+       pushl $.LC71
+       call panic
+       addl $16,%esp
+.L692:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $28,%esp
+       ret
+.Lfe23:
+       .size    update_flags_ADC,.Lfe23-update_flags_ADC
+.section       .rodata
+.LC74:
+       .string "update_flags_SBB"
+       .align 4
+.LC72:
+       .long -2147483648
+       .long 0
+       .align 4
+.LC73:
+       .long -1
+       .long 0
+.text
+       .align 4
+       .type    update_flags_SBB,@function
+update_flags_SBB:
+       subl $28,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 52(%esp),%ebp
+       movl 56(%esp),%ecx
+       movb m_eflags,%al
+       andb $1,%al
+       movb %al,31(%esp)
+       movl %ecx,%eax
+       xorl %edx,%edx
+       movl %eax,%esi
+       movl %edx,%edi
+       subl %ebp,%esi
+       sbbl $0,%edi
+       cmpb $0,31(%esp)
+       je .L729
+       addl $-1,%esi
+       adcl $-1,%edi
+.L729:
+       movl %ecx,%ebx
+       sarl $31,%ebx
+       movl %ebp,%eax
+       cltd
+       subl %eax,%ecx
+       sbbl %edx,%ebx
+       movl %ecx,%eax
+       movl %ebx,%edx
+       cmpb $0,31(%esp)
+       je .L731
+       addl $-1,%eax
+       adcl $-1,%edx
+.L731:
+       cmpl $2,48(%esp)
+       je .L743
+       jg .L765
+       cmpl $1,48(%esp)
+       je .L753
+       jmp .L763
+       .p2align 4,,7
+.L765:
+       cmpl $4,48(%esp)
+       jne .L763
+       addl .LC72,%eax
+       adcl .LC72+4,%edx
+       je .L734
+       orb $8,m_eflags+1
+       jmp .L736
+       .p2align 4,,7
+.L734:
+       andb $247,m_eflags+1
+.L736:
+       movl %edi,%edx
+       xorl %ecx,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L737
+       orb $1,m_eflags
+       jmp .L738
+       .p2align 4,,7
+.L737:
+       andb $254,m_eflags
+.L738:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC73,%edx
+       andl .LC73+4,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L739
+       orb $64,m_eflags
+       jmp .L740
+       .p2align 4,,7
+.L739:
+       andb $191,m_eflags
+.L740:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl .LC72,%edx
+       andl .LC72+4,%ecx
+.L767:
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L766
+       jmp .L761
+       .p2align 4,,7
+.L743:
+       addl $32768,%eax
+       adcl $0,%edx
+       jne .L745
+       jne .L744
+       cmpl $65535,%eax
+       jbe .L744
+.L745:
+       orb $8,m_eflags+1
+       jmp .L746
+       .p2align 4,,7
+.L744:
+       andb $247,m_eflags+1
+.L746:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $16,%ecx,%edx
+       shrl $16,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L747
+       orb $1,m_eflags
+       jmp .L748
+       .p2align 4,,7
+.L747:
+       andb $254,m_eflags
+.L748:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzwl %dx,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L749
+       orb $64,m_eflags
+       jmp .L750
+       .p2align 4,,7
+.L749:
+       andb $191,m_eflags
+.L750:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $32768,%edx
+       andl $0,%ecx
+       jmp .L767
+       .p2align 4,,7
+.L753:
+       addl $128,%eax
+       adcl $0,%edx
+       jne .L755
+       jne .L754
+       cmpl $255,%eax
+       jbe .L754
+.L755:
+       orb $8,m_eflags+1
+       jmp .L756
+       .p2align 4,,7
+.L754:
+       andb $247,m_eflags+1
+.L756:
+       movl %esi,%edx
+       movl %edi,%ecx
+       shrdl $8,%ecx,%edx
+       shrl $8,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L757
+       orb $1,m_eflags
+       jmp .L758
+       .p2align 4,,7
+.L757:
+       andb $254,m_eflags
+.L758:
+       movl %esi,%edx
+       movl %edi,%ecx
+       movzbl %dl,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L759
+       orb $64,m_eflags
+       jmp .L760
+       .p2align 4,,7
+.L759:
+       andb $191,m_eflags
+.L760:
+       movl %esi,%edx
+       movl %edi,%ecx
+       andl $128,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L761
+.L766:
+       orb $128,m_eflags
+       jmp .L732
+       .p2align 4,,7
+.L761:
+       andb $127,m_eflags
+       jmp .L732
+       .p2align 4,,7
+.L763:
+       addl $-12,%esp
+       pushl $.LC74
+       call panic
+       addl $16,%esp
+.L732:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $28,%esp
+       ret
+.Lfe24:
+       .size    update_flags_SBB,.Lfe24-update_flags_SBB
+       .align 4
+       .type    update_flags_NEG,@function
+update_flags_NEG:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ebx
+       movl 36(%esp),%esi
+       addl $-4,%esp
+       pushl $0
+       cmpl $2,%ebx
+       je .L769
+       ja .L770
+       cmpl $1,%ebx
+       je .L771
+       jmp .L772
+       .p2align 4,,7
+.L770:
+       cmpl $4,%ebx
+       jne .L772
+       movl %esi,%eax
+       jmp .L774
+       .p2align 4,,7
+.L769:
+       addl $-12,%esp
+       pushl %esi
+       call extend_s_16to32
+       addl $16,%esp
+       jmp .L774
+       .p2align 4,,7
+.L771:
+       movl %esi,%edx
+       movsbl %dl,%eax
+       jmp .L774
+       .p2align 4,,7
+.L772:
+       addl $-12,%esp
+       pushl $.LC59
+       call panic
+       addl $16,%esp
+       xorl %eax,%eax
+.L774:
+       pushl %eax
+       pushl %ebx
+       call update_flags_SUB
+       addl $16,%esp
+       testl %esi,%esi
+       je .L777
+       orb $1,m_eflags
+       jmp .L778
+       .p2align 4,,7
+.L777:
+       andb $254,m_eflags
+.L778:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe25:
+       .size    update_flags_NEG,.Lfe25-update_flags_NEG
+.section       .rodata
+       .align 32
+.LC75:
+       .string "SET_OSZ_INCDEC: dst=%u(%d)   sres=%lld   ures=%llu\n"
+.LC78:
+       .string "update_flags_INC"
+       .align 4
+.LC76:
+       .long -2147483648
+       .long 0
+       .align 4
+.LC77:
+       .long -1
+       .long 0
+.text
+       .align 4
+.globl update_flags_INC
+       .type    update_flags_INC,@function
+update_flags_INC:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ecx
+       movl 36(%esp),%eax
+       movl $1,%ebx
+       movl $0,%esi
+       addl %eax,%ebx
+       adcl $0,%esi
+       cltd
+       addl $1,%eax
+       adcl $0,%edx
+       cmpl $2,%ecx
+       je .L790
+       jg .L808
+       cmpl $1,%ecx
+       je .L798
+       jmp .L806
+       .p2align 4,,7
+.L808:
+       cmpl $4,%ecx
+       jne .L806
+       addl .LC76,%eax
+       adcl .LC76+4,%edx
+       je .L783
+       orb $8,m_eflags+1
+       jmp .L785
+       .p2align 4,,7
+.L783:
+       andb $247,m_eflags+1
+.L785:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl .LC77,%edx
+       andl .LC77+4,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L786
+       orb $64,m_eflags
+       jmp .L787
+       .p2align 4,,7
+.L786:
+       andb $191,m_eflags
+.L787:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl .LC76,%edx
+       andl .LC76+4,%ecx
+.L810:
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L809
+       jmp .L804
+       .p2align 4,,7
+.L790:
+       addl $32768,%eax
+       adcl $0,%edx
+       jne .L792
+       jne .L791
+       cmpl $65535,%eax
+       jbe .L791
+.L792:
+       orb $8,m_eflags+1
+       jmp .L793
+       .p2align 4,,7
+.L791:
+       andb $247,m_eflags+1
+.L793:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       movzwl %dx,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L794
+       orb $64,m_eflags
+       jmp .L795
+       .p2align 4,,7
+.L794:
+       andb $191,m_eflags
+.L795:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl $32768,%edx
+       andl $0,%ecx
+       jmp .L810
+       .p2align 4,,7
+.L798:
+       addl $128,%eax
+       adcl $0,%edx
+       jne .L800
+       jne .L799
+       cmpl $255,%eax
+       jbe .L799
+.L800:
+       orb $8,m_eflags+1
+       jmp .L801
+       .p2align 4,,7
+.L799:
+       andb $247,m_eflags+1
+.L801:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       movzbl %dl,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L802
+       orb $64,m_eflags
+       jmp .L803
+       .p2align 4,,7
+.L802:
+       andb $191,m_eflags
+.L803:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl $128,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L804
+.L809:
+       orb $128,m_eflags
+       jmp .L781
+       .p2align 4,,7
+.L804:
+       andb $127,m_eflags
+       jmp .L781
+       .p2align 4,,7
+.L806:
+       addl $-12,%esp
+       pushl $.LC78
+       call panic
+       addl $16,%esp
+.L781:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe26:
+       .size    update_flags_INC,.Lfe26-update_flags_INC
+.section       .rodata
+.LC81:
+       .string "update_flags_DEC"
+       .align 4
+.LC79:
+       .long -2147483648
+       .long 0
+       .align 4
+.LC80:
+       .long -1
+       .long 0
+.text
+       .align 4
+.globl update_flags_DEC
+       .type    update_flags_DEC,@function
+update_flags_DEC:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ecx
+       movl 36(%esp),%eax
+       movl $-1,%ebx
+       movl $-1,%esi
+       addl %eax,%ebx
+       adcl $0,%esi
+       cltd
+       addl $-1,%eax
+       adcl $-1,%edx
+       cmpl $2,%ecx
+       je .L822
+       jg .L840
+       cmpl $1,%ecx
+       je .L830
+       jmp .L838
+       .p2align 4,,7
+.L840:
+       cmpl $4,%ecx
+       jne .L838
+       addl .LC79,%eax
+       adcl .LC79+4,%edx
+       je .L815
+       orb $8,m_eflags+1
+       jmp .L817
+       .p2align 4,,7
+.L815:
+       andb $247,m_eflags+1
+.L817:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl .LC80,%edx
+       andl .LC80+4,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L818
+       orb $64,m_eflags
+       jmp .L819
+       .p2align 4,,7
+.L818:
+       andb $191,m_eflags
+.L819:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl .LC79,%edx
+       andl .LC79+4,%ecx
+.L842:
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L841
+       jmp .L836
+       .p2align 4,,7
+.L822:
+       addl $32768,%eax
+       adcl $0,%edx
+       jne .L824
+       jne .L823
+       cmpl $65535,%eax
+       jbe .L823
+.L824:
+       orb $8,m_eflags+1
+       jmp .L825
+       .p2align 4,,7
+.L823:
+       andb $247,m_eflags+1
+.L825:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       movzwl %dx,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L826
+       orb $64,m_eflags
+       jmp .L827
+       .p2align 4,,7
+.L826:
+       andb $191,m_eflags
+.L827:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl $32768,%edx
+       andl $0,%ecx
+       jmp .L842
+       .p2align 4,,7
+.L830:
+       addl $128,%eax
+       adcl $0,%edx
+       jne .L832
+       jne .L831
+       cmpl $255,%eax
+       jbe .L831
+.L832:
+       orb $8,m_eflags+1
+       jmp .L833
+       .p2align 4,,7
+.L831:
+       andb $247,m_eflags+1
+.L833:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       movzbl %dl,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       jne .L834
+       orb $64,m_eflags
+       jmp .L835
+       .p2align 4,,7
+.L834:
+       andb $191,m_eflags
+.L835:
+       movl %ebx,%edx
+       movl %esi,%ecx
+       andl $128,%edx
+       andl $0,%ecx
+       movl %edx,%eax
+       orl %ecx,%eax
+       je .L836
+.L841:
+       orb $128,m_eflags
+       jmp .L813
+       .p2align 4,,7
+.L836:
+       andb $127,m_eflags
+       jmp .L813
+       .p2align 4,,7
+.L838:
+       addl $-12,%esp
+       pushl $.LC81
+       call panic
+       addl $16,%esp
+.L813:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe27:
+       .size    update_flags_DEC,.Lfe27-update_flags_DEC
+.section       .rodata
+       .align 32
+.LC82:
+       .string "SET_OCSZP_LOGICAL: src=0x%x   dst=0x%x   ures=0x%x\n"
+.LC83:
+       .string "SET_SIGN_FLAG_FROM"
+.text
+       .align 4
+.globl update_flags_AND
+       .type    update_flags_AND,@function
+update_flags_AND:
+       subl $12,%esp
+       movl 16(%esp),%ecx
+       movl 24(%esp),%edx
+       andl 20(%esp),%edx
+       andb $247,m_eflags+1
+       andb $254,m_eflags
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L845
+       orb $4,m_eflags
+       jmp .L846
+       .p2align 4,,7
+.L845:
+       andb $251,m_eflags
+.L846:
+       testl %edx,%edx
+       jne .L847
+       orb $64,m_eflags
+       jmp .L848
+       .p2align 4,,7
+.L847:
+       andb $191,m_eflags
+.L848:
+       cmpl $2,%ecx
+       je .L853
+       jg .L861
+       cmpl $1,%ecx
+       je .L856
+       jmp .L859
+       .p2align 4,,7
+.L861:
+       cmpl $4,%ecx
+       jne .L859
+       testl %edx,%edx
+       jl .L862
+       jmp .L857
+       .p2align 4,,7
+.L853:
+       testw %dx,%dx
+       jl .L862
+       jmp .L857
+       .p2align 4,,7
+.L856:
+       testb %dl,%dl
+       jge .L857
+.L862:
+       orb $128,m_eflags
+       jmp .L849
+       .p2align 4,,7
+.L857:
+       andb $127,m_eflags
+       jmp .L849
+       .p2align 4,,7
+.L859:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L849:
+       addl $12,%esp
+       ret
+.Lfe28:
+       .size    update_flags_AND,.Lfe28-update_flags_AND
+       .align 4
+.globl update_flags_OR
+       .type    update_flags_OR,@function
+update_flags_OR:
+       subl $12,%esp
+       movl 16(%esp),%ecx
+       movl 24(%esp),%edx
+       orl 20(%esp),%edx
+       andb $247,m_eflags+1
+       andb $254,m_eflags
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L865
+       orb $4,m_eflags
+       jmp .L866
+       .p2align 4,,7
+.L865:
+       andb $251,m_eflags
+.L866:
+       testl %edx,%edx
+       jne .L867
+       orb $64,m_eflags
+       jmp .L868
+       .p2align 4,,7
+.L867:
+       andb $191,m_eflags
+.L868:
+       cmpl $2,%ecx
+       je .L873
+       jg .L881
+       cmpl $1,%ecx
+       je .L876
+       jmp .L879
+       .p2align 4,,7
+.L881:
+       cmpl $4,%ecx
+       jne .L879
+       testl %edx,%edx
+       jl .L882
+       jmp .L877
+       .p2align 4,,7
+.L873:
+       testw %dx,%dx
+       jl .L882
+       jmp .L877
+       .p2align 4,,7
+.L876:
+       testb %dl,%dl
+       jge .L877
+.L882:
+       orb $128,m_eflags
+       jmp .L869
+       .p2align 4,,7
+.L877:
+       andb $127,m_eflags
+       jmp .L869
+       .p2align 4,,7
+.L879:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L869:
+       addl $12,%esp
+       ret
+.Lfe29:
+       .size    update_flags_OR,.Lfe29-update_flags_OR
+       .align 4
+.globl update_flags_XOR
+       .type    update_flags_XOR,@function
+update_flags_XOR:
+       subl $12,%esp
+       movl 16(%esp),%ecx
+       movl 24(%esp),%edx
+       xorl 20(%esp),%edx
+       andb $247,m_eflags+1
+       andb $254,m_eflags
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L885
+       orb $4,m_eflags
+       jmp .L886
+       .p2align 4,,7
+.L885:
+       andb $251,m_eflags
+.L886:
+       testl %edx,%edx
+       jne .L887
+       orb $64,m_eflags
+       jmp .L888
+       .p2align 4,,7
+.L887:
+       andb $191,m_eflags
+.L888:
+       cmpl $2,%ecx
+       je .L893
+       jg .L901
+       cmpl $1,%ecx
+       je .L896
+       jmp .L899
+       .p2align 4,,7
+.L901:
+       cmpl $4,%ecx
+       jne .L899
+       testl %edx,%edx
+       jl .L902
+       jmp .L897
+       .p2align 4,,7
+.L893:
+       testw %dx,%dx
+       jl .L902
+       jmp .L897
+       .p2align 4,,7
+.L896:
+       testb %dl,%dl
+       jge .L897
+.L902:
+       orb $128,m_eflags
+       jmp .L889
+       .p2align 4,,7
+.L897:
+       andb $127,m_eflags
+       jmp .L889
+       .p2align 4,,7
+.L899:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L889:
+       addl $12,%esp
+       ret
+.Lfe30:
+       .size    update_flags_XOR,.Lfe30-update_flags_XOR
+       .align 4
+.globl update_flags_TEST
+       .type    update_flags_TEST,@function
+update_flags_TEST:
+       subl $12,%esp
+       movl 16(%esp),%ecx
+       movl 24(%esp),%edx
+       andl 20(%esp),%edx
+       andb $247,m_eflags+1
+       andb $254,m_eflags
+       movl %edx,%eax
+       andl $255,%eax
+       cmpb $0,parityIsEven(%eax)
+       je .L905
+       orb $4,m_eflags
+       jmp .L906
+       .p2align 4,,7
+.L905:
+       andb $251,m_eflags
+.L906:
+       testl %edx,%edx
+       jne .L907
+       orb $64,m_eflags
+       jmp .L908
+       .p2align 4,,7
+.L907:
+       andb $191,m_eflags
+.L908:
+       cmpl $2,%ecx
+       je .L913
+       jg .L921
+       cmpl $1,%ecx
+       je .L916
+       jmp .L919
+       .p2align 4,,7
+.L921:
+       cmpl $4,%ecx
+       jne .L919
+       testl %edx,%edx
+       jl .L922
+       jmp .L917
+       .p2align 4,,7
+.L913:
+       testw %dx,%dx
+       jl .L922
+       jmp .L917
+       .p2align 4,,7
+.L916:
+       testb %dl,%dl
+       jge .L917
+.L922:
+       orb $128,m_eflags
+       jmp .L909
+       .p2align 4,,7
+.L917:
+       andb $127,m_eflags
+       jmp .L909
+       .p2align 4,,7
+.L919:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L909:
+       addl $12,%esp
+       ret
+.Lfe31:
+       .size    update_flags_TEST,.Lfe31-update_flags_TEST
+.section       .rodata
+.LC84:
+       .string "update_flags_IMUL"
+.text
+       .align 4
+.globl update_flags_IMUL
+       .type    update_flags_IMUL,@function
+update_flags_IMUL:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ecx
+       movl 36(%esp),%eax
+       imull 40(%esp)
+       movb $1,%bl
+       cmpl $2,%ecx
+       je .L928
+       jg .L936
+       cmpl $1,%ecx
+       je .L931
+       jmp .L934
+       .p2align 4,,7
+.L936:
+       cmpl $4,%ecx
+       jne .L934
+       movl %edx,%eax
+       xorl %edx,%edx
+       movl %eax,%ecx
+       movb $0,%bl
+       testl %eax,%eax
+       je .L933
+       cmpl $-1,%ecx
+       jne .L924
+       jmp .L933
+       .p2align 4,,7
+.L928:
+       shrdl $16,%edx,%eax
+       shrl $16,%edx
+       movl %eax,%ecx
+       movzwl %cx,%ecx
+       movb $0,%bl
+       testl %ecx,%ecx
+       je .L933
+       cmpl $65535,%ecx
+       jne .L924
+       jmp .L933
+       .p2align 4,,7
+.L931:
+       shrdl $8,%edx,%eax
+       shrl $8,%edx
+       movl %eax,%ecx
+       movzbl %cl,%ecx
+       movb $0,%bl
+       testl %ecx,%ecx
+       je .L933
+       cmpl $255,%ecx
+       jne .L924
+.L933:
+       movb $1,%bl
+       jmp .L937
+       .p2align 4,,7
+.L934:
+       addl $-12,%esp
+       pushl $.LC84
+       call panic
+       addl $16,%esp
+.L924:
+       testb %bl,%bl
+       jne .L937
+       orb $1,m_eflags
+       jmp .L938
+       .p2align 4,,7
+.L937:
+       andb $254,m_eflags
+.L938:
+       testb %bl,%bl
+       jne .L939
+       orb $8,m_eflags+1
+       jmp .L940
+       .p2align 4,,7
+.L939:
+       andb $247,m_eflags+1
+.L940:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe32:
+       .size    update_flags_IMUL,.Lfe32-update_flags_IMUL
+.section       .rodata
+.LC85:
+       .string "update_flags_MUL"
+.text
+       .align 4
+.globl update_flags_MUL
+       .type    update_flags_MUL,@function
+update_flags_MUL:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ecx
+       movl 36(%esp),%eax
+       mull 40(%esp)
+       movl %eax,%ebx
+       movl %edx,%esi
+       cmpl $2,%ecx
+       je .L944
+       jg .L948
+       cmpl $1,%ecx
+       je .L945
+       jmp .L946
+       .p2align 4,,7
+.L948:
+       cmpl $4,%ecx
+       jne .L946
+       movl %esi,%ebx
+       xorl %esi,%esi
+       jmp .L942
+       .p2align 4,,7
+.L944:
+       shrdl $16,%esi,%ebx
+       shrl $16,%esi
+       jmp .L942
+       .p2align 4,,7
+.L945:
+       shrdl $8,%esi,%ebx
+       shrl $8,%esi
+       jmp .L942
+       .p2align 4,,7
+.L946:
+       addl $-12,%esp
+       pushl $.LC85
+       call panic
+       addl $16,%esp
+.L942:
+       movl %ebx,%eax
+       orl %esi,%eax
+       je .L949
+       orb $1,m_eflags
+       jmp .L950
+       .p2align 4,,7
+.L949:
+       andb $254,m_eflags
+.L950:
+       movl %ebx,%eax
+       orl %esi,%eax
+       je .L951
+       orb $8,m_eflags+1
+       jmp .L952
+       .p2align 4,,7
+.L951:
+       andb $247,m_eflags+1
+.L952:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe33:
+       .size    update_flags_MUL,.Lfe33-update_flags_MUL
+       .align 4
+.globl update_flags_SHL
+       .type    update_flags_SHL,@function
+update_flags_SHL:
+       subl $12,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%esi
+       movl 36(%esp),%edi
+       movl 40(%esp),%ebp
+       movl %ebp,%ebx
+       movl %edi,%ecx
+       sall %cl,%ebx
+       testl %edi,%edi
+       je .L954
+       addl $-8,%esp
+       leal -1(%edi),%ecx
+       movl %ebp,%eax
+       sall %cl,%eax
+       pushl %eax
+       pushl %esi
+       call topBitOf
+       addl $16,%esp
+       testl %eax,%eax
+       je .L955
+       orb $1,m_eflags
+       jmp .L956
+       .p2align 4,,7
+.L955:
+       andb $254,m_eflags
+.L956:
+       testl %ebx,%ebx
+       jne .L957
+       orb $64,m_eflags
+       jmp .L958
+       .p2align 4,,7
+.L957:
+       andb $191,m_eflags
+.L958:
+       cmpl $2,%esi
+       je .L963
+       jg .L971
+       cmpl $1,%esi
+       je .L966
+       jmp .L969
+       .p2align 4,,7
+.L971:
+       cmpl $4,%esi
+       jne .L969
+       testl %ebx,%ebx
+       jl .L975
+       jmp .L967
+       .p2align 4,,7
+.L963:
+       testw %bx,%bx
+       jl .L975
+       jmp .L967
+       .p2align 4,,7
+.L966:
+       testb %bl,%bl
+       jge .L967
+.L975:
+       orb $128,m_eflags
+       jmp .L959
+       .p2align 4,,7
+.L967:
+       andb $127,m_eflags
+       jmp .L959
+       .p2align 4,,7
+.L969:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L959:
+       cmpl $1,%edi
+       jne .L954
+       addl $-8,%esp
+       pushl %ebp
+       pushl %esi
+       call topBitOf
+       movl %eax,%ebx
+       addl $-8,%esp
+       leal (%ebp,%ebp),%eax
+       pushl %eax
+       pushl %esi
+       call topBitOf
+       addl $32,%esp
+       cmpl %eax,%ebx
+       je .L973
+       orb $8,m_eflags+1
+       jmp .L954
+       .p2align 4,,7
+.L973:
+       andb $247,m_eflags+1
+.L954:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $12,%esp
+       ret
+.Lfe34:
+       .size    update_flags_SHL,.Lfe34-update_flags_SHL
+       .align 4
+.globl update_flags_SHR
+       .type    update_flags_SHR,@function
+update_flags_SHR:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%esi
+       movl 36(%esp),%ebx
+       movl 40(%esp),%edi
+       movl %edi,%edx
+       movl %ebx,%ecx
+       shrl %cl,%edx
+       testl %ebx,%ebx
+       je .L977
+       leal -1(%ebx),%eax
+       btl %eax,%edi
+       jnc .L978
+       orb $1,m_eflags
+       jmp .L979
+       .p2align 4,,7
+.L978:
+       andb $254,m_eflags
+.L979:
+       testl %edx,%edx
+       jne .L980
+       orb $64,m_eflags
+       jmp .L981
+       .p2align 4,,7
+.L980:
+       andb $191,m_eflags
+.L981:
+       cmpl $2,%esi
+       je .L986
+       jg .L994
+       cmpl $1,%esi
+       je .L989
+       jmp .L992
+       .p2align 4,,7
+.L994:
+       cmpl $4,%esi
+       jne .L992
+       testl %edx,%edx
+       jl .L998
+       jmp .L990
+       .p2align 4,,7
+.L986:
+       testw %dx,%dx
+       jl .L998
+       jmp .L990
+       .p2align 4,,7
+.L989:
+       testb %dl,%dl
+       jge .L990
+.L998:
+       orb $128,m_eflags
+       jmp .L982
+       .p2align 4,,7
+.L990:
+       andb $127,m_eflags
+       jmp .L982
+       .p2align 4,,7
+.L992:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L982:
+       cmpl $1,%ebx
+       jne .L977
+       addl $-8,%esp
+       pushl %edi
+       pushl %esi
+       call topBitOf
+       addl $16,%esp
+       testl %eax,%eax
+       je .L996
+       orb $8,m_eflags+1
+       jmp .L977
+       .p2align 4,,7
+.L996:
+       andb $247,m_eflags+1
+.L977:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe35:
+       .size    update_flags_SHR,.Lfe35-update_flags_SHR
+       .align 4
+       .type    update_flags_SAR,@function
+update_flags_SAR:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ebx
+       movl 36(%esp),%esi
+       movl 40(%esp),%edi
+       movl %edi,%edx
+       movl %esi,%ecx
+       shrl %cl,%edx
+       testl %esi,%esi
+       je .L1000
+       leal -1(%esi),%eax
+       btl %eax,%edi
+       jnc .L1001
+       orb $1,m_eflags
+       jmp .L1002
+       .p2align 4,,7
+.L1001:
+       andb $254,m_eflags
+.L1002:
+       testl %edx,%edx
+       jne .L1003
+       orb $64,m_eflags
+       jmp .L1004
+       .p2align 4,,7
+.L1003:
+       andb $191,m_eflags
+.L1004:
+       cmpl $2,%ebx
+       je .L1009
+       jg .L1017
+       cmpl $1,%ebx
+       je .L1012
+       jmp .L1015
+       .p2align 4,,7
+.L1017:
+       cmpl $4,%ebx
+       jne .L1015
+       testl %edx,%edx
+       jl .L1021
+       jmp .L1013
+       .p2align 4,,7
+.L1009:
+       testw %dx,%dx
+       jl .L1021
+       jmp .L1013
+       .p2align 4,,7
+.L1012:
+       testb %dl,%dl
+       jge .L1013
+.L1021:
+       orb $128,m_eflags
+       jmp .L1005
+       .p2align 4,,7
+.L1013:
+       andb $127,m_eflags
+       jmp .L1005
+       .p2align 4,,7
+.L1015:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L1005:
+       cmpl $1,%esi
+       jne .L1000
+       andb $247,m_eflags+1
+.L1000:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe36:
+       .size    update_flags_SAR,.Lfe36-update_flags_SAR
+       .align 4
+       .type    update_flags_ROL,@function
+update_flags_ROL:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%esi
+       movl 36(%esp),%ebx
+       movl 40(%esp),%eax
+       addl $-4,%esp
+       pushl %eax
+       pushl %ebx
+       pushl %esi
+       call calcROL
+       addl $16,%esp
+       testb $1,%al
+       je .L1023
+       orb $1,m_eflags
+       jmp .L1024
+       .p2align 4,,7
+.L1023:
+       andb $254,m_eflags
+.L1024:
+       cmpl $1,%ebx
+       jne .L1025
+       movl %eax,%ebx
+       andl $1,%ebx
+       addl $-8,%esp
+       pushl %eax
+       pushl %esi
+       call topBitOf
+       addl $16,%esp
+       cmpl %eax,%ebx
+       je .L1026
+       orb $8,m_eflags+1
+       jmp .L1025
+       .p2align 4,,7
+.L1026:
+       andb $247,m_eflags+1
+.L1025:
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe37:
+       .size    update_flags_ROL,.Lfe37-update_flags_ROL
+       .align 4
+       .type    update_flags_ROR,@function
+update_flags_ROR:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%esi
+       movl 36(%esp),%ebx
+       movl 40(%esp),%edi
+       addl $-4,%esp
+       pushl %edi
+       pushl %ebx
+       pushl %esi
+       call calcROR
+       addl $-8,%esp
+       pushl %eax
+       pushl %esi
+       call topBitOf
+       addl $32,%esp
+       testl %eax,%eax
+       je .L1029
+       orb $1,m_eflags
+       jmp .L1030
+       .p2align 4,,7
+.L1029:
+       andb $254,m_eflags
+.L1030:
+       cmpl $1,%ebx
+       jne .L1031
+       addl $-8,%esp
+       pushl %edi
+       pushl %esi
+       call topBitOf
+       movl %eax,%ebx
+       addl $-8,%esp
+       leal (%edi,%edi),%eax
+       pushl %eax
+       pushl %esi
+       call topBitOf
+       addl $32,%esp
+       cmpl %eax,%ebx
+       je .L1032
+       orb $8,m_eflags+1
+       jmp .L1031
+       .p2align 4,,7
+.L1032:
+       andb $247,m_eflags+1
+.L1031:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe38:
+       .size    update_flags_ROR,.Lfe38-update_flags_ROR
+       .align 4
+       .type    update_flags_and_calc_RCR,@function
+update_flags_and_calc_RCR:
+       subl $28,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 52(%esp),%ebp
+       movl 56(%esp),%ebx
+       movl %ebp,%esi
+       testl %ebp,%ebp
+       je .L1036
+       movl 48(%esp),%eax
+       leal -1(,%eax,8),%edi
+       movl m_eflags,%ecx
+       movl %ecx,28(%esp)
+       .p2align 4,,7
+.L1037:
+       movl %ebx,%edx
+       andl $1,%edx
+       shrl $1,%ebx
+       movl 28(%esp),%eax
+       andl $1,%eax
+       movl %edi,%ecx
+       sall %cl,%eax
+       orl %eax,%ebx
+       testb %dl,%dl
+       je .L1039
+       orb $1,28(%esp)
+       jmp .L1041
+       .p2align 4,,7
+.L1039:
+       andb $254,28(%esp)
+.L1041:
+       decl %esi
+       jnz .L1037
+       movl 28(%esp),%eax
+       movl %eax,m_eflags
+.L1036:
+       cmpl $1,%ebp
+       jne .L1043
+       addl $-8,%esp
+       pushl %ebx
+       movl 60(%esp),%ecx
+       pushl %ecx
+       call topBitOf
+       movl %eax,%esi
+       addl $-8,%esp
+       leal (%ebx,%ebx),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call topBitOf
+       addl $32,%esp
+       cmpl %eax,%esi
+       je .L1044
+       orb $8,m_eflags+1
+       jmp .L1043
+       .p2align 4,,7
+.L1044:
+       andb $247,m_eflags+1
+.L1043:
+       movl %ebx,%eax
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $28,%esp
+       ret
+.Lfe39:
+       .size    update_flags_and_calc_RCR,.Lfe39-update_flags_and_calc_RCR
+       .align 4
+       .type    update_flags_SHLD,@function
+update_flags_SHLD:
+       subl $12,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%edi
+       movl 36(%esp),%ebx
+       movl 40(%esp),%eax
+       movl 44(%esp),%ebp
+       pushl %ebp
+       pushl %eax
+       pushl %ebx
+       pushl %edi
+       call calcSHLD
+       movl %eax,%esi
+       addl $16,%esp
+       testl %ebx,%ebx
+       je .L1048
+       addl $-8,%esp
+       leal -1(%ebx),%ecx
+       movl %ebp,%eax
+       sall %cl,%eax
+       pushl %eax
+       pushl %edi
+       call topBitOf
+       addl $16,%esp
+       testl %eax,%eax
+       je .L1049
+       orb $1,m_eflags
+       jmp .L1050
+       .p2align 4,,7
+.L1049:
+       andb $254,m_eflags
+.L1050:
+       testl %esi,%esi
+       jne .L1051
+       orb $64,m_eflags
+       jmp .L1052
+       .p2align 4,,7
+.L1051:
+       andb $191,m_eflags
+.L1052:
+       cmpl $2,%edi
+       je .L1057
+       jg .L1065
+       cmpl $1,%edi
+       je .L1060
+       jmp .L1063
+       .p2align 4,,7
+.L1065:
+       cmpl $4,%edi
+       jne .L1063
+       testl %esi,%esi
+       jl .L1069
+       jmp .L1061
+       .p2align 4,,7
+.L1057:
+       testw %si,%si
+       jl .L1069
+       jmp .L1061
+       .p2align 4,,7
+.L1060:
+       movl %esi,%eax
+       testb %al,%al
+       jge .L1061
+.L1069:
+       orb $128,m_eflags
+       jmp .L1053
+       .p2align 4,,7
+.L1061:
+       andb $127,m_eflags
+       jmp .L1053
+       .p2align 4,,7
+.L1063:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L1053:
+       cmpl $1,%ebx
+       jne .L1048
+       addl $-8,%esp
+       pushl %ebp
+       pushl %edi
+       call topBitOf
+       movl %eax,%ebx
+       addl $-8,%esp
+       pushl %esi
+       pushl %edi
+       call topBitOf
+       addl $32,%esp
+       cmpl %eax,%ebx
+       je .L1067
+       orb $8,m_eflags+1
+       jmp .L1048
+       .p2align 4,,7
+.L1067:
+       andb $247,m_eflags+1
+.L1048:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $12,%esp
+       ret
+.Lfe40:
+       .size    update_flags_SHLD,.Lfe40-update_flags_SHLD
+       .align 4
+       .type    update_flags_SHRD,@function
+update_flags_SHRD:
+       subl $12,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%edi
+       movl 36(%esp),%ebx
+       movl 40(%esp),%eax
+       movl 44(%esp),%ebp
+       pushl %ebp
+       pushl %eax
+       pushl %ebx
+       pushl %edi
+       call calcSHRD
+       movl %eax,%esi
+       addl $16,%esp
+       testl %ebx,%ebx
+       je .L1071
+       addl $-8,%esp
+       leal -1(%ebx),%ecx
+       movl %ebp,%eax
+       shrl %cl,%eax
+       andl $1,%eax
+       pushl %eax
+       pushl %edi
+       call topBitOf
+       addl $16,%esp
+       testl %eax,%eax
+       je .L1072
+       orb $1,m_eflags
+       jmp .L1073
+       .p2align 4,,7
+.L1072:
+       andb $254,m_eflags
+.L1073:
+       testl %esi,%esi
+       jne .L1074
+       orb $64,m_eflags
+       jmp .L1075
+       .p2align 4,,7
+.L1074:
+       andb $191,m_eflags
+.L1075:
+       cmpl $2,%edi
+       je .L1080
+       jg .L1088
+       cmpl $1,%edi
+       je .L1083
+       jmp .L1086
+       .p2align 4,,7
+.L1088:
+       cmpl $4,%edi
+       jne .L1086
+       testl %esi,%esi
+       jl .L1092
+       jmp .L1084
+       .p2align 4,,7
+.L1080:
+       testw %si,%si
+       jl .L1092
+       jmp .L1084
+       .p2align 4,,7
+.L1083:
+       movl %esi,%eax
+       testb %al,%al
+       jge .L1084
+.L1092:
+       orb $128,m_eflags
+       jmp .L1076
+       .p2align 4,,7
+.L1084:
+       andb $127,m_eflags
+       jmp .L1076
+       .p2align 4,,7
+.L1086:
+       addl $-12,%esp
+       pushl $.LC83
+       call panic
+       addl $16,%esp
+.L1076:
+       cmpl $1,%ebx
+       jne .L1071
+       addl $-8,%esp
+       pushl %ebp
+       pushl %edi
+       call topBitOf
+       movl %eax,%ebx
+       addl $-8,%esp
+       pushl %esi
+       pushl %edi
+       call topBitOf
+       addl $32,%esp
+       cmpl %eax,%ebx
+       je .L1090
+       orb $8,m_eflags+1
+       jmp .L1071
+       .p2align 4,,7
+.L1090:
+       andb $247,m_eflags+1
+.L1071:
+       popl %ebx
+       popl %esi
+       popl %edi
+       popl %ebp
+       addl $12,%esp
+       ret
+.Lfe41:
+       .size    update_flags_SHRD,.Lfe41-update_flags_SHRD
+.section       .rodata
+.LC86:
+       .string "CBW"
+.LC87:
+       .string "CWD"
+       .align 32
+.LC88:
+       .string "heimdall: do_one_insn: unimplemented INT 0x%x\n"
+.LC89:
+       .string "do_one_insn(INT)"
+       .align 32
+.LC90:
+       .string "heimdall: do_one_insn: unimplemented REPNE 0x%x\n"
+.LC91:
+       .string "do_one_insn(REPNE)"
+       .align 32
+.LC92:
+       .string "heimdall: do_one_insn: unimplemented REP/REPE 0x%x\n"
+.LC93:
+       .string "do_one_insn(REP/REPE)"
+.LC94:
+       .string "bad case = %d\n"
+.LC95:
+       .string "unhandled Grp2 case"
+.LC96:
+       .string "Grp3: MUL"
+.LC97:
+       .string "Grp3: IMUL"
+.globl __udivdi3
+.globl __umoddi3
+.LC98:
+       .string "Grp3: DIV: divide error"
+.LC99:
+       .string "Grp3: DIV"
+.globl __divdi3
+.globl __moddi3
+.LC101:
+       .string "IDIV: divide error"
+.LC102:
+       .string "DIV"
+.LC103:
+       .string "unhandled Grp3 case"
+.LC104:
+       .string "unhandled Grp4 case"
+.LC105:
+       .string "unhandled Grp5 case"
+       .align 32
+.LC106:
+       .string "heimdall: do_one_insn: unimplemented opcode **TWO** 0x%x\n"
+.LC107:
+       .string "do_one_insn(unimp2)"
+       .align 32
+.LC108:
+       .string "heimdall: do_one_insn: unimplemented opcode 0x%x\n"
+.LC109:
+       .string "do_one_insn(unimp)"
+.text
+       .align 4
+       .type    read_bit_array,@function
+read_bit_array:
+       movl 4(%esp),%ecx
+       movl 8(%esp),%edx
+       movl %edx,%eax
+       shrl $3,%eax
+       movzbl (%eax,%ecx),%eax
+       movl %edx,%ecx
+       andl $7,%ecx
+       sarl %cl,%eax
+       andl $1,%eax
+       ret
+.Lfe42:
+       .size    read_bit_array,.Lfe42-read_bit_array
+       .align 4
+       .type    write_bit_array,@function
+write_bit_array:
+       pushl %esi
+       pushl %ebx
+       movl 12(%esp),%ebx
+       movl 16(%esp),%eax
+       movl %eax,%esi
+       shrl $3,%esi
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl $-2,%eax
+       roll %cl,%eax
+       movb (%esi,%ebx),%dl
+       andb %al,%dl
+       movl 20(%esp),%eax
+       andl $1,%eax
+       sall %cl,%eax
+       orb %al,%dl
+       movb %dl,(%esi,%ebx)
+       popl %ebx
+       popl %esi
+       ret
+.Lfe43:
+       .size    write_bit_array,.Lfe43-write_bit_array
+       .align 4
+       .type    fp_double_from_extended,@function
+fp_double_from_extended:
+       subl $32,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 48(%esp),%edi
+       leal 24(%esp),%esi
+       movb 9(%edi),%al
+       shrb $7,%al
+       movzbl %al,%ebx
+       movzbl 9(%edi),%ecx
+       sall $8,%ecx
+       movzbl 8(%edi),%eax
+       orl %eax,%ecx
+       andl $32767,%ecx
+       je .L2878
+       cmpl $32767,%ecx
+       je .L2888
+       addl $-15360,%ecx
+       jns .L2881
+       xorl %ecx,%ecx
+.L2881:
+       cmpl $2047,%ecx
+       jle .L2878
+.L2888:
+       movl $2047,%ecx
+.L2878:
+       movb %cl,%al
+       salb $4,%al
+       movb %al,6(%esi)
+       movl %ecx,%eax
+       sarl $4,%eax
+       movb %al,%dl
+       andb $127,%dl
+       movb %bl,%al
+       salb $7,%al
+       orb %al,%dl
+       movb %dl,7(%esi)
+       xorl %ebx,%ebx
+       .p2align 4,,7
+.L2886:
+       addl $-4,%esp
+       addl $-8,%esp
+       leal 11(%ebx),%eax
+       pushl %eax
+       pushl %edi
+       call read_bit_array
+       pushl %eax
+       pushl %ebx
+       pushl %esi
+       call write_bit_array
+       addl $32,%esp
+       incl %ebx
+       cmpl $51,%ebx
+       jle .L2886
+       fldl 24(%esp)
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $32,%esp
+       ret
+.Lfe44:
+       .size    fp_double_from_extended,.Lfe44-fp_double_from_extended
+       .align 4
+       .type    fp_extended_from_double,@function
+fp_extended_from_double:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%edi
+       leal 36(%esp),%esi
+       movb 7(%esi),%al
+       shrb $7,%al
+       movzbl %al,%ebx
+       movzbl 7(%esi),%ecx
+       sall $4,%ecx
+       movb 6(%esi),%al
+       shrb $4,%al
+       movzbl %al,%eax
+       orl %eax,%ecx
+       andl $2047,%ecx
+       je .L2891
+       cmpl $2047,%ecx
+       jne .L2892
+       movl $32767,%ecx
+       jmp .L2891
+       .p2align 4,,7
+.L2892:
+       addl $15360,%ecx
+.L2891:
+       movl %ecx,%eax
+       sarl $8,%eax
+       movb %al,%dl
+       andb $127,%dl
+       movb %bl,%al
+       salb $7,%al
+       orb %al,%dl
+       movb %dl,9(%edi)
+       movb %cl,8(%edi)
+       xorl %ebx,%ebx
+       .p2align 4,,7
+.L2897:
+       addl $-4,%esp
+       addl $-8,%esp
+       pushl %ebx
+       pushl %esi
+       call read_bit_array
+       pushl %eax
+       leal 11(%ebx),%eax
+       pushl %eax
+       pushl %edi
+       call write_bit_array
+       addl $32,%esp
+       incl %ebx
+       cmpl $51,%ebx
+       jle .L2897
+       xorl %ebx,%ebx
+       .p2align 4,,7
+.L2902:
+       addl $-4,%esp
+       pushl $0
+       pushl %ebx
+       pushl %edi
+       call write_bit_array
+       addl $16,%esp
+       incl %ebx
+       cmpl $10,%ebx
+       jle .L2902
+       xorl %ebx,%ebx
+       addl $-8,%esp
+       fldl 44(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       call isnan
+       addl $16,%esp
+       testl %eax,%eax
+       jne .L2905
+       addl $-8,%esp
+       fldl 44(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       call isinf
+       addl $16,%esp
+       testl %eax,%eax
+       jne .L2905
+       fldl 36(%esp)
+       fldz
+       fucompp
+       fnstsw %ax
+       andb $69,%ah
+       cmpb $64,%ah
+       je .L2904
+.L2905:
+       movl $1,%ebx
+.L2904:
+       addl $-4,%esp
+       pushl %ebx
+       pushl $63
+       pushl %edi
+       call write_bit_array
+       addl $16,%esp
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe45:
+       .size    fp_extended_from_double,.Lfe45-fp_extended_from_double
+       .align 4
+       .type    fp_unpack_data_regs,@function
+fp_unpack_data_regs:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       call fp_get_tos
+       movl %eax,%ebx
+       xorl %esi,%esi
+       .p2align 4,,7
+.L2910:
+       addl $-12,%esp
+       leal (%esi,%esi,4),%eax
+       leal m_fpu_state+28(,%eax,2),%eax
+       pushl %eax
+       call fp_double_from_extended
+       fstpl m_fpu_data_regs(,%ebx,8)
+       addl $16,%esp
+       cmpl $7,%ebx
+       jne .L2911
+       xorl %ebx,%ebx
+       jmp .L2909
+       .p2align 4,,7
+.L2911:
+       incl %ebx
+.L2909:
+       incl %esi
+       cmpl $7,%esi
+       jle .L2910
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe46:
+       .size    fp_unpack_data_regs,.Lfe46-fp_unpack_data_regs
+       .align 4
+       .type    fp_repack_data_regs,@function
+fp_repack_data_regs:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       call fp_get_tos
+       movl %eax,%ebx
+       xorl %esi,%esi
+       .p2align 4,,7
+.L2918:
+       addl $-4,%esp
+       fldl m_fpu_data_regs(,%ebx,8)
+       subl $8,%esp
+       fstpl (%esp)
+       leal (%esi,%esi,4),%eax
+       leal m_fpu_state+28(,%eax,2),%eax
+       pushl %eax
+       call fp_extended_from_double
+       addl $16,%esp
+       cmpl $7,%ebx
+       jne .L2919
+       xorl %ebx,%ebx
+       jmp .L2917
+       .p2align 4,,7
+.L2919:
+       incl %ebx
+.L2917:
+       incl %esi
+       cmpl $7,%esi
+       jle .L2918
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe47:
+       .size    fp_repack_data_regs,.Lfe47-fp_repack_data_regs
+       .align 4
+       .type    setFMem,@function
+setFMem:
+       subl $28,%esp
+       movl 32(%esp),%eax
+       fldl 36(%esp)
+       fstps (%eax)
+       addl $28,%esp
+       ret
+.Lfe48:
+       .size    setFMem,.Lfe48-setFMem
+       .align 4
+       .type    getFMem,@function
+getFMem:
+       subl $28,%esp
+       movl 32(%esp),%eax
+       flds (%eax)
+       addl $28,%esp
+       ret
+.Lfe49:
+       .size    getFMem,.Lfe49-getFMem
+       .align 4
+       .type    setDMem,@function
+setDMem:
+       movl 4(%esp),%eax
+       fldl 8(%esp)
+       fstpl (%eax)
+       ret
+.Lfe50:
+       .size    setDMem,.Lfe50-setDMem
+       .align 4
+       .type    getDMem,@function
+getDMem:
+       movl 4(%esp),%eax
+       fldl (%eax)
+       ret
+.Lfe51:
+       .size    getDMem,.Lfe51-getDMem
+       .align 4
+       .type    setTMem,@function
+setTMem:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       fldl 20(%esp)
+       addl $-4,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       pushl %eax
+       call fp_extended_from_double
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe52:
+       .size    setTMem,.Lfe52-setTMem
+       .align 4
+       .type    getTMem,@function
+getTMem:
+       subl $12,%esp
+       movl 16(%esp),%eax
+       addl $-12,%esp
+       pushl %eax
+       call fp_double_from_extended
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe53:
+       .size    getTMem,.Lfe53-getTMem
+.section       .rodata
+.LC110:
+       .string "fp_get_statusword_flag"
+.text
+       .align 4
+       .type    fp_get_statusword_flag,@function
+fp_get_statusword_flag:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $15,%ebx
+       jbe .L2929
+       addl $-12,%esp
+       pushl $.LC110
+       call panic
+       addl $16,%esp
+.L2929:
+       movzwl m_fpu_state+4,%eax
+       movl %ebx,%ecx
+       sarl %cl,%eax
+       andl $1,%eax
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe54:
+       .size    fp_get_statusword_flag,.Lfe54-fp_get_statusword_flag
+.section       .rodata
+.LC111:
+       .string "fp_set_statusword_flag_to"
+.text
+       .align 4
+       .type    fp_set_statusword_flag_to,@function
+fp_set_statusword_flag_to:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $15,%ebx
+       jbe .L2931
+       addl $-12,%esp
+       pushl $.LC111
+       call panic
+       addl $16,%esp
+.L2931:
+       cmpl $0,36(%esp)
+       je .L2932
+       movl $1,%eax
+       movl %ebx,%ecx
+       sall %cl,%eax
+       orw %ax,m_fpu_state+4
+       jmp .L2933
+       .p2align 4,,7
+.L2932:
+       movl $-2,%eax
+       movl %ebx,%ecx
+       roll %cl,%eax
+       andw %ax,m_fpu_state+4
+.L2933:
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe55:
+       .size    fp_set_statusword_flag_to,.Lfe55-fp_set_statusword_flag_to
+.section       .rodata
+.LC112:
+       .string "--- FP STACK OVERFLOW!\n"
+.text
+       .align 4
+       .type    fp_set_stack_overflow,@function
+fp_set_stack_overflow:
+       subl $12,%esp
+       addl $-8,%esp
+       pushl $.LC112
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $-12,%esp
+       pushl $1
+       call exit
+.Lfe56:
+       .size    fp_set_stack_overflow,.Lfe56-fp_set_stack_overflow
+.section       .rodata
+.LC113:
+       .string "--- FP STACK UNDERFLOW!\n"
+.text
+       .align 4
+       .type    fp_set_stack_underflow,@function
+fp_set_stack_underflow:
+       subl $12,%esp
+       addl $-8,%esp
+       pushl $.LC113
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $-12,%esp
+       pushl $1
+       call exit
+.Lfe57:
+       .size    fp_set_stack_underflow,.Lfe57-fp_set_stack_underflow
+       .align 4
+       .type    fp_get_tos,@function
+fp_get_tos:
+       movzwl m_fpu_state+4,%eax
+       shrw $11,%ax
+       andl $7,%eax
+       ret
+.Lfe58:
+       .size    fp_get_tos,.Lfe58-fp_get_tos
+.section       .rodata
+.LC114:
+       .string "fp_set_tos"
+.text
+       .align 4
+       .type    fp_set_tos,@function
+fp_set_tos:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2938
+       addl $-12,%esp
+       pushl $.LC114
+       call panic
+       addl $16,%esp
+.L2938:
+       addl $-8,%esp
+       pushl $0
+       pushl $11
+       call fp_set_statusword_flag_to
+       addl $-8,%esp
+       pushl $0
+       pushl $12
+       call fp_set_statusword_flag_to
+       addl $32,%esp
+       addl $-8,%esp
+       pushl $0
+       pushl $13
+       call fp_set_statusword_flag_to
+       movl %ebx,%eax
+       sall $11,%eax
+       orw %ax,m_fpu_state+4
+       addl $16,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe59:
+       .size    fp_set_tos,.Lfe59-fp_set_tos
+.section       .rodata
+.LC115:
+       .string "fp_STno_to_regno"
+.LC116:
+       .string "heimdall.c"
+.LC117:
+       .string "regno >= 0 && regno < 8"
+.text
+       .align 4
+       .type    fp_STno_to_regno,@function
+fp_STno_to_regno:
+       subl $12,%esp
+       call fp_get_tos
+       cmpl $7,%eax
+       jbe .L2941
+       pushl $.LC115
+       pushl $3617
+       pushl $.LC116
+       pushl $.LC117
+       call __assert_fail
+       .p2align 4,,7
+.L2941:
+       addl 16(%esp),%eax
+       cmpl $7,%eax
+       jbe .L2944
+       addl $-8,%eax
+       cmpl $7,%eax
+       jbe .L2944
+       pushl $.LC115
+       pushl $3620
+       pushl $.LC116
+       pushl $.LC117
+       call __assert_fail
+       .p2align 4,,7
+.L2944:
+       addl $12,%esp
+       ret
+.Lfe60:
+       .size    fp_STno_to_regno,.Lfe60-fp_STno_to_regno
+       .align 4
+       .type    fp_dec_tos,@function
+fp_dec_tos:
+       subl $12,%esp
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $7
+       call fp_STno_to_regno
+       pushl %eax
+       call fp_set_tos
+       addl $32,%esp
+       addl $12,%esp
+       ret
+.Lfe61:
+       .size    fp_dec_tos,.Lfe61-fp_dec_tos
+       .align 4
+       .type    fp_inc_tos,@function
+fp_inc_tos:
+       subl $12,%esp
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $1
+       call fp_STno_to_regno
+       pushl %eax
+       call fp_set_tos
+       addl $32,%esp
+       addl $12,%esp
+       ret
+.Lfe62:
+       .size    fp_inc_tos,.Lfe62-fp_inc_tos
+       .align 4
+       .type    fp_is_empty_tag,@function
+fp_is_empty_tag:
+       cmpl $3,4(%esp)
+       sete %al
+       movzbl %al,%eax
+       ret
+.Lfe63:
+       .size    fp_is_empty_tag,.Lfe63-fp_is_empty_tag
+.section       .rodata
+.LC118:
+       .string "fp_get_tag"
+.text
+       .align 4
+       .type    fp_get_tag,@function
+fp_get_tag:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2949
+       addl $-12,%esp
+       pushl $.LC118
+       call panic
+       addl $16,%esp
+.L2949:
+       movzwl m_fpu_state+8,%eax
+       leal (%ebx,%ebx),%ecx
+       sarl %cl,%eax
+       andl $3,%eax
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe64:
+       .size    fp_get_tag,.Lfe64-fp_get_tag
+       .align 4
+       .type    fp_get_tag_ST,@function
+fp_get_tag_ST:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2951
+       addl $-12,%esp
+       pushl $.LC118
+       call panic
+       addl $16,%esp
+.L2951:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_STno_to_regno
+       pushl %eax
+       call fp_get_tag
+       addl $32,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe65:
+       .size    fp_get_tag_ST,.Lfe65-fp_get_tag_ST
+       .align 4
+       .type    fp_set_tag,@function
+fp_set_tag:
+       subl $20,%esp
+       pushl %esi
+       pushl %ebx
+       movl 32(%esp),%ebx
+       movl 36(%esp),%esi
+       cmpl $7,%ebx
+       ja .L2954
+       cmpl $3,%esi
+       jbe .L2953
+.L2954:
+       addl $-12,%esp
+       pushl $.LC118
+       call panic
+       addl $16,%esp
+.L2953:
+       leal (%ebx,%ebx),%ecx
+       movl $3,%eax
+       sall %cl,%eax
+       notl %eax
+       andw %ax,m_fpu_state+8
+       movl %esi,%eax
+       sall %cl,%eax
+       orw %ax,m_fpu_state+8
+       popl %ebx
+       popl %esi
+       addl $20,%esp
+       ret
+.Lfe66:
+       .size    fp_set_tag,.Lfe66-fp_set_tag
+.section       .rodata
+.LC119:
+       .string "fp_set_reg"
+.text
+       .align 4
+       .type    fp_set_reg,@function
+fp_set_reg:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2956
+       addl $-12,%esp
+       pushl $.LC119
+       call panic
+       addl $16,%esp
+.L2956:
+       fldl 36(%esp)
+       fstpl m_fpu_data_regs(,%ebx,8)
+       addl $-8,%esp
+       fldz
+       fldl 44(%esp)
+       fucompp
+       fnstsw %ax
+       andb $69,%ah
+       cmpb $64,%ah
+       je .L2957
+       addl $-8,%esp
+       pushl 56(%esp)
+       pushl 56(%esp)
+       call finite
+       addl $16,%esp
+       testl %eax,%eax
+       sete %al
+       movzbl %al,%eax
+       addl %eax,%eax
+       jmp .L2958
+       .p2align 4,,7
+.L2957:
+       movl $1,%eax
+.L2958:
+       pushl %eax
+       pushl %ebx
+       call fp_set_tag
+       addl $16,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe67:
+       .size    fp_set_reg,.Lfe67-fp_set_reg
+.section       .rodata
+.LC120:
+       .string "fp_set_reg_ST"
+.text
+       .align 4
+       .type    fp_set_reg_ST,@function
+fp_set_reg_ST:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2962
+       addl $-12,%esp
+       pushl $.LC120
+       call panic
+       addl $16,%esp
+.L2962:
+       addl $-12,%esp
+       pushl %ebx
+       call fp_STno_to_regno
+       addl $-4,%esp
+       fldl 56(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       pushl %eax
+       call fp_set_reg
+       addl $32,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe68:
+       .size    fp_set_reg_ST,.Lfe68-fp_set_reg_ST
+.section       .rodata
+.LC121:
+       .string "fp_get_reg"
+.LC122:
+       .string "fp_get_reg: Empty"
+.text
+       .align 4
+       .type    fp_get_reg,@function
+fp_get_reg:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2965
+       addl $-12,%esp
+       pushl $.LC121
+       call panic
+       addl $16,%esp
+.L2965:
+       fldl m_fpu_data_regs(,%ebx,8)
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe69:
+       .size    fp_get_reg,.Lfe69-fp_get_reg
+.section       .rodata
+.LC123:
+       .string "fp_get_reg_ST"
+.text
+       .align 4
+       .type    fp_get_reg_ST,@function
+fp_get_reg_ST:
+       subl $24,%esp
+       pushl %ebx
+       movl 32(%esp),%ebx
+       cmpl $7,%ebx
+       jbe .L2967
+       addl $-12,%esp
+       pushl $.LC123
+       call panic
+       addl $16,%esp
+.L2967:
+       addl $-12,%esp
+       pushl %ebx
+       call fp_STno_to_regno
+       addl $-12,%esp
+       pushl %eax
+       call fp_get_reg
+       addl $32,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe70:
+       .size    fp_get_reg_ST,.Lfe70-fp_get_reg_ST
+       .align 4
+       .type    fp_set_tos_reg,@function
+fp_set_tos_reg:
+       subl $12,%esp
+       fldl 16(%esp)
+       addl $-4,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       call fp_get_tos
+       pushl %eax
+       call fp_set_reg
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe71:
+       .size    fp_set_tos_reg,.Lfe71-fp_set_tos_reg
+       .align 4
+       .type    fp_get_tos_reg,@function
+fp_get_tos_reg:
+       subl $12,%esp
+       addl $-12,%esp
+       call fp_get_tos
+       pushl %eax
+       call fp_get_reg
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe72:
+       .size    fp_get_tos_reg,.Lfe72-fp_get_tos_reg
+       .align 4
+       .type    fp_set_tos_reg_QNaN,@function
+fp_set_tos_reg_QNaN:
+       subl $28,%esp
+       addl $-4,%esp
+       movl $2143289344,%eax
+       movl %eax,16(%esp)
+       flds 16(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       call fp_get_tos
+       pushl %eax
+       call fp_set_reg
+       addl $16,%esp
+       addl $28,%esp
+       ret
+.Lfe73:
+       .size    fp_set_tos_reg_QNaN,.Lfe73-fp_set_tos_reg_QNaN
+       .align 4
+       .type    fp_pop,@function
+fp_pop:
+       subl $28,%esp
+       call fp_get_tos_reg
+       fstpl 8(%esp)
+       addl $-8,%esp
+       pushl $3
+       call fp_get_tos
+       pushl %eax
+       call fp_set_tag
+       call fp_inc_tos
+       fldl 24(%esp)
+       addl $16,%esp
+       addl $28,%esp
+       ret
+.Lfe74:
+       .size    fp_pop,.Lfe74-fp_pop
+       .align 4
+       .type    fp_push,@function
+fp_push:
+       subl $12,%esp
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $7
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       je .L2973
+       call fp_dec_tos
+       addl $-8,%esp
+       pushl 28(%esp)
+       pushl 28(%esp)
+       call fp_set_tos_reg
+       addl $-8,%esp
+       addl $16,%esp
+       fldz
+       fldl 24(%esp)
+       fucompp
+       fnstsw %ax
+       andb $69,%ah
+       cmpb $64,%ah
+       sete %al
+       movzbl %al,%eax
+       pushl %eax
+       pushl $9
+       call fp_set_statusword_flag_to
+       addl $16,%esp
+       jmp .L2974
+       .p2align 4,,7
+.L2973:
+       call fp_dec_tos
+       call fp_set_tos_reg_QNaN
+       call fp_set_stack_overflow
+.L2974:
+       addl $12,%esp
+       ret
+.Lfe75:
+       .size    fp_push,.Lfe75-fp_push
+       .align 4
+       .type    fp_set_statusword_flags_COM,@function
+fp_set_statusword_flags_COM:
+       subl $24,%esp
+       pushl %ebx
+       addl $-8,%esp
+       pushl 52(%esp)
+       pushl 52(%esp)
+       call isnan
+       addl $16,%esp
+       testl %eax,%eax
+       jne .L2977
+       addl $-8,%esp
+       pushl 44(%esp)
+       pushl 44(%esp)
+       call isnan
+       addl $16,%esp
+       testl %eax,%eax
+       je .L2976
+.L2977:
+       movl $7,%ebx
+       jmp .L2978
+       .p2align 4,,7
+.L2976:
+       xorl %ebx,%ebx
+       fldl 32(%esp)
+       fcoml 40(%esp)
+       fnstsw %ax
+       andb $69,%ah
+       je .L2985
+       movl $1,%ebx
+       fcoml 40(%esp)
+       fnstsw %ax
+       andb $69,%ah
+       cmpb $1,%ah
+       je .L2986
+       movl $7,%ebx
+       fldl 40(%esp)
+       fucompp
+       fnstsw %ax
+       andb $68,%ah
+       xorb $64,%ah
+       jne .L2978
+       movl $4,%ebx
+       jmp .L2978
+.L2985:
+.L2986:
+       fstp %st(0)
+.L2978:
+       addl $-8,%esp
+       movl %ebx,%eax
+       shrl $2,%eax
+       pushl %eax
+       pushl $14
+       call fp_set_statusword_flag_to
+       addl $-8,%esp
+       movl %ebx,%eax
+       shrl $1,%eax
+       andl $1,%eax
+       pushl %eax
+       pushl $10
+       call fp_set_statusword_flag_to
+       addl $32,%esp
+       addl $-8,%esp
+       movl %ebx,%eax
+       andl $1,%eax
+       pushl %eax
+       pushl $8
+       call fp_set_statusword_flag_to
+       addl $16,%esp
+       popl %ebx
+       addl $24,%esp
+       ret
+.Lfe76:
+       .size    fp_set_statusword_flags_COM,.Lfe76-fp_set_statusword_flags_COM
+       .align 4
+       .type    fp_set_statusword_flags_COM_STACKF,@function
+fp_set_statusword_flags_COM_STACKF:
+       subl $12,%esp
+       addl $-8,%esp
+       pushl $1
+       pushl $14
+       call fp_set_statusword_flag_to
+       addl $-8,%esp
+       pushl $1
+       pushl $10
+       call fp_set_statusword_flag_to
+       addl $32,%esp
+       addl $-8,%esp
+       pushl $1
+       pushl $8
+       call fp_set_statusword_flag_to
+       addl $16,%esp
+       addl $12,%esp
+       ret
+.Lfe77:
+       .size    fp_set_statusword_flags_COM_STACKF,.Lfe77-fp_set_statusword_flags_COM_STACKF
+.section       .rodata
+       .align 8
+.LC125:
+       .long 0x0,0x40000000
+.text
+       .align 4
+       .type    fp_calc_yl2xp1,@function
+fp_calc_yl2xp1:
+       fldl 12(%esp)
+       fld1
+       faddl 4(%esp)
+#APP
+       fldln2; fxch; fyl2x
+#NO_APP
+       fldl .LC125
+#APP
+       fldln2; fxch; fyl2x
+#NO_APP
+       fdivrp %st,%st(1)
+       fmulp %st,%st(1)
+       ret
+.Lfe78:
+       .size    fp_calc_yl2xp1,.Lfe78-fp_calc_yl2xp1
+.section       .rodata
+       .align 8
+.LC126:
+       .long 0x0,0x40000000
+.text
+       .align 4
+       .type    fp_calc_yl2x,@function
+fp_calc_yl2x:
+       fldl 4(%esp)
+       fldl 12(%esp)
+       fxch %st(1)
+#APP
+       fldln2; fxch; fyl2x
+#NO_APP
+       fldl .LC126
+#APP
+       fldln2; fxch; fyl2x
+#NO_APP
+       fdivrp %st,%st(1)
+       fmulp %st,%st(1)
+       ret
+.Lfe79:
+       .size    fp_calc_yl2x,.Lfe79-fp_calc_yl2x
+.section       .rodata
+.LC127:
+       .string "fp_do_op_ST_ST"
+.text
+       .align 4
+       .type    fp_do_op_ST_ST,@function
+fp_do_op_ST_ST:
+       subl $48,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 64(%esp),%esi
+       movl 68(%esp),%ebx
+       movl 72(%esp),%edi
+       movb 76(%esp),%al
+       movb %al,31(%esp)
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %esi
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L2995
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L2995
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_reg_ST
+       fstpl 32(%esp)
+       addl $-12,%esp
+       pushl %esi
+       call fp_get_reg_ST
+       addl $32,%esp
+       cmpl $5,%edi
+       ja .L3007
+       jmp *.L3004(,%edi,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3004:
+       .long .L2997
+       .long .L2998
+       .long .L2999
+       .long .L3000
+       .long .L3001
+       .long .L3002
+.text
+       .p2align 4,,7
+.L2997:
+       faddl 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+       .p2align 4,,7
+.L2998:
+       fsubrl 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+       .p2align 4,,7
+.L2999:
+       fmull 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+       .p2align 4,,7
+.L3000:
+       fdivrl 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+       .p2align 4,,7
+.L3001:
+       fsubl 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+       .p2align 4,,7
+.L3002:
+       fdivl 16(%esp)
+       fstpl 16(%esp)
+       jmp .L3005
+.L3007:
+       fstp %st(0)
+       addl $-12,%esp
+       pushl $.LC127
+       call panic
+       addl $16,%esp
+       jmp .L3005
+       .p2align 4,,7
+.L2995:
+       movl $2143289344,%eax
+       movl %eax,12(%esp)
+       flds 12(%esp)
+       fstpl 16(%esp)
+       call fp_set_stack_underflow
+.L3005:
+       addl $-4,%esp
+       pushl 24(%esp)
+       pushl 24(%esp)
+       pushl %ebx
+       call fp_set_reg_ST
+       addl $16,%esp
+       cmpb $0,31(%esp)
+       je .L3006
+       call fp_pop
+       fstp %st(0)
+.L3006:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $48,%esp
+       ret
+.Lfe80:
+       .size    fp_do_op_ST_ST,.Lfe80-fp_do_op_ST_ST
+       .align 4
+       .type    fp_do_COM_ST_ST,@function
+fp_do_COM_ST_ST:
+       subl $32,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 48(%esp),%edi
+       movl 52(%esp),%esi
+       movl 56(%esp),%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %edi
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3009
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %esi
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3009
+       addl $-12,%esp
+       pushl %esi
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       addl $-12,%esp
+       pushl %edi
+       call fp_get_reg_ST
+       addl $32,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       pushl 36(%esp)
+       pushl 36(%esp)
+       call fp_set_statusword_flags_COM
+       addl $16,%esp
+       jmp .L3010
+       .p2align 4,,7
+.L3009:
+       call fp_set_statusword_flags_COM_STACKF
+       call fp_set_stack_underflow
+.L3010:
+       testl %ebx,%ebx
+       je .L3012
+       .p2align 4,,7
+.L3013:
+       call fp_pop
+       fstp %st(0)
+       decl %ebx
+       jnz .L3013
+.L3012:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $32,%esp
+       ret
+.Lfe81:
+       .size    fp_do_COM_ST_ST,.Lfe81-fp_do_COM_ST_ST
+.section       .rodata
+.LC128:
+       .string "fp_do_op_mem_ST_0"
+.text
+       .align 4
+       .type    fp_do_op_mem_ST_0,@function
+fp_do_op_mem_ST_0:
+       subl $48,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 64(%esp),%esi
+       movl 68(%esp),%edi
+       movl 72(%esp),%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3016
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       addl $16,%esp
+       testb %bl,%bl
+       je .L3017
+       addl $-12,%esp
+       pushl %esi
+       call getDMem
+       jmp .L3029
+       .p2align 4,,7
+.L3017:
+       addl $-12,%esp
+       pushl %esi
+       call getFMem
+.L3029:
+       addl $16,%esp
+       cmpl $5,%edi
+       ja .L3030
+       jmp *.L3027(,%edi,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3027:
+       .long .L3020
+       .long .L3021
+       .long .L3022
+       .long .L3023
+       .long .L3024
+       .long .L3025
+.text
+       .p2align 4,,7
+.L3020:
+       faddl 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+       .p2align 4,,7
+.L3021:
+       fsubrl 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+       .p2align 4,,7
+.L3022:
+       fmull 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+       .p2align 4,,7
+.L3023:
+       fdivrl 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+       .p2align 4,,7
+.L3024:
+       fsubl 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+       .p2align 4,,7
+.L3025:
+       fdivl 24(%esp)
+       fstpl 24(%esp)
+       jmp .L3028
+.L3030:
+       fstp %st(0)
+       addl $-12,%esp
+       pushl $.LC128
+       call panic
+       addl $16,%esp
+       jmp .L3028
+       .p2align 4,,7
+.L3016:
+       movl $2143289344,%eax
+       movl %eax,20(%esp)
+       flds 20(%esp)
+       fstpl 24(%esp)
+       call fp_set_stack_underflow
+.L3028:
+       addl $-4,%esp
+       pushl 32(%esp)
+       pushl 32(%esp)
+       pushl $0
+       call fp_set_reg_ST
+       addl $16,%esp
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $48,%esp
+       ret
+.Lfe82:
+       .size    fp_do_op_mem_ST_0,.Lfe82-fp_do_op_mem_ST_0
+       .align 4
+       .type    fp_do_COM_mem_ST_0,@function
+fp_do_COM_mem_ST_0:
+       subl $36,%esp
+       pushl %esi
+       pushl %ebx
+       movl 48(%esp),%esi
+       movl 52(%esp),%ebx
+       movb 56(%esp),%al
+       movb %al,31(%esp)
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3032
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 32(%esp)
+       addl $16,%esp
+       testb %bl,%bl
+       je .L3033
+       addl $-12,%esp
+       pushl %esi
+       call getDMem
+       jmp .L3037
+       .p2align 4,,7
+.L3033:
+       addl $-12,%esp
+       pushl %esi
+       call getFMem
+.L3037:
+       addl $16,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       pushl 28(%esp)
+       pushl 28(%esp)
+       call fp_set_statusword_flags_COM
+       addl $16,%esp
+       jmp .L3035
+       .p2align 4,,7
+.L3032:
+       call fp_set_statusword_flags_COM_STACKF
+       call fp_set_stack_underflow
+.L3035:
+       cmpb $0,31(%esp)
+       je .L3036
+       call fp_pop
+       fstp %st(0)
+.L3036:
+       popl %ebx
+       popl %esi
+       addl $36,%esp
+       ret
+.Lfe83:
+       .size    fp_do_COM_mem_ST_0,.Lfe83-fp_do_COM_mem_ST_0
+.section       .rodata
+.LC129:
+       .string "do_one_insn_fp"
+       .align 32
+.LC130:
+       .string "(m_fpu_state.env[0] & 0x3F) == 0x3F"
+       .align 32
+.LC131:
+       .string "fp_get_statusword_flag(7) == 0"
+.LC132:
+       .string "!isreg"
+.LC133:
+       .string "unhandled opc_aux = 0x%2x\n"
+       .align 32
+.LC134:
+       .string "do_one_insn_fp: first_opcode == 0xD8"
+       .align 32
+.LC135:
+       .string "do_one_insn_fp: first_opcode == 0xD9"
+       .align 32
+.LC137:
+       .string "do_one_insn_fp: first_opcode == 0xDA"
+       .align 32
+.LC140:
+       .string "do_one_insn_fp: first_opcode == 0xDB"
+       .align 32
+.LC141:
+       .string "do_one_insn_fp: first_opcode == 0xDC"
+       .align 32
+.LC142:
+       .string "do_one_insn_fp: first_opcode == 0xDD"
+       .align 32
+.LC143:
+       .string "do_one_insn_fp: first_opcode == 0xDE"
+       .align 32
+.LC147:
+       .string "do_one_insn_fp: first_opcode == 0xDF"
+       .align 32
+.LC148:
+       .string "first opcode = 0x%2X, modRM = 0x%2X\n"
+       .align 32
+.LC149:
+       .string "do_one_insn_fp: unhandled first_opcode/modrm combination"
+.LC150:
+       .string "0"
+       .align 8
+.LC136:
+       .long 0xfefa39ef,0x3fe62e42
+       .align 8
+.LC138:
+       .long 0x100000,0xc1e00000
+       .align 8
+.LC139:
+       .long 0xffe00000,0x41dfffff
+       .align 8
+.LC144:
+       .long 0x0,0xc3e00000
+       .align 8
+.LC145:
+       .long 0x0,0x43e00000
+       .align 4
+.LC146:
+       .long 0
+       .long -2147483648
+       .align 8
+.LC151:
+       .long 0x0,0x7ff80000
+.text
+       .align 4
+       .type    do_one_insn_fp,@function
+do_one_insn_fp:
+       subl $96,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movb 112(%esp),%bl
+       movzwl m_fpu_state,%eax
+       andl $63,%eax
+       cmpw $63,%ax
+       je .L3040
+       pushl $.LC129
+       pushl $3990
+       pushl $.LC116
+       pushl $.LC130
+       call __assert_fail
+       .p2align 4,,7
+.L3040:
+       addl $-12,%esp
+       pushl $7
+       call fp_get_statusword_flag
+       addl $16,%esp
+       testl %eax,%eax
+       je .L3042
+       pushl $.LC129
+       pushl $3993
+       pushl $.LC116
+       pushl $.LC131
+       call __assert_fail
+       .p2align 4,,7
+.L3042:
+       movl m_eip,%eax
+       movb (%eax),%dl
+       cmpb $216,%bl
+       jne .L3043
+       cmpb $191,%dl
+       ja .L3044
+       movb %dl,%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3047
+       pushl $.LC129
+       pushl $4005
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3047:
+       cmpl $7,%ebx
+       ja .L3056
+       jmp *.L3057(,%ebx,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3057:
+       .long .L3049
+       .long .L3050
+       .long .L3051
+       .long .L3052
+       .long .L3053
+       .long .L3056
+       .long .L3054
+       .long .L3055
+.text
+       .p2align 4,,7
+.L3049:
+       addl $-4,%esp
+       pushl $0
+       pushl $0
+       jmp .L3307
+       .p2align 4,,7
+.L3050:
+       addl $-4,%esp
+       pushl $0
+       pushl $2
+       jmp .L3307
+       .p2align 4,,7
+.L3051:
+       addl $-4,%esp
+       pushl $0
+       pushl $0
+       jmp .L3308
+       .p2align 4,,7
+.L3052:
+       addl $-4,%esp
+       pushl $1
+       pushl $0
+       jmp .L3308
+       .p2align 4,,7
+.L3053:
+       addl $-4,%esp
+       pushl $0
+       pushl $1
+       jmp .L3307
+       .p2align 4,,7
+.L3054:
+       addl $-4,%esp
+       pushl $0
+       pushl $3
+       jmp .L3307
+       .p2align 4,,7
+.L3055:
+       addl $-4,%esp
+       pushl $0
+       jmp .L3309
+       .p2align 4,,7
+.L3056:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC134
+       jmp .L3310
+       .p2align 4,,7
+.L3044:
+       incl m_eip
+       movzbl %dl,%eax
+       addl $-192,%eax
+       cmpl $63,%eax
+       ja .L3069
+       jmp *.L3070(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3070:
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3060
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3061
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3062
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3063
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3064
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3065
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3066
+       .long .L3067
+       .long .L3067
+       .long .L3067
+       .long .L3067
+       .long .L3067
+       .long .L3067
+       .long .L3067
+       .long .L3067
+.text
+       .p2align 4,,7
+.L3060:
+       pushl $0
+       pushl $0
+       pushl $0
+       movzbl %dl,%eax
+       addl $-192,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3061:
+       pushl $0
+       pushl $2
+       pushl $0
+       movzbl %dl,%eax
+       addl $-200,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3062:
+       addl $-4,%esp
+       pushl $0
+       pushl $0
+       movzbl %dl,%eax
+       addl $-208,%eax
+       pushl %eax
+       jmp .L3312
+       .p2align 4,,7
+.L3063:
+       addl $-4,%esp
+       pushl $1
+       pushl $0
+       movzbl %dl,%eax
+       addl $-216,%eax
+       pushl %eax
+       jmp .L3312
+       .p2align 4,,7
+.L3064:
+       pushl $0
+       pushl $1
+       pushl $0
+       movzbl %dl,%eax
+       addl $-224,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3065:
+       pushl $0
+       pushl $4
+       pushl $0
+       movzbl %dl,%eax
+       addl $-232,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3066:
+       pushl $0
+       pushl $3
+       pushl $0
+       movzbl %dl,%eax
+       addl $-240,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3067:
+       pushl $0
+       pushl $5
+       pushl $0
+       movzbl %dl,%eax
+       addl $-248,%eax
+       pushl %eax
+       jmp .L3311
+       .p2align 4,,7
+.L3043:
+       cmpb $217,%bl
+       jne .L3072
+       cmpb $191,%dl
+       ja .L3073
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3076
+       pushl $.LC129
+       pushl $4092
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3076:
+       cmpl $7,%ebx
+       ja .L3087
+       jmp *.L3088(,%ebx,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3088:
+       .long .L3078
+       .long .L3087
+       .long .L3079
+       .long .L3082
+       .long .L3087
+       .long .L3085
+       .long .L3087
+       .long .L3086
+.text
+       .p2align 4,,7
+.L3078:
+       addl $-12,%esp
+       movl 60(%esp),%eax
+       pushl %eax
+       call getFMem
+       jmp .L3313
+       .p2align 4,,7
+.L3079:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3339
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 56(%esp)
+       addl $16,%esp
+       jmp .L3084
+       .p2align 4,,7
+.L3082:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3083
+       call fp_pop
+       fstpl 40(%esp)
+       jmp .L3084
+       .p2align 4,,7
+.L3083:
+       call fp_pop
+       fstp %st(0)
+.L3339:
+       movl $2143289344,%eax
+       movl %eax,12(%esp)
+       flds 12(%esp)
+       fstpl 40(%esp)
+       call fp_set_stack_underflow
+.L3084:
+       addl $-4,%esp
+       pushl 48(%esp)
+       pushl 48(%esp)
+       movl 60(%esp),%eax
+       pushl %eax
+       call setFMem
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3085:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $2
+       call getIMem
+       movw %ax,m_fpu_state
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3086:
+       addl $-4,%esp
+       movzwl m_fpu_state,%eax
+       pushl %eax
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $2
+       jmp .L3314
+       .p2align 4,,7
+.L3087:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC135
+       jmp .L3310
+       .p2align 4,,7
+.L3073:
+       incl m_eip
+       movzbl %dl,%eax
+       addl $-192,%eax
+       cmpl $63,%eax
+       ja .L3069
+       jmp *.L3134(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3134:
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3091
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3094
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3097
+       .long .L3100
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3104
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3106
+       .long .L3107
+       .long .L3069
+       .long .L3069
+       .long .L3108
+       .long .L3069
+       .long .L3111
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3115
+       .long .L3118
+       .long .L3069
+       .long .L3122
+       .long .L3069
+       .long .L3125
+       .long .L3129
+.text
+       .p2align 4,,7
+.L3091:
+       movzbl %dl,%ebx
+       addl $-192,%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3092
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $7
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       je .L3092
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       addl $16,%esp
+       jmp .L3105
+       .p2align 4,,7
+.L3092:
+       movl $2143289344,%eax
+       movl %eax,12(%esp)
+       flds 12(%esp)
+       fstpl 24(%esp)
+       call fp_set_stack_underflow
+       jmp .L3105
+       .p2align 4,,7
+.L3094:
+       movzbl %dl,%ebx
+       addl $-200,%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3095
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3095
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 64(%esp)
+       addl $32,%esp
+       jmp .L3096
+       .p2align 4,,7
+.L3095:
+       movl $2143289344,%eax
+       movl %eax,12(%esp)
+       flds 12(%esp)
+       fstpl 24(%esp)
+       fldl 24(%esp)
+       fstpl 32(%esp)
+       call fp_set_stack_underflow
+.L3096:
+       addl $-4,%esp
+       pushl 40(%esp)
+       pushl 40(%esp)
+       pushl %ebx
+       call fp_set_reg_ST
+       addl $-4,%esp
+       pushl 48(%esp)
+       pushl 48(%esp)
+       jmp .L3316
+       .p2align 4,,7
+.L3097:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3101
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fchs
+       fstpl 40(%esp)
+       addl $16,%esp
+       jmp .L3132
+       .p2align 4,,7
+.L3100:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3101
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+       fabs
+       fstpl 24(%esp)
+       jmp .L3132
+       .p2align 4,,7
+.L3101:
+       movl $2143289344,%eax
+       movl %eax,12(%esp)
+       flds 12(%esp)
+       fstpl 24(%esp)
+       jmp .L3326
+       .p2align 4,,7
+.L3104:
+       movl $0,24(%esp)
+       movl $1072693248,28(%esp)
+       jmp .L3105
+       .p2align 4,,7
+.L3106:
+       fldl .LC136
+       fstpl 24(%esp)
+       jmp .L3105
+       .p2align 4,,7
+.L3107:
+       movl $0,24(%esp)
+       movl $0,28(%esp)
+.L3105:
+       addl $-8,%esp
+       pushl 36(%esp)
+       pushl 36(%esp)
+       jmp .L3315
+       .p2align 4,,7
+.L3108:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $1
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       pushl $1
+       call fp_get_reg_ST
+       subl $8,%esp
+       fstpl (%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       call fp_calc_yl2x
+       jmp .L3345
+       .p2align 4,,7
+.L3111:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $1
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       pushl $1
+       call fp_get_reg_ST
+       fstpl 32(%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $32,%esp
+       fldl 16(%esp)
+       fxch %st(1)
+#APP
+       fpatan
+       
+#NO_APP
+       fstpl 24(%esp)
+       jmp .L3117
+       .p2align 4,,7
+.L3115:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $1
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3116
+       addl $-12,%esp
+       pushl $1
+       call fp_get_reg_ST
+       subl $8,%esp
+       fstpl (%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+       subl $8,%esp
+       fstpl (%esp)
+       call fp_calc_yl2xp1
+.L3345:
+       fstpl 56(%esp)
+       addl $32,%esp
+       jmp .L3117
+       .p2align 4,,7
+.L3116:
+       fldl .LC151
+       fstpl 24(%esp)
+       call fp_set_stack_underflow
+.L3117:
+       addl $-4,%esp
+       pushl 32(%esp)
+       pushl 32(%esp)
+       pushl $1
+       jmp .L3317
+       .p2align 4,,7
+.L3118:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3130
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+#APP
+       fsqrt
+#NO_APP
+       fstpl 24(%esp)
+       jmp .L3132
+       .p2align 4,,7
+.L3122:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3130
+       addl $-8,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       subl $8,%esp
+       fstpl (%esp)
+       call rint
+       fstpl 56(%esp)
+       addl $32,%esp
+       jmp .L3132
+       .p2align 4,,7
+.L3125:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3130
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+#APP
+       fsin
+#NO_APP
+       fstpl 24(%esp)
+       jmp .L3132
+       .p2align 4,,7
+.L3129:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3130
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       addl $16,%esp
+#APP
+       fcos
+#NO_APP
+       fstpl 24(%esp)
+       jmp .L3132
+       .p2align 4,,7
+.L3130:
+       fldl .LC151
+       fstpl 24(%esp)
+.L3326:
+       call fp_set_stack_underflow
+.L3132:
+       addl $-4,%esp
+       pushl 32(%esp)
+       pushl 32(%esp)
+       pushl $0
+       call fp_set_reg_ST
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3072:
+       cmpb $218,%bl
+       jne .L3136
+       cmpb $191,%dl
+       ja .L3137
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3140
+       pushl $.LC129
+       pushl $4312
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3140:
+       cmpl $7,%ebx
+       ja .L3166
+       jmp *.L3167(,%ebx,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3167:
+       .long .L3142
+       .long .L3145
+       .long .L3148
+       .long .L3151
+       .long .L3154
+       .long .L3157
+       .long .L3160
+       .long .L3163
+.text
+       .p2align 4,,7
+.L3142:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       faddp %st,%st(1)
+       jmp .L3318
+       .p2align 4,,7
+.L3145:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fmulp %st,%st(1)
+       jmp .L3318
+       .p2align 4,,7
+.L3148:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3252
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fstl 48(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       pushl 52(%esp)
+       pushl 52(%esp)
+       call fp_set_statusword_flags_COM
+       addl $32,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3151:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3255
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fstl 48(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       pushl 52(%esp)
+       pushl 52(%esp)
+       call fp_set_statusword_flags_COM
+       addl $32,%esp
+       jmp .L3256
+       .p2align 4,,7
+.L3154:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fsubrp %st,%st(1)
+       jmp .L3318
+       .p2align 4,,7
+.L3157:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fsubp %st,%st(1)
+       jmp .L3318
+       .p2align 4,,7
+.L3160:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fdivrp %st,%st(1)
+       jmp .L3318
+       .p2align 4,,7
+.L3163:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $48,%esp
+       testb %al,%al
+       jne .L3164
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       movl %edi,84(%esp)
+       fildl 84(%esp)
+       fdivp %st,%st(1)
+.L3318:
+       fstpl 56(%esp)
+       addl $-4,%esp
+       pushl 64(%esp)
+       pushl 64(%esp)
+.L3316:
+       pushl $0
+       call fp_set_reg_ST
+       addl $32,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3164:
+       addl $-4,%esp
+       fldl .LC151
+       subl $8,%esp
+       fstpl (%esp)
+       pushl $0
+       call fp_set_reg_ST
+       call fp_set_stack_underflow
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3166:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC137
+       jmp .L3310
+       .p2align 4,,7
+.L3137:
+       incl m_eip
+       cmpb $233,%dl
+       jne .L3069
+       jmp .L3272
+       .p2align 4,,7
+.L3136:
+       cmpb $219,%bl
+       jne .L3174
+       cmpb $191,%dl
+       ja .L3175
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3178
+       pushl $.LC129
+       pushl $4451
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3178:
+       cmpl $7,%ebx
+       ja .L3197
+       jmp *.L3198(,%ebx,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3198:
+       .long .L3180
+       .long .L3197
+       .long .L3181
+       .long .L3187
+       .long .L3197
+       .long .L3193
+       .long .L3197
+       .long .L3194
+.text
+       .p2align 4,,7
+.L3180:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       addl $-8,%esp
+       movl %edi,92(%esp)
+       fildl 92(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+       jmp .L3319
+       .p2align 4,,7
+.L3181:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3333
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstl 56(%esp)
+       addl $16,%esp
+       fcoml .LC138
+       fnstsw %ax
+       andb $69,%ah
+       decb %ah
+       cmpb $64,%ah
+       jb .L3336
+       fcompl .LC139
+       fnstsw %ax
+       andb $5,%ah
+       je .L3190
+       jmp .L3189
+       .p2align 4,,7
+.L3187:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3188
+       call fp_pop
+       fstl 40(%esp)
+       fcoml .LC138
+       fnstsw %ax
+       andb $69,%ah
+       decb %ah
+       cmpb $64,%ah
+       jb .L3337
+       fcompl .LC139
+       fnstsw %ax
+       andb $5,%ah
+       jne .L3189
+       jmp .L3190
+.L3336:
+.L3337:
+       fstp %st(0)
+.L3190:
+       movl $-2147483648,%edi
+       jmp .L3192
+       .p2align 4,,7
+.L3189:
+       fldl 40(%esp)
+       fnstcw 66(%esp)
+       movw 66(%esp),%ax
+       orw $3072,%ax
+       movw %ax,64(%esp)
+       fldcw 64(%esp)
+       fistpl 68(%esp)
+       movl 68(%esp),%edi
+       fldcw 66(%esp)
+       jmp .L3192
+       .p2align 4,,7
+.L3188:
+       call fp_pop
+       fstp %st(0)
+.L3333:
+       movl $-2147483648,%edi
+       call fp_set_stack_underflow
+.L3192:
+       addl $-4,%esp
+       pushl %edi
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+.L3314:
+       call setIMem
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3193:
+       addl $-12,%esp
+       movl 60(%esp),%eax
+       pushl %eax
+       call getTMem
+       jmp .L3313
+       .p2align 4,,7
+.L3194:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3195
+       call fp_pop
+       fstpl 40(%esp)
+       jmp .L3196
+       .p2align 4,,7
+.L3195:
+       call fp_pop
+       fstp %st(0)
+       fldl .LC151
+       fstpl 40(%esp)
+       call fp_set_stack_underflow
+.L3196:
+       addl $-4,%esp
+       pushl 48(%esp)
+       pushl 48(%esp)
+       movl 60(%esp),%eax
+       pushl %eax
+       call setTMem
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3197:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC140
+       jmp .L3310
+       .p2align 4,,7
+.L3175:
+       incl m_eip
+       jmp .L3069
+       .p2align 4,,7
+.L3174:
+       cmpb $220,%bl
+       jne .L3204
+       cmpb $191,%dl
+       ja .L3205
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3208
+       pushl $.LC129
+       pushl $4534
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3208:
+       cmpl $7,%ebx
+       ja .L3218
+       jmp *.L3219(,%ebx,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3219:
+       .long .L3210
+       .long .L3211
+       .long .L3212
+       .long .L3213
+       .long .L3214
+       .long .L3215
+       .long .L3216
+       .long .L3217
+.text
+       .p2align 4,,7
+.L3210:
+       addl $-4,%esp
+       pushl $1
+       pushl $0
+       jmp .L3307
+       .p2align 4,,7
+.L3211:
+       addl $-4,%esp
+       pushl $1
+       pushl $2
+       jmp .L3307
+       .p2align 4,,7
+.L3212:
+       addl $-4,%esp
+       pushl $0
+       jmp .L3320
+       .p2align 4,,7
+.L3213:
+       addl $-4,%esp
+       pushl $1
+.L3320:
+       pushl $1
+.L3308:
+       movl 60(%esp),%eax
+       pushl %eax
+       call fp_do_COM_mem_ST_0
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3214:
+       addl $-4,%esp
+       pushl $1
+       pushl $1
+       jmp .L3307
+       .p2align 4,,7
+.L3215:
+       addl $-4,%esp
+       pushl $1
+       pushl $4
+       jmp .L3307
+       .p2align 4,,7
+.L3216:
+       addl $-4,%esp
+       pushl $1
+       pushl $3
+       jmp .L3307
+       .p2align 4,,7
+.L3217:
+       addl $-4,%esp
+       pushl $1
+.L3309:
+       pushl $5
+.L3307:
+       movl 60(%esp),%eax
+       pushl %eax
+       call fp_do_op_mem_ST_0
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3218:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC141
+       jmp .L3310
+       .p2align 4,,7
+.L3205:
+       incl m_eip
+       movzbl %dl,%eax
+       addl $-192,%eax
+       cmpl $63,%eax
+       ja .L3069
+       jmp *.L3228(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3228:
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3222
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3223
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3224
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3225
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3226
+       .long .L3226
+       .long .L3226
+       .long .L3226
+       .long .L3226
+       .long .L3226
+       .long .L3226
+       .long .L3226
+.text
+       .p2align 4,,7
+.L3222:
+       pushl $0
+       jmp .L3340
+       .p2align 4,,7
+.L3223:
+       pushl $0
+       jmp .L3341
+       .p2align 4,,7
+.L3224:
+       pushl $0
+       jmp .L3342
+       .p2align 4,,7
+.L3225:
+       pushl $0
+       jmp .L3343
+       .p2align 4,,7
+.L3226:
+       pushl $0
+       jmp .L3322
+       .p2align 4,,7
+.L3204:
+       cmpb $221,%bl
+       jne .L3230
+       cmpb $191,%dl
+       ja .L3231
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3234
+       pushl $.LC129
+       pushl $4613
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3234:
+       movl %ebx,%eax
+       cmpl $2,%eax
+       je .L3237
+       ja .L3245
+       testl %eax,%eax
+       je .L3236
+       jmp .L3243
+       .p2align 4,,7
+.L3245:
+       cmpl $3,%eax
+       je .L3240
+       jmp .L3243
+       .p2align 4,,7
+.L3236:
+       addl $-12,%esp
+       movl 60(%esp),%eax
+       pushl %eax
+       call getDMem
+.L3313:
+       fstpl 56(%esp)
+       addl $-8,%esp
+       pushl 68(%esp)
+       pushl 68(%esp)
+.L3319:
+       call fp_push
+       addl $32,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3237:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3344
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 56(%esp)
+       addl $16,%esp
+       jmp .L3242
+       .p2align 4,,7
+.L3240:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3241
+       call fp_pop
+       fstpl 40(%esp)
+       jmp .L3242
+       .p2align 4,,7
+.L3241:
+       call fp_pop
+       fstp %st(0)
+.L3344:
+       fldl .LC151
+       fstpl 40(%esp)
+       call fp_set_stack_underflow
+.L3242:
+       addl $-4,%esp
+       pushl 48(%esp)
+       pushl 48(%esp)
+       movl 60(%esp),%eax
+       pushl %eax
+       call setDMem
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3243:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC142
+       jmp .L3310
+       .p2align 4,,7
+.L3231:
+       incl m_eip
+       movzbl %dl,%eax
+       addl $-216,%eax
+       cmpl $23,%eax
+       ja .L3069
+       jmp *.L3258(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3258:
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3248
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3251
+       .long .L3254
+       .long .L3254
+       .long .L3254
+       .long .L3254
+       .long .L3254
+       .long .L3254
+       .long .L3254
+       .long .L3254
+.text
+       .p2align 4,,7
+.L3248:
+       movzbl %dl,%ebx
+       addl $-216,%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3249
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 40(%esp)
+       addl $16,%esp
+       jmp .L3250
+       .p2align 4,,7
+.L3249:
+       fldl .LC151
+       fstpl 24(%esp)
+       call fp_set_stack_underflow
+.L3250:
+       addl $-4,%esp
+       pushl 32(%esp)
+       pushl 32(%esp)
+       pushl %ebx
+.L3317:
+       call fp_set_reg_ST
+       call fp_pop
+       fstp %st(0)
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3251:
+       movzbl %dl,%ebx
+       addl $-224,%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3252
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3252
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_reg_ST
+       fstpl 48(%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 56(%esp)
+       addl $32,%esp
+       pushl 36(%esp)
+       pushl 36(%esp)
+       pushl 36(%esp)
+       pushl 36(%esp)
+       call fp_set_statusword_flags_COM
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3252:
+       call fp_set_statusword_flags_COM_STACKF
+       call fp_set_stack_underflow
+       jmp .L3038
+       .p2align 4,,7
+.L3254:
+       movzbl %dl,%ebx
+       addl $-232,%ebx
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3255
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3255
+       addl $-12,%esp
+       pushl %ebx
+       call fp_get_reg_ST
+       fstpl 48(%esp)
+       addl $-12,%esp
+       pushl $0
+       call fp_get_reg_ST
+       fstpl 56(%esp)
+       addl $32,%esp
+       pushl 36(%esp)
+       pushl 36(%esp)
+       pushl 36(%esp)
+       pushl 36(%esp)
+       call fp_set_statusword_flags_COM
+       addl $16,%esp
+       jmp .L3256
+       .p2align 4,,7
+.L3255:
+       call fp_set_statusword_flags_COM_STACKF
+       call fp_set_stack_underflow
+.L3256:
+       call fp_pop
+       fstp %st(0)
+       jmp .L3038
+       .p2align 4,,7
+.L3230:
+       cmpb $222,%bl
+       jne .L3260
+       cmpb $191,%dl
+       ja .L3261
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3266
+       pushl $.LC129
+       pushl $4711
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3266:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC143
+       jmp .L3310
+       .p2align 4,,7
+.L3261:
+       incl m_eip
+       movzbl %dl,%eax
+       addl $-192,%eax
+       cmpl $63,%eax
+       ja .L3069
+       jmp *.L3278(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L3278:
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3270
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3271
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3272
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3069
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3273
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3274
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3275
+       .long .L3276
+       .long .L3276
+       .long .L3276
+       .long .L3276
+       .long .L3276
+       .long .L3276
+       .long .L3276
+       .long .L3276
+.text
+       .p2align 4,,7
+.L3270:
+       pushl $1
+.L3340:
+       pushl $0
+       movzbl %dl,%eax
+       addl $-192,%eax
+       jmp .L3321
+       .p2align 4,,7
+.L3271:
+       pushl $1
+.L3341:
+       pushl $2
+       movzbl %dl,%eax
+       addl $-200,%eax
+       jmp .L3321
+       .p2align 4,,7
+.L3272:
+       addl $-4,%esp
+       pushl $2
+       pushl $0
+       pushl $1
+.L3312:
+       call fp_do_COM_ST_ST
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3273:
+       pushl $1
+.L3342:
+       pushl $4
+       movzbl %dl,%eax
+       addl $-224,%eax
+       jmp .L3321
+       .p2align 4,,7
+.L3274:
+       pushl $1
+.L3343:
+       pushl $1
+       movzbl %dl,%eax
+       addl $-232,%eax
+       jmp .L3321
+       .p2align 4,,7
+.L3275:
+       pushl $1
+       pushl $5
+       movzbl %dl,%eax
+       addl $-240,%eax
+       jmp .L3321
+       .p2align 4,,7
+.L3276:
+       pushl $1
+.L3322:
+       pushl $3
+       movzbl %dl,%eax
+       addl $-248,%eax
+.L3321:
+       pushl %eax
+       pushl $0
+.L3311:
+       call fp_do_op_ST_ST
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3260:
+       cmpb $223,%bl
+       jne .L3069
+       cmpb $191,%dl
+       ja .L3281
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ebx
+       andl $7,%ebx
+       addl $-4,%esp
+       leal 59(%esp),%eax
+       pushl %eax
+       leal 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call amode_from_modRM
+       addl $16,%esp
+       cmpb $0,55(%esp)
+       je .L3284
+       pushl $.LC129
+       pushl $4766
+       pushl $.LC116
+       pushl $.LC132
+       call __assert_fail
+       .p2align 4,,7
+.L3284:
+       movl %ebx,%eax
+       cmpl $5,%eax
+       je .L3286
+       cmpl $7,%eax
+       je .L3287
+       jmp .L3293
+       .p2align 4,,7
+.L3286:
+       addl $-8,%esp
+       movl 56(%esp),%eax
+       addl $4,%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       movl %edi,%ebx
+       movl %edi,%esi
+       sarl $31,%esi
+       movl %ebx,%esi
+       xorl %ebx,%ebx
+       addl $-8,%esp
+       movl 72(%esp),%eax
+       pushl %eax
+       pushl $4
+       call getIMem
+       movl %eax,%edi
+       movl %edi,%eax
+       cltd
+       addl %eax,%ebx
+       adcl %edx,%esi
+       addl $32,%esp
+       addl $-8,%esp
+       movl %ebx,64(%esp)
+       movl %esi,68(%esp)
+       fildll 64(%esp)
+       subl $8,%esp
+       fstpl (%esp)
+.L3315:
+       call fp_push
+       addl $16,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3287:
+       addl $-12,%esp
+       addl $-12,%esp
+       pushl $0
+       call fp_get_tag_ST
+       pushl %eax
+       call fp_is_empty_tag
+       addl $32,%esp
+       testb %al,%al
+       jne .L3288
+       call fp_pop
+       fstl 40(%esp)
+       fcoml .LC144
+       fnstsw %ax
+       andb $69,%ah
+       decb %ah
+       cmpb $64,%ah
+       jb .L3338
+       fcompl .LC145
+       fnstsw %ax
+       andb $5,%ah
+       jne .L3289
+       jmp .L3290
+.L3338:
+       fstp %st(0)
+.L3290:
+       movl .LC146,%ebx
+       movl .LC146+4,%esi
+       jmp .L3292
+       .p2align 4,,7
+.L3289:
+       fldl 40(%esp)
+       fnstcw 66(%esp)
+       movw 66(%esp),%ax
+       orw $3072,%ax
+       movw %ax,64(%esp)
+       fldcw 64(%esp)
+       fistpll 56(%esp)
+       movl 56(%esp),%ebx
+       movl 60(%esp),%esi
+       fldcw 66(%esp)
+       jmp .L3292
+       .p2align 4,,7
+.L3288:
+       call fp_pop
+       fstp %st(0)
+       movl .LC146,%ebx
+       movl .LC146+4,%esi
+       call fp_set_stack_underflow
+.L3292:
+       addl $-4,%esp
+       pushl %ebx
+       movl 56(%esp),%eax
+       pushl %eax
+       pushl $4
+       call setIMem
+       addl $-4,%esp
+       movl %ebx,%eax
+       movl %esi,%edx
+       movl %edx,%eax
+       sarl $31,%edx
+       pushl %eax
+       movl 72(%esp),%eax
+       addl $4,%eax
+       pushl %eax
+       pushl $4
+       call setIMem
+       addl $32,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3293:
+       addl $-8,%esp
+       pushl %ebx
+       pushl $.LC133
+       call printf
+       addl $-12,%esp
+       pushl $.LC147
+.L3310:
+       call panic
+       addl $32,%esp
+       jmp .L3038
+       .p2align 4,,7
+.L3281:
+       incl m_eip
+       cmpb $224,%dl
+       jne .L3069
+       movzwl m_fpu_state+4,%eax
+       movw $0,m_regs
+       orl %eax,m_regs
+       jmp .L3038
+       .p2align 4,,7
+.L3069:
+       addl $-4,%esp
+       movzbl %dl,%eax
+       pushl %eax
+       movzbl %bl,%eax
+       pushl %eax
+       pushl $.LC148
+       call printf
+       addl $-12,%esp
+       pushl $.LC149
+       call panic
+       addl $32,%esp
+       pushl $.LC129
+       pushl $4839
+       pushl $.LC116
+       pushl $.LC150
+       call __assert_fail
+       .p2align 4,,7
+.L3038:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $96,%esp
+       ret
+.Lfe84:
+       .size    do_one_insn_fp,.Lfe84-do_one_insn_fp
+.section       .rodata
+.LC152:
+       .string "=== heimdall: startup\n"
+.LC153:
+       .string "HD_STOP_AFTER"
+       .align 32
+.LC154:
+       .string "=== heimdall: will stop after %d instructions\n"
+.LC155:
+       .string "done %d insns\n"
+       .align 32
+.LC156:
+       .string "=== heimdall: exiting, did %d insns\n"
+.text
+       .align 4
+.globl hd_do_insns
+       .type    hd_do_insns,@function
+hd_do_insns:
+       subl $12,%esp
+       call fp_unpack_data_regs
+       movl $-1,n_to_simulate
+       movl $0,num_insns_done
+       addl $-12,%esp
+       movl stderr,%eax
+       pushl %eax
+       call fflush
+       addl $-8,%esp
+       pushl $.LC152
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $32,%esp
+       addl $-12,%esp
+       pushl $.LC153
+       call getenv
+       addl $16,%esp
+       testl %eax,%eax
+       je .L3357
+       pushl $0
+       pushl $10
+       pushl $0
+       pushl %eax
+       call __strtol_internal
+       addl $16,%esp
+       movl %eax,n_to_simulate
+       addl $-4,%esp
+       pushl %eax
+       pushl $.LC154
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $16,%esp
+       .p2align 4,,7
+.L3357:
+       cmpl $0,n_to_simulate
+       je .L3353
+       decl n_to_simulate
+       testl $1048575,num_insns_done
+       jne .L3356
+       cmpl $0,num_insns_done
+       je .L3356
+       addl $-4,%esp
+       movl num_insns_done,%eax
+       pushl %eax
+       pushl $.LC155
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $16,%esp
+.L3356:
+       call do_one_insn
+       testb %al,%al
+       je .L3357
+.L3353:
+       addl $-12,%esp
+       movl stderr,%eax
+       pushl %eax
+       call fflush
+       addl $-4,%esp
+       movl num_insns_done,%eax
+       pushl %eax
+       pushl $.LC156
+       movl stderr,%eax
+       pushl %eax
+       call fprintf
+       addl $32,%esp
+       call fp_repack_data_regs
+       call hd_switch_to_real_CPU
+       addl $12,%esp
+       ret
+.Lfe85:
+       .size    hd_do_insns,.Lfe85-hd_do_insns
+       .comm   m_regs,32,32
+       .comm   m_eflags,4,4
+       .comm   m_eip,4,4
+       .align 4
+       .type    amode_from_modRM,@function
+amode_from_modRM:
+       subl $16,%esp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       movl 36(%esp),%esi
+       movl 40(%esp),%edi
+       movl m_eip,%eax
+       movb (%eax),%cl
+       incl m_eip
+       andb $199,%cl
+       movb %cl,%al
+       shrb $3,%al
+       orb %al,%cl
+       andb $31,%cl
+       movzbl %cl,%eax
+       jmp *cases.468(,%eax,4)
+       .p2align 4,,7
+.L515:
+       movl m_regs,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L516:
+       movl m_regs+4,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L517:
+       movl m_regs+8,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L518:
+       movl m_regs+12,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L519:
+       movl m_eip,%eax
+       movb (%eax),%al
+       incl m_eip
+       movb %al,%dl
+       shrb $6,%dl
+       movb %dl,15(%esp)
+       movb %al,%cl
+       shrb $3,%cl
+       andb $7,%cl
+       movb %al,%dl
+       andb $7,%dl
+       cmpb $4,%cl
+       je .L551
+       movzbl %cl,%eax
+       movl m_regs(,%eax,4),%ebx
+       jmp .L552
+       .p2align 4,,7
+.L551:
+       xorl %ebx,%ebx
+.L552:
+       cmpb $5,%dl
+       jne .L554
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       movzbl 15(%esp),%ecx
+       movl %ebx,%eax
+       sall %cl,%eax
+       addl %eax,%edx
+       movl %edx,(%esi)
+       jmp .L3361
+       .p2align 4,,7
+.L554:
+       movzbl %dl,%edx
+       movzbl 15(%esp),%ecx
+       movl %ebx,%eax
+       sall %cl,%eax
+       addl m_regs(,%edx,4),%eax
+       jmp .L3358
+       .p2align 4,,7
+.L520:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       incl m_eip
+       orl %eax,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L521:
+       movl m_regs+24,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L522:
+       movl m_regs+28,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L523:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L524:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+4,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L525:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+8,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L526:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+12,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L528:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+20,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L529:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+24,%eax
+       jmp .L3358
+       .p2align 4,,7
+.L530:
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%eax
+       addl m_regs+28,%eax
+.L3358:
+       movl %eax,(%esi)
+.L3361:
+       movb $0,(%edi)
+       jmp .L514
+       .p2align 4,,7
+.L527:
+       movl m_eip,%eax
+       movb (%eax),%al
+       incl m_eip
+       movb %al,%dl
+       shrb $6,%dl
+       movb %dl,14(%esp)
+       movb %al,%dl
+       shrb $3,%dl
+       andb $7,%dl
+       movb %al,%cl
+       andb $7,%cl
+       cmpb $4,%dl
+       je .L582
+       movzbl %dl,%eax
+       movl m_regs(,%eax,4),%ebx
+       jmp .L583
+       .p2align 4,,7
+.L582:
+       xorl %ebx,%ebx
+.L583:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movsbl %dl,%edx
+       movzbl %cl,%eax
+       addl m_regs(,%eax,4),%edx
+       movzbl 14(%esp),%ecx
+       movl %ebx,%eax
+       sall %cl,%eax
+       addl %eax,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L531:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L532:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs+4,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L533:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl %ecx,%eax
+       andl $7,%eax
+       addl m_regs(,%eax,4),%edx
+       jmp .L3360
+       .p2align 4,,7
+.L534:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs+12,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L536:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs+20,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L535:
+       movl m_eip,%eax
+       movb (%eax),%al
+       incl m_eip
+       movb %al,%dl
+       shrb $6,%dl
+       movb %dl,13(%esp)
+       movb %al,%dl
+       shrb $3,%dl
+       andb $7,%dl
+       movb %al,%cl
+       andb $7,%cl
+       cmpb $4,%dl
+       je .L598
+       movzbl %dl,%eax
+       movl m_regs(,%eax,4),%ebx
+       jmp .L599
+       .p2align 4,,7
+.L598:
+       xorl %ebx,%ebx
+.L599:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       movzbl %cl,%eax
+       addl m_regs(,%eax,4),%edx
+       movzbl 13(%esp),%ecx
+       movl %ebx,%eax
+       sall %cl,%eax
+       addl %eax,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L537:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs+24,%edx
+       jmp .L3360
+       .p2align 4,,7
+.L538:
+       movl m_eip,%eax
+       movzbl (%eax),%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $8,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $16,%eax
+       orl %eax,%edx
+       incl m_eip
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       sall $24,%eax
+       orl %eax,%edx
+       incl m_eip
+       addl m_regs+28,%edx
+.L3360:
+       movl %edx,(%esi)
+       jmp .L3361
+       .p2align 4,,7
+.L539:
+       movb $1,(%edi)
+       movl $0,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L540:
+       movb $1,(%edi)
+       movl $1,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L541:
+       movb $1,(%edi)
+       movl $2,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L542:
+       movb $1,(%edi)
+       movl $3,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L543:
+       movb $1,(%edi)
+       movl $4,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L544:
+       movb $1,(%edi)
+       movl $5,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L545:
+       movb $1,(%edi)
+       movl $6,(%esi)
+       jmp .L514
+       .p2align 4,,7
+.L546:
+       movb $1,(%edi)
+       movl $7,(%esi)
+.L514:
+       popl %ebx
+       popl %esi
+       popl %edi
+       addl $16,%esp
+       ret
+.Lfe86:
+       .size    amode_from_modRM,.Lfe86-amode_from_modRM
+.section       .rodata
+       .align 4
+.LC157:
+       .long 0
+       .long 1
+.text
+       .align 4
+       .type    do_one_insn,@function
+do_one_insn:
+       subl $76,%esp
+       pushl %ebp
+       pushl %edi
+       pushl %esi
+       pushl %ebx
+       incl num_insns_done
+       movl m_eip,%eax
+       movb (%eax),%al
+       movb %al,63(%esp)
+       incl m_eip
+       movl $4,64(%esp)
+       cmpb $102,%al
+       jne .L1094
+       movl $2,64(%esp)
+       movl m_eip,%eax
+       movb (%eax),%al
+       movb %al,63(%esp)
+       incl m_eip
+.L1094:
+       movzbl 63(%esp),%eax
+       cmpl $255,%eax
+       ja .L2872
+       jmp *.L2873(,%eax,4)
+       .p2align 4,,7
+.section       .rodata
+       .align 4
+       .align 4
+.L2873:
+       .long .L1135
+       .long .L1136
+       .long .L1154
+       .long .L1155
+       .long .L1170
+       .long .L1171
+       .long .L2872
+       .long .L2872
+       .long .L1264
+       .long .L1265
+       .long .L1283
+       .long .L1284
+       .long .L1299
+       .long .L1300
+       .long .L2872
+       .long .L2566
+       .long .L1096
+       .long .L1097
+       .long .L1117
+       .long .L1118
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1314
+       .long .L2872
+       .long .L1333
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1185
+       .long .L1186
+       .long .L1204
+       .long .L1205
+       .long .L1220
+       .long .L1221
+       .long .L2872
+       .long .L2872
+       .long .L1349
+       .long .L1350
+       .long .L1368
+       .long .L1369
+       .long .L1384
+       .long .L1385
+       .long .L2872
+       .long .L2872
+       .long .L1399
+       .long .L1400
+       .long .L1418
+       .long .L1419
+       .long .L1434
+       .long .L1435
+       .long .L2872
+       .long .L2872
+       .long .L1235
+       .long .L1236
+       .long .L1245
+       .long .L1246
+       .long .L1255
+       .long .L1256
+       .long .L2872
+       .long .L2872
+       .long .L1650
+       .long .L1652
+       .long .L1653
+       .long .L1654
+       .long .L2872
+       .long .L1655
+       .long .L1656
+       .long .L1657
+       .long .L1630
+       .long .L1632
+       .long .L1633
+       .long .L1634
+       .long .L2872
+       .long .L1635
+       .long .L1636
+       .long .L1637
+       .long .L1831
+       .long .L1833
+       .long .L1834
+       .long .L1835
+       .long .L1836
+       .long .L1837
+       .long .L1838
+       .long .L1839
+       .long .L1805
+       .long .L1807
+       .long .L1808
+       .long .L1809
+       .long .L2872
+       .long .L1810
+       .long .L1811
+       .long .L1812
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1858
+       .long .L2872
+       .long .L1871
+       .long .L1468
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1500
+       .long .L1503
+       .long .L1505
+       .long .L1507
+       .long .L1509
+       .long .L1512
+       .long .L1515
+       .long .L1517
+       .long .L1519
+       .long .L2872
+       .long .L1521
+       .long .L1524
+       .long .L1527
+       .long .L1531
+       .long .L2080
+       .long .L2084
+       .long .L2872
+       .long .L2086
+       .long .L1458
+       .long .L1459
+       .long .L2872
+       .long .L2056
+       .long .L1718
+       .long .L1719
+       .long .L1737
+       .long .L1738
+       .long .L2872
+       .long .L1673
+       .long .L2872
+       .long .L2872
+       .long .L1095
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1556
+       .long .L1585
+       .long .L2872
+       .long .L1095
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1747
+       .long .L2872
+       .long .L1755
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1449
+       .long .L1450
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1763
+       .long .L1765
+       .long .L1766
+       .long .L1767
+       .long .L1768
+       .long .L1769
+       .long .L1770
+       .long .L1771
+       .long .L1779
+       .long .L1781
+       .long .L1782
+       .long .L1783
+       .long .L2872
+       .long .L1784
+       .long .L1785
+       .long .L1786
+       .long .L2115
+       .long .L2119
+       .long .L1541
+       .long .L1543
+       .long .L2872
+       .long .L2872
+       .long .L1793
+       .long .L1794
+       .long .L2872
+       .long .L1681
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1670
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2122
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2864
+       .long .L2865
+       .long .L2866
+       .long .L2867
+       .long .L2868
+       .long .L2869
+       .long .L2870
+       .long .L2871
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1486
+       .long .L1539
+       .long .L2872
+       .long .L1538
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1890
+       .long .L1929
+       .long .L2872
+       .long .L2872
+       .long .L2148
+       .long .L2149
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L2872
+       .long .L1887
+       .long .L2872
+       .long .L2488
+       .long .L2513
+.text
+       .p2align 4,,7
+.L1096:
+       movl $1,64(%esp)
+.L1097:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1100
+       movl m_regs(,%eax,4),%esi
+       jmp .L1101
+       .p2align 4,,7
+.L1100:
+       cmpl $1,64(%esp)
+       jne .L1102
+       cmpl $3,%eax
+       ja .L1103
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1101
+       .p2align 4,,7
+.L1103:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1101
+       .p2align 4,,7
+.L1102:
+       cmpl $2,64(%esp)
+       jne .L1105
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1101
+       .p2align 4,,7
+.L1105:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1101:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $16,%esp
+       movb m_eflags,%al
+       andb $1,%al
+       movzbl %al,%edi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%edx
+       pushl %edx
+       call update_flags_ADC
+       addl %esi,%ebx
+       addl $16,%esp
+       testl %edi,%edi
+       je .L1107
+       incl %ebx
+.L1107:
+       movl 72(%esp),%eax
+       cmpb $0,79(%esp)
+       je .L1108
+       cmpl $4,64(%esp)
+       je .L3363
+       cmpl $1,64(%esp)
+       jne .L1111
+.L3399:
+       cmpl $3,%eax
+       jbe .L3364
+       jmp .L2838
+       .p2align 4,,7
+.L1111:
+       cmpl $2,64(%esp)
+       je .L3365
+       jmp .L2840
+       .p2align 4,,7
+.L1108:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       jmp .L3366
+       .p2align 4,,7
+.L1117:
+       movl $1,64(%esp)
+.L1118:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1121
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1122
+       .p2align 4,,7
+.L1121:
+       cmpl $1,64(%esp)
+       jne .L1123
+       cmpl $3,%eax
+       ja .L1124
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1122
+       .p2align 4,,7
+.L1124:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1122
+       .p2align 4,,7
+.L1123:
+       cmpl $2,64(%esp)
+       jne .L1126
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1122
+       .p2align 4,,7
+.L1126:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1122:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $16,%esp
+       movb m_eflags,%al
+       andb $1,%al
+       movzbl %al,%edi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%edx
+       pushl %edx
+       call update_flags_ADC
+       addl %esi,%ebx
+       addl $16,%esp
+       testl %edi,%edi
+       je .L1128
+       incl %ebx
+.L1128:
+       movl 72(%esp),%eax
+.L3400:
+       cmpl $4,64(%esp)
+       je .L3363
+       cmpl $1,64(%esp)
+       je .L3399
+       jmp .L1111
+       .p2align 4,,7
+.L1135:
+       movl $1,64(%esp)
+.L1136:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl %ecx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1139
+       movl m_regs(,%eax,4),%esi
+       jmp .L1140
+       .p2align 4,,7
+.L1139:
+       cmpl $1,64(%esp)
+       jne .L1141
+       cmpl $3,%eax
+       ja .L1142
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1140
+       .p2align 4,,7
+.L1142:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1140
+       .p2align 4,,7
+.L1141:
+       cmpl $2,64(%esp)
+       jne .L1144
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1140
+       .p2align 4,,7
+.L1144:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1140:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%edx
+       pushl %edx
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%ecx
+       pushl %ecx
+       call update_flags_ADD
+       addl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       cmpb $0,79(%esp)
+       je .L2800
+       jmp .L3400
+       .p2align 4,,7
+.L1154:
+       movl $1,64(%esp)
+.L1155:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1158
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1159
+       .p2align 4,,7
+.L1158:
+       cmpl $1,64(%esp)
+       jne .L1160
+       cmpl $3,%eax
+       ja .L1161
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1159
+       .p2align 4,,7
+.L1161:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1159
+       .p2align 4,,7
+.L1160:
+       cmpl $2,64(%esp)
+       jne .L1163
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1159
+       .p2align 4,,7
+.L1163:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1159:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_ADD
+       addl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       jmp .L3400
+       .p2align 4,,7
+.L1170:
+       movl $1,64(%esp)
+.L1171:
+       addl $-12,%esp
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1173
+       movl m_regs,%ebx
+       jmp .L1174
+       .p2align 4,,7
+.L1173:
+       cmpl $1,64(%esp)
+       jne .L1175
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1174
+       .p2align 4,,7
+.L1175:
+       cmpl $2,64(%esp)
+       jne .L1178
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1174
+       .p2align 4,,7
+.L1178:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1174:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%eax
+       pushl %eax
+       call update_flags_ADD
+       addl %esi,%ebx
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       je .L3371
+       cmpl $1,64(%esp)
+       jne .L1181
+       movb $0,m_regs
+       movl %ebx,%eax
+       jmp .L3368
+       .p2align 4,,7
+.L1181:
+       cmpl $2,64(%esp)
+       je .L3369
+       jmp .L2840
+       .p2align 4,,7
+.L1185:
+       movl $1,64(%esp)
+.L1186:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1189
+       movl m_regs(,%eax,4),%esi
+       jmp .L1190
+       .p2align 4,,7
+.L1189:
+       cmpl $1,64(%esp)
+       jne .L1191
+       cmpl $3,%eax
+       ja .L1192
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1190
+       .p2align 4,,7
+.L1192:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1190
+       .p2align 4,,7
+.L1191:
+       cmpl $2,64(%esp)
+       jne .L1194
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1190
+       .p2align 4,,7
+.L1194:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1190:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_AND
+       andl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       cmpb $0,79(%esp)
+       jne .L3400
+       addl $-4,%esp
+       pushl %ebx
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       jmp .L3366
+       .p2align 4,,7
+.L1204:
+       movl $1,64(%esp)
+.L1205:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1208
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1209
+       .p2align 4,,7
+.L1208:
+       cmpl $1,64(%esp)
+       jne .L1210
+       cmpl $3,%eax
+       ja .L1211
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1209
+       .p2align 4,,7
+.L1211:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1209
+       .p2align 4,,7
+.L1210:
+       cmpl $2,64(%esp)
+       jne .L1213
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1209
+       .p2align 4,,7
+.L1213:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1209:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_AND
+       andl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       jmp .L3400
+       .p2align 4,,7
+.L1220:
+       movl $1,64(%esp)
+.L1221:
+       addl $-12,%esp
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1223
+       movl m_regs,%ebx
+       jmp .L1224
+       .p2align 4,,7
+.L1223:
+       cmpl $1,64(%esp)
+       jne .L1225
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1224
+       .p2align 4,,7
+.L1225:
+       cmpl $2,64(%esp)
+       jne .L1228
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1224
+       .p2align 4,,7
+.L1228:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1224:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%eax
+       pushl %eax
+       call update_flags_AND
+       andl %esi,%ebx
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       je .L3371
+       cmpl $1,64(%esp)
+       jne .L1181
+       movb $0,m_regs
+       movl %ebx,%eax
+       jmp .L3368
+       .p2align 4,,7
+.L1235:
+       movl $1,64(%esp)
+.L1236:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1239
+       movl m_regs(,%eax,4),%esi
+       jmp .L1240
+       .p2align 4,,7
+.L1239:
+       cmpl $1,64(%esp)
+       jne .L1241
+       cmpl $3,%eax
+       ja .L1242
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1240
+       .p2align 4,,7
+.L1242:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1240
+       .p2align 4,,7
+.L1241:
+       cmpl $2,64(%esp)
+       jne .L1244
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1240
+       .p2align 4,,7
+.L1244:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1240:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_SUB
+       jmp .L3370
+       .p2align 4,,7
+.L1245:
+       movl $1,64(%esp)
+.L1246:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl %ecx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1249
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1250
+       .p2align 4,,7
+.L1249:
+       cmpl $1,64(%esp)
+       jne .L1251
+       cmpl $3,%eax
+       ja .L1252
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1250
+       .p2align 4,,7
+.L1252:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1250
+       .p2align 4,,7
+.L1251:
+       cmpl $2,64(%esp)
+       jne .L1254
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1250
+       .p2align 4,,7
+.L1254:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1250:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%edx
+       pushl %edx
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%ecx
+       pushl %ecx
+       call update_flags_SUB
+       jmp .L3370
+       .p2align 4,,7
+.L1255:
+       movl $1,64(%esp)
+.L1256:
+       addl $-12,%esp
+       movl 76(%esp),%eax
+       pushl %eax
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1258
+       movl m_regs,%ebx
+       jmp .L1259
+       .p2align 4,,7
+.L1258:
+       cmpl $1,64(%esp)
+       jne .L1260
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1259
+       .p2align 4,,7
+.L1260:
+       cmpl $2,64(%esp)
+       jne .L1263
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1259
+       .p2align 4,,7
+.L1263:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1259:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%edx
+       pushl %edx
+       call update_flags_SUB
+       addl $16,%esp
+       jmp .L1095
+       .p2align 4,,7
+.L1264:
+       movl $1,64(%esp)
+.L1265:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl %ecx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1268
+       movl m_regs(,%eax,4),%esi
+       jmp .L1269
+       .p2align 4,,7
+.L1268:
+       cmpl $1,64(%esp)
+       jne .L1270
+       cmpl $3,%eax
+       ja .L1271
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1269
+       .p2align 4,,7
+.L1271:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1269
+       .p2align 4,,7
+.L1270:
+       cmpl $2,64(%esp)
+       jne .L1273
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1269
+       .p2align 4,,7
+.L1273:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1269:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%edx
+       pushl %edx
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%ecx
+       pushl %ecx
+       call update_flags_OR
+       orl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       cmpb $0,79(%esp)
+       je .L2800
+       jmp .L3400
+       .p2align 4,,7
+.L1283:
+       movl $1,64(%esp)
+.L1284:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1287
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1288
+       .p2align 4,,7
+.L1287:
+       cmpl $1,64(%esp)
+       jne .L1289
+       cmpl $3,%eax
+       ja .L1290
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1288
+       .p2align 4,,7
+.L1290:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1288
+       .p2align 4,,7
+.L1289:
+       cmpl $2,64(%esp)
+       jne .L1292
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1288
+       .p2align 4,,7
+.L1292:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1288:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_OR
+       orl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       jmp .L3400
+       .p2align 4,,7
+.L1299:
+       movl $1,64(%esp)
+.L1300:
+       addl $-12,%esp
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1302
+       movl m_regs,%ebx
+       jmp .L1303
+       .p2align 4,,7
+.L1302:
+       cmpl $1,64(%esp)
+       jne .L1304
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1303
+       .p2align 4,,7
+.L1304:
+       cmpl $2,64(%esp)
+       jne .L1307
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1303
+       .p2align 4,,7
+.L1307:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1303:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%eax
+       pushl %eax
+       call update_flags_OR
+       orl %esi,%ebx
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       je .L3371
+       cmpl $1,64(%esp)
+       jne .L1181
+       movb $0,m_regs
+       movl %ebx,%eax
+       jmp .L3368
+       .p2align 4,,7
+.L1314:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1316
+       movl m_regs(,%eax,4),%esi
+       jmp .L1317
+       .p2align 4,,7
+.L1316:
+       cmpl $1,64(%esp)
+       jne .L1318
+       cmpl $3,%eax
+       ja .L1319
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1317
+       .p2align 4,,7
+.L1319:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1317
+       .p2align 4,,7
+.L1318:
+       cmpl $2,64(%esp)
+       jne .L1321
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1317
+       .p2align 4,,7
+.L1321:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1317:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $16,%esp
+       movb m_eflags,%al
+       andb $1,%al
+       movzbl %al,%edi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%edx
+       pushl %edx
+       call update_flags_SBB
+       subl %esi,%ebx
+       addl $16,%esp
+       testl %edi,%edi
+       je .L1323
+       decl %ebx
+.L1323:
+       movl 72(%esp),%eax
+       cmpb $0,79(%esp)
+       jne .L3400
+       addl $-4,%esp
+       pushl %ebx
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       jmp .L3366
+       .p2align 4,,7
+.L1333:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1335
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1336
+       .p2align 4,,7
+.L1335:
+       cmpl $1,64(%esp)
+       jne .L1337
+       cmpl $3,%eax
+       ja .L1338
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1336
+       .p2align 4,,7
+.L1338:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1336
+       .p2align 4,,7
+.L1337:
+       cmpl $2,64(%esp)
+       jne .L1340
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1336
+       .p2align 4,,7
+.L1340:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1336:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $16,%esp
+       movb m_eflags,%al
+       andb $1,%al
+       movzbl %al,%edi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%edx
+       pushl %edx
+       call update_flags_SBB
+       subl %esi,%ebx
+       addl $16,%esp
+       testl %edi,%edi
+       je .L1128
+       decl %ebx
+       jmp .L1128
+       .p2align 4,,7
+.L1349:
+       movl $1,64(%esp)
+.L1350:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl %ecx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1353
+       movl m_regs(,%eax,4),%esi
+       jmp .L1354
+       .p2align 4,,7
+.L1353:
+       cmpl $1,64(%esp)
+       jne .L1355
+       cmpl $3,%eax
+       ja .L1356
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1354
+       .p2align 4,,7
+.L1356:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1354
+       .p2align 4,,7
+.L1355:
+       cmpl $2,64(%esp)
+       jne .L1358
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1354
+       .p2align 4,,7
+.L1358:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1354:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%edx
+       pushl %edx
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%ecx
+       pushl %ecx
+       call update_flags_SUB
+       subl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       cmpb $0,79(%esp)
+       je .L2800
+       jmp .L3400
+       .p2align 4,,7
+.L1368:
+       movl $1,64(%esp)
+.L1369:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1372
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1373
+       .p2align 4,,7
+.L1372:
+       cmpl $1,64(%esp)
+       jne .L1374
+       cmpl $3,%eax
+       ja .L1375
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1373
+       .p2align 4,,7
+.L1375:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1373
+       .p2align 4,,7
+.L1374:
+       cmpl $2,64(%esp)
+       jne .L1377
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1373
+       .p2align 4,,7
+.L1377:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1373:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_SUB
+       subl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       jmp .L3400
+       .p2align 4,,7
+.L1384:
+       movl $1,64(%esp)
+.L1385:
+       addl $-12,%esp
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1387
+       movl m_regs,%ebx
+       jmp .L1388
+       .p2align 4,,7
+.L1387:
+       cmpl $1,64(%esp)
+       jne .L1389
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1388
+       .p2align 4,,7
+.L1389:
+       cmpl $2,64(%esp)
+       jne .L1392
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1388
+       .p2align 4,,7
+.L1392:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1388:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%eax
+       pushl %eax
+       call update_flags_SUB
+       subl %esi,%ebx
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       je .L3371
+       cmpl $1,64(%esp)
+       jne .L1181
+       movb $0,m_regs
+       movl %ebx,%eax
+       jmp .L3368
+       .p2align 4,,7
+.L1399:
+       movl $1,64(%esp)
+.L1400:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1403
+       movl m_regs(,%eax,4),%esi
+       jmp .L1404
+       .p2align 4,,7
+.L1403:
+       cmpl $1,64(%esp)
+       jne .L1405
+       cmpl $3,%eax
+       ja .L1406
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1404
+       .p2align 4,,7
+.L1406:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1404
+       .p2align 4,,7
+.L1405:
+       cmpl $2,64(%esp)
+       jne .L1408
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1404
+       .p2align 4,,7
+.L1408:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1404:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_XOR
+       xorl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       cmpb $0,79(%esp)
+       jne .L3400
+       addl $-4,%esp
+       pushl %ebx
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       jmp .L3366
+       .p2align 4,,7
+.L1418:
+       movl $1,64(%esp)
+.L1419:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 88(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1422
+       movl m_regs(,%eax,4),%ebx
+       jmp .L1423
+       .p2align 4,,7
+.L1422:
+       cmpl $1,64(%esp)
+       jne .L1424
+       cmpl $3,%eax
+       ja .L1425
+       movzbl m_regs(,%eax,4),%ebx
+       jmp .L1423
+       .p2align 4,,7
+.L1425:
+       movzbl m_regs-15(,%eax,4),%ebx
+       jmp .L1423
+       .p2align 4,,7
+.L1424:
+       cmpl $2,64(%esp)
+       jne .L1427
+       movzwl m_regs(,%eax,4),%ebx
+       jmp .L1423
+       .p2align 4,,7
+.L1427:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1423:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%esi
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_XOR
+       xorl %esi,%ebx
+       movl 104(%esp),%eax
+       addl $32,%esp
+       jmp .L3400
+       .p2align 4,,7
+.L1434:
+       movl $1,64(%esp)
+.L1435:
+       addl $-12,%esp
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1437
+       movl m_regs,%ebx
+       jmp .L1438
+       .p2align 4,,7
+.L1437:
+       cmpl $1,64(%esp)
+       jne .L1439
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1438
+       .p2align 4,,7
+.L1439:
+       cmpl $2,64(%esp)
+       jne .L1442
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1438
+       .p2align 4,,7
+.L1442:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1438:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%eax
+       pushl %eax
+       call update_flags_XOR
+       xorl %esi,%ebx
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       je .L3371
+       cmpl $1,64(%esp)
+       jne .L1181
+       movb $0,m_regs
+       movl %ebx,%eax
+       jmp .L3368
+       .p2align 4,,7
+.L1449:
+       movl $1,64(%esp)
+.L1450:
+       addl $-12,%esp
+       movl 76(%esp),%edx
+       pushl %edx
+       call getUDisp
+       movl %eax,%esi
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1452
+       movl m_regs,%ebx
+       jmp .L1453
+       .p2align 4,,7
+.L1452:
+       cmpl $1,64(%esp)
+       jne .L1454
+       movl m_regs,%ebx
+       movzbl %bl,%ebx
+       jmp .L1453
+       .p2align 4,,7
+.L1454:
+       cmpl $2,64(%esp)
+       jne .L1457
+       movl m_regs,%ebx
+       movzwl %bx,%ebx
+       jmp .L1453
+       .p2align 4,,7
+.L1457:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %ebx,%ebx
+       addl $16,%esp
+.L1453:
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call update_flags_TEST
+       addl $16,%esp
+       jmp .L1095
+       .p2align 4,,7
+.L1458:
+       movl $1,64(%esp)
+.L1459:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%edx
+       andl $7,%edx
+       movl %edx,68(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%ecx
+       pushl %ecx
+       call amode_from_modRM
+       movl 84(%esp),%eax
+       addl $16,%esp
+       cmpl $4,64(%esp)
+       jne .L1462
+       movl m_regs(,%eax,4),%esi
+       jmp .L1463
+       .p2align 4,,7
+.L1462:
+       cmpl $1,64(%esp)
+       jne .L1464
+       cmpl $3,%eax
+       ja .L1465
+       movzbl m_regs(,%eax,4),%esi
+       jmp .L1463
+       .p2align 4,,7
+.L1465:
+       movzbl m_regs-15(,%eax,4),%esi
+       jmp .L1463
+       .p2align 4,,7
+.L1464:
+       cmpl $2,64(%esp)
+       jne .L1467
+       movzwl m_regs(,%eax,4),%esi
+       jmp .L1463
+       .p2align 4,,7
+.L1467:
+       addl $-12,%esp
+       pushl $.LC47
+       call panic
+       xorl %esi,%esi
+       addl $16,%esp
+.L1463:
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 80(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call getIRoM
+       movl %eax,%ebx
+       addl $-4,%esp
+       pushl %ebx
+       pushl %esi
+       movl 92(%esp),%edx
+       pushl %edx
+       call update_flags_TEST
+       jmp .L3370
+       .p2align 4,,7
+.L1468:
+       movl m_eip,%eax
+       movb (%eax),%al
+       shrb $3,%al
+       movl %eax,%ecx
+       andl $7,%ecx
+       movl %ecx,72(%esp)
+       addl $-4,%esp
+       leal 83(%esp),%eax
+       pushl %eax
+       leal 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       call amode_from_modRM
+       addl $16,%esp
+       movl m_eip,%eax
+       movzbl (%eax),%eax
+       incl m_eip
+       movsbl %al,%ebx
+       addl $-4,%esp
+       movzbl 83(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%eax
+       pushl %eax
+       movl 76(%esp),%edx
+       pushl %edx
+       call getIRoM
+       addl $16,%esp
+       cmpl $2,64(%esp)
+       je .L1472
+       ja .L1473
+       cmpl $1,64(%esp)
+       je .L1474
+       jmp .L1475
+       .p2align 4,,7
+.L1473:
+       cmpl $4,64(%esp)
+       jne .L1475
+       movl %eax,%ebp
+       jmp .L1477
+       .p2align 4,,7
+.L1472:
+       addl $-12,%esp
+       pushl %eax
+       call extend_s_16to32
+       movl %eax,%ebp
+       addl $16,%esp
+       jmp .L1477
+       .p2align 4,,7
+.L1474:
+       movsbl %al,%ebp
+       jmp .L1477
+       .p2align 4,,7
+.L1475:
+ &nb