Commit graph

34 commits

Author SHA1 Message Date
George Koehler b38fcdded3 Add tests for clearing BSS, copying C structs.
The new tests are bss_e.c, structcopy_e.c.  We do clear the BSS before
calling _m_a_i_n, so fix the comments in the other tests.
2018-01-27 20:09:16 -05:00
George Koehler d6938108a6 Add tests for C <setjmp.h> and Modula-2 Semaphores.
Fix PowerPC ncg so setjmp() returns the correct value.  I got unlucky
when ncg picked r3 for "uses REG"; this destroyed the return value in
r3 and caused the new test to fail.
2018-01-03 14:51:14 -05:00
George Koehler 26de4c1ab1 Add test for EM _rck_. Fix traps in PowerPC ncg.
The new test rck_e.e segfaults on PowerPC unless I make some changes.
The inline code for _rck_ was wrong because it didn't allow the trap
handler to return.  _sig_ forgot to push the old trap handler.

Move plat/linuxppc/libsys/trap.s to mach/powerpc/libem/trp.s and
rewrite it with simplified/extended mnemonics.  Remove .trap alias for
.trp procedure.  Add a missing `mtspr lr, r0` so we can return from
the trap handler.  Call write() and _exit() so trp.s works with both
linuxppc and osxppc.  Before, Mac OS X was wrongly using the trap.s
for Linux.

In powerpc/libem, simplify .aar4; teach .csa and .csb to raise the
trap if the default target is zero.

C programs don't need these changes.  You may relink your C programs
with the changed .csa and .csb, but C code doesn't raise the trap.
Modula-2 code can raise traps, so you may want to relink your Modula-2
programs with the changed libem, but you might keep your old .o files
from Modula-2.  You may need to recompile your Pascal programs (delete
old .o files from Pascal) because the Pascal compiler might use _rck_.
2017-12-24 22:37:52 -05:00
George Koehler 4bb31c296d Revise the comments in the EM tests.
You can cheat these tests if _cms_ and _cmu_ always push zero.
2017-12-21 18:24:28 -05:00
George Koehler 787fdeaaa9 Add some tests for Modula-2. 2017-12-21 18:24:17 -05:00
George Koehler aa9418c029 Pass 4 bytes to fail(uint32_t)
This would become necessary if something failed on a platform with
16-bit int (EM_WSIZE == 2).

Remove unreachable `ret 0`.  If reached, it wouldn't work to return
from _m_a_i_n.
2017-12-18 21:58:57 -05:00
George Koehler a5e8dc8a06 Simplify code by using cms EM_WSIZE to compare bytes.
This should work because the C compiler does it.
2017-12-18 21:52:13 -05:00
George Koehler a4e6595032 Remove '\0' from output. Fix a compiler warning.
Don't output '\0' in "@@FINISHED\0".

Cast code to unsigned int.  This helps platforms with 16-bit int, by
doing only the low 16 bits of the bitwise-and.  It also removes the
"(warning) conversion of long to pointer loses accuracy".
2017-12-18 21:17:42 -05:00
George Koehler 504d2aa34e Revise stack shuffles and integer conversions in PowerPC ncg.
Allow asp 4, exg 4 to shuffle tokens without coercing them into
registers; but comment why dup 4, dup 8 coerce tokens into registers.

Allow dup, dus, exg with larger sizes; and add tests dup_e.e and
exg_e.e to check that dup 20, dus, exg 20 work as well in powerpc as
in i80 and i86.

Then powerpc failed to compile loc 2 loc 4 cuu in dup_e.e.  Revise the
integer conversions, so powerpc can compile and pass the test.
2017-12-09 18:57:10 -05:00
George Koehler a1d1f38691 Add test for EM rol, ror. Fix i80, i86, powerpc.
EM instructions _rol_ and _ror_ do rotate an integer left or right.
Our compilers and optimizers never emit _rol_ nor _ror_, but I might
want to use them in the future.

