ins => [ "left", "right" ],
outs => [ "res", "flags" ],
attr_type => "",
+ dump_func => "NULL",
},
AddX_t => {
ins => [ "left", "right", "flags_input" ],
attr_type => "",
+ dump_func => "NULL",
},
Sub => {
ins => [ "left", "right" ],
outs => [ "res", "flags" ],
attr_type => "",
+ dump_func => "NULL",
},
SubX_t => {
ins => [ "left", "right", "flags_input" ],
attr_type => "",
+ dump_func => "NULL",
},
# Load / Store
},
RestoreZero => {
- emit => '. restore',
reg_req => { in => [ "frame_pointer" ], out => [ "sp:I|S" ] },
ins => [ "frame_pointer" ],
outs => [ "stack" ],
+ emit => '. restore',
mode => $mode_gp,
},
SubSP => {
- reg_req => { in => [ "sp", "gp", "none" ], out => [ "sp:I|S", "gp", "none" ] },
- ins => [ "stack", "size", "mem" ],
- outs => [ "stack", "addr", "M" ],
- emit => ". sub %S0, %S1, %D0\n",
+ reg_req => { in => [ "sp", "gp" ], out => [ "sp:I|S" ] },
+ ins => [ "stack", "size" ],
+ outs => [ "stack" ],
+ emit => ". sub %S0, %S1, %D0\n",
+ mode => $mode_gp,
},
AddSP => {
- reg_req => { in => [ "sp", "gp", "none" ], out => [ "sp:I|S", "none" ] },
- ins => [ "stack", "size", "mem" ],
- outs => [ "stack", "M" ],
- emit => ". add %S0, %S1, %D0\n",
+ reg_req => { in => [ "sp", "gp" ], out => [ "sp:I|S" ] },
+ ins => [ "stack", "size" ],
+ outs => [ "stack" ],
+ emit => ". add %S0, %S1, %D0\n",
+ mode => $mode_gp,
},
FrameAddr => {
constructors => \%binop_operand_constructors,
},
-Mulh => {
+SMulh => {
+ irn_flags => [ "rematerializable" ],
+ outs => [ "low", "high" ],
+ constructors => \%binop_operand_constructors,
+},
+
+UMulh => {
irn_flags => [ "rematerializable" ],
outs => [ "low", "high" ],
constructors => \%binop_operand_constructors,