gas/testsuite/
[platform/upstream/binutils.git] / gas / testsuite / gas / i386 / i386.exp
1 #
2 # i386 tests
3 #
4 proc run_list_test { name opts } {
5     global srcdir subdir
6     set testname "i386 $name"
7     set file $srcdir/$subdir/$name
8     gas_run ${name}.s $opts ">&dump.out"
9     if { [regexp_diff "dump.out" "${file}.l"] } then {
10         fail $testname
11         verbose "output is [file_contents "dump.out"]" 2
12         return
13     }
14     pass $testname
15 }
16
17 proc gas_64_check { } {
18     global NM
19     global NMFLAGS
20     global srcdir
21
22     catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
23     return [regexp "targets:.*x86-64" $nm_help]
24 }
25
26 proc gas_32_check { } {
27     global NM
28     global NMFLAGS
29     global srcdir
30
31     catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
32     return [regexp "targets:.*i386" $nm_help]
33 }
34
35
36 if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]  then {
37
38     global ASFLAGS
39     set old_ASFLAGS "$ASFLAGS"
40     set ASFLAGS "$ASFLAGS --32"
41
42     run_list_test "float" "-al"
43     run_list_test "general" "-al --listing-lhs-width=2"
44     run_list_test "inval" "-al"
45     run_list_test "modrm" "-al --listing-lhs-width=2"
46     run_dump_test "naked"
47     run_dump_test "opcode"
48     run_dump_test "intel"
49     run_dump_test "intel16"
50     run_list_test "intelbad" ""
51     run_dump_test "intelok"
52     run_dump_test "prefix"
53     run_dump_test "amd"
54     run_dump_test "katmai"
55     run_dump_test "jump"
56     run_dump_test "ssemmx2"
57     run_dump_test "sse2"
58     run_dump_test "sub"
59     run_dump_test "prescott"
60     run_dump_test "sib"
61
62     if {![istarget "*-*-aix*"]
63         && (![is_elf_format] || [istarget "*-*-linux*"]
64             || [istarget "*-*-netbsd*"]
65             || [istarget "*-*-freebsd*"]
66             || [istarget "*-*-netware*"])} {
67         # Don't run this test on targets where '/' starts comments.
68         run_dump_test "divide"
69     }
70
71
72     run_dump_test "padlock"
73
74     # These tests require support for 8 and 16 bit relocs,
75     # so we only run them for ELF and COFF targets.
76     if {[is_elf_format] || [istarget "*-*-coff*"]} then {
77         run_dump_test "reloc"
78         run_dump_test "jump16"
79         run_list_test "white" "-al --listing-lhs-width=3"
80
81         # These tests should in theory work for PE targets as well,
82         # but the relocs we currently produce are slightly different
83         # from those produced for ELF/COFF based toolchains.
84         # So for now we ignore PE targets.
85         run_dump_test "pcrel"
86         run_dump_test "absrel"
87     }
88
89     # ELF specific tests
90     if [is_elf_format] then {
91         # PIC is only supported on ELF targets.
92         run_dump_test "intelpic"
93
94         run_dump_test "relax"
95         run_dump_test "gotpc"
96         run_dump_test "tlsd"
97         run_dump_test "tlspic"
98         run_dump_test "tlsnopic"
99     }
100
101     # This is a PE specific test.
102     if { [istarget "*-*-cygwin*"] || [istarget "*-*-pe"]
103          || [istarget "*-*-mingw*"]
104     } then {
105         run_dump_test "secrel"
106     }
107
108     set ASFLAGS "$old_ASFLAGS"
109 }
110
111 if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] then {
112
113     global ASFLAGS
114     set old_ASFLAGS "$ASFLAGS"
115     set ASFLAGS "$ASFLAGS --64"
116
117     run_dump_test "x86_64"
118     run_dump_test "x86-64-addr32"
119     run_dump_test "x86-64-opcode"
120     run_dump_test "x86-64-rip"
121     run_list_test "x86-64-inval" "-al"
122
123     # For ELF targets verify that @unwind works.
124     if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"]
125           || [istarget "*-*-solaris2.*"])
126          && ![istarget *-*-linux*aout*]
127          && ![istarget *-*-linux*oldld*] } then {
128         run_dump_test "x86-64-unwind"
129     }
130
131     set ASFLAGS "$old_ASFLAGS"
132 }