* sim/cris/hw: New directory for subdirectories with tests.

* sim/cris/hw/rv-n-cris: New directory with tests.
This commit is contained in:
Hans-Peter Nilsson 2006-04-03 03:05:00 +00:00
parent aad3b3cbc1
commit 26d01138dd
22 changed files with 986 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2006-04-03 Hans-Peter Nilsson <hp@axis.com>
* sim/cris/hw: New directory for subdirectories with tests.
* sim/cris/hw/rv-n-cris: New directory with tests.
2006-04-02 Hans-Peter Nilsson <hp@axis.com>
* sim/cris/asm/testutils.inc (test_h_mem): Use register prefix.

View File

@ -0,0 +1,8 @@
#mach: crisv32
#sim(crisv32): --hw-device "/rv/host localhost"
# Check that we trivially resolve a hostname.
#r @,@srcdir@/trivial4.r
.include "trivial4.ms"

View File

@ -0,0 +1,69 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: IRQ 0x4\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543211\n
#output: /rv: REG R 0xd0000030\n
#output: /rv: IRQ 0x0\n
#output: /rv: := 0xeeff4455\n
#output: pass\n
# Trivial test of interrupts.
# Locations of IRQ notifiers above depend on when the simulator is
# polled; adjustments may be needed (after checking that no poll is
# gone due to a bug!)
#r W,
#r r,a8832,abcdef01
#r I,4
#r r,a8836,76543210
#r r,a8836,76543211
#r I,0
#r r,a8830,eeff4455
.lcomm dummy,4
.include "testutils.inc"
start
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
test_h_mem 0xabcdef01 0xd0000032
nop
nop
test_h_mem 0x76543210 0xd0000036
ei
test_h_mem 0,dummy
wouldreturnhere:
nop
killme:
fail
returnhere:
test_h_mem 0x76543211 0xd0000036
test_h_mem 0xeeff4455 0xd0000030
pass
irq0x33:
.if ..asm.arch.cris.v32
test_h_dr wouldreturnhere,$erp
move returnhere,$erp
rete
rfe
.else
move $dccr,$r0
test_h_dr wouldreturnhere,$irp
move returnhere,$irp
reti
move $r0,$dccr
.endif
singlevec irqvec1,0x33,irq0x33

View File

@ -0,0 +1,44 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: IRQ 0xaa\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: REG R 0xd0000030\n
#output: /rv: IRQ 0x0\n
#output: /rv: := 0xeeff4455\n
#output: pass\n
# Primarily to test multiple-int-bits set in dv-rv.c.
#r W,
#r r,a8832,abcdef01
#r I,6
#r r,a8836,76543210
#r I,0
#r r,a8830,eeff4455
.lcomm dummy,4
.include "testutils.inc"
start
test_h_mem 0xabcdef01 0xd0000032
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
test_h_mem 0,dummy
killme:
fail
irq0xea:
test_h_mem 0x76543210 0xd0000036
test_h_mem 0xeeff4455 0xd0000030
pass
singlevec irqvec1,0xea,irq0xea

View File

@ -0,0 +1,46 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: IRQ 0xaa\n
#output: /rv: IRQ 0xaa\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: REG R 0xd0000030\n
#output: /rv: IRQ 0x0\n
#output: /rv: := 0xeeff4455\n
#output: pass\n
# Much like irq2.ms, but modified to check same-int-port-value-twice.
#r W,
#r r,a8832,abcdef01
#r I,6
#r I,6
#r r,a8836,76543210
#r I,0
#r r,a8830,eeff4455
.lcomm dummy,4
.include "testutils.inc"
start
test_h_mem 0xabcdef01 0xd0000032
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
test_h_mem 0,dummy
killme:
fail
irq0xea:
test_h_mem 0x76543210 0xd0000036
test_h_mem 0xeeff4455 0xd0000030
pass
singlevec irqvec1,0xea,irq0xea

View File

@ -0,0 +1,46 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int ignore_previous"
#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int ignore_previous"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: IRQ 0x4\n
#output: /rv: IRQ 0x8\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: REG R 0xd0000030\n
#output: /rv: IRQ 0x0\n
#output: /rv: := 0xeeff4455\n
#output: pass\n
# Much like irq3.ms, but modified to test multiple-int ignore_previous.
#r W,
#r r,a8832,abcdef01
#r I,4
#r I,8
#r r,a8836,76543210
#r I,0
#r r,a8830,eeff4455
.lcomm dummy,4
.include "testutils.inc"
start
test_h_mem 0xabcdef01 0xd0000032
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
test_h_mem 0,dummy
killme:
fail
irq0x34:
test_h_mem 0x76543210 0xd0000036
test_h_mem 0xeeff4455 0xd0000030
pass
singlevec irqvec1,0x34,irq0x34

