-#------------------------------------------------------------------------#
-# ___ _____ __ _ _ _ #
-# __ _( _ )___ | / _| | ___ __ _| |_ _ __ ___ __| | ___ ___ #
-# \ \/ / _ \ / / | |_| |/ _ \ / _` | __| | '_ \ / _ \ / _` |/ _ \/ __| #
-# > < (_) |/ / | _| | (_) | (_| | |_ | | | | (_) | (_| | __/\__ \ #
-# /_/\_\___//_/ |_| |_|\___/ \__,_|\__| |_| |_|\___/ \__,_|\___||___/ #
-#------------------------------------------------------------------------#
-
-# Note: gas is strangely buggy: fdivrp and fdivp as well as fsubrp and fsubp
-# are swapped, we work this around in the emitter...
-
-fadd => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fadd%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-faddp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. faddp%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fmul => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fmul%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fmulp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fmulp%XM %x87_binop',,
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fsub => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fsub%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fsubp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
-# see note about gas bugs
- emit => '. fsubrp%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fsubr => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- irn_flags => "R",
- reg_req => { },
- emit => '. fsubr%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fsubrp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- irn_flags => "R",
- reg_req => { },
-# see note about gas bugs
- emit => '. fsubp%XM %x87_binop',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fprem => {
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fprem1',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-# this node is just here, to keep the simulator running
-# we can omit this when a fprem simulation function exists
-fpremp => {
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fprem1\n'.
- '. fstp %X0',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-fdiv => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fdiv%XM %x87_binop',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-fdivp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
-# see note about gas bugs
- emit => '. fdivrp%XM %x87_binop',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-fdivr => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fdivr%XM %x87_binop',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-fdivrp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
-# see note about gas bugs
- emit => '. fdivp%XM %x87_binop',
- latency => 20,
- attr_type => "ia32_x87_attr_t",
-},
-
-fabs => {
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fabs',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-fchs => {
- op_flags => "R|K",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fchs',
- latency => 4,
- attr_type => "ia32_x87_attr_t",
-},
-
-# x87 Load and Store
-
-fld => {
- rd_constructor => "NONE",
- op_flags => "R|L|F",
- state => "exc_pinned",
- reg_req => { },
- emit => '. fld%XM %AM',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fst => {
- rd_constructor => "NONE",
- op_flags => "R|L|F",
- state => "exc_pinned",
- reg_req => { },
- emit => '. fst%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fstp => {
- rd_constructor => "NONE",
- op_flags => "R|L|F",
- state => "exc_pinned",
- reg_req => { },
- emit => '. fstp%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-# Conversions
-
-fild => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fild%XM %AM',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fist => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fist%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fistp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fistp%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-# SSE3 firsttp instruction
-fisttp => {
- state => "exc_pinned",
- rd_constructor => "NONE",
- reg_req => { },
- emit => '. fisttp%XM %AM',
- mode => "mode_M",
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-# constants
-
-fldz => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldz',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fld1 => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fld1',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fldpi => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldpi',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fldln2 => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldln2',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fldlg2 => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldlg2',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fldl2t => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldll2t',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-
-fldl2e => {
- op_flags => "R|c|K",
- irn_flags => "R",
- reg_req => { out => [ "vfp" ] },
- emit => '. fldl2e',
- attr_type => "ia32_x87_attr_t",
- latency => 2,
-},
-