]>
Commit | Line | Data |
---|---|---|
51a5ef0f PS |
1 | --- /dev/null |
2 | +++ b/gdb/testsuite/gdb.arch/powerpc-power7.exp | |
3 | @@ -0,0 +1,182 @@ | |
4 | +# Copyright 2009 Free Software Foundation, Inc. | |
5 | + | |
6 | +# This program is free software; you can redistribute it and/or modify | |
7 | +# it under the terms of the GNU General Public License as published by | |
8 | +# the Free Software Foundation; either version 2 of the License, or | |
9 | +# (at your option) any later version. | |
10 | +# | |
11 | +# This program is distributed in the hope that it will be useful, | |
12 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | +# GNU General Public License for more details. | |
15 | +# | |
16 | +# You should have received a copy of the GNU General Public License | |
17 | +# along with this program; if not, write to the Free Software | |
18 | +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
19 | + | |
20 | +# Test PowerPC Power7 instructions disassembly. | |
21 | + | |
22 | +if {![istarget "powerpc*-*-*"]} then { | |
23 | + verbose "Skipping PowerPC Power7 instructions disassembly." | |
24 | + return | |
25 | +} | |
26 | + | |
27 | +set testfile "powerpc-power7" | |
28 | +set srcfile ${testfile}.s | |
29 | +set objfile ${objdir}/${subdir}/${testfile}.o | |
30 | + | |
31 | +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { | |
32 | + untested "PowerPC Power7 instructions disassembly" | |
33 | + return -1 | |
34 | +} | |
35 | + | |
36 | + | |
37 | +gdb_exit | |
38 | +gdb_start | |
39 | +gdb_reinitialize_dir $srcdir/$subdir | |
40 | +gdb_load ${objfile} | |
41 | + | |
42 | + | |
43 | +# Disassemble the function. | |
44 | + | |
45 | +set test "disass func" | |
46 | +gdb_test_multiple $test $test { | |
47 | + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { | |
48 | + set func $expect_out(1,string) | |
49 | + pass $test | |
50 | + } | |
51 | +} | |
52 | + | |
53 | +proc instr_to_patt {offset instr} { | |
54 | + # 0x0000000000000018 <func+24>: stxvd2x vs43,r4,r5 | |
55 | + return ".*\r\n\[ \t\]*[string map {0x 0x0*} $offset] <(func)?\\+?\[0-9\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" | |
56 | +} | |
57 | + | |
58 | +# KFAIL strings would not exist if -Many would print the same as -Mpower7. | |
59 | +# That means the power7 form should be the preferred one. | |
60 | +# http://sourceware.org/ml/gdb-patches/2009-03/threads.html#00020 | |
61 | + | |
62 | +proc func_check {offset instr {kfail ""}} { | |
63 | + global func | |
64 | + | |
65 | + set test "Found $offset: $instr" | |
66 | + if [regexp -nocase -line [instr_to_patt $offset $instr] $func] { | |
67 | + pass $test | |
68 | + } elseif {$kfail != "" && [regexp -nocase -line [instr_to_patt $offset $kfail] $func]} { | |
69 | + kfail gdb/NNNN $test | |
70 | + } else { | |
71 | + fail $test | |
72 | + } | |
73 | +} | |
74 | + | |
75 | +func_check 0x0 "lxvd2x vs3,r4,r5" | |
76 | +# [PATCH] Remove support for POWER7 VSX load/store with update instructions | |
77 | +# http://sourceware.org/ml/binutils/2009-09/msg00680.html | |
78 | +# http://sourceware.org/ml/binutils-cvs/2009-09/msg00331.html | |
79 | +# lxvd2ux vs3,r4,r5 | |
80 | +func_check 0x4 ".long 0x7c642ed8" | |
81 | +func_check 0x8 "lxvd2x vs43,r4,r5" | |
82 | +# lxvd2ux vs43,r4,r5 | |
83 | +func_check 0xc ".long 0x7d642ed9" | |
84 | +func_check 0x10 "stxvd2x vs3,r4,r5" | |
85 | +# stxvd2ux vs3,r4,r5 | |
86 | +func_check 0x14 ".long 0x7c642fd8" | |
87 | +func_check 0x18 "stxvd2x vs43,r4,r5" | |
88 | +# stxvd2ux vs43,r4,r5 | |
89 | +func_check 0x1c ".long 0x7d642fd9" | |
90 | +func_check 0x20 "xxmrghd vs3,vs4,vs5" | |
91 | +func_check 0x24 "xxmrghd vs43,vs44,vs45" | |
92 | +func_check 0x28 "xxmrgld vs3,vs4,vs5" | |
93 | +func_check 0x2c "xxmrgld vs43,vs44,vs45" | |
94 | +func_check 0x30 "xxmrghd vs3,vs4,vs5" | |
95 | +func_check 0x34 "xxmrghd vs43,vs44,vs45" | |
96 | +func_check 0x38 "xxmrgld vs3,vs4,vs5" | |
97 | +func_check 0x3c "xxmrgld vs43,vs44,vs45" | |
98 | +func_check 0x40 "xxpermdi vs3,vs4,vs5,1" | |
99 | +func_check 0x44 "xxpermdi vs43,vs44,vs45,1" | |
100 | +func_check 0x48 "xxpermdi vs3,vs4,vs5,2" | |
101 | +func_check 0x4c "xxpermdi vs43,vs44,vs45,2" | |
102 | +func_check 0x50 "xvmovdp vs3,vs4" | |
103 | +func_check 0x54 "xvmovdp vs43,vs44" | |
104 | +func_check 0x58 "xvmovdp vs3,vs4" | |
105 | +func_check 0x5c "xvmovdp vs43,vs44" | |
106 | +func_check 0x60 "xvcpsgndp vs3,vs4,vs5" | |
107 | +func_check 0x64 "xvcpsgndp vs43,vs44,vs45" | |
108 | +func_check 0x68 "wait" | |
109 | +func_check 0x6c "wait" | |
110 | +func_check 0x70 "waitrsv" | |
111 | +func_check 0x74 "waitrsv" | |
112 | +func_check 0x78 "waitimpl" | |
113 | +func_check 0x7c "waitimpl" | |
114 | +func_check 0x80 "doze" | |
115 | +func_check 0x84 "nap" | |
116 | +func_check 0x88 "sleep" | |
117 | +func_check 0x8c "rvwinkle" | |
118 | +func_check 0x90 "prtyw r3,r4" | |
119 | +func_check 0x94 "prtyd r13,r14" | |
120 | +func_check 0x98 "mfcfar r10" "mfspr r10,28" | |
121 | +func_check 0x9c "mtcfar r11" "mtspr 28,r11" | |
122 | +func_check 0xa0 "cmpb r3,r4,r5" | |
123 | +func_check 0xa4 "lwzcix r10,r11,r12" | |
124 | +func_check 0xa8 "dadd f16,f17,f18" | |
125 | +func_check 0xac "daddq f20,f22,f24" | |
126 | +func_check 0xb0 "dss 3" | |
127 | +func_check 0xb4 "dssall" | |
128 | +func_check 0xb8 "dst r5,r4,1" | |
129 | +func_check 0xbc "dstt r8,r7,0" | |
130 | +func_check 0xc0 "dstst r5,r6,3" | |
131 | +func_check 0xc4 "dststt r4,r5,2" | |
132 | +func_check 0xc8 "divwe r10,r11,r12" | |
133 | +func_check 0xcc "divwe. r11,r12,r13" | |
134 | +func_check 0xd0 "divweo r12,r13,r14" | |
135 | +func_check 0xd4 "divweo. r13,r14,r15" | |
136 | +func_check 0xd8 "divweu r10,r11,r12" | |
137 | +func_check 0xdc "divweu. r11,r12,r13" | |
138 | +func_check 0xe0 "divweuo r12,r13,r14" | |
139 | +func_check 0xe4 "divweuo. r13,r14,r15" | |
140 | +func_check 0xe8 "bpermd r7,r17,r27" | |
141 | +func_check 0xec "popcntw r10,r20" | |
142 | +func_check 0xf0 "popcntd r10,r20" | |
143 | +func_check 0xf4 "ldbrx r20,r21,r22" | |
144 | +func_check 0xf8 "stdbrx r20,r21,r22" | |
145 | +func_check 0xfc "lfiwzx f10,0,r10" | |
146 | +func_check 0x100 "lfiwzx f10,r9,r10" | |
147 | +func_check 0x104 "fcfids f4,f5" | |
148 | +func_check 0x108 "fcfids. f4,f5" | |
149 | +func_check 0x10c "fcfidus f4,f5" | |
150 | +func_check 0x110 "fcfidus. f4,f5" | |
151 | +func_check 0x114 "fctiwu f4,f5" | |
152 | +func_check 0x118 "fctiwu. f4,f5" | |
153 | +func_check 0x11c "fctiwuz f4,f5" | |
154 | +func_check 0x120 "fctiwuz. f4,f5" | |
155 | +func_check 0x124 "fctidu f4,f5" | |
156 | +func_check 0x128 "fctidu. f4,f5" | |
157 | +func_check 0x12c "fctiduz f4,f5" | |
158 | +func_check 0x130 "fctiduz. f4,f5" | |
159 | +func_check 0x134 "fcfidu f4,f5" | |
160 | +func_check 0x138 "fcfidu. f4,f5" | |
161 | +func_check 0x13c "ftdiv cr0,f10,f11" | |
162 | +func_check 0x140 "ftdiv cr7,f10,f11" | |
163 | +func_check 0x144 "ftsqrt cr0,f10" | |
164 | +func_check 0x148 "ftsqrt cr7,f10" | |
165 | +func_check 0x14c "dcbtt r8,r9" "dcbt 16,r8,r9" | |
166 | +func_check 0x150 "dcbtstt r8,r9" "dcbtst 16,r8,r9" | |
167 | +func_check 0x154 "dcffix f10,f12" | |
168 | +func_check 0x158 "dcffix. f20,f22" | |
169 | +func_check 0x15c "lbarx r10,r11,r12" | |
170 | +func_check 0x160 "lbarx r10,r11,r12" | |
171 | +func_check 0x164 "lbarx r10,r11,r12,1" | |
172 | +func_check 0x168 "lharx r20,r21,r22" | |
173 | +func_check 0x16c "lharx r20,r21,r22" | |
174 | +func_check 0x170 "lharx r20,r21,r22,1" | |
175 | +func_check 0x174 "stbcx. r10,r11,r12" | |
176 | +func_check 0x178 "sthcx. r10,r11,r12" | |
177 | +func_check 0x17c "fre f14,f15" | |
178 | +func_check 0x180 "fre. f14,f15" | |
179 | +func_check 0x184 "fres f14,f15" | |
180 | +func_check 0x188 "fres. f14,f15" | |
181 | +func_check 0x18c "frsqrte f14,f15" | |
182 | +func_check 0x190 "frsqrte. f14,f15" | |
183 | +func_check 0x194 "frsqrtes f14,f15" | |
184 | +func_check 0x198 "frsqrtes. f14,f15" | |
185 | +func_check 0x19c "isel r2,r3,r4,28" | |
186 | --- /dev/null | |
187 | +++ b/gdb/testsuite/gdb.arch/powerpc-power7.s | |
188 | @@ -0,0 +1,107 @@ | |
189 | + .text | |
190 | + .globl func | |
191 | +func: | |
192 | + .long 0x7c642e98 /* 0: lxvd2x vs3,r4,r5 */ | |
193 | + .long 0x7c642ed8 /* 4: lxvd2ux vs3,r4,r5 */ | |
194 | + .long 0x7d642e99 /* 8: lxvd2x vs43,r4,r5 */ | |
195 | + .long 0x7d642ed9 /* c: lxvd2ux vs43,r4,r5 */ | |
196 | + .long 0x7c642f98 /* 10: stxvd2x vs3,r4,r5 */ | |
197 | + .long 0x7c642fd8 /* 14: stxvd2ux vs3,r4,r5 */ | |
198 | + .long 0x7d642f99 /* 18: stxvd2x vs43,r4,r5 */ | |
199 | + .long 0x7d642fd9 /* 1c: stxvd2ux vs43,r4,r5 */ | |
200 | + .long 0xf0642850 /* 20: xxmrghd vs3,vs4,vs5 */ | |
201 | + .long 0xf16c6857 /* 24: xxmrghd vs43,vs44,vs45 */ | |
202 | + .long 0xf0642b50 /* 28: xxmrgld vs3,vs4,vs5 */ | |
203 | + .long 0xf16c6b57 /* 2c: xxmrgld vs43,vs44,vs45 */ | |
204 | + .long 0xf0642850 /* 30: xxmrghd vs3,vs4,vs5 */ | |
205 | + .long 0xf16c6857 /* 34: xxmrghd vs43,vs44,vs45 */ | |
206 | + .long 0xf0642b50 /* 38: xxmrgld vs3,vs4,vs5 */ | |
207 | + .long 0xf16c6b57 /* 3c: xxmrgld vs43,vs44,vs45 */ | |
208 | + .long 0xf0642950 /* 40: xxpermdi vs3,vs4,vs5,1 */ | |
209 | + .long 0xf16c6957 /* 44: xxpermdi vs43,vs44,vs45,1 */ | |
210 | + .long 0xf0642a50 /* 48: xxpermdi vs3,vs4,vs5,2 */ | |
211 | + .long 0xf16c6a57 /* 4c: xxpermdi vs43,vs44,vs45,2 */ | |
212 | + .long 0xf0642780 /* 50: xvmovdp vs3,vs4 */ | |
213 | + .long 0xf16c6787 /* 54: xvmovdp vs43,vs44 */ | |
214 | + .long 0xf0642780 /* 58: xvmovdp vs3,vs4 */ | |
215 | + .long 0xf16c6787 /* 5c: xvmovdp vs43,vs44 */ | |
216 | + .long 0xf0642f80 /* 60: xvcpsgndp vs3,vs4,vs5 */ | |
217 | + .long 0xf16c6f87 /* 64: xvcpsgndp vs43,vs44,vs45 */ | |
218 | + .long 0x7c00007c /* 68: wait */ | |
219 | + .long 0x7c00007c /* 6c: wait */ | |
220 | + .long 0x7c20007c /* 70: waitrsv */ | |
221 | + .long 0x7c20007c /* 74: waitrsv */ | |
222 | + .long 0x7c40007c /* 78: waitimpl */ | |
223 | + .long 0x7c40007c /* 7c: waitimpl */ | |
224 | + .long 0x4c000324 /* 80: doze */ | |
225 | + .long 0x4c000364 /* 84: nap */ | |
226 | + .long 0x4c0003a4 /* 88: sleep */ | |
227 | + .long 0x4c0003e4 /* 8c: rvwinkle */ | |
228 | + .long 0x7c830134 /* 90: prtyw r3,r4 */ | |
229 | + .long 0x7dcd0174 /* 94: prtyd r13,r14 */ | |
230 | + .long 0x7d5c02a6 /* 98: mfcfar r10 */ | |
231 | + .long 0x7d7c03a6 /* 9c: mtcfar r11 */ | |
232 | + .long 0x7c832bf8 /* a0: cmpb r3,r4,r5 */ | |
233 | + .long 0x7d4b662a /* a4: lwzcix r10,r11,r12 */ | |
234 | + .long 0xee119004 /* a8: dadd f16,f17,f18 */ | |
235 | + .long 0xfe96c004 /* ac: daddq f20,f22,f24 */ | |
236 | + .long 0x7c60066c /* b0: dss 3 */ | |
237 | + .long 0x7e00066c /* b4: dssall */ | |
238 | + .long 0x7c2522ac /* b8: dst r5,r4,1 */ | |
239 | + .long 0x7e083aac /* bc: dstt r8,r7,0 */ | |
240 | + .long 0x7c6532ec /* c0: dstst r5,r6,3 */ | |
241 | + .long 0x7e442aec /* c4: dststt r4,r5,2 */ | |
242 | + .long 0x7d4b6356 /* c8: divwe r10,r11,r12 */ | |
243 | + .long 0x7d6c6b57 /* cc: divwe. r11,r12,r13 */ | |
244 | + .long 0x7d8d7756 /* d0: divweo r12,r13,r14 */ | |
245 | + .long 0x7dae7f57 /* d4: divweo. r13,r14,r15 */ | |
246 | + .long 0x7d4b6316 /* d8: divweu r10,r11,r12 */ | |
247 | + .long 0x7d6c6b17 /* dc: divweu. r11,r12,r13 */ | |
248 | + .long 0x7d8d7716 /* e0: divweuo r12,r13,r14 */ | |
249 | + .long 0x7dae7f17 /* e4: divweuo. r13,r14,r15 */ | |
250 | + .long 0x7e27d9f8 /* e8: bpermd r7,r17,r27 */ | |
251 | + .long 0x7e8a02f4 /* ec: popcntw r10,r20 */ | |
252 | + .long 0x7e8a03f4 /* f0: popcntd r10,r20 */ | |
253 | + .long 0x7e95b428 /* f4: ldbrx r20,r21,r22 */ | |
254 | + .long 0x7e95b528 /* f8: stdbrx r20,r21,r22 */ | |
255 | + .long 0x7d4056ee /* fc: lfiwzx f10,0,r10 */ | |
256 | + .long 0x7d4956ee /* 100: lfiwzx f10,r9,r10 */ | |
257 | + .long 0xec802e9c /* 104: fcfids f4,f5 */ | |
258 | + .long 0xec802e9d /* 108: fcfids. f4,f5 */ | |
259 | + .long 0xec802f9c /* 10c: fcfidus f4,f5 */ | |
260 | + .long 0xec802f9d /* 110: fcfidus. f4,f5 */ | |
261 | + .long 0xfc80291c /* 114: fctiwu f4,f5 */ | |
262 | + .long 0xfc80291d /* 118: fctiwu. f4,f5 */ | |
263 | + .long 0xfc80291e /* 11c: fctiwuz f4,f5 */ | |
264 | + .long 0xfc80291f /* 120: fctiwuz. f4,f5 */ | |
265 | + .long 0xfc802f5c /* 124: fctidu f4,f5 */ | |
266 | + .long 0xfc802f5d /* 128: fctidu. f4,f5 */ | |
267 | + .long 0xfc802f5e /* 12c: fctiduz f4,f5 */ | |
268 | + .long 0xfc802f5f /* 130: fctiduz. f4,f5 */ | |
269 | + .long 0xfc802f9c /* 134: fcfidu f4,f5 */ | |
270 | + .long 0xfc802f9d /* 138: fcfidu. f4,f5 */ | |
271 | + .long 0xfc0a5900 /* 13c: ftdiv cr0,f10,f11 */ | |
272 | + .long 0xff8a5900 /* 140: ftdiv cr7,f10,f11 */ | |
273 | + .long 0xfc005140 /* 144: ftsqrt cr0,f10 */ | |
274 | + .long 0xff805140 /* 148: ftsqrt cr7,f10 */ | |
275 | + .long 0x7e084a2c /* 14c: dcbtt r8,r9 */ | |
276 | + .long 0x7e0849ec /* 150: dcbtstt r8,r9 */ | |
277 | + .long 0xed406644 /* 154: dcffix f10,f12 */ | |
278 | + .long 0xee80b645 /* 158: dcffix. f20,f22 */ | |
279 | + .long 0x7d4b6068 /* 15c: lbarx r10,r11,r12 */ | |
280 | + .long 0x7d4b6068 /* 160: lbarx r10,r11,r12 */ | |
281 | + .long 0x7d4b6069 /* 164: lbarx r10,r11,r12,1 */ | |
282 | + .long 0x7e95b0e8 /* 168: lharx r20,r21,r22 */ | |
283 | + .long 0x7e95b0e8 /* 16c: lharx r20,r21,r22 */ | |
284 | + .long 0x7e95b0e9 /* 170: lharx r20,r21,r22,1 */ | |
285 | + .long 0x7d4b656d /* 174: stbcx. r10,r11,r12 */ | |
286 | + .long 0x7d4b65ad /* 178: sthcx. r10,r11,r12 */ | |
287 | + .long 0xfdc07830 /* 17c: fre f14,f15 */ | |
288 | + .long 0xfdc07831 /* 180: fre. f14,f15 */ | |
289 | + .long 0xedc07830 /* 184: fres f14,f15 */ | |
290 | + .long 0xedc07831 /* 188: fres. f14,f15 */ | |
291 | + .long 0xfdc07834 /* 18c: frsqrte f14,f15 */ | |
292 | + .long 0xfdc07835 /* 190: frsqrte. f14,f15 */ | |
293 | + .long 0xedc07834 /* 194: frsqrtes f14,f15 */ | |
294 | + .long 0xedc07835 /* 198: frsqrtes. f14,f15 */ | |
295 | + .long 0x7c43271e /* 19c: isel r2,r3,r4,28 */ |