View File

@ -0,0 +1,46 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int 0xae"
#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int 0xae"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: IRQ 0x4\n
#output: /rv: IRQ 0x8\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: REG R 0xd0000030\n
#output: /rv: IRQ 0x0\n
#output: /rv: := 0xeeff4455\n
#output: pass\n
# Much like irq4.ms, but modified to test vector case for multiple-int.
#r W,
#r r,a8832,abcdef01
#r I,4
#r I,8
#r r,a8836,76543210
#r I,0
#r r,a8830,eeff4455
.lcomm dummy,4
.include "testutils.inc"
start
test_h_mem 0xabcdef01 0xd0000032
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
test_h_mem 0,dummy
killme:
fail
irq0xae:
test_h_mem 0x76543210 0xd0000036
test_h_mem 0xeeff4455 0xd0000030
pass
singlevec irqvec1,0xae,irq0xae

View File

@ -0,0 +1,88 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
#output: /rv: WD\n
#output: /rv: MBOX H 0x1001d..0x10037\n
#output: /rv: 0x10020: 12 23 34 56 79 8a bd de\n
#output: /rv: 0x10028: fb ad ba db ad 56 78 9a\n
#output: /rv: 0x10030: fd e1 23 45 66 54 32 1a\n
#output: /rv: -> 0x1001d..0x10027\n
#output: /rv: 0x10020: aa 55 77 88 32 10 ee cc\n
#output: /rv: MBOX P 0xfffd..0x1001f\n
#output: /rv: 0x10000: aa 55 12 23 34 56 79 8a\n
#output: /rv: 0x10008: bd de fb ad ba db ad 56\n
#output: /rv: 0x10010: 78 9a fd e1 23 45 66 54\n
#output: /rv: 0x10018: 32 1a ac cb be ed db ed\n
#output: /rv: -> 0xfffd..0x10017\n
#output: /rv: 0x10000: 11 22 56 78 ee dd 12 ab\n
#output: /rv: 0x10008: 55 aa ee 00 42 12 27 98\n
#output: /rv: 0x10010: 88 55 22 33 66 77 22 45\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543211\n
#output: pass\n
# Trivial test of mailbox commands.
#r W,
#r i,1b000512233456798abddefbadbadbad56789afde123456654321a
#r o,0b0005aa5577883210eecc
#r i,230006aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbed
#r o,1b000511225678eedd12ab55aaee00421227988855223366772245
#r r,a8838,76543211
.include "testutils.inc"
start
move.w 0x1b,$r0
move.d 0x1001d,$r1
move.w $r0,[$r1+]
moveq 5,$r0
move.b $r0,[$r1]
mvi_h_mem 0x56342312 0x10020
mvi_h_mem 0xdebd8a79 0x10024
mvi_h_mem 0xdbbaadfb 0x10028
mvi_h_mem 0x9a7856ad 0x1002c
mvi_h_mem 0x4523e1fd 0x10030
mvi_h_mem 0x1a325466 0x10034
mvi_h_mem 0x1001d 0xc000f000
move.d 0x1001d,$r0
movu.w [$r0+],$r1
test_h_gr 0xb $r1
movu.b [$r0],$r1
test_h_gr 0x5 $r1
test_h_mem 0x887755aa 0x10020
test_h_mem 0xccee1032 0x10024
move.w 0x23,$r0
move.d 0xfffd,$r1
move.w $r0,[$r1+]
moveq 6,$r0
move.b $r0,[$r1]
mvi_h_mem 0x231255aa 0x10000
mvi_h_mem 0x8a795634 0x10004
mvi_h_mem 0xadfbdebd 0x10008
mvi_h_mem 0x56addbba 0x1000c
mvi_h_mem 0xe1fd9a78 0x10010
mvi_h_mem 0x54664523 0x10014
mvi_h_mem 0xcbac1a32 0x10018
mvi_h_mem 0xeddbedbe 0x1001c
mvi_h_mem 0xfffd 0xc000f000
move.d 0xfffd,$r0
movu.w [$r0+],$r1
test_h_gr 0x1b $r1
movu.b [$r0],$r1
test_h_gr 0x6 $r1
test_h_mem 0x78562211 0x10000
test_h_mem 0xab12ddee 0x10004
test_h_mem 0x00eeaa55 0x10008
test_h_mem 0x98271242 0x1000c
test_h_mem 0x33225588 0x10010
test_h_mem 0x45227766 0x10014
test_h_mem 0x76543211 0xd0000038
pass
.fill 65536*2+128,1,0

