14 $debug && print "function: $func\n";
15 foreach $insn (@list) {
16 #$debug && print "checking instruction \"$insn\"\n";
17 $insn =~ m/^(\w+)\s+(.*)$/;
20 if (grep { /^$opcode$/ } @normal_list) {
21 $debug && print " $opcode: normal\n";
22 }elsif (grep { /^$opcode$/ } @cmov_list) {
24 $debug && print " $opcode: cmov\n";
25 }elsif (grep { /^$opcode$/ } @mmxsse_list) {
26 if (grep { /\%xmm/ } $regs) {
28 $debug && print " $opcode: sse2\n";
31 $debug && print " $opcode: mmx\n";
33 }elsif (grep { /^$opcode$/ } @mmx_list) {
35 $debug && print " $opcode: mmx\n";
36 }elsif (grep { /^$opcode$/ } @mmx_ext_list) {
37 $exts->{"mmxext"} = 1;
38 $debug && print " $opcode: mmxext\n";
39 }elsif (grep { /^$opcode$/ } @_3dnow_list) {
41 $debug && print " $opcode: 3dnow\n";
42 }elsif (grep { /^$opcode$/ } @_3dnow_ext_list) {
43 $exts->{"3dnowext"} = 1;
44 $debug && print " $opcode: 3dnowext\n";
45 }elsif (grep { /^$opcode$/ } @sse_list) {
47 $debug && print " $opcode: sse\n";
48 }elsif (grep { /^$opcode$/ } @sse2_list) {
50 $debug && print " $opcode: sse2\n";
51 }elsif (grep { /^$opcode$/ } @sse3_list) {
53 $debug && print " $opcode: sse3\n";
54 }elsif (grep { /^$opcode$/ } @ssse3_list) {
56 $debug && print " $opcode: ssse3\n";
58 print "FIXME:\t\"$opcode\",\n";
63 if ($exts->{"sse3"}) {
66 if ($exts->{"sse2"}) {
68 $exts->{"mmxext"} = 1;
71 $s = join(" ",sort(keys(%$exts)));
72 $funcs->{"$func"} = $s;
73 $debug && print " FLAGS: $s\n";
78 foreach $insn (@normal_list) {
79 if (grep { /^$insn$/ } @mmx_list) {
80 print "FIXME: $insn is in mmx_list\n";
82 } elsif (grep { /^$insn$/ } @mmx_ext_list) {
83 print "FIXME: $insn is in mmx_ext_list\n";
85 } elsif (grep { /^$insn$/ } @_3dnow_list) {
86 print "FIXME: $insn is in _3dnow_list\n";
88 } elsif (grep { /^$insn$/ } @_3dnow_ext_list) {
89 print "FIXME: $insn is in _3dnow_ext_list\n";
91 } elsif (grep { /^$insn$/ } @sse_list) {
92 print "FIXME: $insn is in sse_list\n";
94 } elsif (grep { /^$insn$/ } @sse2_list) {
95 print "FIXME: $insn is in sse2_list\n";
101 # this list is not complete
562 @output=`objdump -j .text -dr $ARGV`;
568 while($_=shift @output){
570 if(m/^0[0-9a-fA-F]+\s<[\.\w@]+>:$/){
572 $f =~ s/^0[0-9a-fA-F]+\s<([\.\w]+)>:$/$1/;
581 $debug && print "$func:\n";
583 } elsif(m/^[\s0-9a-f]+:\s[\s0-9a-f]{20}\s+([\w]+\s.*)$/){
586 } elsif(m/^[\s0-9a-f]+:\s[\s0-9a-f]{2,20}\s$/){
589 } elsif (m/^Disassembly of section/) {
590 } elsif (m/\sfile format\s/) {
597 @source = `./list-impls`;
598 while ($_ = shift @source) {
600 if (m/^([\w\.]+):\s*([\w\s*]*)/) {
604 $xflags = $funcs->{$func};
606 if ($flags ne $xflags) {
607 print "$func: \"$flags\" should be \"$xflags\"\n";
610 print "FIXME: function \"$func\" has no disassembly\n";
614 print "FIXME: bad match: $_\n";