# Copyright 2014-2021 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 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"