View File

@ -0,0 +1,100 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: DMA W 0x20020..0x2003f\n
#output: /rv: 0x20020: 12 23 34 56\n
#output: /rv: 0x20024: 79 8a bd de\n
#output: /rv: 0x20028: fb ad ba db\n
#output: /rv: 0x2002c: ad 56 78 9a\n
#output: /rv: 0x20030: fd e1 23 45\n
#output: /rv: 0x20034: 66 54 32 1a\n
#output: /rv: 0x20038: ac cb be ed\n
#output: /rv: 0x2003c: db ed aa da\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543211\n
#output: /rv: DMA R 0x20000..0x2001f\n
#output: /rv: 0x20000: aa 55 12 23\n
#output: /rv: 0x20004: 34 56 79 8a\n
#output: /rv: 0x20008: bd de fb ad\n
#output: /rv: 0x2000c: ba db ad 56\n
#output: /rv: 0x20010: 78 9a fd e1\n
#output: /rv: 0x20014: 23 45 66 54\n
#output: /rv: 0x20018: 32 1a ac cb\n
#output: /rv: 0x2001c: be ed db ed\n
#output: /rv: IRQ 0x8\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543212\n
#output: pass\n
# Trivial test of DMA.
# Locations of IRQ notifiers above depend on when the simulator is
# polled; adjustments may be needed (after checking that no poll is
# gone due to a bug!)
#r W,
#r r,a8836,76543210
#r s,e020,12233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada
#r r,a8838,76543211
#r l,e000,aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbed
#r I,8
#r r,a8838,76543212
.include "testutils.inc"
start
test_h_mem 0x76543210 0xd0000036
move.d 0x2003f,$r1
move.d 0x10000,$r3
0:
test.b [$r1]
bne 1f
subq 1,$r3
bne 0b
nop
1:
test_h_mem 0x56342312 0x20020
test_h_mem 0xdebd8a79 0x20024
test_h_mem 0xdbbaadfb 0x20028
test_h_mem 0x9a7856ad 0x2002c
test_h_mem 0x4523e1fd 0x20030
test_h_mem 0x1a325466 0x20034
test_h_mem 0xedbecbac 0x20038
test_h_mem 0xdaaaeddb 0x2003c
move.d 0x20020,$r0
move.d 0x20000,$r1
move.w 0x55aa,$r2
move.w $r2,[r1+]
.rept 8
move.d [$r0+],$r2
move.d $r2,[$r1+]
.endr
test_h_mem 0x76543211 0xd0000038
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
move.d 0x100000,$r9
0:
subq 1,$r9
bne 0b
nop
killme:
fail
irq0x34:
test_h_mem 0x76543212 0xd0000038
pass
.fill 65536*2+128,1,0
singlevec irqvec1,0x34,irq0x34

View File