Add _rol_ and _ror_ to powerpc.  Fix `rol 4` and `ror 4` in both i80
and i86, where the rules for `rol 4` and `ror 4` seem to have never
been tested until now.
2017-12-07 17:16:21 -05:00
George Koehler 50a160c07f Increase time-out from 5 to 15 seconds.
My computer is too slow, so qemuppc tests randomly timed out.  With
this commit, my machine passes the qemuppc tests (if I also edit the
top build.lua to enable qemuppc).
2017-11-08 15:02:56 -05:00
George Koehler 96e23b3a0f Show tests that @@TIMEDOUT.
A `set -e` in testdriver.sh caused it to exit early and hide the
output of a @@TIMEDOUT test, so I never saw the @@TIMEDOUT marker.
Then build.lua added a @@FAIL marker.
2017-11-08 14:08:43 -05:00
George Koehler 3d6ee435cf Fix pattern that was rewriting func(! var, var) as func(1).
Bug reported by Rune, see
 - https://sourceforge.net/p/tack/mailman/message/35809953/
 - https://github.com/davidgiven/ack/issues/62

In EM code, beq and bne pop 2 values and compare them, but teq and tne
pop only 1 value and compare it with zero.  We need cms to compare 2
values; other patterns may convert cmi or cmu to cms.
2017-10-29 14:53:33 -04:00
David Given 81c677d218 Add a bunch more set operations to the PowerPC backends, and the Pascal test
for the same.
2017-01-17 22:31:38 +01:00
David Given 5fd1634830 Rename the test to something more sensible. 2017-01-15 22:33:41 +01:00
David Given e7e29d34ff Add a test (currently failing) to check that Pascal char sets can store all 256
possible values. Add the PowerPC ncg and mcg backend support to let the test
actually run, including modifying a bunch of PowrePC libem functions so that
they can be called from both ncg and mcg.
2017-01-15 22:28:14 +01:00
David Given 837b9622fb Make sure that constant folding doesn't render our tests trivial. 2017-01-07 19:53:57 +01:00
David Given 39215c131e Moved the inc/dec operator tests into their own source file; more exhaustive
testing.
2017-01-07 18:38:43 +01:00
David Given e2751f76b5 Add a control flow test. 2017-01-01 23:51:48 +00:00
David Given be909fe045 Add tests for more operators. 2017-01-01 17:44:03 +00:00
David Given 1beedca590 Add support for B tests; add a test for the B operators (finding several
compiler bugs in the process).
2016-12-31 17:38:52 +00:00
David Given 62edb90641 Convert the inn test to work with the test library and not import InOut; it now
runs on qemuppc again. Reenable qemuppc tests.
2016-12-11 23:06:37 +01:00
David Given 1039c0a747 Add a test for #22. 2016-12-06 22:07:22 +01:00
David Given cc3d72e884 Fix redirection so stray stderr output from qemu doesn't cause mysterious test
failures.
2016-12-06 22:05:14 +01:00
David Given 55e24e1f24 inn was assuming that bitfields were arrays of bytes, when actually they're
arrays of words (which makes the LSB move on big-endian systems).
2016-12-06 21:45:20 +01:00
David Given 467709ff38 Report skipped, failed and timed out tests. 2016-12-02 00:00:31 +01:00
David Given 9e6581b0ff Mark skipped tests in the logs (so we can get stats on them later). 2016-12-01 23:14:29 +01:00
David Given 8c99e2b7ad Run all tests, even the ones which fail, and emit a test summary right at the
end of the build (and fail then).
2016-12-01 23:03:30 +01:00
David Given 960584c0f3 Replace the hacky and broken pipeline in testdriver.sh with a custom-written
tool in C; much more robust and easier to understand, as well as avoiding the
dependency on timeout (which isn't Posix).
2016-11-29 20:59:43 +01:00
David Given 4f446467c8 Suppress spurious message when testdriver probes for a testing method. 2016-11-26 21:50:56 +01:00
David Given 2dc083f436 Use command -v rather than hash to detect commands (command is Posix and works
on OpenBSD).
2016-11-26 12:53:36 +01:00
David Given cf33bd6cc4 Enable tests for linuxppc via qemu-ppc. 2016-11-26 11:56:17 +01:00
David Given 8a58614aef Rework the tests to run on pc86; lots of test fixes for the brk() test, which
was nearly useless; lots of fixes to qemuppc and pc86 sbrk(), which was broken;
change the pc86 console to echo output to the serial port (needed for running
tests on qemu).
2016-11-26 11:23:25 +01:00
David Given 5f66f06dc6 Refactored the tests to make the generic across different plats. 2016-11-25 21:02:51 +01:00