X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Farm%2Farm_spec.pl;h=98f49e01648662e3c3247449b5676fe585a1b139;hb=cbcf8b93de62865b8564e6a47aca7a28790b65ad;hp=3881351a918380eb9306fa37443822a568a856f3;hpb=2daf551a80e07d8afd6633a62211773ca4867a73;p=libfirm diff --git a/ir/be/arm/arm_spec.pl b/ir/be/arm/arm_spec.pl index 3881351a9..98f49e016 100644 --- a/ir/be/arm/arm_spec.pl +++ b/ir/be/arm/arm_spec.pl @@ -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 <> 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",