@ -0,0 +1,104 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: DMA W 0x20020..0x20043\n
#output: /rv: 0x20020: 12 23 34 56\n
#output: /rv: 0x20024: 79 8a bd de\n
#output: /rv: 0x20028: fb ad ba db\n
#output: /rv: 0x2002c: ad 56 78 9a\n
#output: /rv: 0x20030: fd e1 23 45\n
#output: /rv: 0x20034: 66 54 32 1a\n
#output: /rv: 0x20038: ac cb be ed\n
#output: /rv: 0x2003c: db ed aa da\n
#output: /rv: 0x20040: 00 aa bb cc\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543211\n
#output: /rv: DMA R 0x20000..0x20023\n
#output: /rv: 0x20000: aa 55 12 23\n
#output: /rv: 0x20004: 34 56 79 8a\n
#output: /rv: 0x20008: bd de fb ad\n
#output: /rv: 0x2000c: ba db ad 56\n
#output: /rv: 0x20010: 78 9a fd e1\n
#output: /rv: 0x20014: 23 45 66 54\n
#output: /rv: 0x20018: 32 1a ac cb\n
#output: /rv: 0x2001c: be ed db ed\n
#output: /rv: 0x20020: aa da 00 aa\n
#output: /rv: IRQ 0x8\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543212\n
#output: pass\n
# This is a slight variation of mem1.ms just to trig the "buffer needs
# to be malloced for large request size" for the DMA request.
# Locations of IRQ notifiers above depend on when the simulator is
# polled; adjustments may be needed (after checking that no poll is
# gone due to a bug!)
#r W,
#r r,a8836,76543210
#r s,e020,12233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada00aabbcc
#r r,a8838,76543211
#r l,e000,aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada00aa
#r I,8
#r r,a8838,76543212
.include "testutils.inc"
start
test_h_mem 0x76543210 0xd0000036
move.d 0x2003f,$r1
move.d 0x10000,$r3
0:
test.b [$r1]
bne 1f
subq 1,$r3
bne 0b
nop
1:
test_h_mem 0x56342312 0x20020
test_h_mem 0xdebd8a79 0x20024
test_h_mem 0xdbbaadfb 0x20028
test_h_mem 0x9a7856ad 0x2002c
test_h_mem 0x4523e1fd 0x20030
test_h_mem 0x1a325466 0x20034
test_h_mem 0xedbecbac 0x20038
test_h_mem 0xdaaaeddb 0x2003c
test_h_mem 0xccbbaa00 0x20040
move.d 0x20020,$r0
move.d 0x20000,$r1
move.w 0x55aa,$r2
move.w $r2,[r1+]
.rept 9
move.d [$r0+],$r2
move.d $r2,[$r1+]
.endr
test_h_mem 0x76543211 0xd0000038
.if ..asm.arch.cris.v32
move irqvec1,$ebp
.else
move irqvec1,$ibr
.endif
ei
move.d 0x100000,$r9
0:
subq 1,$r9
bne 0b
nop
killme:
fail
irq0x34:
test_h_mem 0x76543212 0xd0000038
pass
.fill 65536*2+128,1,0
singlevec irqvec1,0x34,irq0x34

View File

@ -0,0 +1,22 @@
#mach: crisv32
#sim(crisv32): --hw-device "/rv/dummy 0x12"
# A variant of trivial2.ms to check that the right thing happens when
# we reach the poll function with a dummy device.
.include "testutils.inc"
start
move.d 0xd0000000,$r0
move.d [$r0+],$r3
cmp.d 0x12121212,$r3
beq ok
nop
bad:
fail
ok:
move.d 0x10000,$r10
0:
bne 0b
subq 1,$r10
pass

View File

@ -0,0 +1,4 @@
; Trivial target simulator program that just exits.
.include "testutils.inc"
startnostack
quit

View File

