Commit e1552352 authored by Christoph Mallon's avatar Christoph Mallon
Browse files

bescripts: Merge the attributes 'custominit' and 'init_attr' into the new attribute 'init'.

parent 40cbede7
......@@ -20,7 +20,7 @@ $mode_fp = "mode_F"; # mode used by floatingpoint registers
# mode => "mode_Iu", # optional, predefines the mode
# emit => "emit code with templates", # optional for virtual nodes
# attr => "additional attribute arguments for constructor", # optional
# init_attr => "emit attribute initialization template", # optional
# init => "emit attribute initialization template", # optional
# hash_func => "name of the hash function for this operation", # optional, get the default hash function else
# attr_type => "name of the attribute struct", # optional
# },
......@@ -155,10 +155,10 @@ Not => {
},
Const => {
template => $constop,
attr => "ir_entity *entity, ir_tarval *value",
custominit => "set_TEMPLATE_value(res, entity, value);",
emit => '%D0 = const %I',
template => $constop,
attr => "ir_entity *entity, ir_tarval *value",
init => "set_TEMPLATE_value(res, entity, value);",
emit => '%D0 = const %I',
},
# Control Flow
......
......@@ -78,26 +78,26 @@ my $unop_shifter_operand = {
out_reqs => [ "gp" ],
constructors => {
imm => {
attr => "unsigned char immediate_value, unsigned char immediate_rot",
custominit => "init_arm_shifter_operand(res, 0, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [],
attr => "unsigned char immediate_value, unsigned char immediate_rot",
init => "init_arm_shifter_operand(res, 0, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [],
},
reg => {
custominit => "init_arm_shifter_operand(res, 0, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp" ],
ins => [ "Rm" ],
init => "init_arm_shifter_operand(res, 0, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp" ],
ins => [ "Rm" ],
},
reg_shift_reg => {
attr => "arm_shift_modifier_t shift_modifier",
custominit => "init_arm_shifter_operand(res, 0, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "Rm", "Rs" ],
attr => "arm_shift_modifier_t shift_modifier",
init => "init_arm_shifter_operand(res, 0, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "Rm", "Rs" ],
},
reg_shift_imm => {
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
custominit => "init_arm_shifter_operand(res, 0, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp" ],
ins => [ "Rm" ],
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
init => "init_arm_shifter_operand(res, 0, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp" ],
ins => [ "Rm" ],
},
},
},
......@@ -109,27 +109,27 @@ my $binop_shifter_operand = {
out_reqs => [ "gp" ],
constructors => {
imm => {
attr => "unsigned char immediate_value, unsigned char immediate_rot",
custominit => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp" ],
ins => [ "left" ],
attr => "unsigned char immediate_value, unsigned char immediate_rot",
init => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp" ],
ins => [ "left" ],
},
reg => {
custominit => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
init => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
reg_shift_reg => {
attr => "arm_shift_modifier_t shift_modifier",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
attr => "arm_shift_modifier_t shift_modifier",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
},
reg_shift_imm => {
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
},
};
......@@ -141,27 +141,27 @@ my $binop_shifter_operand_setflags = {
outs => [ "res", "flags" ],
constructors => {
imm => {
attr => "unsigned char immediate_value, unsigned char immediate_rot",
custominit => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp" ],
ins => [ "left" ],
attr => "unsigned char immediate_value, unsigned char immediate_rot",
init => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp" ],
ins => [ "left" ],
},
reg => {
custominit => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
init => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
reg_shift_reg => {
attr => "arm_shift_modifier_t shift_modifier",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
attr => "arm_shift_modifier_t shift_modifier",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
},
reg_shift_imm => {
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
},
};
......@@ -173,27 +173,27 @@ my $binop_shifter_operand_flags = {
out_reqs => [ "gp" ],
constructors => {
imm => {
attr => "unsigned char immediate_value, unsigned char immediate_rot",
custominit => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp", "flags" ],
ins => [ "left", "flags" ],
attr => "unsigned char immediate_value, unsigned char immediate_rot",
init => "init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);",
in_reqs => [ "gp", "flags" ],
ins => [ "left", "flags" ],
},
reg => {
custominit => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp", "flags" ],
ins => [ "left", "right", "flags" ],
init => "init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);",
in_reqs => [ "gp", "gp", "flags" ],
ins => [ "left", "right", "flags" ],
},
reg_shift_reg => {
attr => "arm_shift_modifier_t shift_modifier",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp", "flags" ],
ins => [ "left", "right", "shift", "flags" ],
attr => "arm_shift_modifier_t shift_modifier",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);",
in_reqs => [ "gp", "gp", "gp", "flags" ],
ins => [ "left", "right", "shift", "flags" ],
},
reg_shift_imm => {
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
custominit => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp", "flags" ],
ins => [ "left", "right", "flags" ],
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate",
init => "init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);",
in_reqs => [ "gp", "gp", "flags" ],
ins => [ "left", "right", "flags" ],
},
},
};
......@@ -206,36 +206,36 @@ my $cmp_shifter_operand = {
out_reqs => [ "flags" ],
constructors => {
imm => {
attr => "unsigned char immediate_value, unsigned char immediate_rot, bool ins_permuted, bool is_unsigned",
custominit =>
attr => "unsigned char immediate_value, unsigned char immediate_rot, bool ins_permuted, bool is_unsigned",
init =>
"init_arm_shifter_operand(res, 1, immediate_value, ARM_SHF_IMM, immediate_rot);\n".
"\tinit_arm_cmp_attr(res, ins_permuted, is_unsigned);",
in_reqs => [ "gp" ],
ins => [ "left" ],
in_reqs => [ "gp" ],
ins => [ "left" ],
},
reg => {
attr => "bool ins_permuted, bool is_unsigned",
custominit =>
attr => "bool ins_permuted, bool is_unsigned",
init =>
"init_arm_shifter_operand(res, 1, 0, ARM_SHF_REG, 0);\n".
"\tinit_arm_cmp_attr(res, ins_permuted, is_unsigned);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
reg_shift_reg => {
attr => "arm_shift_modifier_t shift_modifier, bool ins_permuted, bool is_unsigned",
custominit =>
attr => "arm_shift_modifier_t shift_modifier, bool ins_permuted, bool is_unsigned",
init =>
"init_arm_shifter_operand(res, 1, 0, shift_modifier, 0);\n".
"\tinit_arm_cmp_attr(res, ins_permuted, is_unsigned);",
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
in_reqs => [ "gp", "gp", "gp" ],
ins => [ "left", "right", "shift" ],
},
reg_shift_imm => {
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate, bool ins_permuted, bool is_unsigned",
custominit =>
attr => "arm_shift_modifier_t shift_modifier, unsigned shift_immediate, bool ins_permuted, bool is_unsigned",
init =>
"init_arm_shifter_operand(res, 1, 0, shift_modifier, shift_immediate);\n".
"\tinit_arm_cmp_attr(res, ins_permuted, is_unsigned);",
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
in_reqs => [ "gp", "gp" ],
ins => [ "left", "right" ],
},
},
};
......@@ -332,13 +332,13 @@ Or => {
OrPl => {
#irn_flags => [ "rematerializable" ],
emit => 'orrpl %D0, %S2, %O',
mode => $mode_gp,
attr_type => "arm_shifter_operand_t",
in_reqs => [ "gp", "flags", "gp", "gp" ],
out_reqs => [ "in_r3" ],
ins => [ "falseval", "flags", "left", "right" ],
custominit => "init_arm_shifter_operand(res, 3, 0, ARM_SHF_REG, 0);",
emit => 'orrpl %D0, %S2, %O',
mode => $mode_gp,
attr_type => "arm_shifter_operand_t",
in_reqs => [ "gp", "flags", "gp", "gp" ],
out_reqs => [ "in_r3" ],
ins => [ "falseval", "flags", "left", "right" ],
init => "init_arm_shifter_operand(res, 3, 0, ARM_SHF_REG, 0);",
},
Eor => {
......@@ -413,15 +413,15 @@ Clz => {
# mov lr, pc\n mov pc, XXX -- This combination is used for calls to function
# pointers
LinkMovPC => {
state => "exc_pinned",
irn_flags => [ "modify_flags" ],
in_reqs => "...",
out_reqs => "...",
attr_type => "arm_shifter_operand_t",
attr => "unsigned shiftop_input, arm_shift_modifier_t shift_modifier, unsigned char immediate_value, unsigned char immediate_rot",
custominit => "init_arm_shifter_operand(res, shiftop_input, immediate_value, shift_modifier, immediate_rot);\n",
emit => "mov lr, pc\n".
"mov pc, %O",
state => "exc_pinned",
irn_flags => [ "modify_flags" ],
in_reqs => "...",
out_reqs => "...",
attr_type => "arm_shifter_operand_t",
attr => "unsigned shiftop_input, arm_shift_modifier_t shift_modifier, unsigned char immediate_value, unsigned char immediate_rot",
init => "init_arm_shifter_operand(res, shiftop_input, immediate_value, shift_modifier, immediate_rot);\n",
emit => "mov lr, pc\n".
"mov pc, %O",
},
# mov lr, pc\n ldr pc, XXX -- This combination is used for calls to function
......@@ -492,7 +492,7 @@ B => {
ins => [ "flags" ],
attr => "ir_relation relation",
attr_type => "arm_CondJmp_attr_t",
init_attr => "\tset_arm_CondJmp_relation(res, relation);",
init => "\tset_arm_CondJmp_relation(res, relation);",
},
Jmp => {
......@@ -508,7 +508,7 @@ SwitchJmp => {
state => "pinned",
mode => "mode_T",
attr => "const ir_switch_table *table",
init_attr => "init_arm_SwitchJmp_attributes(res, table);",
init => "init_arm_SwitchJmp_attributes(res, table);",
in_reqs => [ "gp" ],
out_reqs => "...",
attr_type => "arm_SwitchJmp_attr_t",
......@@ -590,7 +590,7 @@ Cmfe => {
mode => $mode_flags,
attr_type => "arm_cmp_attr_t",
attr => "bool ins_permuted",
init_attr => "init_arm_cmp_attr(res, ins_permuted, false);",
init => "init_arm_cmp_attr(res, ins_permuted, false);",
in_reqs => [ "fpa", "fpa" ],
out_reqs => [ "flags" ],
emit => 'cmfe %S0, %S1',
......@@ -626,7 +626,7 @@ fConst => {
op_flags => [ "constlike" ],
irn_flags => [ "rematerializable" ],
attr => "ir_tarval *tv",
init_attr => "attr->tv = tv;",
init => "attr->tv = tv;",
mode => $mode_fp,
out_reqs => [ "fpa" ],
attr_type => "arm_fConst_attr_t",
......
......@@ -146,7 +146,7 @@ my $binop_flags = {
outs => [ "eflags", "unused", "M" ],
am => "source,binary",
attr => "bool ins_permuted",
init_attr => "attr->ins_permuted = ins_permuted;",
init => "attr->ins_permuted = ins_permuted;",
mode => $mode_flags,
};
......@@ -292,7 +292,7 @@ my $funop = {
in_reqs => [ "fp" ],
out_reqs => [ "fp" ],
ins => [ "value" ],
init_attr => "attr->ls_mode = ia32_mode_E;",
init => "attr->ls_mode = ia32_mode_E;",
mode => $mode_fp87,
};
......@@ -301,7 +301,7 @@ my $fconstop = {
irn_flags => [ "rematerializable" ],
out_reqs => [ "fp" ],
outs => [ "res" ],
init_attr => "attr->ls_mode = ia32_mode_E;",
init => "attr->ls_mode = ia32_mode_E;",
fixed => $x87sim,
mode => $mode_fp87,
};
......@@ -778,11 +778,11 @@ Setcc => {
attr => "x86_condition_code_t condition_code",
# The way we handle Setcc with float nodes (potentially) destroys the flags
# (when we emit the setX; setp; orb and the setX;setnp;andb sequences)
init_attr => "set_ia32_ls_mode(res, mode_Bu);\n"
. "\tif (condition_code & x86_cc_additional_float_cases) {\n"
. "\t\tarch_add_irn_flags(res, arch_irn_flag_modify_flags);\n"
. "\t\t/* attr->latency = 3; */\n"
. "\t}\n",
init => "set_ia32_ls_mode(res, mode_Bu);\n".
"\tif (condition_code & x86_cc_additional_float_cases) {\n".
"\t\tarch_add_irn_flags(res, arch_irn_flag_modify_flags);\n".
"\t\t/* attr->latency = 3; */\n".
"\t}\n",
latency => 1,
mode => $mode_gp,
},
......@@ -795,7 +795,7 @@ SetccMem => {
ins => [ "base", "index", "mem","eflags" ],
attr_type => "ia32_condcode_attr_t",
attr => "x86_condition_code_t condition_code",
init_attr => "set_ia32_ls_mode(res, mode_Bu);\n",
init => "set_ia32_ls_mode(res, mode_Bu);\n",
emit => "set%P3 %AM",
latency => 1,
mode => "mode_M",
......@@ -948,13 +948,13 @@ FnstCWNOP => {
Cltd => {
# we should not rematerialize this node. It has very strict constraints.
in_reqs => [ "eax" ],
out_reqs => [ "edx" ],
ins => [ "val" ],
emit => "cltd",
latency => 1,
mode => $mode_gp,
init_attr => "arch_set_additional_pressure(res, &ia32_reg_classes[CLASS_ia32_gp], 1);",
in_reqs => [ "eax" ],
out_reqs => [ "edx" ],
ins => [ "val" ],
emit => "cltd",
latency => 1,
mode => $mode_gp,
init => "arch_set_additional_pressure(res, &ia32_reg_classes[CLASS_ia32_gp], 1);",
},
# Load / Store
......@@ -1001,16 +1001,16 @@ Lea => {
},
Push => {
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "gp", "esp" ],
out_reqs => [ "mem", "esp:I" ],
ins => [ "base", "index", "mem", "val", "stack" ],
emit => "push%M %AS3",
outs => [ "M", "stack" ],
am => "source,unary",
latency => 2,
attr => "ir_mode *store_mode",
init_attr => "attr->ls_mode = store_mode;",
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "gp", "esp" ],
out_reqs => [ "mem", "esp:I" ],
ins => [ "base", "index", "mem", "val", "stack" ],
emit => "push%M %AS3",
outs => [ "M", "stack" ],
am => "source,unary",
latency => 2,
attr => "ir_mode *store_mode",
init => "attr->ls_mode = store_mode;",
},
PushEax => {
......@@ -1025,17 +1025,17 @@ PushEax => {
},
Pop => {
state => "exc_pinned",
state => "exc_pinned",
constructors => {
"" => { out_reqs => [ "gp", "none", "mem", "esp:I" ] },
ebp => { out_reqs => [ "ebp:I", "none", "mem", "esp:I" ] }
},
in_reqs => [ "mem", "esp" ],
ins => [ "mem", "stack" ],
outs => [ "res", "unused", "M", "stack" ],
emit => "pop%M %D0",
latency => 3, # Pop is more expensive than Push on Athlon
init_attr => "attr->ls_mode = ia32_mode_gp;",
in_reqs => [ "mem", "esp" ],
ins => [ "mem", "stack" ],
outs => [ "res", "unused", "M", "stack" ],
emit => "pop%M %D0",
latency => 3, # Pop is more expensive than Push on Athlon
init => "attr->ls_mode = ia32_mode_gp;",
},
CopyEbpEsp => {
......@@ -1424,23 +1424,23 @@ Ucomi => {
outs => [ "flags" ],
am => "source,binary",
attr => "bool ins_permuted",
init_attr => "attr->ins_permuted = ins_permuted;",
init => "attr->ins_permuted = ins_permuted;",
emit => "ucomis%FX %B",
latency => 3,
mode => $mode_flags,
},
xLoad => {
op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem" ],
out_reqs => [ "xmm", "none", "mem", "exec", "exec" ],
ins => [ "base", "index", "mem" ],
outs => [ "res", "unused", "M", "X_regular", "X_except" ],
emit => "movs%FX %AM, %D0",
attr => "ir_mode *load_mode",
init_attr => "attr->ls_mode = load_mode;",
latency => 0,
op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem" ],
out_reqs => [ "xmm", "none", "mem", "exec", "exec" ],
ins => [ "base", "index", "mem" ],
outs => [ "res", "unused", "M", "X_regular", "X_except" ],
emit => "movs%FX %AM, %D0",
attr => "ir_mode *load_mode",
init => "attr->ls_mode = load_mode;",
latency => 0,
},
xStore => {
......@@ -1513,57 +1513,57 @@ Cwtl => {
},
Conv_I2I => {
op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
constructors => {
"" => { in_reqs => [ "gp", "gp", "mem", "gp" ] },
"8bit" => { in_reqs => [ "gp", "gp", "mem", "eax ebx ecx edx" ] }
},
out_reqs => [ "gp", "none", "mem", "exec", "exec" ],
ins => [ "base", "index", "mem", "val" ],
outs => [ "res", "unused", "M", "X_regular", "X_except" ],
emit => "mov%#Ml %#AS3, %D0",
am => "source,unary",
latency => 1,
attr => "ir_mode *smaller_mode",
init_attr => "attr->ls_mode = smaller_mode;",
mode => $mode_gp,
out_reqs => [ "gp", "none", "mem", "exec", "exec" ],
ins => [ "base", "index", "mem", "val" ],
outs => [ "res", "unused", "M", "X_regular", "X_except" ],
emit => "mov%#Ml %#AS3, %D0",
am => "source,unary",
latency => 1,
attr => "ir_mode *smaller_mode",
init => "attr->ls_mode = smaller_mode;",
mode => $mode_gp,
},
Conv_I2FP => {
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "gp" ],
out_reqs => [ "xmm", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 10,
attr => "ir_mode *tgt_mode",
init_attr => "attr->ls_mode = tgt_mode;",
mode => $mode_xmm,
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "gp" ],
out_reqs => [ "xmm", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 10,
attr => "ir_mode *tgt_mode",
init => "attr->ls_mode = tgt_mode;",
mode => $mode_xmm,
},
Conv_FP2I => {
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "xmm" ],
out_reqs => [ "gp", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 10,
attr => "ir_mode *src_mode",
init_attr => "attr->ls_mode = src_mode;",
mode => $mode_gp,
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "xmm" ],
out_reqs => [ "gp", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 10,
attr => "ir_mode *src_mode",
init => "attr->ls_mode = src_mode;",
mode => $mode_gp,
},
Conv_FP2FP => {
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "xmm" ],
out_reqs => [ "xmm", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 8,
attr => "ir_mode *tgt_mode",
init_attr => "attr->ls_mode = tgt_mode;",
mode => $mode_xmm,
state => "exc_pinned",
in_reqs => [ "gp", "gp", "mem", "xmm" ],
out_reqs => [ "xmm", "mem" ],
ins => [ "base", "index", "mem", "val" ],
am => "source,unary",
latency => 8,
attr => "ir_mode *tgt_mode",
init => "attr->ls_mode = tgt_mode;",
mode => $mode_xmm,
},
# rematerialisation disabled for all float nodes for now, because the fpcw
......@@ -1616,7 +1616,7 @@ fld => {
outs => [ "res", "unused", "M", "X_regular", "X_except" ],
emit => "fld%FM %AM",
attr => "ir_mode *load_mode",
init_attr => "attr->ls_mode = load_mode;",
init => "attr->ls_mode = load_mode;",
fixed => $x87sim,
latency => 2,
},
......@@ -1631,7 +1631,7 @@ fst => {
outs => [ "M", "X_regular", "X_except" ],
emit => "fst%FP%FM %AM",
attr => "ir_mode *store_mode",
init_attr => "attr->attr.ls_mode = store_mode;",
init => "attr->attr.ls_mode = store_mode;",
latency => 2,
attr_type => "ia32_x87_attr_t",
},
......@@ -1725,7 +1725,7 @@ FucomFnstsw => {
emit => "fucom%FP %F0\n".
"fnstsw %%ax",
attr => "bool ins_permuted",
init_attr => "attr->attr.ins_permuted = ins_permuted;",
init =></