1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# Copyright 2014-2024 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This file is part of the gdb testsuite.
# Test PowerPC instructions disassembly.
standard_testfile .s
set objfile [standard_output_file ${testfile}.o]
require {istarget "powerpc*-*-*"}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } {
untested "PowerPC instructions disassembly"
return -1
}
clean_restart ${objfile}
# Disassemble the function.
set func ""
gdb_test "set disassembler-options altivec"
set test "disass func"
gdb_test_multiple $test $test {
-re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" {
set func $expect_out(1,string)
pass $test
}
}
proc instr_to_patt {instr} {
global decimal hex
# 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5
return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
}
proc func_check {instr} {
global func
set test "found: $instr"
if [regexp -nocase -line [instr_to_patt $instr] $func] {
pass $test
} else {
fail $test
}
}
func_check "lvepxl v3,0,r28"
func_check "lvepxl v19,r4,r18"
func_check "lvepx v27,0,r19"
func_check "lvepx v1,r25,r18"
func_check "lvexbx v31,0,r27"
func_check "lvexbx v28,r1,r12"
func_check "lvexhx v31,0,r14"
func_check "lvexhx v17,r16,r31"
func_check "lvexwx v22,0,r29"
func_check "lvexwx v23,r25,r5"
func_check "lvsm v3,0,r12"
func_check "lvsm v27,r29,r1"
func_check "lvswxl v7,0,r6"
func_check "lvswxl v7,r16,r8"
func_check "lvswx v14,0,r18"
func_check "lvswx v28,r28,r16"
func_check "lvtlxl v27,0,r12"
func_check "lvtlxl v27,r28,r0"
func_check "lvtlx v23,0,r25"
func_check "lvtlx v1,r25,r14"
func_check "lvtrxl v20,0,r24"
func_check "lvtrxl v22,r29,r24"
func_check "lvtrx v24,0,r8"
func_check "lvtrx v13,r23,r28"
func_check "mvidsplt v12,r28,r12"
func_check "mviwsplt v10,r27,r0"
func_check "stvepxl v27,0,r13"
func_check "stvepxl v2,r2,r31"
func_check "stvepx v3,0,r10"
func_check "stvepx v27,r28,r0"
func_check "stvexbx v13,0,r6"
func_check "stvexbx v13,r25,r3"
func_check "stvexhx v22,0,r1"
func_check "stvexhx v17,r14,r10"
func_check "stvexwx v21,0,r27"
func_check "stvexwx v31,r18,r1"
func_check "stvflxl v26,0,r13"
func_check "stvflxl v22,r13,r21"
func_check "stvflx v5,0,r9"
func_check "stvflx v21,r24,r1"
func_check "stvfrxl v13,0,r10"
func_check "stvfrxl v13,r17,r25"
func_check "stvfrx v17,0,r10"
func_check "stvfrx v8,r12,r31"
func_check "stvswxl v18,0,r29"
func_check "stvswxl v26,r14,r8"
func_check "stvswx v0,0,r15"
func_check "stvswx v13,r23,r7"
func_check "vabsdub v6,v17,v16"
func_check "vabsduh v21,v18,v4"
func_check "vabsduw v25,v20,v9"
func_check "vpermxor v6,v17,v20,v26"
func_check "vaddeuqm v29,v26,v15,v28"
func_check "vaddecuq v15,v8,v7,v24"
func_check "vsubeuqm v2,v6,v21,v1"
func_check "vsubecuq v29,v6,v0,v4"
func_check "vmulouw v14,v9,v3"
func_check "vmuluwm v24,v16,v18"
func_check "vaddudm v10,v17,v17"
func_check "vmaxud v30,v25,v4"
func_check "vrld v10,v6,v28"
func_check "vcmpequd v27,v7,v7"
func_check "vadduqm v22,v16,v25"
func_check "vaddcuq v1,v21,v29"
func_check "vmulosw v20,v11,v19"
func_check "vmaxsd v24,v19,v1"
func_check "vmuleuw v13,v27,v30"
func_check "vminud v9,v24,v17"
func_check "vcmpgtud v10,v18,v28"
func_check "vmulesw v0,v29,v22"
func_check "vminsd v13,v28,v1"
func_check "vsrad v10,v20,v5"
func_check "vcmpgtsd v27,v21,v5"
func_check "bcdadd. v0,v23,v30,1"
func_check "vpmsumb v25,v24,v26"
func_check "bcdsub. v8,v4,v4,1"
func_check "vpmsumh v16,v14,v26"
func_check "vpkudum v27,v2,v26"
func_check "vpmsumw v6,v23,v17"
func_check "vpmsumd v20,v6,v25"
func_check "vpkudus v27,v22,v16"
func_check "vsubudm v21,v20,v18"
func_check "vsubuqm v21,v20,v18"
func_check "vcipher v29,v29,v6"
func_check "vcipherlast v2,v13,v20"
func_check "vgbbd v20,v18"
func_check "vsubcuq v19,v8,v25"
func_check "vorc v9,v26,v29"
func_check "vncipher v20,v20,v13"
func_check "vncipherlast v15,v5,v27"
func_check "vbpermq v3,v19,v6"
func_check "vpksdus v30,v4,v28"
func_check "vnand v0,v4,v14"
func_check "vsld v17,v8,v29"
func_check "vsbox v29,v20"
func_check "vpksdss v11,v7,v11"
func_check "vcmpequd. v3,v19,v16"
func_check "vupkhsw v18,v17"
func_check "vshasigmaw v29,v8,0,13"
func_check "veqv v23,v28,v26"
func_check "vmrgew v29,v0,v2"
func_check "vmrgow v29,v0,v2"
func_check "vshasigmad v27,v19,0,0"
func_check "vsrd v20,v28,v28"
func_check "vupklsw v18,v21"
func_check "vclzb v30,v7"
func_check "vpopcntb v29,v21"
func_check "vclzh v25,v21"
func_check "vpopcnth v16,v30"
func_check "vclzw v28,v3"
func_check "vpopcntw v10,v9"
func_check "vclzd v22,v9"
func_check "vpopcntd v15,v30"
func_check "vcmpgtud. v2,v31,v6"
func_check "vcmpgtsd. v20,v15,v2"
|