@ -0,0 +1,241 @@
# Copyright (C) 2006 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 2 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, write to the Free Software
# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Miscellaneous CRIS simulator testcases in assembly code, testing
# dv-rv.c and dv-cris.c functions.
# Check whether dv-rv and dv-cris are present.
proc sim_has_rv_and_cris {} {
global srcdir
global subdir
global SIMFLAGS
global global_as_options
global global_ld_options
global global_sim_options
# We need to assemble and link a trivial program and pass that, in
# order to test successful exit.
# A bit of duplication here for the assembling and linking part;
# what we want to do it to run the simulator without affecting the
# PASS/FAIL counters, and we can use e.g. run_sim_test for that.
if ![info exists global_as_options] {
set global_as_options ""
}
if ![info exists global_ld_options] {
set global_ld_options ""
}
if ![info exists global_sim_options] {
set global_sim_options ""
}
set comp_output [target_assemble $srcdir/$subdir/quit.s quit.o \
"-I$srcdir/$subdir $global_as_options"]
if ![string match "" $comp_output] {
verbose -log "$comp_output" 3
fail "rv sim test setup (assembling)"
return 0
}
set comp_output [target_link quit.o quit.x "$global_ld_options"]
if ![string match "" $comp_output] {
verbose -log "$comp_output" 3
fail "rv sim test setup (linking)"
return 0
}
set result \
[sim_run quit.x \
"$global_sim_options --hw-device rv --hw-device cris --hw-info" \
"" "" ""]
set return_code [lindex $result 0]
set output [lindex $result 1]
if { "$return_code" == "pass" } {
return 1
}
return 0
}
# Similar to slurp_options, but lines are fixed format "^#r ..." (not
# "^#{ws}*r:{ws}+" to avoid intruding on slurp_options syntax). Only
# trailing whitespace of the "..." is trimmed. Beware that lines
# including parameters may not contain ":".
proc slurp_rv { file } {
if [catch { set f [open $file r] } x] {
#perror "couldn't open `$file': $x"
perror "$x"
return -1
}
set rv_array {}
# whitespace expression
set ws {[ ]*}
# whitespace is ignored at the end of a line.
set pat "^#r (.*)$ws\$"
# Allow arbitrary lines until the first option is seen.
set seen_opt 0
while { [gets $f line] != -1 } {
set line [string trim $line]
# Whitespace here is space-tab.
if [regexp $pat $line xxx cmd] {
# match!
lappend rv_array $cmd
set seen_opt 1
} else {
if { $seen_opt } {
break
}
}
}
close $f
return $rv_array
}
# The main test loop.
if [istarget cris*-*-*] {
global ASFLAGS_FOR_TARGET
set has_rv_and_cris [sim_has_rv_and_cris]
global global_as_options
global global_ld_options
global global_sim_options
set saved_global_sim_options $global_sim_options
set saved_global_ld_options $global_ld_options
set rvdummy "[file dirname [board_info target sim]]/rvdummy"
# All machines we test and the corresponding assembler option.
# We'll only ever test v10 and higher here.
set combos {{"crisv10" "--march=v10 --no-mul-bug-abort"}
{"crisv32" "--march=v32"}}
# We need to pass different assembler flags for each machine.
# Specifying it here rather than adding a specifier to each and every
# test-file is preferrable.
foreach combo $combos {
set mach [lindex $combo 0]
set ASFLAGS_FOR_TARGET "[lindex $combo 1]"
# The .ms suffix is for "miscellaneous .s".
foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
# If we're only testing specific files and this isn't one of them,
# skip it.
if ![runtest_file_p $runtests $src] {
continue
}
# Whoever runs the test should be alerted that not all
# testcases have been checked; that's why we do the loop
# and don't just return at the top.
if !$has_rv_and_cris {
untested $src
continue
}
set sim_defaults "--hw-file $srcdir/$subdir/std.dev"
set ld_defaults "--section-start=.text=0"
# We parse options an extra time besides in run_sim_test,
# to determine if our defaults should be overridden.
set opt_array [slurp_options $src]
foreach i $opt_array {
set opt_name [lindex $i 0]
set opt_machs [lindex $i 1]
set opt_val [lindex $i 2]
# Allow concatenating to the default options by
# specifying a mach.
if { $opt_name == "sim" && $opt_machs == "" } {
set sim_defaults ""
}
if { $opt_name == "ld" && $opt_machs == "" } {
set ld_defaults ""
}
}
set rvdummy_id -1
set hostcmds [slurp_rv $src]
if { $hostcmds != "" } {
# I guess we could ask to have rvdummy executed on a
# remote host, but it looks like too much trouble for
# a feature rarely used.
if [is_remote host] {
untested $src
continue
}
set src_components [file split $src]
set rvfile "[lindex $src_components \
[expr [llength $src_components] - 1]].r"
if [catch { set f [open $rvfile w] } x] {
error "$x"
} {
set contents [join $hostcmds "\n"]
# Make it possible to use files from the test
# source directory; expected with the @-command.
regsub -all "@srcdir@" $contents "$srcdir/$subdir" contents
verbose "rv: $contents" 2
puts $f $contents
close $f
}
spawn -noecho $rvdummy "$rvfile"
if { $spawn_id < 0 } {
error "Couldn't spawn $rvdummy"
continue
}
set rvdummy_id $spawn_id
}
# Unfortunately this seems like the only way to pass
# additional sim, ld etc. options to run_sim_test.
set global_sim_options "$saved_global_sim_options $sim_defaults"
set global_ld_options "$saved_global_ld_options $ld_defaults"
run_sim_test $src $mach
set global_sim_options $saved_global_sim_options
set global_ld_options $saved_global_ld_options
# Stop the rvdummy, if it's still running. We need to
# wait on it anyway to avoid it turning into a zombie.
if { $rvdummy_id != -1 } {
close -i $rvdummy_id
wait -i $rvdummy_id
# Gleaned from framework.exp, this seems an indicator
# to whether the test had expected outcome. If so, we
# want to remove the rv-file.
if { $exit_status == 0 } {
file delete $rvfile
}
}
}
}
}

View File

