# Copyright 2014-2020 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]

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 func ""

gdb_test "set disassembler-options vsx"
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 "lxsiwzx vs62,r14,r26"
func_check "lxsiwzx vs40,0,r25"
func_check "lxsiwax vs25,0,r26"
func_check "lxsiwax vs3,0,r3"
func_check "mfvsrd  r12,vs30"
func_check "mfvsrd  r12,vs30"
func_check "mfvsrd  r12,vs62"
func_check "mfvsrd  r12,vs62"
func_check "mffprwz r20,f12"
func_check "mffprwz r20,f12"
func_check "mfvrwz  r21,v12"
func_check "mfvrwz  r21,v12"
func_check "stxsiwx vs14,r9,r14"
func_check "stxsiwx vs21,0,r8"
func_check "mtvsrd  vs11,r28"
func_check "mtvsrd  vs11,r28"
func_check "mtvsrd  vs43,r29"
func_check "mtvsrd  vs43,r29"
func_check "mtfprwa f24,r22"
func_check "mtfprwa f24,r22"
func_check "mtvrwa  v25,r23"
func_check "mtvrwa  v25,r23"
func_check "mtfprwz f26,r27"
func_check "mtfprwz f26,r27"
func_check "mtvrwz  v27,r28"
func_check "mtvrwz  v27,r28"
func_check "lxsspx  vs13,r19,r13"
func_check "lxsspx  vs18,0,r13"
func_check "stxsspx vs43,r2,r4"
func_check "stxsspx vs55,0,r11"
func_check "xsaddsp vs54,vs48,vs25"
func_check "xsmaddasp vs14,vs50,vs1"
func_check "xssubsp vs26,vs22,vs42"
func_check "xsmaddmsp vs27,vs53,vs52"
func_check "xsrsqrtesp vs8,vs59"
func_check "xssqrtsp vs12,vs41"
func_check "xsmulsp vs57,vs11,vs32"
func_check "xsmsubasp vs38,vs20,vs26"
func_check "xsdivsp vs26,vs19,vs6"
func_check "xsmsubmsp vs35,vs37,vs55"
func_check "xsresp  vs59,vs8"
func_check "xsnmaddasp vs44,vs33,vs33"
func_check "xsnmaddmsp vs17,vs62,vs30"
func_check "xsnmsubasp vs54,vs52,vs31"
func_check "xsnmsubmsp vs37,vs5,vs58"
func_check "xxlorc  vs30,vs54,vs44"
func_check "xxlnand vs49,vs14,vs29"
func_check "xxleqv  vs62,vs22,vs30"
func_check "xscvdpspn vs60,vs54"
func_check "xsrsp   vs22,vs45"
func_check "xscvuxdsp vs26,vs59"
func_check "xscvsxdsp vs38,vs49"
func_check "xscvspdpn vs59,vs26"
func_check "fmrgow  f24,f14,f2"
func_check "fmrgew  f22,f7,f5"
