Add testsuite for the PRU simulator port
authorDimitar Dimitrov <dimitar@dinux.eu>
Mon, 23 Sep 2019 16:55:43 +0000 (17:55 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 23 Sep 2019 21:11:16 +0000 (22:11 +0100)
sim/testsuite/ChangeLog:

* configure: Regenerate.

sim/testsuite/sim/pru/ChangeLog:

* add.s: New test.
* allinsn.exp: New file.
* dmem-zero-pass.s: New test.
* dmem-zero-trap.s: New test.
* dram.s: New test.
* jmp.s: New test.
* loop-imm.s: New test.
* loop-reg.s: New test.
* mul.s: New test.
* subreg.s: New test.
* testutils.inc: New file.

14 files changed:
sim/testsuite/ChangeLog
sim/testsuite/configure
sim/testsuite/sim/pru/ChangeLog [new file with mode: 0644]
sim/testsuite/sim/pru/add.s [new file with mode: 0644]
sim/testsuite/sim/pru/allinsn.exp [new file with mode: 0644]
sim/testsuite/sim/pru/dmem-zero-pass.s [new file with mode: 0644]
sim/testsuite/sim/pru/dmem-zero-trap.s [new file with mode: 0644]
sim/testsuite/sim/pru/dram.s [new file with mode: 0644]
sim/testsuite/sim/pru/jmp.s [new file with mode: 0644]
sim/testsuite/sim/pru/loop-imm.s [new file with mode: 0644]
sim/testsuite/sim/pru/loop-reg.s [new file with mode: 0644]
sim/testsuite/sim/pru/mul.s [new file with mode: 0644]
sim/testsuite/sim/pru/subreg.s [new file with mode: 0644]
sim/testsuite/sim/pru/testutils.inc [new file with mode: 0644]

index e4cf620a0fb840e909a6563da18bcf8bc0f11832..89bd065751c29b089e2416832eaacbf0d27390ab 100644 (file)
@@ -1,3 +1,7 @@
+2019-09-23  Dimitar Dimitrov  <dimitar@dinux.eu>
+
+       * configure: Regenerate.
+
 2017-12-12  Stafford Horne  <shorne@gmail.com>
            Peter Gavin  <pgavin@gmail.com>
 
index 238d2a2be838738e82ddb2ef811dd7e62e71ffdd..a3e7fa7131a63b36b8ef0ca3a92c14e1f7065326 100755 (executable)
@@ -1946,6 +1946,9 @@ case "${target}" in
    powerpc*-*-*)
        sim_arch=ppc
        ;;
+   pru*-*-*)
+       sim_arch=pru
+       ;;
    ft32-*-*)
        sim_arch=ft32
        ;;
