+sub ia32_custom_init_attr {
+ my $node = shift;
+ my $name = shift;
+ my $res = "";
+ if(defined($node->{modified_flags})) {
+ $res .= "\t/*attr->data.flags |= arch_irn_flags_modify_flags;*/\n";
+ }
+ if(defined($node->{am})) {
+ my $am = $node->{am};
+ if($am eq "full,binary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Full, ia32_am_binary);";
+ } elsif($am eq "full,unary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Full, ia32_am_unary);";
+ } elsif($am eq "source,binary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Source, ia32_am_binary);";
+ } elsif($am eq "dest,unary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Dest, ia32_am_unary);";
+ } elsif($am eq "dest,binary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Dest, ia32_am_binary);";
+ } elsif($am eq "dest,ternary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Dest, ia32_am_ternary);";
+ } elsif($am eq "source,ternary") {
+ $res .= "\tset_ia32_am_support(res, ia32_am_Source, ia32_am_ternary);";
+ } elsif($am eq "none") {
+ # nothing to do
+ } else {
+ die("Invalid address mode '$am' specified on op $name");
+ }
+ }
+ return $res;
+}
+$custom_init_attr_func = \&ia32_custom_init_attr;
+