ia32: Remove the ia32_x87_attr_t from ia32_asm_attr_t.
[libfirm] / ir / be / ia32 / ia32_spec.pl
index 6a97168..a31fd7a 100644 (file)
@@ -9,13 +9,6 @@ $mode_gp            = "mode_Iu";
 $mode_flags         = "mode_Iu";
 $mode_fpcw          = "ia32_mode_fpcw";
 
-# register types:
-$normal      =  0; # no special type
-$ignore      =  1; # ignore (do not assign this register)
-$arbitrary   =  2; # emitter can choose an arbitrary register of this class
-$virtual     =  4; # the register is a virtual one
-$state       =  8; # register represents a state
-# NOTE: Last entry of each class is the largest Firm-Mode a register can hold
 %reg_classes = (
        gp => [
                { name => "edx", dwarf => 2 },
@@ -25,19 +18,19 @@ $state       =  8; # register represents a state
                { name => "esi", dwarf => 6 },
                { name => "edi", dwarf => 7 },
                { name => "ebp", dwarf => 5 },
-               { name => "esp", dwarf => 4, type => $ignore },
-               { name => "gp_NOREG", type => $ignore | $arbitrary | $virtual }, # we need a dummy register for NoReg nodes
+               { name => "esp", dwarf => 4, type => "ignore" },
+               { name => "gp_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes
                { mode => $mode_gp }
        ],
        mmx => [
-               { name => "mm0", dwarf => 29, type => $ignore },
-               { name => "mm1", dwarf => 30, type => $ignore },
-               { name => "mm2", dwarf => 31, type => $ignore },
-               { name => "mm3", dwarf => 32, type => $ignore },
-               { name => "mm4", dwarf => 33, type => $ignore },
-               { name => "mm5", dwarf => 34, type => $ignore },
-               { name => "mm6", dwarf => 35, type => $ignore },
-               { name => "mm7", dwarf => 36, type => $ignore },
+               { name => "mm0", dwarf => 29, type => "ignore" },
+               { name => "mm1", dwarf => 30, type => "ignore" },
+               { name => "mm2", dwarf => 31, type => "ignore" },
+               { name => "mm3", dwarf => 32, type => "ignore" },
+               { name => "mm4", dwarf => 33, type => "ignore" },
+               { name => "mm5", dwarf => 34, type => "ignore" },
+               { name => "mm6", dwarf => 35, type => "ignore" },
+               { name => "mm7", dwarf => 36, type => "ignore" },
                { mode => $mode_mmx, flags => "manual_ra" }
        ],
        xmm => [
@@ -49,38 +42,27 @@ $state       =  8; # register represents a state
                { name => "xmm5", dwarf => 26 },
                { name => "xmm6", dwarf => 27 },
                { name => "xmm7", dwarf => 28 },
-               { name => "xmm_NOREG", type => $ignore | $virtual },     # we need a dummy register for NoReg nodes
+               { name => "xmm_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes
                { mode => $mode_xmm }
        ],
-       vfp => [
-               { name => "vf0" },
-               { name => "vf1" },
-               { name => "vf2" },
-               { name => "vf3" },
-               { name => "vf4" },
-               { name => "vf5" },
-               { name => "vf6" },
-               { name => "vf7" },
-               { name => "vfp_NOREG", type => $ignore | $arbitrary | $virtual }, # we need a dummy register for NoReg nodes
+       fp => [
+               { name => "st0", realname => "st",    dwarf => 11 },
+               { name => "st1", realname => "st(1)", dwarf => 12 },
+               { name => "st2", realname => "st(2)", dwarf => 13 },
+               { name => "st3", realname => "st(3)", dwarf => 14 },
+               { name => "st4", realname => "st(4)", dwarf => 15 },
+               { name => "st5", realname => "st(5)", dwarf => 16 },
+               { name => "st6", realname => "st(6)", dwarf => 17 },
+               { name => "st7", realname => "st(7)", dwarf => 18 },
+               { name => "fp_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes
                { mode => $mode_fp87 }
        ],
-       st => [
-               { name => "st0", realname => "st",    dwarf => 11, type => $ignore },
-               { name => "st1", realname => "st(1)", dwarf => 12, type => $ignore },
-               { name => "st2", realname => "st(2)", dwarf => 13, type => $ignore },
-               { name => "st3", realname => "st(3)", dwarf => 14, type => $ignore },
-               { name => "st4", realname => "st(4)", dwarf => 15, type => $ignore },
-               { name => "st5", realname => "st(5)", dwarf => 16, type => $ignore },
-               { name => "st6", realname => "st(6)", dwarf => 17, type => $ignore },
-               { name => "st7", realname => "st(7)", dwarf => 18, type => $ignore },
-               { mode => $mode_fp87, flags => "manual_ra" }
-       ],
        fp_cw => [      # the floating point control word
-               { name => "fpcw", dwarf => 37, type => $ignore | $state },
-               { mode => $mode_fpcw, flags => "manual_ra|state" }
+               { name => "fpcw", dwarf => 37, type => "ignore | state" },
+               { mode => $mode_fpcw, flags => "manual_ra | state" }
        ],
        flags => [
-               { name => "eflags", dwarf => 9, type => 0 },
+               { name => "eflags", dwarf => 9 },
                { mode => "mode_Iu", flags => "manual_ra" }
        ],
 ); # %reg_classes
@@ -97,42 +79,6 @@ $state       =  8; # register represents a state
        bundels_per_cycle => 1
 ); # vliw
 
-%emit_templates = (
-       S0 => "${arch}_emit_source_register(node, 0);",
-       S1 => "${arch}_emit_source_register(node, 1);",
-       S2 => "${arch}_emit_source_register(node, 2);",
-       S3 => "${arch}_emit_source_register(node, 3);",
-       SB0 => "${arch}_emit_8bit_source_register_or_immediate(node, 0);",
-       SB1 => "${arch}_emit_8bit_source_register_or_immediate(node, 1);",
-       SB2 => "${arch}_emit_8bit_source_register_or_immediate(node, 2);",
-       SB3 => "${arch}_emit_8bit_source_register_or_immediate(node, 3);",
-       SH0 => "${arch}_emit_8bit_high_source_register(node, 0);",
-       SS0 => "${arch}_emit_16bit_source_register_or_immediate(node, 0);",
-       SI0 => "${arch}_emit_source_register_or_immediate(node, 0);",
-       SI1 => "${arch}_emit_source_register_or_immediate(node, 1);",
-       SI3 => "${arch}_emit_source_register_or_immediate(node, 3);",
-       D0 => "${arch}_emit_dest_register(node, 0);",
-       D1 => "${arch}_emit_dest_register(node, 1);",
-       DS0 => "${arch}_emit_dest_register_size(node, 0);",
-       DB0 => "${arch}_emit_8bit_dest_register(node, 0);",
-       X0 => "${arch}_emit_x87_register(node, 0);",
-       X1 => "${arch}_emit_x87_register(node, 1);",
-       EX => "${arch}_emit_extend_suffix(node);",
-       M  => "${arch}_emit_mode_suffix(node);",
-       XM => "${arch}_emit_x87_mode_suffix(node);",
-       XXM => "${arch}_emit_xmm_mode_suffix(node);",
-       XSD => "${arch}_emit_xmm_mode_suffix_s(node);",
-       AM => "${arch}_emit_am(node);",
-       unop3 => "${arch}_emit_unop(node, n_ia32_unary_op);",
-       unop4 => "${arch}_emit_unop(node, n_ia32_binary_right);",
-       binop => "${arch}_emit_binop(node);",
-       x87_binop => "${arch}_emit_x87_binop(node);",
-       CMP3  => "${arch}_emit_cmp_suffix_node(node, 3);",
-);
-
-
-
-
 $default_op_attr_type = "ia32_op_attr_t";
 $default_attr_type    = "ia32_attr_t";
 $default_copy_attr    = "ia32_copy_attr";
@@ -171,7 +117,6 @@ $custom_init_attr_func = \&ia32_custom_init_attr;
 %init_attr = (
        ia32_asm_attr_t =>
                "\tinit_ia32_attributes(res, irn_flags_, in_reqs, n_res);\n".
-               "\tinit_ia32_x87_attributes(res);".
                "\tinit_ia32_asm_attributes(res);",
        ia32_attr_t     =>
                "\tinit_ia32_attributes(res, irn_flags_, in_reqs, n_res);",
@@ -210,9 +155,6 @@ $custom_init_attr_func = \&ia32_custom_init_attr;
        ia32_climbframe_attr_t => "ia32_compare_climbframe_attr",
 );
 
-%operands = (
-);
-
 $status_flags       = [ "CF", "PF", "AF", "ZF", "SF", "OF" ];
 $status_flags_wo_cf = [       "PF", "AF", "ZF", "SF", "OF" ];
 $fpcw_flags         = [ "FP_IM", "FP_DM", "FP_ZM", "FP_OM", "FP_UM", "FP_PM",
@@ -263,7 +205,7 @@ Add => {
                       out => [ "in_r4 in_r5", "flags", "none" ] },
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
-       emit      => '. add%M %binop',
+       emit      => 'add%M %B',
        am        => "source,binary",
        units     => [ "GP" ],
        latency   => 1,
@@ -276,7 +218,7 @@ AddMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => ". add%M %SI3, %AM",
+       emit      => "add%M %#S3, %AM",
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -288,7 +230,7 @@ AddMem8Bit => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => ". add%M %SB3, %AM",
+       emit      => "add%M %#S3, %AM",
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -301,7 +243,7 @@ Adc => {
                       out => [ "in_r4 in_r5", "flags", "none" ] },
        ins       => [ "base", "index", "mem", "left", "right", "eflags" ],
        outs      => [ "res", "flags", "M" ],
-       emit      => '. adc%M %binop',
+       emit      => 'adc%M %B',
        am        => "source,binary",
        units     => [ "GP" ],
        latency   => 1,
@@ -328,7 +270,7 @@ Mul => {
        reg_req   => { in => [ "gp", "gp", "none", "eax", "gp" ],
                       out => [ "eax", "flags", "none", "edx" ] },
        ins       => [ "base", "index", "mem", "left", "right" ],
-       emit      => '. mul%M %unop4',
+       emit      => 'mul%M %AS4',
        outs      => [ "res_low", "flags", "M", "res_high" ],
        am        => "source,binary",
        latency   => 10,
@@ -365,7 +307,7 @@ IMul1OP => {
        reg_req   => { in => [ "gp", "gp", "none", "eax", "gp" ],
                       out => [ "eax", "flags", "none", "edx" ] },
        ins       => [ "base", "index", "mem", "left", "right" ],
-       emit      => '. imul%M %unop4',
+       emit      => 'imul%M %AS4',
        outs      => [ "res_low", "flags", "M", "res_high" ],
        am        => "source,binary",
        latency   => 5,
@@ -388,7 +330,7 @@ And => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. and%M %binop',
+       emit      => 'and%M %B',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -400,7 +342,7 @@ AndMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. and%M %SI3, %AM',
+       emit      => 'and%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -412,7 +354,7 @@ AndMem8Bit => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none",  "eax ebx ecx edx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. and%M %SB3, %AM',
+       emit      => 'and%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -427,7 +369,7 @@ Or => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. or%M %binop',
+       emit      => 'or%M %B',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -439,7 +381,7 @@ OrMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. or%M %SI3, %AM',
+       emit      => 'or%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -451,7 +393,7 @@ OrMem8Bit => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. or%M %SB3, %AM',
+       emit      => 'or%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -466,7 +408,7 @@ Xor => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. xor%M %binop',
+       emit      => 'xor%M %B',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -478,7 +420,7 @@ Xor0 => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "gp", "flags" ] },
        outs      => [ "res", "flags" ],
-       emit      => "xor%M %D0, %D0",
+       emit      => "xor%M %D0, %D0",
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -490,7 +432,7 @@ XorMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. xor%M %SI3, %AM',
+       emit      => 'xor%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -502,7 +444,7 @@ XorMem8Bit => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
-       emit      => '. xor%M %SB3, %AM',
+       emit      => 'xor%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -517,7 +459,7 @@ Sub => {
        ins       => [ "base", "index", "mem", "minuend", "subtrahend" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. sub%M %binop',
+       emit      => 'sub%M %B',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -529,7 +471,7 @@ SubMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "subtrahend" ],
-       emit      => '. sub%M %SI3, %AM',
+       emit      => 'sub%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => 'mode_M',
@@ -541,7 +483,7 @@ SubMem8Bit => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "subtrahend" ],
-       emit      => '. sub%M %SB3, %AM',
+       emit      => 'sub%M %#S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => 'mode_M',
@@ -555,7 +497,7 @@ Sbb => {
        ins       => [ "base", "index", "mem", "minuend", "subtrahend", "eflags" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. sbb%M %binop',
+       emit      => 'sbb%M %B',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -567,7 +509,7 @@ Sbb0 => {
        # irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "flags" ], out => [ "gp", "flags" ] },
        outs      => [ "res", "flags" ],
-       emit      => "sbb%M %D0, %D0",
+       emit      => "sbb%M %D0, %D0",
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -594,7 +536,7 @@ IDiv => {
        ins       => [ "base", "index", "mem", "divisor", "dividend_low", "dividend_high" ],
        outs      => [ "div_res", "flags", "M", "mod_res", "X_regular", "X_except" ],
        am        => "source,unary",
-       emit      => ". idiv%M %unop3",
+       emit      => "idiv%M %AS3",
        latency   => 25,
        units     => [ "GP" ],
        modified_flags => $status_flags
@@ -608,7 +550,7 @@ Div => {
        ins       => [ "base", "index", "mem", "divisor", "dividend_low", "dividend_high" ],
        outs      => [ "div_res", "flags", "M", "mod_res", "X_regular", "X_except" ],
        am        => "source,unary",
-       emit      => ". div%M %unop3",
+       emit      => "div%M %AS3",
        latency   => 25,
        units     => [ "GP" ],
        modified_flags => $status_flags
@@ -620,7 +562,7 @@ Shl => {
                       out => [ "in_r1 !in_r2", "flags" ] },
        ins       => [ "val", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => '. shl%M %SB1, %S0',
+       emit      => 'shl%M %<S1, %S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -632,7 +574,7 @@ ShlMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "ecx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "count" ],
-       emit      => '. shl%M %SB3, %AM',
+       emit      => 'shl%M %<S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -645,7 +587,7 @@ ShlD => {
                       out => [ "in_r1 !in_r2 !in_r3", "flags" ] },
        ins       => [ "val_high", "val_low", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => ". shld%M %SB2, %S1, %D0",
+       emit      => "shld%M %<S2, %S1, %D0",
        latency   => 6,
        units     => [ "GP" ],
        mode      => $mode_gp,
@@ -658,7 +600,7 @@ Shr => {
                       out => [ "in_r1 !in_r2", "flags" ] },
        ins       => [ "val", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => '. shr%M %SB1, %S0',
+       emit      => 'shr%M %<S1, %S0',
        units     => [ "GP" ],
        mode      => $mode_gp,
        latency   => 1,
@@ -670,7 +612,7 @@ ShrMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "ecx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "count" ],
-       emit      => '. shr%M %SB3, %AM',
+       emit      => 'shr%M %<S3, %AM',
        units     => [ "GP" ],
        mode      => "mode_M",
        latency   => 1,
@@ -683,7 +625,7 @@ ShrD => {
                       out => [ "in_r1 !in_r2 !in_r3", "flags" ] },
        ins       => [ "val_high", "val_low", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => ". shrd%M %SB2, %S1, %D0",
+       emit      => "shrd%M %<S2, %S1, %D0",
        latency   => 6,
        units     => [ "GP" ],
        mode      => $mode_gp,
@@ -696,7 +638,7 @@ Sar => {
                       out => [ "in_r1 !in_r2", "flags" ] },
        ins       => [ "val", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => '. sar%M %SB1, %S0',
+       emit      => 'sar%M %<S1, %S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -708,7 +650,7 @@ SarMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "ecx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "count" ],
-       emit      => '. sar%M %SB3, %AM',
+       emit      => 'sar%M %<S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -721,7 +663,7 @@ Ror => {
                       out => [ "in_r1 !in_r2", "flags" ] },
        ins       => [ "val", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => '. ror%M %SB1, %S0',
+       emit      => 'ror%M %<S1, %S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -733,7 +675,7 @@ RorMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "ecx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "count" ],
-       emit      => '. ror%M %SB3, %AM',
+       emit      => 'ror%M %<S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -746,7 +688,7 @@ Rol => {
                       out => [ "in_r1 !in_r2", "flags" ] },
        ins       => [ "val", "count" ],
        outs      => [ "res", "flags" ],
-       emit      => '. rol%M %SB1, %DS0',
+       emit      => 'rol%M %<S1, %D0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -758,7 +700,7 @@ RolMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "ecx" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "count" ],
-       emit      => '. rol%M %SB3, %AM',
+       emit      => 'rol%M %<S3, %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -769,7 +711,7 @@ Neg => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "gp" ],
                       out => [ "in_r1", "flags" ] },
-       emit      => 'neg%M %S0',
+       emit      => 'neg%M %S0',
        ins       => [ "val" ],
        outs      => [ "res", "flags" ],
        units     => [ "GP" ],
@@ -783,7 +725,7 @@ NegMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem" ],
-       emit      => 'neg%M %AM',
+       emit      => 'neg%M %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -806,7 +748,7 @@ Inc => {
                       out => [ "in_r1", "flags" ] },
        ins       => [ "val" ],
        outs      => [ "res", "flags" ],
-       emit      => 'inc%M %S0',
+       emit      => 'inc%M %S0',
        units     => [ "GP" ],
        mode      => $mode_gp,
        latency   => 1,
@@ -818,7 +760,7 @@ IncMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem" ],
-       emit      => 'inc%M %AM',
+       emit      => 'inc%M %AM',
        units     => [ "GP" ],
        mode      => "mode_M",
        latency   => 1,
@@ -831,7 +773,7 @@ Dec => {
                       out => [ "in_r1", "flags" ] },
        ins       => [ "val" ],
        outs      => [ "res", "flags" ],
-       emit      => 'dec%M %S0',
+       emit      => 'dec%M %S0',
        units     => [ "GP" ],
        mode      => $mode_gp,
        latency   => 1,
@@ -843,7 +785,7 @@ DecMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem" ],
-       emit      => 'dec%M %AM',
+       emit      => 'dec%M %AM',
        units     => [ "GP" ],
        mode      => "mode_M",
        latency   => 1,
@@ -856,7 +798,7 @@ Not => {
                       out => [ "in_r1" ] },
        ins       => [ "val" ],
        outs      => [ "res" ],
-       emit      => 'not%M %S0',
+       emit      => 'not%M %S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -868,7 +810,7 @@ NotMem => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem" ],
-       emit      => 'not%M %AM',
+       emit      => 'not%M %AM',
        units     => [ "GP" ],
        latency   => 1,
        mode      => "mode_M",
@@ -877,7 +819,7 @@ NotMem => {
 
 Cmc => {
        reg_req   => { in => [ "flags" ], out => [ "flags" ] },
-       emit      => '.cmc',
+       emit      => 'cmc',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_flags,
@@ -886,7 +828,7 @@ Cmc => {
 
 Stc => {
        reg_req   => { out => [ "flags" ] },
-       emit      => '.stc',
+       emit      => 'stc',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_flags,
@@ -901,7 +843,7 @@ Cmp => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "eflags", "unused", "M" ],
        am        => "source,binary",
-       emit      => '. cmp%M %binop',
+       emit      => 'cmp%M %B',
        attr      => "bool ins_permuted",
        init_attr => "attr->data.ins_permuted   = ins_permuted;",
        latency   => 1,
@@ -918,7 +860,7 @@ Cmp8Bit => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "eflags", "unused", "M" ],
        am        => "source,binary",
-       emit      => '. cmpb %binop',
+       emit      => 'cmpb %B',
        attr      => "bool ins_permuted",
        init_attr => "attr->data.ins_permuted   = ins_permuted;",
        latency   => 1,
@@ -932,7 +874,7 @@ XorHighLow => {
        state     => "exc_pinned",
        reg_req   => { in => [ "eax ebx ecx edx" ],
                       out => [ "in_r1", "flags" ] },
-       emit      => '. xorb %SH0, %SB0',
+       emit      => 'xorb %>S0, %<S0',
        ins       => [ "value" ],
        outs      => [ "res", "flags" ],
        units     => [ "GP" ],
@@ -949,7 +891,7 @@ Test => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "eflags", "unused", "M" ],
        am        => "source,binary",
-       emit      => '. test%M %binop',
+       emit      => 'test%M %B',
        attr      => "bool ins_permuted",
        init_attr => "attr->data.ins_permuted = ins_permuted;",
        latency   => 1,
@@ -966,7 +908,7 @@ Test8Bit => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "eflags", "unused", "M" ],
        am        => "source,binary",
-       emit      => '. testb %binop',
+       emit      => 'testb %B',
        attr      => "bool ins_permuted",
        init_attr => "attr->data.ins_permuted = ins_permuted;",
        latency   => 1,
@@ -1002,7 +944,7 @@ SetccMem => {
        attr_type => "ia32_condcode_attr_t",
        attr      => "ia32_condition_code_t condition_code",
        init_attr => "set_ia32_ls_mode(res, mode_Bu);\n",
-       emit      => '. set%CMP3 %AM',
+       emit      => 'set%P3 %AM',
        latency   => 1,
        units     => [ "GP" ],
        mode      => 'mode_M',
@@ -1062,20 +1004,22 @@ Jmp => {
 IJmp => {
        state     => "pinned",
        op_flags  => [ "cfopcode", "unknown_jump" ],
-       reg_req   => { in => [ "gp", "gp", "none", "gp" ] },
+       reg_req   => { in => [ "gp", "gp", "none", "gp" ],
+                      out => [ "none", "flags", "none" ] },
        ins       => [ "base", "index", "mem", "target" ],
+       outs      => [ "jmp", "flags", "M" ],
        am        => "source,unary",
-       emit      => '. jmp *%unop3',
+       emit      => 'jmp %*AS3',
        latency   => 1,
        units     => [ "BRANCH" ],
        mode      => "mode_X",
-       init_attr => "info->out_infos = NULL;", # XXX ugly hack for out requirements
 },
 
 Const => {
        op_flags  => [ "constlike" ],
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "gp" ] },
+       emit      => "movl %I, %D0",
        units     => [ "GP" ],
        attr      => "ir_entity *symconst, int symconst_sign, int no_pic_adjust, long offset",
        attr_type => "ia32_immediate_attr_t",
@@ -1103,7 +1047,7 @@ GetEIP => {
 
 NoReg_GP => {
        state     => "pinned",
-       op_flags  => [ "constlike", "dump_noblock", "dump_noinput" ],
+       op_flags  => [ "constlike", "dump_noblock" ],
        irn_flags => [ "not_scheduled" ],
        reg_req   => { out => [ "gp_NOREG:I" ] },
        units     => [],
@@ -1112,11 +1056,11 @@ NoReg_GP => {
        mode      => $mode_gp
 },
 
-NoReg_VFP => {
+NoReg_FP => {
        state     => "pinned",
-       op_flags  => [ "constlike", "dump_noblock", "dump_noinput" ],
+       op_flags  => [ "constlike", "dump_noblock" ],
        irn_flags => [ "not_scheduled" ],
-       reg_req   => { out => [ "vfp_NOREG:I" ] },
+       reg_req   => { out => [ "fp_NOREG:I" ] },
        units     => [],
        emit      => "",
        mode      => $mode_fp87,
@@ -1126,7 +1070,7 @@ NoReg_VFP => {
 
 NoReg_XMM => {
        state     => "pinned",
-       op_flags  => [ "constlike", "dump_noblock", "dump_noinput" ],
+       op_flags  => [ "constlike", "dump_noblock" ],
        irn_flags => [ "not_scheduled" ],
        reg_req   => { out => [ "xmm_NOREG:I" ] },
        units     => [],
@@ -1152,7 +1096,7 @@ FldCW => {
        reg_req   => { in => [ "gp", "gp", "none" ], out => [ "fpcw:I" ] },
        ins       => [ "base", "index", "mem" ],
        latency   => 5,
-       emit      => "fldcw %AM",
+       emit      => "fldcw %AM",
        mode      => $mode_fpcw,
        units     => [ "GP" ],
        modified_flags => $fpcw_flags
@@ -1164,7 +1108,7 @@ FnstCW => {
        reg_req   => { in => [ "gp", "gp", "none", "fp_cw" ], out => [ "none" ] },
        ins       => [ "base", "index", "mem", "fpcw" ],
        latency   => 5,
-       emit      => "fnstcw %AM",
+       emit      => "fnstcw %AM",
        mode      => "mode_M",
        units     => [ "GP" ],
 },
@@ -1183,7 +1127,7 @@ Cltd => {
        # we should not rematrialize this node. It has very strict constraints.
        reg_req   => { in => [ "eax", "edx" ], out => [ "edx" ] },
        ins       => [ "val", "clobbered" ],
-       emit      => 'cltd',
+       emit      => 'cltd',
        latency   => 1,
        mode      => $mode_gp,
        units     => [ "GP" ],
@@ -1202,7 +1146,7 @@ Load => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "res", "unused", "M", "X_regular", "X_except" ],
        latency   => 0,
-       emit      => ". mov%EX%.l %AM, %D0",
+       emit      => "mov%#Ml %AM, %D0",
        units     => [ "GP" ],
 },
 
@@ -1213,7 +1157,7 @@ Store => {
                       out => [ "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "M", "X_regular", "X_except" ],
-       emit      => '. mov%M %SI3, %AM',
+       emit      => 'mov%M %#S3, %AM',
        latency   => 2,
        units     => [ "GP" ],
 },
@@ -1225,7 +1169,7 @@ Store8Bit => {
                       out => ["none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "M", "X_regular", "X_except" ],
-       emit      => '. mov%M %SB3, %AM',
+       emit      => 'mov%M %#S3, %AM',
        latency   => 2,
        units     => [ "GP" ],
 },
@@ -1234,7 +1178,7 @@ Lea => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "gp", "gp" ], out => [ "gp" ] },
        ins       => [ "base", "index" ],
-       emit      => 'leal %AM, %D0',
+       emit      => 'leal %AM, %D0',
        latency   => 2,
        units     => [ "GP" ],
        mode      => $mode_gp,
@@ -1247,7 +1191,7 @@ Push => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none", "gp", "esp" ], out => [ "esp:I|S", "none" ] },
        ins       => [ "base", "index", "mem", "val", "stack" ],
-       emit      => '. push%M %unop3',
+       emit      => 'push%M %AS3',
        outs      => [ "stack", "M" ],
        am        => "source,unary",
        latency   => 2,
@@ -1259,7 +1203,7 @@ PushEax => {
        reg_req => { in => [ "esp" ], out => [ "esp:I|S" ] },
        ins     => [ "stack" ],
        outs    => [ "stack" ],
-       emit    => 'pushl %%eax',
+       emit    => 'pushl %%eax',
        latency => 2,
        units   => [ "GP" ],
        mode    => $mode_gp,
@@ -1270,7 +1214,7 @@ Pop => {
        reg_req   => { in => [ "none", "esp" ], out => [ "gp", "none", "none", "esp:I|S" ] },
        ins       => [ "mem", "stack" ],
        outs      => [ "res", "M", "unused", "stack" ],
-       emit      => 'pop%M %D0',
+       emit      => 'pop%M %D0',
        latency   => 3, # Pop is more expensive than Push on Athlon
        units     => [ "GP" ],
 },
@@ -1280,7 +1224,7 @@ PopEbp => {
        reg_req   => { in => [ "none", "esp" ], out => [ "ebp:I", "none", "none", "esp:I|S" ] },
        ins       => [ "mem", "stack" ],
        outs      => [ "res", "M", "unused", "stack" ],
-       emit      => 'pop%M %D0',
+       emit      => 'pop%M %D0',
        latency   => 3, # Pop is more expensive than Push on Athlon
        units     => [ "GP" ],
 },
@@ -1290,7 +1234,7 @@ CopyEbpEsp => {
        reg_req   => { in => [ "ebp" ], out => [ "esp:I|S" ] },
        ins       => [ "ebp" ],
        outs      => [ "esp" ],
-       emit      => 'movl %S0, %D0',
+       emit      => 'movl %S0, %D0',
        latency   => 1,
        units     => [ "GP" ],
        mode      => $mode_gp,
@@ -1301,14 +1245,14 @@ PopMem => {
        reg_req   => { in => [ "gp", "gp", "none", "esp" ], out => [ "none", "none", "none", "esp:I|S" ] },
        ins       => [ "base", "index", "mem", "stack" ],
        outs      => [ "unused0", "M", "unused1", "stack" ],
-       emit      => 'pop%M %AM',
+       emit      => 'pop%M %AM',
        latency   => 3, # Pop is more expensive than Push on Athlon
        units     => [ "GP" ],
 },
 
 Enter => {
        reg_req   => { in => [ "esp" ], out => [ "ebp", "esp:I|S", "none" ] },
-       emit      => 'enter',
+       emit      => 'enter',
        outs      => [ "frame", "stack", "M" ],
        latency   => 15,
        units     => [ "GP" ],
@@ -1316,7 +1260,7 @@ Enter => {
 
 Leave => {
        reg_req   => { in => [ "ebp" ], out => [ "ebp:I", "esp:I|S" ] },
-       emit      => 'leave',
+       emit      => 'leave',
        outs      => [ "frame", "stack" ],
        latency   => 3,
        units     => [ "GP" ],
@@ -1328,7 +1272,7 @@ AddSP => {
        reg_req   => { in => [ "gp", "gp", "none", "esp", "gp" ], out => [ "esp:I|S", "none" ] },
        ins       => [ "base", "index", "mem", "stack", "size" ],
        am        => "source,binary",
-       emit      => '. addl %binop',
+       emit      => 'addl %B',
        latency   => 1,
        outs      => [ "stack", "M" ],
        units     => [ "GP" ],
@@ -1340,8 +1284,8 @@ SubSP => {
        reg_req   => { in => [ "gp", "gp", "none", "esp", "gp" ], out => [ "esp:I|S", "gp", "none" ] },
        ins       => [ "base", "index", "mem", "stack", "size" ],
        am        => "source,binary",
-       emit      => ". subl %binop\n".
-                    "movl %%esp, %D1",
+       emit      => "subl %B\n".
+                    "movl %%esp, %D1",
        latency   => 2,
        outs      => [ "stack", "addr", "M" ],
        units     => [ "GP" ],
@@ -1352,7 +1296,7 @@ RepPrefix => {
        op_flags  => [ "keep" ],
        state     => "pinned",
        mode      => "mode_M",
-       emit      => "rep",
+       emit      => "rep",
        latency   => 0,
 },
 
@@ -1360,7 +1304,7 @@ LdTls => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "gp" ] },
        units     => [ "GP" ],
-       emit      => "movl %%gs:0, %D0",
+       emit      => "movl %%gs:0, %D0",
        mode      => $mode_gp,
        latency   => 1,
 },
@@ -1373,7 +1317,7 @@ Bt => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp" ], out => [ "flags" ] },
        ins       => [ "left", "right" ],
-       emit      => 'bt%M %S1, %S0',
+       emit      => 'bt%M %S1, %S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_flags,
@@ -1388,7 +1332,7 @@ Bsf => {
        ins       => [ "base", "index", "mem", "operand" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. bsf%M %unop3, %D0',
+       emit      => 'bsf%M %AS3, %D0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -1403,7 +1347,7 @@ Bsr => {
        ins       => [ "base", "index", "mem", "operand" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. bsr%M %unop3, %D0',
+       emit      => 'bsr%M %AS3, %D0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -1421,7 +1365,7 @@ Popcnt => {
        ins       => [ "base", "index", "mem", "operand" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. popcnt%M %unop3, %D0',
+       emit      => 'popcnt%M %AS3, %D0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -1433,10 +1377,11 @@ Call => {
        state     => "exc_pinned",
        reg_req   => {
                in  => [ "gp", "gp", "none", "gp", "esp", "fpcw", "eax", "ecx", "edx" ],
-               out => [ "esp:I|S", "fpcw:I", "none", "eax", "ecx", "edx", "vf0", "vf1", "vf2", "vf3", "vf4", "vf5", "vf6", "vf7", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "none", "none" ]
+               out => [ "esp:I|S", "fpcw:I", "none", "eax", "ecx", "edx", "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "none", "none" ]
        },
        ins       => [ "base", "index", "mem", "addr", "stack", "fpcw", "eax", "ecx", "edx" ],
-       outs      => [ "stack", "fpcw", "M", "eax", "ecx", "edx", "vf0", "vf1", "vf2", "vf3", "vf4", "vf5", "vf6", "vf7", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "X_regular", "X_except" ],
+       outs      => [ "stack", "fpcw", "M", "eax", "ecx", "edx", "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "X_regular", "X_except" ],
+       emit      => "call %*AS3",
        attr_type => "ia32_call_attr_t",
        attr      => "unsigned pop, ir_type *call_tp",
        am        => "source,unary",
@@ -1468,7 +1413,8 @@ Bswap => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "gp" ],
                       out => [ "in_r1" ] },
-       emit      => '. bswap%M %S0',
+       outs      => [ "res" ],
+       emit      => 'bswap%M %S0',
        ins       => [ "val" ],
        units     => [ "GP" ],
        latency   => 1,
@@ -1482,7 +1428,7 @@ Bswap16 => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "eax ebx ecx edx" ],
                       out => [ "in_r1" ] },
-       emit      => '. xchg %SB0, %SH0',
+       emit      => 'xchg %<S0, %>S0',
        ins       => [ "val" ],
        units     => [ "GP" ],
        latency   => 1,
@@ -1497,7 +1443,7 @@ Breakpoint => {
        reg_req   => { in => [ "none" ], out => [ "none" ] },
        ins       => [ "mem" ],
        latency   => 0,
-       emit      => "int3",
+       emit      => "int3",
        units     => [ "GP" ],
        mode      => mode_M,
 },
@@ -1510,7 +1456,7 @@ UD2 => {
        reg_req   => { in => [ "none" ], out => [ "none" ] },
        ins       => [ "mem" ],
        latency   => 0,
-       emit      => ". .value  0x0b0f",
+       emit      => "ud2",
        units     => [ "GP" ],
        mode      => mode_M,
 },
@@ -1523,7 +1469,7 @@ Outport => {
        state     => "pinned",
        reg_req   => { in => [ "edx", "eax", "none" ], out => [ "none" ] },
        ins       => [ "port", "value", "mem" ],
-       emit      => '. out%M %SS0, %SI1',
+       emit      => 'out%M %^S0, %#S1',
        units     => [ "GP" ],
        latency   => 1,
        mode      => mode_M,
@@ -1539,7 +1485,7 @@ Inport => {
        reg_req   => { in => [ "edx", "none" ], out => [ "eax", "none" ] },
        ins       => [ "port", "mem" ],
        outs      => [ "res", "M" ],
-       emit      => '. in%M %DS0, %SS0',
+       emit      => 'in%M %#D0, %^S0',
        units     => [ "GP" ],
        latency   => 1,
        mode      => mode_T,
@@ -1556,7 +1502,7 @@ Prefetch0 => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetcht0 %AM",
+       emit      => "prefetcht0 %AM",
        units     => [ "GP" ],
 },
 
@@ -1567,7 +1513,7 @@ Prefetch1 => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetcht1 %AM",
+       emit      => "prefetcht1 %AM",
        units     => [ "GP" ],
 },
 
@@ -1578,7 +1524,7 @@ Prefetch2 => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetcht2 %AM",
+       emit      => "prefetcht2 %AM",
        units     => [ "GP" ],
 },
 
@@ -1589,7 +1535,7 @@ PrefetchNTA => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetchnta %AM",
+       emit      => "prefetchnta %AM",
        units     => [ "GP" ],
 },
 
@@ -1603,7 +1549,7 @@ Prefetch => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetch %AM",
+       emit      => "prefetch %AM",
        units     => [ "GP" ],
 },
 
@@ -1614,7 +1560,7 @@ PrefetchW => {
        ins       => [ "base", "index", "mem" ],
        outs      => [ "M" ],
        latency   => 0,
-       emit      => "prefetchw %AM",
+       emit      => "prefetchw %AM",
        units     => [ "GP" ],
 },
 
@@ -1622,7 +1568,7 @@ PrefetchW => {
 xZero => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "xmm" ] },
-       emit      => '. xorp%XSD %D0, %D0',
+       emit      => 'xorp%FX %D0, %D0',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1640,7 +1586,7 @@ xUnknown => {
 xPzero => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "xmm" ] },
-       emit      => 'pxor %D0, %D0',
+       emit      => 'pxor %D0, %D0',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1650,7 +1596,7 @@ xPzero => {
 xAllOnes => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { out => [ "xmm" ] },
-       emit      => 'pcmpeqb %D0, %D0',
+       emit      => 'pcmpeqb %D0, %D0',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1660,7 +1606,7 @@ xAllOnes => {
 xPslld => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "xmm", "xmm" ], out => [ "in_r1 !in_r2" ] },
-       emit      => '. pslld %SI1, %D0',
+       emit      => 'pslld %#S1, %D0',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1670,7 +1616,7 @@ xPslld => {
 xPsllq => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "xmm", "xmm" ], out => [ "in_r1 !in_r2" ] },
-       emit      => '. psllq %SI1, %D0',
+       emit      => 'psllq %#S1, %D0',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1680,7 +1626,7 @@ xPsllq => {
 xPsrld => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "xmm", "xmm" ], out => [ "in_r1 !in_r2" ] },
-       emit      => '. psrld %SI1, %D0',
+       emit      => 'psrld %#S1, %D0',
        latency   => 1,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1690,7 +1636,7 @@ xPsrld => {
 xMovd  => {
        irn_flags => [ "rematerializable" ],
        reg_req   => { in => [ "gp" ], out => [ "xmm" ] },
-       emit      => 'movd %S0, %D0',
+       emit      => 'movd %S0, %D0',
        latency   => 1,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1704,7 +1650,7 @@ xAdd => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. add%XXM %binop',
+       emit      => 'adds%FX %B',
        latency   => 4,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1718,7 +1664,7 @@ xMul => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. mul%XXM %binop',
+       emit      => 'muls%FX %B',
        latency   => 4,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1732,7 +1678,7 @@ xMax => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. max%XXM %binop',
+       emit      => 'maxs%FX %B',
        latency   => 2,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1746,7 +1692,7 @@ xMin => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. min%XXM %binop',
+       emit      => 'mins%FX %B',
        latency   => 2,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1760,7 +1706,7 @@ xAnd => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. andp%XSD %binop',
+       emit      => 'andp%FX %B',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1774,7 +1720,7 @@ xOr => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. orp%XSD %binop',
+       emit      => 'orp%FX %B',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1788,7 +1734,7 @@ xXor => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. xorp%XSD %binop',
+       emit      => 'xorp%FX %B',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1802,7 +1748,7 @@ xAndNot => {
        ins       => [ "base", "index", "mem", "left", "right" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. andnp%XSD %binop',
+       emit      => 'andnp%FX %B',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1816,7 +1762,7 @@ xSub => {
        ins       => [ "base", "index", "mem", "minuend", "subtrahend" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. sub%XXM %binop',
+       emit      => 'subs%FX %B',
        latency   => 4,
        units     => [ "SSE" ],
        mode      => $mode_xmm
@@ -1830,7 +1776,7 @@ xDiv => {
        ins       => [ "base", "index", "mem", "dividend", "divisor" ],
        outs      => [ "res", "flags", "M" ],
        am        => "source,binary",
-       emit      => '. div%XXM %binop',
+       emit      => 'divs%FX %B',
        latency   => 16,
        units     => [ "SSE" ],
 },
@@ -1845,7 +1791,7 @@ Ucomi => {
        am        => "source,binary",
        attr      => "bool ins_permuted",
        init_attr => "attr->data.ins_permuted = ins_permuted;",
-       emit      => ' .ucomi%XXM %binop',
+       emit      => 'ucomis%FX %B',
        latency   => 3,
        units     => [ "SSE" ],
        mode      => $mode_flags,
@@ -1859,7 +1805,7 @@ xLoad => {
                       out => [ "xmm", "none", "none", "none", "none" ] },
        ins       => [ "base", "index", "mem" ],
        outs      => [ "res", "unused", "M", "X_regular", "X_except" ],
-       emit      => '. mov%XXM %AM, %D0',
+       emit      => 'movs%FX %AM, %D0',
        attr      => "ir_mode *load_mode",
        init_attr => "attr->ls_mode = load_mode;",
        latency   => 0,
@@ -1873,7 +1819,7 @@ xStore => {
                      out => [ "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "M", "X_regular", "X_except" ],
-       emit     => '. mov%XXM %S3, %AM',
+       emit     => 'movs%FX %S3, %AM',
        latency  => 0,
        units    => [ "SSE" ],
 },
@@ -1885,7 +1831,7 @@ xStoreSimple => {
                      out => [ "none", "none", "none" ] },
        ins      => [ "base", "index", "mem", "val" ],
        outs     => [ "M", "X_regular", "X_except" ],
-       emit     => '. mov%XXM %S3, %AM',
+       emit     => 'movs%FX %S3, %AM',
        latency  => 0,
        units    => [ "SSE" ],
 },
@@ -1895,7 +1841,7 @@ CvtSI2SS => {
        reg_req  => { in => [ "gp", "gp", "none", "gp" ], out => [ "xmm" ] },
        ins      => [ "base", "index", "mem", "val" ],
        am       => "source,unary",
-       emit     => '. cvtsi2ss %unop3, %D0',
+       emit     => 'cvtsi2ss %AS3, %D0',
        latency  => 2,
        units    => [ "SSE" ],
        mode     => $mode_xmm
@@ -1906,7 +1852,7 @@ CvtSI2SD => {
        reg_req  => { in => [ "gp", "gp", "none", "gp" ], out => [ "xmm" ] },
        ins      => [ "base", "index", "mem", "val" ],
        am       => "source,unary",
-       emit     => '. cvtsi2sd %unop3, %D0',
+       emit     => 'cvtsi2sd %AS3, %D0',
        latency  => 2,
        units    => [ "SSE" ],
        mode     => $mode_xmm
@@ -1961,7 +1907,7 @@ Cwtl => {
        reg_req   => { in => [ "eax" ], out => [ "eax" ] },
        ins       => [ "val" ],
        outs      => [ "res" ],
-       emit      => 'cwtl',
+       emit      => 'cwtl',
        units     => [ "GP" ],
        latency   => 1,
        mode      => $mode_gp,
@@ -1974,6 +1920,7 @@ Conv_I2I => {
                       out => [ "gp", "none", "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "res", "flags", "M", "X_regular", "X_except" ],
+       emit      => "mov%#Ml %#AS3, %D0",
        am        => "source,unary",
        units     => [ "GP" ],
        latency   => 1,
@@ -1989,6 +1936,7 @@ Conv_I2I8Bit => {
                       out => [ "gp", "none", "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "res", "flags", "M", "X_regular", "X_except" ],
+       emit      => "mov%#Ml %#AS3, %D0",
        am        => "source,unary",
        units     => [ "GP" ],
        latency   => 1,
@@ -2030,13 +1978,14 @@ Conv_FP2FP => {
 # rematerialisation disabled for all float nodes for now, because the fpcw
 # handler runs before spilling and we might end up with wrong fpcw then
 
-vfadd => {
+fadd => {
 #      irn_flags => [ "rematerializable" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp", "vfp", "fpcw" ],
-                      out => [ "vfp", "none", "none" ] },
+       reg_req   => { in => [ "gp", "gp", "none", "fp", "fp", "fpcw" ],
+                      out => [ "fp", "none", "none" ] },
        ins       => [ "base", "index", "mem", "left", "right", "fpcw" ],
        outs      => [ "res", "dummy", "M" ],
+       emit      => 'fadd%FP%FM %AF',
        am        => "source,binary",
        latency   => 4,
        units     => [ "VFP" ],
@@ -2044,13 +1993,14 @@ vfadd => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfmul => {
+fmul => {
 #      irn_flags => [ "rematerializable" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp", "vfp", "fpcw" ],
-                      out => [ "vfp", "none", "none" ] },
+       reg_req   => { in => [ "gp", "gp", "none", "fp", "fp", "fpcw" ],
+                      out => [ "fp", "none", "none" ] },
        ins       => [ "base", "index", "mem", "left", "right", "fpcw" ],
        outs      => [ "res", "dummy", "M" ],
+       emit      => 'fmul%FP%FM %AF',
        am        => "source,binary",
        latency   => 4,
        units     => [ "VFP" ],
@@ -2058,13 +2008,14 @@ vfmul => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfsub => {
+fsub => {
 #      irn_flags => [ "rematerializable" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp", "vfp", "fpcw" ],
-                      out => [ "vfp", "none", "none" ] },
+       reg_req   => { in => [ "gp", "gp", "none", "fp", "fp", "fpcw" ],
+                      out => [ "fp", "none", "none" ] },
        ins       => [ "base", "index", "mem", "minuend", "subtrahend", "fpcw" ],
        outs      => [ "res", "dummy", "M" ],
+       emit      => 'fsub%FR%FP%FM %AF',
        am        => "source,binary",
        latency   => 4,
        units     => [ "VFP" ],
@@ -2072,40 +2023,44 @@ vfsub => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfdiv => {
+fdiv => {
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp", "vfp", "fpcw" ],
-                      out => [ "vfp", "none", "none" ] },
+       reg_req   => { in => [ "gp", "gp", "none", "fp", "fp", "fpcw" ],
+                      out => [ "fp", "none", "none" ] },
        ins       => [ "base", "index", "mem", "dividend", "divisor", "fpcw" ],
        outs      => [ "res", "dummy", "M" ],
+       emit      => 'fdiv%FR%FP%FM %AF',
        am        => "source,binary",
        latency   => 20,
        units     => [ "VFP" ],
        attr_type => "ia32_x87_attr_t",
 },
 
-vfprem => {
-       reg_req   => { in => [ "vfp", "vfp", "fpcw" ], out => [ "vfp" ] },
+fprem => {
+       reg_req   => { in => [ "fp", "fp", "fpcw" ], out => [ "fp" ] },
        ins       => [ "left", "right", "fpcw" ],
+       emit      => 'fprem1',
        latency   => 20,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfabs => {
+fabs => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "vfp"], out => [ "vfp" ] },
+       reg_req   => { in => [ "fp"], out => [ "fp" ] },
        ins       => [ "value" ],
+       emit      => 'fabs',
        latency   => 2,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfchs => {
+fchs => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "vfp"], out => [ "vfp" ] },
+       reg_req   => { in => [ "fp"], out => [ "fp" ] },
+       emit      => 'fchs',
        ins       => [ "value" ],
        latency   => 2,
        units     => [ "VFP" ],
@@ -2113,14 +2068,15 @@ vfchs => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfld => {
+fld => {
        irn_flags => [ "rematerializable" ],
        op_flags  => [ "uses_memory", "fragile" ],
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ],
-                      out => [ "vfp", "none", "none", "none", "none" ] },
+                      out => [ "fp", "none", "none", "none", "none" ] },
        ins       => [ "base", "index", "mem" ],
        outs      => [ "res", "unused", "M", "X_regular", "X_except" ],
+       emit      => 'fld%FM %AM',
        attr      => "ir_mode *load_mode",
        init_attr => "attr->attr.ls_mode = load_mode;",
        latency   => 2,
@@ -2128,14 +2084,15 @@ vfld => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfst => {
+fst => {
        irn_flags => [ "rematerializable" ],
        op_flags  => [ "uses_memory", "fragile" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp" ],
+       reg_req   => { in => [ "gp", "gp", "none", "fp" ],
                       out => [ "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "M", "X_regular", "X_except" ],
+       emit      => 'fst%FP%FM %AM',
        attr      => "ir_mode *store_mode",
        init_attr => "attr->attr.ls_mode = store_mode;",
        latency   => 2,
@@ -2143,85 +2100,93 @@ vfst => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfild => {
+fild => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ],
-                      out => [ "vfp", "none", "none" ] },
+                      out => [ "fp", "none", "none" ] },
        outs      => [ "res", "unused", "M" ],
        ins       => [ "base", "index", "mem" ],
+       emit      => 'fild%FM %AM',
        latency   => 4,
        units     => [ "VFP" ],
        attr_type => "ia32_x87_attr_t",
 },
 
-vfist => {
+fist => {
        op_flags  => [ "uses_memory", "fragile" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp", "fpcw" ],
+       reg_req   => { in => [ "gp", "gp", "none", "fp", "fpcw" ],
                       out => [ "none", "none", "none", "none" ] },
        ins       => [ "base", "index", "mem", "val", "fpcw" ],
        outs      => [ "dummy", "M", "X_regular", "X_except" ],
+       emit      => 'fist%FP%FM %AM',
        latency   => 4,
        units     => [ "VFP" ],
        attr_type => "ia32_x87_attr_t",
 },
 
 # SSE3 fisttp instruction
-vfisttp => {
+fisttp => {
        op_flags  => [ "uses_memory", "fragile" ],
        state     => "exc_pinned",
-       reg_req   => { in => [ "gp", "gp", "none", "vfp" ],
+       reg_req   => { in => [ "gp", "gp", "none", "fp" ],
                       out => [ "in_r4", "none", "none", "none" ]},
        ins       => [ "base", "index", "mem", "val" ],
        outs      => [ "res", "M", "X_regular", "X_except" ],
+       emit      => 'fisttp%FM %AM',
        latency   => 4,
        units     => [ "VFP" ],
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldz => {
+fldz => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
        outs      => [ "res" ],
+       emit      => 'fldz',
        latency   => 4,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfld1 => {
+fld1 => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
        outs      => [ "res" ],
+       emit      => 'fld1',
        latency   => 4,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldpi => {
+fldpi => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
        outs      => [ "res" ],
+       emit      => 'fldpi',
        latency   => 4,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldln2 => {
+fldln2 => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
        outs      => [ "res" ],
+       emit      => 'fldln2',
        latency   => 4,
        units     => [ "VFP" ],
        mode      => $mode_fp87,
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldlg2 => {
+fldlg2 => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
+       emit      => 'fldlg2',
        outs      => [ "res" ],
        latency   => 4,
        units     => [ "VFP" ],
@@ -2229,9 +2194,10 @@ vfldlg2 => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldl2t => {
+fldl2t => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
+       emit      => 'fldll2t',
        outs      => [ "res" ],
        latency   => 4,
        units     => [ "VFP" ],
@@ -2239,9 +2205,10 @@ vfldl2t => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vfldl2e => {
+fldl2e => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
+       reg_req   => { out => [ "fp" ] },
+       emit      => 'fldl2e',
        outs      => [ "res" ],
        latency   => 4,
        units     => [ "VFP" ],
@@ -2249,13 +2216,32 @@ vfldl2e => {
        attr_type => "ia32_x87_attr_t",
 },
 
-vFucomFnstsw => {
+FucomFnstsw => {
+# we can't allow to rematerialize this node so we don't
+#  accidently produce Phi(Fucom, Fucom(ins_permuted))
+#      irn_flags => [ "rematerializable" ],
+       reg_req   => { in => [ "fp", "fp" ], out => [ "eax" ] },
+       ins       => [ "left", "right" ],
+       outs      => [ "flags" ],
+       emit      => "fucom%FP %F0\n".
+                    "fnstsw %%ax",
+       attr      => "bool ins_permuted",
+       init_attr => "attr->attr.data.ins_permuted = ins_permuted;",
+       latency   => 3,
+       units     => [ "VFP" ],
+       attr_type => "ia32_x87_attr_t",
+       mode      => $mode_gp
+},
+
+FucomppFnstsw => {
 # we can't allow to rematerialize this node so we don't
 #  accidently produce Phi(Fucom, Fucom(ins_permuted))
 #      irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "vfp", "vfp" ], out => [ "eax" ] },
+       reg_req   => { in => [ "fp", "fp" ], out => [ "eax" ] },
        ins       => [ "left", "right" ],
        outs      => [ "flags" ],
+       emit      => "fucompp\n".
+                    "fnstsw %%ax",
        attr      => "bool ins_permuted",
        init_attr => "attr->attr.data.ins_permuted = ins_permuted;",
        latency   => 3,
@@ -2264,11 +2250,12 @@ vFucomFnstsw => {
        mode      => $mode_gp
 },
 
-vFucomi => {
+Fucomi => {
        irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "vfp", "vfp" ], out => [ "eflags" ] },
+       reg_req   => { in => [ "fp", "fp" ], out => [ "eflags" ] },
        ins       => [ "left", "right" ],
        outs      => [ "flags" ],
+       emit      => 'fucom%FPi %F0',
        attr      => "bool ins_permuted",
        init_attr => "attr->attr.data.ins_permuted = ins_permuted;",
        latency   => 3,
@@ -2277,11 +2264,13 @@ vFucomi => {
        mode      => $mode_gp
 },
 
-vFtstFnstsw => {
+FtstFnstsw => {
 #      irn_flags => [ "rematerializable" ],
-       reg_req   => { in => [ "vfp" ], out => [ "eax" ] },
+       reg_req   => { in => [ "fp" ], out => [ "eax" ] },
        ins       => [ "left" ],
        outs      => [ "flags" ],
+       emit      => "ftst\n".
+                    "fnstsw %%ax",
        attr      => "bool ins_permuted",
        init_attr => "attr->attr.data.ins_permuted = ins_permuted;",
        latency   => 3,
@@ -2295,278 +2284,12 @@ Sahf => {
        reg_req   => { in => [ "eax" ], out => [ "eflags" ] },
        ins       => [ "val" ],
        outs      => [ "flags" ],
-       emit      => 'sahf',
+       emit      => 'sahf',
        latency   => 1,
        units     => [ "GP" ],
        mode      => $mode_flags,
 },
 
-fadd => {
-       state     => "exc_pinned",
-       emit      => '. fadd%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-faddp => {
-       state     => "exc_pinned",
-       emit      => '. faddp%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fmul => {
-       state     => "exc_pinned",
-       emit      => '. fmul%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fmulp => {
-       state     => "exc_pinned",
-       emit      => '. fmulp%XM %x87_binop',,
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fsub => {
-       state     => "exc_pinned",
-       emit      => '. fsub%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-# Note: gas is strangely buggy: fdivrp and fdivp as well as fsubrp and fsubp
-#       are swapped, we work this around in the emitter...
-
-fsubp => {
-       state     => "exc_pinned",
-# see note about gas bugs
-       emit      => '. fsubrp%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fsubr => {
-       state     => "exc_pinned",
-       irn_flags => [ "rematerializable" ],
-       emit      => '. fsubr%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fsubrp => {
-       state     => "exc_pinned",
-       irn_flags => [ "rematerializable" ],
-# see note about gas bugs before fsubp
-       emit      => '. fsubp%XM %x87_binop',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fprem => {
-       emit      => '. fprem1',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-# this node is just here, to keep the simulator running
-# we can omit this when a fprem simulation function exists
-fpremp => {
-       emit      => '. fprem1\n'.
-                    '. fstp %X0',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fdiv => {
-       state     => "exc_pinned",
-       emit      => '. fdiv%XM %x87_binop',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fdivp => {
-       state     => "exc_pinned",
-# see note about gas bugs before fsubp
-       emit      => '. fdivrp%XM %x87_binop',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fdivr => {
-       state     => "exc_pinned",
-       emit      => '. fdivr%XM %x87_binop',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fdivrp => {
-       state     => "exc_pinned",
-# see note about gas bugs before fsubp
-       emit      => '. fdivp%XM %x87_binop',
-       latency   => 20,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fabs => {
-       emit      => '. fabs',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fchs => {
-       op_flags  => [ "keep" ],
-       irn_flags => [ "rematerializable" ],
-       emit      => '. fchs',
-       latency   => 4,
-       attr_type => "ia32_x87_attr_t",
-       constructors => {},
-},
-
-fld => {
-       irn_flags => [ "rematerializable" ],
-       state     => "exc_pinned",
-       emit      => '. fld%XM %AM',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fst => {
-       irn_flags => [ "rematerializable" ],
-       state     => "exc_pinned",
-       emit      => '. fst%XM %AM',
-       mode      => "mode_M",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fstp => {
-       irn_flags => [ "rematerializable" ],
-       state     => "exc_pinned",
-       emit      => '. fstp%XM %AM',
-       mode      => "mode_M",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fild => {
-       state     => "exc_pinned",
-       emit      => '. fild%XM %AM',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fist => {
-       state     => "exc_pinned",
-       emit      => '. fist%XM %AM',
-       mode      => "mode_M",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fistp => {
-       state     => "exc_pinned",
-       emit      => '. fistp%XM %AM',
-       mode      => "mode_M",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-# SSE3 fisttp instruction
-fisttp => {
-       state     => "exc_pinned",
-       emit      => '. fisttp%XM %AM',
-       mode      => "mode_M",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-       constructors => {},
-},
-
-fldz => {
-       op_flags  =>  [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldz',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fld1 => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fld1',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fldpi => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldpi',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fldln2 => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldln2',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fldlg2 => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldlg2',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fldl2t => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldll2t',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-fldl2e => {
-       op_flags  => [ "constlike", "keep" ],
-       irn_flags => [ "rematerializable" ],
-       reg_req   => { out => [ "vfp" ] },
-       emit      => '. fldl2e',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
 # fxch, fpush, fpop
 # Note that it is NEVER allowed to do CSE on these nodes
 # Moreover, note the virtual register requierements!
@@ -2575,7 +2298,7 @@ fxch => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => '. fxch %X0',
+       emit      => 'fxch %F0',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 1,
@@ -2585,16 +2308,16 @@ fpush => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => '. fld %X0',
+       emit      => 'fld %F0',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 1,
 },
 
 fpushCopy => {
-       reg_req   => { in => [ "vfp"], out => [ "vfp" ] },
+       reg_req   => { in => [ "fp"], out => [ "fp" ] },
        cmp_attr  => "return 1;",
-       emit      => '. fld %X0',
+       emit      => 'fld %F0',
        attr_type => "ia32_x87_attr_t",
        latency   => 1,
 },
@@ -2603,7 +2326,7 @@ fpop => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => '. fstp %X0',
+       emit      => 'fstp %F0',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 1,
@@ -2613,7 +2336,7 @@ ffreep => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => '. ffreep %X0',
+       emit      => 'ffreep %F0',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 1,
@@ -2623,7 +2346,7 @@ emms => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => 'emms',
+       emit      => 'emms',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 3,
@@ -2633,58 +2356,12 @@ femms => {
        op_flags  => [ "keep" ],
        reg_req   => { out => [ "none" ] },
        cmp_attr  => "return 1;",
-       emit      => 'femms',
+       emit      => 'femms',
        attr_type => "ia32_x87_attr_t",
        mode      => "mode_ANY",
        latency   => 3,
 },
 
-FucomFnstsw => {
-       reg_req   => { },
-       emit      => ". fucom %X1\n".
-                    ". fnstsw %%ax",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-FucompFnstsw => {
-       reg_req   => { },
-       emit      => ". fucomp %X1\n".
-                    ". fnstsw %%ax",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-FucomppFnstsw => {
-       reg_req   => { },
-       emit      => ". fucompp\n".
-                    ". fnstsw %%ax",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
-Fucomi => {
-       reg_req   => { },
-       emit      => '. fucomi %X1',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 1,
-},
-
-Fucompi => {
-       reg_req   => { },
-       emit      => '. fucompi %X1',
-       attr_type => "ia32_x87_attr_t",
-       latency   => 1,
-},
-
-FtstFnstsw => {
-       reg_req   => { },
-       emit      => ". ftst\n".
-                    ". fnstsw %%ax",
-       attr_type => "ia32_x87_attr_t",
-       latency   => 2,
-},
-
 # Spilling and reloading of SSE registers, hardcoded, not generated #
 
 xxLoad => {
@@ -2692,7 +2369,7 @@ xxLoad => {
        state     => "exc_pinned",
        reg_req   => { in => [ "gp", "gp", "none" ],
                       out => [ "xmm", "none", "none", "none" ] },
-       emit      => 'movdqu %D0, %AM',
+       emit      => 'movdqu %D0, %AM',
        ins       => [ "base", "index", "mem" ],
        outs      => [ "res", "M", "X_regular", "X_except" ],
        units     => [ "SSE" ],
@@ -2706,7 +2383,7 @@ xxStore => {
                      out => [ "none", "none", "none" ] },
        ins      => [ "base", "index", "mem", "val" ],
        outs     => [ "M", "X_regular", "X_except" ],
-       emit     => '. movdqu %binop',
+       emit     => 'movdqu %B',
        units    => [ "SSE" ],
        latency  => 1,
 },