Remove final \n from panic messages, panic() adds a newline automagically.
[libfirm] / ir / be / arm / arm_spec.pl
index 3881351..98f49e0 100644 (file)
@@ -28,10 +28,14 @@ $new_emit_syntax = 1;
 #   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",
 # },
@@ -445,25 +449,24 @@ Shl => {
 
 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",
@@ -579,6 +582,17 @@ CmpBra => {
        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",