+Mulh => {
+ irn_flags => [ "rematerializable" ],
+ outs => [ "low", "high" ],
+ constructors => \%binop_operand_constructors,
+},
+
+SDiv => {
+ irn_flags => [ "rematerializable" ],
+ state => "exc_pinned",
+ ins => [ "dividend_high", "dividend_low", "divisor" ],
+ outs => [ "res", "M" ],
+ constructors => \%div_operand_constructors,
+},
+
+UDiv => {
+ irn_flags => [ "rematerializable" ],
+ state => "exc_pinned",
+ ins => [ "dividend_high", "dividend_low", "divisor" ],
+ outs => [ "res", "M" ],
+ constructors => \%div_operand_constructors,
+},
+
+fcmp => {
+ irn_flags => [ "rematerializable", "modifies_fp_flags" ],
+ emit => '. fcmp%FPM %S0, %S1',
+ attr_type => "sparc_fp_attr_t",
+ attr => "ir_mode *fp_mode",
+ mode => $mode_fpflags,
+ constructors => {
+ s => {
+ reg_req => { in => [ "fp", "fp" ], out => [ "fpflags" ] },
+ },
+ d => {
+ reg_req => { in => [ "fp:a|2", "fp:a|2" ], out => [ "fpflags" ] },
+ },
+ q => {
+ reg_req => { in => [ "fp:a|4", "fp:a|4" ], out => [ "fpflags" ] },
+ },
+ },
+},
+
+fadd => {
+ op_flags => [ "commutative" ],
+ irn_flags => [ "rematerializable" ],
+ emit => '. fadd%FPM %S0, %S1, %D0',
+ attr_type => "sparc_fp_attr_t",
+ attr => "ir_mode *fp_mode",
+ ins => [ "left", "right" ],
+ constructors => \%float_binop_constructors,
+},
+
+fsub => {
+ irn_flags => [ "rematerializable" ],
+ emit => '. fsub%FPM %S0, %S1, %D0',
+ attr_type => "sparc_fp_attr_t",
+ attr => "ir_mode *fp_mode",
+ ins => [ "left", "right" ],
+ constructors => \%float_binop_constructors,
+},
+
+fmul => {
+ irn_flags => [ "rematerializable" ],
+ op_flags => [ "commutative" ],
+ emit =>'. fmul%FPM %S0, %S1, %D0',
+ attr_type => "sparc_fp_attr_t",
+ attr => "ir_mode *fp_mode",
+ ins => [ "left", "right" ],
+ constructors => \%float_binop_constructors,
+},
+
+fdiv => {
+ irn_flags => [ "rematerializable" ],
+ emit => '. fdiv%FPM %S0, %S1, %D0',
+ attr_type => "sparc_fp_attr_t",
+ attr => "ir_mode *fp_mode",
+ ins => [ "left", "right" ],
+ outs => [ "res", "M" ],
+ constructors => {
+ s => {
+ reg_req => { in => [ "fp", "fp" ], out => [ "fp", "none" ] },
+ },
+ d => {
+ reg_req => { in => [ "fp:a|2", "fp:a|2" ], out => [ "fp:a|2", "none" ] },
+ },
+ q => {
+ reg_req => { in => [ "fp:a|4", "fp:a|4" ], out => [ "fp:a|4", "none" ] },
+ }
+ },