# comment => "any comment for constructor",
# reg_req => { in => [ "reg_class|register" ], out => [ "reg_class|register|in_rX" ] },
# cmp_attr => "c source code for comparing node attributes",
+# outs => { "out1", "out2" } # optional, creates pn_op_out1, ... consts
+# ins => { "in1", "in2" } # optional, creates n_op_in1, ... consts
+# mode => "mode_Iu" # optional, predefines the mode
# emit => "emit code with templates",
-# attr => "attitional attribute arguments for constructor"
-# init_attr => "emit attribute initialization template"
+# attr => "attitional attribute arguments for constructor",
+# init_attr => "emit attribute initialization template",
# rd_constructor => "c source code which constructs an ir_node"
+# hash_func => "name of the hash function for this operation",
# latency => "latency of this operation (can be float)"
# attr_type => "name of the attribute struct",
# },
Shr => {
irn_flags => "R",
- comment => "construct Shr: Shr(a, b) = a >> b",
- reg_req => { "in" => [ "gp", "gp" ], "out" => [ "in_r1" ] },
+ comment => "construct Shr: Shr(a, b) = a >>u b",
+ reg_req => { "in" => [ "gp", "gp" ], "out" => [ "gp" ] },
emit => '. mov %D0, %S0, lsr %S1'
},
Shrs => {
irn_flags => "R",
- comment => "construct Shrs: Shrs(a, b) = a >> b",
- reg_req => { "in" => [ "gp", "gp" ], "out" => [ "in_r1" ] },
+ comment => "construct Shrs: Shrs(a, b) = a >>s b",
+ reg_req => { "in" => [ "gp", "gp" ], "out" => [ "gp" ] },
emit => '. mov %D0, %S0, asr %S1'
},
-#RotR => {
-# irn_flags => "R",
-# comment => "construct RotR: RotR(a, b) = a ROTR b",
-# reg_req => { "in" => [ "gp", "gp" ], "out" => [ "gp" ] },
-# emit => '. mov %D0, %S0, ror %S1 /* RotR(%S0, %S1) -> %D0, (%A1, %A2) */'
-## emit => '. ror %S0, %S1, %D0'
-#},
+Ror => {
+ irn_flags => "R",
+ comment => "construct Ror: Ror(a, b) = a <<r>> b",
+ reg_req => { "in" => [ "gp", "gp" ], "out" => [ "gp" ] },
+ emit => '. mov %D0, %S0, ror %S1'
+},
#RotL => {
# irn_flags => "R",
attr_type => "arm_CondJmp_attr_t",
},
+TstBra => {
+ op_flags => "L|X|Y",
+ state => "pinned",
+ comment => "construct conditional branch: TST A, B && JMPxx LABEL",
+ mode => "mode_T",
+ attr => "int proj_num",
+ init_attr => "\tset_arm_CondJmp_proj_num(res, proj_num);",
+ reg_req => { "in" => [ "gp", "gp" ], "out" => [ "none", "none"] },
+ attr_type => "arm_CondJmp_attr_t",
+},
+
SwitchJmp => {
op_flags => "L|X|Y",
state => "pinned",