#
# i386 tests
#
proc run_list_test { name opts } {
    global srcdir subdir
    set testname "i386 $name"
    set file $srcdir/$subdir/$name
    gas_run ${name}.s $opts ">&dump.out"
    if { [regexp_diff "dump.out" "${file}.l"] } then {
	fail $testname
	verbose "output is [file_contents "dump.out"]" 2
	return
    }
    pass $testname
}

proc gas_64_check { } {
    global NM
    global NMFLAGS
    global srcdir

    catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
    return [regexp "targets:.*x86-64" $nm_help]
}

proc gas_32_check { } {
    global NM
    global NMFLAGS
    global srcdir

    catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
    return [regexp "targets:.*i386" $nm_help]
}

if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]  then {

    global ASFLAGS
    set old_ASFLAGS "$ASFLAGS"
    set ASFLAGS "$ASFLAGS --32"

    run_list_test "float" "-al"
    run_list_test "general" "-al --listing-lhs-width=2"
    run_list_test "inval" "-al"
    run_list_test "segment" "-al"
    run_list_test "inval-seg" "-al"
    run_list_test "modrm" "-al --listing-lhs-width=2"
    run_dump_test "naked"
    run_dump_test "opcode"
    run_dump_test "opcode-intel"
    run_dump_test "opcode-suffix"
    run_dump_test "intel"
    run_dump_test "intel16"
    run_list_test "intelbad" ""
    run_dump_test "intelok"
    run_dump_test "prefix"
    run_dump_test "amd"
    run_dump_test "katmai"
    run_dump_test "jump"
    run_dump_test "ssemmx2"
    run_dump_test "sse2"
    run_dump_test "sub"
    run_dump_test "prescott"
    run_dump_test "sib"
    run_dump_test "vmx"
    run_dump_test "suffix"
    run_dump_test "immed32"
    run_dump_test "equ"
    run_dump_test "divide"
    run_dump_test "padlock"
    run_dump_test "crx"
    run_list_test "cr-err" ""
    run_dump_test "svme"
    run_dump_test "amdfam10"
    run_dump_test "merom"
    run_dump_test "rep"
    run_dump_test "rep-suffix"
    run_dump_test "fp"
    run_dump_test "nops"
    run_dump_test "nops-1"
    run_dump_test "nops-1-i386"
    run_dump_test "nops-1-i686"
    run_dump_test "nops-1-merom"
    run_dump_test "nops-2"
    run_dump_test "nops-2-i386"
    run_dump_test "nops-2-merom"
    run_dump_test "nops-3"
    run_dump_test "addr16"
    run_dump_test "addr32"

    # These tests require support for 8 and 16 bit relocs,
    # so we only run them for ELF and COFF targets.
    if {[is_elf_format] || [istarget "*-*-coff*"]} then {
	run_dump_test "reloc"
	run_dump_test "jump16"
	run_list_test "white" "-al --listing-lhs-width=3"

	# These tests should in theory work for PE targets as well,
	# but the relocs we currently produce are slightly different
	# from those produced for ELF/COFF based toolchains.
	# So for now we ignore PE targets.
	run_dump_test "pcrel"
	run_dump_test "absrel"
    }

    # ELF specific tests
    if [is_elf_format] then {
	# PIC is only supported on ELF targets.
	run_dump_test "intelpic"

	run_dump_test "relax"
	run_dump_test "gotpc"
	run_dump_test "tlsd"
	run_dump_test "tlspic"
	run_dump_test "tlsnopic"
	run_dump_test "bss"
	run_dump_test "reloc32"
	run_list_test "reloc32" "--defsym _bad_=1"
	run_dump_test "mixed-mode-reloc32"
    }

    # This is a PE specific test.
    if { [istarget "*-*-cygwin*"] || [istarget "*-*-pe"]
	 || [istarget "*-*-mingw*"]
    } then {
	run_dump_test "secrel"
    }

    set ASFLAGS "$old_ASFLAGS"
}

if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] then {

    global ASFLAGS
    set old_ASFLAGS "$ASFLAGS"
    set ASFLAGS "$ASFLAGS --64"

    run_dump_test "x86_64"
    run_dump_test "x86-64-addr32"
    run_dump_test "x86-64-opcode"
    run_dump_test "x86-64-pcrel"
    run_dump_test "x86-64-rip"
    run_dump_test "x86-64-stack"
    run_dump_test "x86-64-stack-intel"
    run_dump_test "x86-64-stack-suffix"
    run_list_test "x86-64-inval" "-al"
    run_list_test "x86-64-segment" "-al"
    run_list_test "x86-64-inval-seg" "-al"
    run_dump_test "x86-64-branch"
    run_dump_test "svme64"
    run_dump_test "x86-64-amdfam10"
    run_dump_test "x86-64-vmx"
    run_dump_test "immed64"
    run_dump_test "x86-64-prescott"
    run_dump_test "x86-64-crx"
    run_dump_test "x86-64-crx-suffix"
    run_dump_test "x86-64-drx"
    run_dump_test "x86-64-drx-suffix"
    run_dump_test "x86-64-merom"
    run_dump_test "x86-64-rep"
    run_dump_test "x86-64-rep-suffix"
    run_dump_test "x86-64-cbw"
    run_dump_test "x86-64-cbw-intel"
    run_dump_test "x86-64-io"
    run_dump_test "x86-64-io-intel"
    run_dump_test "x86-64-io-suffix"
    run_dump_test "x86-64-gidt"
    run_dump_test "x86-64-nops"
    if ![istarget "x86_64-*-mingw*"] then {
	run_dump_test "x86-64-nops-1"
    }
    run_dump_test "x86-64-nops-1-k8"
    run_dump_test "x86-64-nops-1-nocona"
    run_dump_test "x86-64-nops-1-merom"

    if { ![istarget "*-*-aix*"]
      && ![istarget "*-*-beos*"]
      && ![istarget "*-*-*bsd*"]
      && ![istarget "*-*-chaos*"]
      && ![istarget "*-*-kaos*"]
      && ![istarget "*-*-lynx*"]
      && ![istarget "*-*-moss*"]
      && ![istarget "*-*-nto-qnx*"]
      && ![istarget "*-*-rtems*"]
      && ![istarget "*-*-sco*"]
      && ![istarget "*-*-solaris*"]
      && ![istarget "*-*-sysv*"] } then {
	run_dump_test "rex"
    }

    # For ELF targets verify that @unwind works.
    if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"]
	  || [istarget "*-*-solaris2.*"])
	 && ![istarget *-*-linux*aout*]
	 && ![istarget *-*-linux*oldld*] } then {
	run_dump_test "x86-64-unwind"
    }

    # ELF specific tests
    if [is_elf_format] then {
	run_dump_test "reloc64"
	run_list_test "reloc64" "--defsym _bad_=1"
	run_dump_test "mixed-mode-reloc64"
    }

    set ASFLAGS "$old_ASFLAGS"
}
