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

if {[istarget *arm*-*-*] || [istarget "xscale-*-*"]} then {

    if {[istarget *-wince-*]} then {
	run_dump_test "wince_inst"
	run_dump_test "wince_ldconst"
	run_dump_test "wince_arm7t"
	run_dump_test "wince_copro"
    } else {
	run_dump_test "inst"
	run_dump_test "ldconst"
	run_dump_test "arm7t"
	run_dump_test "copro"
    }

    gas_test "arm3.s" "-mcpu=arm3" $stdoptlist "Arm 3 instructions"
    gas_test "arm6.s" "-mcpu=arm6" $stdoptlist "Arm 6 instructions"
    gas_test "arm7dm.s" "-mcpu=arm7dm" $stdoptlist "Arm 7DM instructions"
    gas_test "arch4t.s" "-march=armv4t" $stdoptlist "Arm architecture 4t instructions"
    gas_test "immed.s" "" $stdoptlist "immediate expressions"
    gas_test "float.s" "-mcpu=arm7tdmi -mfpu=fpa" $stdoptlist "Core floating point instructions"
    gas_test "offset.s" "" $stdoptlist "OFFSET_IMM regression"

    run_dump_test "armv1"
    run_dump_test "arch5tej"
    run_dump_test "fpa-monadic"
    run_dump_test "fpa-dyadic"
    run_dump_test "fpa-mem"
    run_dump_test "vfp1xD"
    run_dump_test "vfp1"
    run_dump_test "vfp2"
    run_dump_test "xscale"
    run_dump_test "adrl"
    run_dump_test "reg-alias"
    run_dump_test "maverick"    
    run_dump_test "archv6"
    run_dump_test "thumbv6"
    run_dump_test "arch6zk"
    
    run_errors_test "vfp-bad" "-mfpu=vfp" "VFP errors"
    run_errors_test "req" "-mcpu=arm7m" ".req errors"
    run_errors_test "armv1-bad" "-mcpu=arm7m" "ARM v1 errors"
    run_errors_test "r15-bad" "" "Invalid use of r15 errors"
    run_errors_test "undefined" "" "Undefined local label error"

    if {[istarget *-*-*elf*] || [istarget *-*-linux*] || [istarget *-*-*eabi]} then {
	run_dump_test "pic"
	run_dump_test "mapping"
	gas_test "bignum1.s" "" $stdoptlist "bignums"
	run_dump_test "unwind"
    }

    if {! [istarget arm*-*-aout] && ![istarget arm-*-pe]} then {
	# The arm-aout port does not support Thumb mode.
	gas_test "thumb.s" "-mcpu=arm7t" $stdoptlist "Thumb instructions"
    }
}

# Not all arm targets are bi-endian, so only run this test on ones
# we know that are.  FIXME: We should probably also key off armeb/armel.

if [istarget arm-*-pe] {
    run_dump_test "le-fpconst"

    # Since big-endian numbers have the normal format, this doesn't exist.
    #run_dump_test "be-fpconst"
}

if [istarget xscale-*] {
    run_dump_test "iwmmxt"
    run_errors_test "iwmmxt-bad" "-mcpu=iwmmxt" "iWMMXt errors"
}
