blob: 96d623f17672ba2df86690f5d6cb9fbd2abade34 [file] [log] [blame]
# Copyright 2014-2015 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Test PowerPC instructions disassembly.
standard_testfile .s
set objfile [standard_output_file ${testfile}.o]
if {![istarget "powerpc*-*-*"]} then {
verbose "Skipping PowerPC instructions disassembly."
return
}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } {
untested "PowerPC instructions disassembly"
return -1
}
clean_restart ${objfile}
# Disassemble the function.
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 {offset instr} {
# 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5
return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\$offset>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*"
}
proc func_check {offset instr} {
global func
set test "Found $offset: $instr"
if [regexp -nocase -line [instr_to_patt $offset $instr] $func] {
pass $test
} else {
fail $test
}
}
func_check +0 "lxvd2x vs3,r4,r5"
# Some instructions are no longer recognized, this is correct since:
# [PATCH] Remove support for POWER7 VSX load/store with update instructions
# http://sourceware.org/ml/binutils/2009-09/msg00680.html
# http://sourceware.org/ml/binutils-cvs/2009-09/msg00331.html
# lxvd2ux vs3,r4,r5
func_check +4 ".long 0x7c642ed8"
func_check +8 "lxvd2x vs43,r4,r5"
# lxvd2ux vs43,r4,r5
func_check +12 ".long 0x7d642ed9"
func_check +16 "stxvd2x vs3,r4,r5"
# stxvd2ux vs3,r4,r5
func_check +20 ".long 0x7c642fd8"
func_check +24 "stxvd2x vs43,r4,r5"
# stxvd2ux vs43,r4,r5
func_check +28 ".long 0x7d642fd9"
func_check +32 "xxmrghd vs3,vs4,vs5"
func_check +36 "xxmrghd vs43,vs44,vs45"
func_check +40 "xxmrgld vs3,vs4,vs5"
func_check +44 "xxmrgld vs43,vs44,vs45"
func_check +48 "xxmrghd vs3,vs4,vs5"
func_check +52 "xxmrghd vs43,vs44,vs45"
func_check +56 "xxmrgld vs3,vs4,vs5"
func_check +60 "xxmrgld vs43,vs44,vs45"
func_check +64 "xxpermdi vs3,vs4,vs5,1"
func_check +68 "xxpermdi vs43,vs44,vs45,1"
func_check +72 "xxpermdi vs3,vs4,vs5,2"
func_check +76 "xxpermdi vs43,vs44,vs45,2"
func_check +80 "xvmovdp vs3,vs4"
func_check +84 "xvmovdp vs43,vs44"
func_check +88 "xvmovdp vs3,vs4"
func_check +92 "xvmovdp vs43,vs44"
func_check +96 "xvcpsgndp vs3,vs4,vs5"
func_check +100 "xvcpsgndp vs43,vs44,vs45"
func_check +104 "wait"
func_check +108 "wait"
func_check +112 "waitrsv"
func_check +116 "waitrsv"
func_check +120 "waitimpl"
func_check +124 "waitimpl"
func_check +128 "doze"
func_check +132 "nap"
func_check +136 "sleep"
func_check +140 "rvwinkle"
func_check +144 "prtyw r3,r4"
func_check +148 "prtyd r13,r14"
func_check +152 "mfcfar r10"
func_check +156 "mtcfar r11"
func_check +160 "cmpb r3,r4,r5"
func_check +164 "lwzcix r10,r11,r12"
func_check +168 "dadd f16,f17,f18"
func_check +172 "daddq f20,f22,f24"
func_check +176 "dss 3"
func_check +180 "dssall"
func_check +184 "dst r5,r4,1"
func_check +188 "dstt r8,r7,0"
func_check +192 "dstst r5,r6,3"
func_check +196 "dststt r4,r5,2"
func_check +200 "divwe r10,r11,r12"
func_check +204 "divwe. r11,r12,r13"
func_check +208 "divweo r12,r13,r14"
func_check +212 "divweo. r13,r14,r15"
func_check +216 "divweu r10,r11,r12"
func_check +220 "divweu. r11,r12,r13"
func_check +224 "divweuo r12,r13,r14"
func_check +228 "divweuo. r13,r14,r15"
func_check +232 "bpermd r7,r17,r27"
func_check +236 "popcntw r10,r20"
func_check +240 "popcntd r10,r20"
func_check +244 "ldbrx r20,r21,r22"
func_check +248 "stdbrx r20,r21,r22"
func_check +252 "lfiwzx f10,0,r10"
func_check +256 "lfiwzx f10,r9,r10"
func_check +260 "fcfids f4,f5"
func_check +264 "fcfids. f4,f5"
func_check +268 "fcfidus f4,f5"
func_check +272 "fcfidus. f4,f5"
func_check +276 "fctiwu f4,f5"
func_check +280 "fctiwu. f4,f5"
func_check +284 "fctiwuz f4,f5"
func_check +288 "fctiwuz. f4,f5"
func_check +292 "fctidu f4,f5"
func_check +296 "fctidu. f4,f5"
func_check +300 "fctiduz f4,f5"
func_check +304 "fctiduz. f4,f5"
func_check +308 "fcfidu f4,f5"
func_check +312 "fcfidu. f4,f5"
func_check +316 "ftdiv cr0,f10,f11"
func_check +320 "ftdiv cr7,f10,f11"
func_check +324 "ftsqrt cr0,f10"
func_check +328 "ftsqrt cr7,f10"
func_check +332 "dcbtt r8,r9"
func_check +336 "dcbtstt r8,r9"
func_check +340 "dcffix f10,f12"
func_check +344 "dcffix. f20,f22"
func_check +348 "lbarx r10,r11,r12"
func_check +352 "lbarx r10,r11,r12"
func_check +356 "lbarx r10,r11,r12,1"
func_check +360 "lharx r20,r21,r22"
func_check +364 "lharx r20,r21,r22"
func_check +368 "lharx r20,r21,r22,1"
func_check +372 "stbcx. r10,r11,r12"
func_check +376 "sthcx. r10,r11,r12"
func_check +380 "fre f14,f15"
func_check +384 "fre. f14,f15"
func_check +388 "fres f14,f15"
func_check +392 "fres. f14,f15"
func_check +396 "frsqrte f14,f15"
func_check +400 "frsqrte. f14,f15"
func_check +404 "frsqrtes f14,f15"
func_check +408 "frsqrtes. f14,f15"
func_check +412 "isel r2,r3,r4,28"
func_check +416 "dcbzl r8,r9"
func_check +420 "frsqrtes f10,f11"
func_check +424 "dadd f1,f2,f1"
func_check +428 "daddq f0,f2,f0"
func_check +432 "dsub f1,f2,f1"
func_check +436 "dsubq f0,f2,f0"
func_check +440 "dmul f1,f2,f1"
func_check +444 "dmulq f0,f2,f0"
func_check +448 "ddiv f1,f2,f1"
func_check +452 "ddivq f0,f2,f0"
func_check +456 "dcmpu cr1,f2,f1"
func_check +460 "dcmpuq cr1,f2,f0"
func_check +464 "tabort. r5"
func_check +468 "tabortwc. 7,r8,r16"
func_check +472 "tabortdc. 20,r11,r10"
func_check +476 "tabortwci. 17,r10,-13"
func_check +480 "tabortdci. 29,r3,-5"
func_check +484 "tbegin."
func_check +488 "tcheck cr7"
func_check +492 "tend."
func_check +496 "tendall."
func_check +500 "treclaim. r24"
func_check +504 "trechkpt."
func_check +508 "tsuspend."
func_check +512 "tresume."
func_check +516 "rfebb 0"
func_check +520 "rfebb"
func_check +524 "bctar- 12,4\\*cr5\\+gt"
func_check +528 "bctarl- 4,4\\*cr1\\+so"
func_check +532 "bctar\\+ 12,4\\*cr3\\+lt"
func_check +536 "bctarl\\+ 4,eq"
func_check +540 "bctar 4,4\\*cr2\\+lt,1"
func_check +544 "bctarl 4,4\\*cr1\\+so,2"
func_check +548 "waitasec"
func_check +552 "msgsndp r8"
func_check +556 "mtsle 1"
func_check +560 "msgclrp r27"
func_check +564 "stqcx. r10,r10,r12"
func_check +568 "stqcx. r28,0,r7"
func_check +572 "lqarx r24,r19,r11"
func_check +576 "lqarx r22,0,r11"
func_check +580 "mfbhrbe r20,6"
func_check +584 "pbt. r29,r17,r16"
func_check +588 "pbt. r14,0,r7"
func_check +592 "clrbhrb"
func_check +596 "vpermxor v11,v10,v0,v23"
func_check +600 "vaddeuqm v24,v2,v7,v4"
func_check +604 "vaddecuq v10,v10,v8,v2"
func_check +608 "vsubeuqm v5,v15,v8,v19"
func_check +612 "vsubecuq v12,v31,v16,v29"
func_check +616 "vmulouw v20,v29,v13"
func_check +620 "vmuluwm v29,v0,v26"
func_check +624 "vaddudm v8,v21,v28"
func_check +628 "vmaxud v1,v26,v1"
func_check +632 "vrld v20,v3,v1"
func_check +636 "vcmpequd v4,v19,v11"
func_check +640 "vadduqm v23,v14,v30"
func_check +644 "vaddcuq v8,v8,v13"
func_check +648 "vmulosw v28,v27,v4"
func_check +652 "vmaxsd v3,v4,v4"
func_check +656 "vmuleuw v0,v19,v21"
func_check +660 "vminud v24,v20,v19"
func_check +664 "vcmpgtud v0,v28,v15"
func_check +668 "vmulesw v21,v0,v2"
func_check +672 "vminsd v9,v26,v9"
func_check +676 "vsrad v25,v29,v11"
func_check +680 "vcmpgtsd v11,v28,v11"
func_check +684 "bcdadd. v5,v8,v26,1"
func_check +688 "vpmsumb v4,v3,v12"
func_check +692 "bcdsub. v26,v31,v21,1"
func_check +696 "vpmsumh v5,v17,v16"
func_check +700 "vpkudum v23,v17,v20"
func_check +704 "vpmsumw v24,v21,v29"
func_check +708 "vpmsumd v9,v22,v13"
func_check +712 "vpkudus v18,v19,v18"
func_check +716 "vsubuqm v30,v16,v22"
func_check +720 "vcipher v14,v11,v7"
func_check +724 "vcipherlast v10,v2,v22"
func_check +728 "vgbbd v23,v13"
func_check +732 "vsubcuq v16,v25,v16"
func_check +736 "vorc v31,v1,v5"
func_check +740 "vncipher v4,v17,v31"
func_check +744 "vncipherlast v24,v2,v27"
func_check +748 "vbpermq v23,v21,v23"
func_check +752 "vpksdus v27,v18,v9"
func_check +756 "vnand v27,v29,v27"
func_check +760 "vsld v19,v19,v24"
func_check +764 "vsbox v5,v13"
func_check +768 "vpksdss v25,v3,v7"
func_check +772 "vcmpequd. v28,v8,v0"
func_check +776 "vupkhsw v26,v26"
func_check +780 "vshasigmaw v5,v7,0,6"
func_check +784 "veqv v28,v21,v14"
func_check +788 "vmrgow v1,v8,v19"
func_check +792 "vshasigmad v0,v10,0,10"
func_check +796 "vsrd v5,v27,v14"
func_check +800 "vupklsw v11,v13"
func_check +804 "vclzb v14,v16"
func_check +808 "vpopcntb v20,v27"
func_check +812 "vclzh v28,v11"
func_check +816 "vpopcnth v24,v9"
func_check +820 "vclzw v27,v31"
func_check +824 "vpopcntw v17,v19"
func_check +828 "vclzd v12,v29"
func_check +832 "vpopcntd v23,v22"
func_check +836 "vcmpgtud. v24,v20,v29"
func_check +840 "vcmpgtsd. v9,v6,v27"
func_check +844 "lxsiwzx vs62,r14,r26"
func_check +848 "lxsiwzx vs40,0,r25"
func_check +852 "lxsiwax vs25,0,r26"
func_check +856 "lxsiwax vs3,0,r3"
func_check +860 "mfvsrd r12,vs62"
func_check +864 "mffprwz r20,f12"
func_check +868 "stxsiwx vs14,r9,r14"
func_check +872 "stxsiwx vs21,0,r8"
func_check +876 "mtvsrd vs48,r11"
func_check +880 "mtvrwa v31,r23"
func_check +884 "mtfprwz f16,r26"
func_check +888 "lxsspx vs13,r19,r13"
func_check +892 "lxsspx vs18,0,r13"
func_check +896 "stxsspx vs43,r2,r4"
func_check +900 "stxsspx vs55,0,r11"
func_check +904 "xsaddsp vs54,vs48,vs25"
func_check +908 "xsmaddasp vs14,vs50,vs1"
func_check +912 "xssubsp vs26,vs22,vs42"
func_check +916 "xsmaddmsp vs27,vs53,vs52"
func_check +920 "xsrsqrtesp vs8,vs59"
func_check +924 "xssqrtsp vs12,vs41"
func_check +928 "xsmulsp vs57,vs11,vs32"
func_check +932 "xsmsubasp vs38,vs20,vs26"
func_check +936 "xsdivsp vs26,vs19,vs6"
func_check +940 "xsmsubmsp vs35,vs37,vs55"
func_check +944 "xsresp vs59,vs8"
func_check +948 "xsnmaddasp vs44,vs33,vs33"
func_check +952 "xsnmaddmsp vs17,vs62,vs30"
func_check +956 "xsnmsubasp vs54,vs52,vs31"
func_check +960 "xsnmsubmsp vs37,vs5,vs58"
func_check +964 "xxlorc vs30,vs54,vs44"
func_check +968 "xxlnand vs49,vs14,vs29"
func_check +972 "xxleqv vs62,vs22,vs30"
func_check +976 "xscvdpspn vs60,vs54"
func_check +980 "xsrsp vs22,vs45"
func_check +984 "xscvuxdsp vs26,vs59"
func_check +988 "xscvsxdsp vs38,vs49"
func_check +992 "xscvspdpn vs59,vs26"
func_check +996 "fmrgow f24,f14,f2"
func_check +1000 "fmrgew f22,f7,f5"