# Run some tests of gas macros.

proc run_list_test { name opts } {
    global srcdir subdir
    set testname "macros $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
}

if { ![istarget hppa*-*-*] || [istarget *-*-linux*] } {
    run_dump_test test1
}

if { ![istarget *c54x*-*-*] && ![istarget *c4x*-*-*] } {
    run_dump_test test2
}

run_dump_test test3

if { ![istarget *c54x*-*-*] && ![istarget *c4x*-*-*] } {
    run_dump_test irp
    run_dump_test rept
    run_dump_test repeat
    run_dump_test vararg
}

gas_test_error "err.s" "" "macro infinite recursion"

# The tic4x-coff target fails the next test because it defines '&'
# as its line separator character, so the expression "(0 & TFLAG_C)"
# becomes divided up into two lines and the parser complains about
# a missing closing parenthesis for the first line.
setup_xfail "tic4x*-*"
gas_test "and.s" "" "" "logical and in macro definition"

case $target_triplet in {
    { hppa*-*-* } { if [istarget *-*-linux*] { run_dump_test semi } }
    { *c4x*-*-* } { }
    { *c54x*-*-* } { }
    default {
	run_dump_test semi
    }
}

if { ![istarget hppa*-*-*] || [istarget *-*-linux*] } {
    # FIXME: Due to macro mishandling of ONLY_STANDARD_ESCAPES.
    setup_xfail "avr-*" "cris-*" "crisv32-*" "msp430-*"

    # These fail due to NO_STRING_ESCAPES
    setup_xfail "powerpc*-*-aix*" "powerpc*-*-beos*" "powerpc*-*-macos*"
    setup_xfail "powerpc*-*-pe" "powerpc*-*-*win*"
    setup_xfail "rs6000-*-*"

    # FIXME: Due to difference in what "consecutive octets" means.
    setup_xfail "*c4x*-*-*" "*c54x*-*"
    run_dump_test strings
}

run_dump_test app1
run_dump_test app2
run_dump_test app3
run_dump_test app4

run_list_test badarg ""
case $target_triplet in {
    { *c54x*-*-* } { }
    { *c4x*-*-* } { }
    { h8500-*-* } { }
    { m68*-*-* } { }
    { m88*-*-* } { }
    { mmix-* } { }
    default { run_list_test dot "-alm" }
}
run_list_test end ""
run_list_test purge "--hash-size=8000"
run_list_test redef ""
