# Test for warnings when placing yield instructions into IQ2000's
# branch delay slot.  Written by Ben Elliston (bje@redhat.com)

# Run GAS and check that it emits the desired warning for the test case.
# Arguments:
#   file -- name of the test case to assemble.
#   testname -- a string describing the test.
#   warnpattern -- a regular expression, suitable for use by the Tcl
#     regexp command, to decide if the warning string was emitted by
#     the assembler to stderr.

proc iq2000_warning_test { file testname {warnpattern ""} } {
    global comp_output

    gas_run $file "-m10" ">/dev/null"
    verbose "output was $comp_output" 2

    if {$warnpattern == ""} {
	if {$comp_output == ""} { pass $testname } else { fail $testname }
	return
    }

    if {[regexp "Warning: $warnpattern" $comp_output]} {
	pass $testname
    } else {
	fail $testname
    }
}

if [istarget iq2000*-*-*] {
    foreach file [glob -nocomplain -- $srcdir/$subdir/q10yield*.s] {
	set file [file tail $file]
	iq2000_warning_test $file \
		"assembler emits yield instruction in delay slot warning for $file" \
		"instruction \[a-zA-Z0-9\]+ may not follow a branch/jump"
    }
    set testname "assembler emits no warnings for non-yield instruction in delay slot"
    iq2000_warning_test q10noyield.s $testname
}