diff --git a/sim/testsuite/sim/pru/ChangeLog b/sim/testsuite/sim/pru/ChangeLog
new file mode 100644 (file)
index 0000000..d8b438b
--- /dev/null
@@ -0,0 +1,13 @@
+2019-09-23  Dimitar Dimitrov  <dimitar@dinux.eu>
+
+       * add.s: New test.
+       * allinsn.exp: New file.
+       * dmem-zero-pass.s: New test.
+       * dmem-zero-trap.s: New test.
+       * dram.s: New test.
+       * jmp.s: New test.
+       * loop-imm.s: New test.
+       * loop-reg.s: New test.
+       * mul.s: New test.
+       * subreg.s: New test.
+       * testutils.inc: New file.
diff --git a/sim/testsuite/sim/pru/add.s b/sim/testsuite/sim/pru/add.s
new file mode 100644 (file)
index 0000000..bc8530d
--- /dev/null
@@ -0,0 +1,40 @@
+# Check that basic add insn works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r4, 10
+       add r4, r4, 23
+       qbne 2f, r4, 33
+
+       qblt 2f, r4, 33
+
+       qbgt 2f, r4, 33
+
+       jmp 1f
+
+       fail
+
+1:
+       pass
+2:     fail
diff --git a/sim/testsuite/sim/pru/allinsn.exp b/sim/testsuite/sim/pru/allinsn.exp
new file mode 100644 (file)
index 0000000..aed804d
--- /dev/null
@@ -0,0 +1,33 @@
+# PRU simulator testsuite.
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if [istarget pru-*] {
+    # all machines
+    set all_machs "pru"
+
+    foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] {
+       # If we're only testing specific files and this isn't one of them,
+       # skip it.
+       if ![runtest_file_p $runtests $src] {
+           continue
+       }
+       run_sim_test $src $all_machs
+    }
+}
diff --git a/sim/testsuite/sim/pru/dmem-zero-pass.s b/sim/testsuite/sim/pru/dmem-zero-pass.s
new file mode 100644 (file)
index 0000000..2ec1687
--- /dev/null
@@ -0,0 +1,29 @@
+# Check that DMEM zero address access works by default.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r1, 0
+       lbbo &r2, r1, 0, 4
+
+       pass
diff --git a/sim/testsuite/sim/pru/dmem-zero-trap.s b/sim/testsuite/sim/pru/dmem-zero-trap.s
new file mode 100644 (file)
index 0000000..609c4f8
--- /dev/null
@@ -0,0 +1,32 @@
+# Check that DMEM zero address access can be trapped.
+# mach: pru
+# sim: --error-null-deref
+# xerror:
+# output: core: 4 byte read to unmapped address 0x0 at *\n
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r1, 0
+       lbbo &r2, r1, 0, 4
+
+       pass
diff --git a/sim/testsuite/sim/pru/dram.s b/sim/testsuite/sim/pru/dram.s
new file mode 100644 (file)
index 0000000..fd79ba7
--- /dev/null
@@ -0,0 +1,72 @@
+# Check that DRAM memory access works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       fill r20, 16
+       ldi r10, 0
+       not r10, r10
+       qbne F, r20, r10
+       qbne F, r21, r10
+       qbne F, r22, r10
+       qbne F, r23, r10
+
+       zero r20, 16
+       qbne F, r20, 0
+       qbne F, r21, 0
+       qbne F, r22, 0
+       qbne F, r23, 0
+
+       ldi r0, testarray
+       lbbo &r20, r0, 0, 7
+       qbne F, r20.b0, 0x01
+       qbne F, r20.b1, 0x23
+       qbne F, r20.b2, 0x45
+       qbne F, r20.b3, 0x67
+       qbne F, r21.b0, 0x89
+       qbne F, r21.b1, 0xab
+       qbne F, r21.b2, 0xcd
+       qbne F, r21.b3, 0x00 ; Should not have been loaded!
+       qbne F, r22, 0
+       qbne F, r23, 0
+
+       ldi r1, 0x11
+       sbbo &r1, r0, 9, 1
+       ldi r1, 0x11
+       sbbo &r1, r0, 12, 4
+
+       lbbo &r20, r0, 0, 16
+       qbne F, r21.b3, 0xef
+       qbne F, r22.b0, 0xff
+       qbne F, r22.b1, 0x11
+       qbne F, r22.b2, 0xff
+       qbne F, r22.b3, 0xff
+       qbne F, r23, 0x11
+
+       pass
+F:     fail
+
+       .data
+testarray:
+       .byte 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
+       .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
diff --git a/sim/testsuite/sim/pru/jmp.s b/sim/testsuite/sim/pru/jmp.s
new file mode 100644 (file)
index 0000000..14d749d
--- /dev/null
@@ -0,0 +1,40 @@
+# Check that jump and branch insns work.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r10, 10
+       call func1
+       qbne F, r10, 11
+
+       ldi r0, %pmem(1f)
+       jmp r0
+       fail
+1:
+       pass
+F:     fail
+
+
+func1:
+       add r10, r10, 1
+       ret
diff --git a/sim/testsuite/sim/pru/loop-imm.s b/sim/testsuite/sim/pru/loop-imm.s
new file mode 100644 (file)
index 0000000..7e462fd
--- /dev/null
@@ -0,0 +1,43 @@
+# Check that loop insn works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r25, 0
+       ldi r26, 0
+       ldi r27, 0
+
+       add r27, r27, 1
+       loop 1f, 10
+       add r25, r25, 1
+       add r26, r26, 2
+1:
+       add r27, r27, 1
+
+       qbne F, r25, 10
+       qbne F, r26, 20
+       qbne F, r27, 2
+
+       pass
+
+F:     fail
diff --git a/sim/testsuite/sim/pru/loop-reg.s b/sim/testsuite/sim/pru/loop-reg.s
new file mode 100644 (file)
index 0000000..6e4238c
--- /dev/null
@@ -0,0 +1,44 @@
+# Check that loop insn works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r25, 0
+       ldi r26, 0
+       ldi r27, 0
+       ldi r28, 10
+
+       add r27, r27, 1
+       loop 1f, r28
+       add r25, r25, 1
+       add r26, r26, 2
+1:
+       add r27, r27, 1
+
+       qbne F, r25, 10
+       qbne F, r26, 20
+       qbne F, r27, 2
+
+       pass
+
+F:     fail
diff --git a/sim/testsuite/sim/pru/mul.s b/sim/testsuite/sim/pru/mul.s
new file mode 100644 (file)
index 0000000..4a75baf
--- /dev/null
@@ -0,0 +1,89 @@
+# Check that multiplication works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       # MUL: Test regular case
+       ldi r28, 1001
+       ldi r29, 4567
+       nop
+       xin 0, r26, 4
+       qbne32 2f, r26, 1001 * 4567
+
+       # MUL: Test the pipeline emulation
+       ldi r28, 1002
+       ldi r29, 1003
+       ldi r29, 4004
+       xin 0, r26, 4
+       qbne32 2f, r26, 1002 * 1003
+       xin 0, r26, 4
+       qbne32 2f, r26, 1002 * 4004
+
+       # MUL: Test 64-bit result
+       ldi32 r28, 0x12345678
+       ldi32 r29, 0xaabbccdd
+       nop
+       xin 0, r26, 8
+       qbne32 2f, r26, 0x45BE4598
+       qbne32 2f, r27, 0xC241C38
+
+       # MAC: Test regular case
+       ldi r25, 1
+       xout 0, r25, 1
+       ldi r25, 3
+       xout 0, r25, 1
+
+       ldi r25, 1
+       ldi r28, 1001
+       ldi r29, 2002
+       xout 0, r25, 1
+       ldi r28, 3003
+       ldi r29, 4004
+       xout 0, r25, 1
+
+       xin 0, r26, 4
+       qbne32 2f, r26, (1001 * 2002) + (3003 * 4004)
+
+       # MAC: Test 64-bit result
+       ldi r25, 3
+       xout 0, r25, 1
+
+       ldi r25, 1
+       ldi32 r28, 0x10203040
+       ldi32 r29, 0x50607080
+       xout 0, r25, 1
+       ldi32 r28, 0xa0b0c0d0
+       ldi32 r29, 0x11223344
+       xout 0, r25, 1
+
+       xin 0, r26, 8
+       qbne32 2f, r26, 0x8E30C740
+       qbne32 2f, r27, 0xFD156B1
+
+       jmp 1f
+
+       fail
+
+1:
+       pass
+2:     fail
diff --git a/sim/testsuite/sim/pru/subreg.s b/sim/testsuite/sim/pru/subreg.s
new file mode 100644 (file)
index 0000000..77dedd1
--- /dev/null
@@ -0,0 +1,40 @@
+# Check that subregister addressing works.
+# mach: pru
+
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+.include "testutils.inc"
+
+       start
+
+       ldi r0, 0x01ff
+       add r0, r0.b0, r0.b1
+       qbne F, r0.b0, 0x00
+       qbne F, r0.b1, 0x01
+       qbne F, r0.w2, 0x00
+
+       ldi r0, 0x01ff
+       add r0.b0, r0.b0, r0.b1
+       adc r0, r0.b1, r0.b3
+       qbne F, r0.b0, 0x02
+       qbne F, r0.b1, 0x00
+       qbne F, r0.w2, 0x00
+
+       pass
+F:     fail
diff --git a/sim/testsuite/sim/pru/testutils.inc b/sim/testsuite/sim/pru/testutils.inc
new file mode 100644 (file)
index 0000000..7539084
--- /dev/null
@@ -0,0 +1,100 @@
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
+#
+# This file is part of the GNU simulators.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# MACRO: start
+# All assembler tests should start with a call to "main_test"
+       .macro start
+       .text
+
+       .global _start
+_start:
+
+       # Skip over these inlined funcs.
+       jmp __main_test;
+
+       .global __pass
+       .type __pass, function
+__pass:
+       # Note - DRAM LMA and VMA are equal for PRU, so
+       # we can afford to pass DRAM pointer directly.
+       write 1, _passmsg, 5
+       exit 0
+
+       .global __fail
+       .type __fail, function
+__fail:
+       write 1, _failmsg, 5
+       exit 1
+
+       .data
+_passmsg:
+       .ascii "pass\n"
+
+_failmsg:
+       .ascii "fail\n"
+
+       .text
+       .global __main_test
+       .type __main_test, function
+__main_test:
+       .endm
+
+# MACRO: system_call
+# Make a libgloss system call
+       .macro system_call nr:req, arg1=0, arg2=0, arg3=0
+       ldi r1, \nr
+       ldi r14, \arg1
+       ldi r15, \arg2
+       ldi r16, \arg3
+       halt
+       .endm
+
+# MACRO: exit
+# Quit the current test
+       .macro exit rc:req
+       system_call 1, \rc
+       .endm
+
+# MACRO: pass
+# Write 'pass' to stdout via syscalls and quit;
+# meant for non-OS operating environments
+       .macro pass
+       jmp __pass;
+       .endm
+
+# MACRO: fail
+# Write 'fail' to stdout via syscalls and quit;
+# meant for non-OS operating environments
+       .macro fail
+       jmp __fail;
+       .endm
+
+# MACRO: write
+# Just like the write() C function; uses system calls
+       .macro write fd:req, str:req, len:req
+       system_call 5, \fd, \str, \len
+       .endm
+
+# MACRO: qbne32
+# Like qbne instruction, but check a 32-bit constant value.
+       .macro qbne32 label:req, op0:req, C0:req
+       qbne \label, \op0\().b0, ((\C0) >> 0) & 0xff
+       qbne \label, \op0\().b1, ((\C0) >> 8) & 0xff
+       qbne \label, \op0\().b2, ((\C0) >> 16) & 0xff
+       qbne \label, \op0\().b3, ((\C0) >> 24) & 0xff
+       .endm