@ -0,0 +1,8 @@
/rv/reg 0xd0000000 64
/rv/remote-reg 0xa8800
/rv/intnum 4 2
/cris/vec-for-int 4 0x33 8 0x34 0xaa 0xea
/rv/mem 0x20000 0x400
/rv/remote-mem 0xe000
/rv/mbox 0xc000f000
/rv > int int /cris

View File

@ -0,0 +1,22 @@
.include "../../asm/testutils.inc"
# Define an exception vector table "vecname" with a single
# vector number "n" as "entry", all others "other".
# V32 only needs 1<<10 alignment, earlier versions need 1<<16.
.macro singlevec vecname vecno entry other=killme
.section .text.exvec
.p2align 16
\vecname:
.if (\vecno)
.rept \vecno
.dword \other
.endr
.endif
.dword \entry
.if (\vecno)-255
.rept 256-(\vecno)-1
.dword \other
.endr
.endif
.previous
.endm

View File

@ -0,0 +1,17 @@
#mach: crisv32
#sim(crisv32): --hw-info
#output: /\n
#output: /rv\n
#output: /rv/reg 0xd0000000 0x40\n
#output: /rv/remote-reg 0xa8800\n
#output: /rv/intnum 0x4 0x2\n
#output: /rv/mem 0x20000 0x400\n
#output: /rv/remote-mem 0xe000\n
#output: /rv/mbox 0xc000f000\n
#output: /rv > int int /cris\n
#output: /cris\n
#output: /cris/vec-for-int 0x4 0x33 0x8 0x34 0xaa 0xea\n
# Test expected --hw-info output and startup paths of components.
.include "quit.s"

View File

@ -0,0 +1,21 @@
#mach: crisv32
#sim(crisv32): --hw-device "/rv/dummy 0x12"
# Test dummy settings: set from value.
.include "testutils.inc"
start
move.d 0xd0000000,$r0
move.d [$r0+],$r3
cmp.d 0x12121212,$r3
beq ok
nop
bad:
fail
ok:
moveq -1,$r3
move.d $r3,[$r0]
cmp.d [$r0],$r3
bne bad
nop
pass

View File

@ -0,0 +1,20 @@
#mach: crisv32
#sim(crisv32): --hw-device "/rv/dummy /dev/zero"
# Test dummy settings: set from file.
.include "testutils.inc"
start
move.d 0xd0000000,$r0
move.d [$r0+],$r3
beq ok
nop
bad:
fail
ok:
moveq -1,$r3
move.d $r3,[$r0]
cmp.d [$r0],$r3
bne bad
nop
pass

View File

@ -0,0 +1,22 @@
#mach: crisv32
#r @,@srcdir@/trivial4.r
# Test read and writes.
.include "testutils.inc"
start
move.d 0xd0000032,$r0
move.d [$r0+],$r3
cmp.d 0xabcdef01,$r3
beq ok
nop
bad:
fail
ok:
move.d 0xaabbccdd,$r3
move.d $r3,[$r0]
move.d [$r0],$r3
cmp.d 0x76543210,$r3
bne bad
nop
pass

View File

@ -0,0 +1,4 @@
W,
r,a8832,abcdef01
w,a8836,aabbccdd
r,a8836,76543210

View File

@ -0,0 +1,16 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true"
#sim(crisv32): --hw-device "/rv/trace? true"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000032\n
#output: /rv: := 0xabcdef01\n
#output: /rv: REG W 0xd0000036 := 0xaabbccdd\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: pass\n
# Test trace output for read and write.
#r @,@srcdir@/trivial4.r
.include "trivial4.ms"

View File

@ -0,0 +1,33 @@
#mach: crisv10 crisv32
#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/watchdog-interval 1"
#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/watchdog-interval 1" --hw-device "/rv/max-poll-ticks 1000"
#output: /rv: WD\n
#output: /rv: REG R 0xd0000036\n
#output: /rv: := 0x76543210\n
#output: /rv: WD\n
#output: /rv: DMA W 0x20000..0x20003\n
#output: /rv: 0x20000: 01 02 03 04\n
#output: /rv: REG R 0xd0000038\n
#output: /rv: := 0x76543211\n
#output: pass\n
#r W,
#r r,a8836,76543210
#r W,
#r s,e000,01020304
#r r,a8838,76543211
.include "testutils.inc"
start
mvi_h_mem 0 0x20000
test_h_mem 0x76543210 0xd0000036
move.d 0x20000,$r1
0:
test.b [$r1]
beq 0b
nop
test_h_mem 0x76543211 0xd0000038
pass
.fill 65536*2+128,1,0