-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" ],
- op_flags => [ "labeled" ],
- state => "exc_pinned",
- emit => '. fld%XM %AM',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
- constructors => {},
-},
-
-fst => {
- irn_flags => [ "rematerializable" ],
- op_flags => [ "labeled" ],
- state => "exc_pinned",
- emit => '. fst%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
- constructors => {},
-},
-
-fstp => {
- irn_flags => [ "rematerializable" ],
- op_flags => [ "labeled" ],
- 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,
-},
-