From 26feb3a83d605a9f2302266d524e6e443d31d197 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Thu, 21 May 1998 09:32:07 +0000 Subject: Fix sign extension on 32 bit add/sub instructions. --- sim/mips/ChangeLog | 5 + sim/mips/mips.igen | 60 +++++-- sim/mn10300/ChangeLog | 25 +++ sim/mn10300/dv-mn103cpu.c | 30 ++-- sim/mn10300/dv-mn103int.c | 83 ++++----- sim/testsuite/mips64r5900-elf/ChangeLog | 44 +++++ sim/testsuite/mips64r5900-elf/Makefile.in | 271 ++++++++++++++++++++++++++++++ sim/testsuite/mips64r5900-elf/t-sub.s | 26 +++ 8 files changed, 470 insertions(+), 74 deletions(-) create mode 100644 sim/testsuite/mips64r5900-elf/Makefile.in create mode 100644 sim/testsuite/mips64r5900-elf/t-sub.s diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 2afcd49..ca50e36 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,3 +1,8 @@ +Thu May 21 18:57:19 1998 Andrew Cagney + + * sim-main.h (ALU32_END): Sign extend 32 bit results. + * mips.igen (ADD, SUB, ADDI, DADD, DSUB): Trace. + start-sanitize-r5900 Thu May 21 17:15:39 1998 Andrew Cagney diff --git a/sim/mips/mips.igen b/sim/mips/mips.igen index a1f254c..df89140 100644 --- a/sim/mips/mips.igen +++ b/sim/mips/mips.igen @@ -272,9 +272,13 @@ *tx19: // end-sanitize-tx19 { - ALU32_BEGIN (GPR[RS]); - ALU32_ADD (GPR[RT]); - ALU32_END (GPR[RD]); + TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]); + { + ALU32_BEGIN (GPR[RS]); + ALU32_ADD (GPR[RT]); + ALU32_END (GPR[RD]); + } + TRACE_ALU_RESULT (GPR[RD]); } @@ -297,9 +301,13 @@ *tx19: // end-sanitize-tx19 { - ALU32_BEGIN (GPR[RS]); - ALU32_ADD (EXTEND16 (IMMEDIATE)); - ALU32_END (GPR[RT]); + TRACE_ALU_INPUT2 (GPR[RS], EXTEND16 (IMMEDIATE)); + { + ALU32_BEGIN (GPR[RS]); + ALU32_ADD (EXTEND16 (IMMEDIATE)); + ALU32_END (GPR[RT]); + } + TRACE_ALU_RESULT (GPR[RT]); } @@ -923,9 +931,13 @@ // end-sanitize-tx19 { /* this check's for overflow */ - ALU64_BEGIN (GPR[RS]); - ALU64_ADD (GPR[RT]); - ALU64_END (GPR[RD]); + TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]); + { + ALU64_BEGIN (GPR[RS]); + ALU64_ADD (GPR[RT]); + ALU64_END (GPR[RD]); + } + TRACE_ALU_RESULT (GPR[RD]); } @@ -948,9 +960,13 @@ *tx19: // end-sanitize-tx19 { - ALU64_BEGIN (GPR[RS]); - ALU64_ADD (EXTEND16 (IMMEDIATE)); - ALU64_END (GPR[RT]); + TRACE_ALU_INPUT2 (GPR[RS], EXTEND16 (IMMEDIATE)); + { + ALU64_BEGIN (GPR[RS]); + ALU64_ADD (EXTEND16 (IMMEDIATE)); + ALU64_END (GPR[RT]); + } + TRACE_ALU_RESULT (GPR[RT]); } @@ -1554,9 +1570,13 @@ *tx19: // end-sanitize-tx19 { - ALU64_BEGIN (GPR[RS]); - ALU64_SUB (GPR[RT]); - ALU64_END (GPR[RD]); + TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]); + { + ALU64_BEGIN (GPR[RS]); + ALU64_SUB (GPR[RT]); + ALU64_END (GPR[RD]); + } + TRACE_ALU_RESULT (GPR[RD]); } @@ -3105,9 +3125,13 @@ *tx19: // end-sanitize-tx19 { - ALU32_BEGIN (GPR[RS]); - ALU32_SUB (GPR[RT]); - ALU32_END (GPR[RD]); + TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]); + { + ALU32_BEGIN (GPR[RS]); + ALU32_SUB (GPR[RT]); + ALU32_END (GPR[RD]); + } + TRACE_ALU_RESULT (GPR[RD]); } diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index 71d8149..20eab28 100644 --- a/sim/mn10300/ChangeLog +++ b/sim/mn10300/ChangeLog @@ -1,3 +1,28 @@ +start-sanitize-am30 +Thu May 14 19:30:11 1998 Andrew Cagney + + * dv-mn103cpu.c: Use struct hw_event. + * dv-mn103cpu.c, dv-mn103int.c: Don't include hw-base.h, include + hw-main.h + * dv-mn103cpu.c, dv-mn103int.c: Rename *_callback to *_method. + +Wed May 6 13:29:06 1998 Andrew Cagney + + * interp.c (sim_open): Create a polling PAL device. + +end-sanitize-am30 +Fri May 1 16:39:15 1998 Andrew Cagney + + * dv-mn103int.c (mn103int_port_event): + (mn103int_port_event): + (mn103int_io_read_buffer): + (mn103int_io_write_buffer): + + * dv-mn103cpu.c (deliver_mn103cpu_interrupt): Drop CPU/CIA args. + (mn103cpu_port_event): Ditto. + (mn103cpu_io_read_buffer): Ditto. + (mn103cpu_io_write_buffer): Ditto. + Tue Apr 28 18:33:31 1998 Geoffrey Noer * configure: Regenerated to track ../common/aclocal.m4 changes. diff --git a/sim/mn10300/dv-mn103cpu.c b/sim/mn10300/dv-mn103cpu.c index 89b60b8..431c2bb 100644 --- a/sim/mn10300/dv-mn103cpu.c +++ b/sim/mn10300/dv-mn103cpu.c @@ -21,7 +21,7 @@ #include "sim-main.h" -#include "hw-base.h" +#include "hw-main.h" /* DEVICE @@ -107,7 +107,7 @@ struct mn103cpu_block { struct mn103cpu { struct mn103cpu_block block; - hw_event *pending_handler; + struct hw_event *pending_handler; int pending_level; int pending_nmi; int pending_reset; @@ -151,9 +151,9 @@ static const struct hw_port_descriptor mn103cpu_ports[] = { /* Finish off the partially created hw device. Attach our local callbacks. Wire up our port names etc */ -static hw_io_read_buffer_callback mn103cpu_io_read_buffer; -static hw_io_write_buffer_callback mn103cpu_io_write_buffer; -static hw_port_event_callback mn103cpu_port_event; +static hw_io_read_buffer_method mn103cpu_io_read_buffer; +static hw_io_write_buffer_method mn103cpu_io_write_buffer; +static hw_port_event_method mn103cpu_port_event; static void attach_mn103cpu_regs (struct hw *me, @@ -228,7 +228,7 @@ deliver_mn103cpu_interrupt (struct hw *me, else if (controller->pending_nmi) { controller->pending_nmi = 0; - store_half (SP - 4, CIA_GET (cpu)); + store_word (SP - 4, CIA_GET (cpu)); store_half (SP - 8, PSW); PSW &= ~PSW_IE; SP = SP - 8; @@ -241,7 +241,7 @@ deliver_mn103cpu_interrupt (struct hw *me, { /* Don't clear pending level. Request continues to be pending until the interrupt controller clears/changes it */ - store_half (SP - 4, CIA_GET (cpu)); + store_word (SP - 4, CIA_GET (cpu)); store_half (SP - 8, PSW); PSW &= ~PSW_IE; PSW &= ~PSW_LM; @@ -249,7 +249,7 @@ deliver_mn103cpu_interrupt (struct hw *me, SP = SP - 8; CIA_SET (cpu, 0x40000000 + controller->interrupt_vector[controller->pending_level]); HW_TRACE ((me, "port-out ack %d", controller->pending_level)); - hw_port_event (me, ACK_PORT, controller->pending_level, NULL, NULL_CIA); + hw_port_event (me, ACK_PORT, controller->pending_level); HW_TRACE ((me, "int level=%d pc=0x%08lx psw=0x%04x sp=0x%08lx", controller->pending_level, (long) CIA_GET (cpu), (unsigned) PSW, (long) SP)); @@ -278,9 +278,7 @@ mn103cpu_port_event (struct hw *me, int my_port, struct hw *source, int source_port, - int level, - sim_cpu *processor, - sim_cia cia) + int level) { struct mn103cpu *controller = hw_data (me); @@ -355,9 +353,7 @@ mn103cpu_io_read_buffer (struct hw *me, void *dest, int space, unsigned_word base, - unsigned nr_bytes, - sim_cpu *processor, - sim_cia cia) + unsigned nr_bytes) { struct mn103cpu *controller = hw_data (me); unsigned16 val = 0; @@ -396,9 +392,7 @@ mn103cpu_io_write_buffer (struct hw *me, const void *source, int space, unsigned_word base, - unsigned nr_bytes, - sim_cpu *cpu, - sim_cia cia) + unsigned nr_bytes) { struct mn103cpu *controller = hw_data (me); unsigned16 val; @@ -431,7 +425,7 @@ mn103cpu_io_write_buffer (struct hw *me, } -const struct hw_device_descriptor dv_mn103cpu_descriptor[] = { +const struct hw_descriptor dv_mn103cpu_descriptor[] = { { "mn103cpu", mn103cpu_finish, }, { NULL }, }; diff --git a/sim/mn10300/dv-mn103int.c b/sim/mn10300/dv-mn103int.c index 270cbf5..f334d12 100644 --- a/sim/mn10300/dv-mn103int.c +++ b/sim/mn10300/dv-mn103int.c @@ -20,8 +20,7 @@ */ -#include "sim-main.h" -#include "hw-base.h" +#include "hw-main.h" /* DEVICE @@ -303,9 +302,9 @@ static const struct hw_port_descriptor mn103int_ports[] = { /* Finish off the partially created hw device. Attach our local callbacks. Wire up our port names etc */ -static hw_io_read_buffer_callback mn103int_io_read_buffer; -static hw_io_write_buffer_callback mn103int_io_write_buffer; -static hw_port_event_callback mn103int_port_event; +static hw_io_read_buffer_method mn103int_io_read_buffer; +static hw_io_write_buffer_method mn103int_io_write_buffer; +static hw_port_event_method mn103int_port_event; static void attach_mn103int_regs (struct hw *me, @@ -388,7 +387,7 @@ find_highest_interrupt_group (struct hw *me, int selected; /* FIRST_NMI_GROUP (group zero) is used as a special default value - when searching for an interrupt group */ + when searching for an interrupt group.*/ selected = FIRST_NMI_GROUP; controller->group[FIRST_NMI_GROUP].level = 7; @@ -397,7 +396,8 @@ find_highest_interrupt_group (struct hw *me, struct mn103int_group *group = &controller->group[gid]; if ((group->request & group->enable) != 0) { - if (group->level > controller->group[selected].level) + /* Remember, lower level, higher priority. */ + if (group->level < controller->group[selected].level) { selected = gid; } @@ -416,7 +416,7 @@ push_interrupt_level (struct hw *me, int selected = find_highest_interrupt_group (me, controller); int level = controller->group[selected].level; HW_TRACE ((me, "port-out - selected=%d level=%d", selected, level)); - hw_port_event (me, LEVEL_PORT, level, NULL, NULL_CIA); + hw_port_event (me, LEVEL_PORT, level); } @@ -427,9 +427,7 @@ mn103int_port_event (struct hw *me, int my_port, struct hw *source, int source_port, - int level, - sim_cpu *processor, - sim_cia cia) + int level) { struct mn103int *controller = hw_data (me); @@ -493,7 +491,7 @@ mn103int_port_event (struct hw *me, if ((group->request & group->enable) != 0) { HW_TRACE ((me, "port-out NMI")); - hw_port_event (me, NMI_PORT, 1, NULL, NULL_CIA); + hw_port_event (me, NMI_PORT, 1); } break; } @@ -521,8 +519,8 @@ decode_group (struct hw *me, unsigned_word base, unsigned_word *offset) { - int gid = (base / 8) % NR_GROUPS; - *offset = (base % 8); + int gid = (base / 4) % NR_GROUPS; + *offset = (base % 4); return &controller->group[gid]; } @@ -542,7 +540,7 @@ read_icr (struct hw *me, { case 0: val = INSERT_ID (group->request); - HW_TRACE ((me, "read-icr group=%d nmi 0x%02x", + HW_TRACE ((me, "read-icr group=%d:0 nmi 0x%02x", group->gid, val)); break; default: @@ -556,13 +554,13 @@ read_icr (struct hw *me, case 0: val = (INSERT_IR (group->request) | INSERT_ID (group->request & group->enable)); - HW_TRACE ((me, "read-icr group=%d level 0 0x%02x", + HW_TRACE ((me, "read-icr group=%d:0 level 0x%02x", group->gid, val)); break; case 1: val = (INSERT_LV (group->level) | INSERT_IE (group->enable)); - HW_TRACE ((me, "read-icr level-%d level 1 0x%02x", + HW_TRACE ((me, "read-icr level-%d:1 level 0x%02x", group->gid, val)); break; } @@ -591,7 +589,7 @@ write_icr (struct hw *me, switch (offset) { case 0: - HW_TRACE ((me, "write-icr group=%d nmi 0x%02x", + HW_TRACE ((me, "write-icr group=%d:0 nmi 0x%02x", group->gid, val)); group->request &= ~EXTRACT_ID (val); break; @@ -605,13 +603,16 @@ write_icr (struct hw *me, { case 0: /* request/detect */ /* Clear any ID bits and then set them according to IR */ - HW_TRACE ((me, "write-icr group=%d level 0 0x%02x", - group->gid, val)); - group->request &= EXTRACT_ID (val); - group->request |= EXTRACT_IR (val) & EXTRACT_ID (val); + HW_TRACE ((me, "write-icr group=%d:0 level 0x%02x %x:%x:%x", + group->gid, val, + group->request, EXTRACT_IR (val), EXTRACT_ID (val))); + group->request = + ((EXTRACT_IR (val) & EXTRACT_ID (val)) + | (EXTRACT_IR (val) & group->request) + | (~EXTRACT_IR (val) & ~EXTRACT_ID (val) & group->request)); break; case 1: /* level/enable */ - HW_TRACE ((me, "write-icr group=%d level 1 0x%02x", + HW_TRACE ((me, "write-icr group=%d:1 level 0x%02x", group->gid, val)); group->level = EXTRACT_LV (val); group->enable = EXTRACT_IE (val); @@ -642,14 +643,24 @@ read_iagr (struct hw *me, { case 0: { - val = (controller->interrupt_accepted_group << 2); - if (!(controller->group[val].request - & controller->group[val].enable)) - /* oops, lost the request */ - val = 0; - HW_TRACE ((me, "read-iagr %d", (int) val)); + if (!(controller->group[controller->interrupt_accepted_group].request + & controller->group[controller->interrupt_accepted_group].enable)) + { + /* oops, lost the request */ + val = 0; + HW_TRACE ((me, "read-iagr:0 lost-0")); + } + else + { + val = (controller->interrupt_accepted_group << 2); + HW_TRACE ((me, "read-iagr:0 %d", (int) val)); + } break; } + case 1: + val = 0; + HW_TRACE ((me, "read-iagr:1 %d", (int) val)); + break; default: val = 0; HW_TRACE ((me, "read-iagr 0x%08lx bad offset", (long) offset)); @@ -743,14 +754,12 @@ mn103int_io_read_buffer (struct hw *me, void *dest, int space, unsigned_word base, - unsigned nr_bytes, - sim_cpu *processor, - sim_cia cia) + unsigned nr_bytes) { struct mn103int *controller = hw_data (me); unsigned8 *buf = dest; unsigned byte; - HW_TRACE ((me, "read 0x%08lx %d", (long) base, (int) nr_bytes)); + /* HW_TRACE ((me, "read 0x%08lx %d", (long) base, (int) nr_bytes)); */ for (byte = 0; byte < nr_bytes; byte++) { unsigned_word address = base + byte; @@ -778,14 +787,12 @@ mn103int_io_write_buffer (struct hw *me, const void *source, int space, unsigned_word base, - unsigned nr_bytes, - sim_cpu *cpu, - sim_cia cia) + unsigned nr_bytes) { struct mn103int *controller = hw_data (me); const unsigned8 *buf = source; unsigned byte; - HW_TRACE ((me, "write 0x%08lx %d", (long) base, (int) nr_bytes)); + /* HW_TRACE ((me, "write 0x%08lx %d", (long) base, (int) nr_bytes)); */ for (byte = 0; byte < nr_bytes; byte++) { unsigned_word address = base + byte; @@ -809,7 +816,7 @@ mn103int_io_write_buffer (struct hw *me, } -const struct hw_device_descriptor dv_mn103int_descriptor[] = { +const struct hw_descriptor dv_mn103int_descriptor[] = { { "mn103int", mn103int_finish, }, { NULL }, }; diff --git a/sim/testsuite/mips64r5900-elf/ChangeLog b/sim/testsuite/mips64r5900-elf/ChangeLog index 11b7fac..d1ad04e 100644 --- a/sim/testsuite/mips64r5900-elf/ChangeLog +++ b/sim/testsuite/mips64r5900-elf/ChangeLog @@ -1,6 +1,50 @@ +Thu May 21 19:04:52 1998 Andrew Cagney + + * Makefile.in (TESTS): Add t-sub.ok. + (t-sub.s): New file. + +Thu May 14 14:43:17 1998 Andrew Cagney + + * t-div.s, t-ddiv.s, t-div1.s: Check DIV for x/0 and MIN_INT/-1. + * t-divu1.s, t-divu.s: Check x/0 and x/MAX_INT. + * t-dadd: Test. + * trap.s: Test trap instruction. + * Makefile.in (TESTS): Update + + * f-add.s, f-adda.s, f-madd.s, f-madda.s, f-msub.s, f-msuba.s: Add + more test cases. + +Thu Apr 30 18:57:47 1998 Andrew Cagney + + * f-adda.s: Handle to-the-max accumulator values in madd.s. + + * t-macros.i: Use msub.s instead of madd.s to get a value from the + accumulator. Use suba.s instead of adda.s to get a value into the + accumulator. + +Thu Apr 16 17:44:17 1998 Andrew Cagney + + * f-mul.s, f-mula.s: More overflow/underflow tests. + + * f-cvt.s: Swap cvt.w.s and cvt.s.w was testing backwards. + + * t-macros.i (loadfpx, checkfpx, checkaccx): Define, accept hex + values. + (checkfp): Force FP-SCR register bit zero to 1 when checking. + +Wed Feb 25 20:26:29 1998 Andrew Cagney + + * f-*.s: New files. + + * Makefile.in (TESTS): Add floating point f-* tests. + + * t-macros.i: Add lots of floating point macros. + Mon Feb 2 16:50:21 1998 Andrew Cagney * t-sdl.s: New test. + (dest): 8 byte align sdl destination. + * Makefile.in: Update. Wed Sep 3 14:32:42 1997 Andrew Cagney diff --git a/sim/testsuite/mips64r5900-elf/Makefile.in b/sim/testsuite/mips64r5900-elf/Makefile.in new file mode 100644 index 0000000..120337e --- /dev/null +++ b/sim/testsuite/mips64r5900-elf/Makefile.in @@ -0,0 +1,271 @@ +# Makefile for regression testing the GNU debugger. +# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. + +# This file is part of GDB. + +# GDB 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, or (at your option) +# any later version. + +# GDB 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +VPATH = @srcdir@ +srcdir = @srcdir@ +srcroot = $(srcdir)/.. + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +host_alias = @host_alias@ +target_alias = @target_alias@ +program_transform_name = @program_transform_name@ +build_canonical = @build@ +host_canonical = @host@ +target_canonical = @target@ +target_cpu = @target_cpu@ + + +SHELL = /bin/sh +SUBDIRS = @subdirs@ +RPATH_ENVVAR = @RPATH_ENVVAR@ + +EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \ + echo $${rootme}/../../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = $(RUNTEST_FOR_TARGET) + +RUNTESTFLAGS = + +RUNTEST_FOR_TARGET = `\ + if [ -f $${srcdir}/../../../dejagnu/runtest ]; then \ + echo $${srcdir}/../../../dejagnu/runtest; \ + else \ + if [ "$(host_canonical)" = "$(target_canonical)" ]; then \ + echo runtest; \ + else \ + t='$(program_transform_name)'; echo runtest | sed -e '' $$t; \ + fi; \ + fi` + + +AS_FOR_TARGET = `\ + if [ -x ../../../gas/as-new ]; then \ + echo ../../../gas/as-new ; \ + else \ + echo $(target_alias)-as ; \ + fi` + +LD_FOR_TARGET = `\ + if [ -x ../../../ld/ld-new ]; then \ + echo ../../../ld/ld-new ; \ + else \ + echo $(target_alias)-ld ; \ + fi` + +RUN_FOR_TARGET = `\ + if [ -x ../../../sim/mips/run ]; then \ + echo ../../../sim/mips/run ; \ + else \ + echo $(target_alias)-run ; \ + fi` + +TESTS = \ + hello.hi \ + exit47.ko \ + \ + f-abs.ok \ + f-add.ok \ + f-adda.ok \ + $(f-bc1f.ok) \ + $(f-bc1fl.ok) \ + $(f-bc1t.ok) \ + $(f-bc1tl.ok) \ + f-cond.ok \ + $(f-cfc1.ok) \ + $(f-ctc1.ok) \ + f-cvt.ok \ + f-div.ok \ + $(f-lwc1.ok) \ + f-madd.ok \ + f-madda.ok \ + f-max.ok \ + $(f-mfc1.ok) \ + f-min.ok \ + f-msub.ok \ + f-msuba.ok \ + $(f-mtc1.ok) \ + f-mul.ok \ + f-mula.ok \ + f-neg.ok \ + f-rsqrt.ok \ + f-sqrt.ok \ + f-sub.ok \ + f-suba.ok \ + $(f-swc1.ok) \ + \ + t-dadd.ok \ + t-ddiv.ok \ + t-div.ok \ + t-div1.ok \ + t-divu.ok \ + t-divu1.ok \ + t-sub.ok \ + \ + t-mtsa.ok \ + t-pabsh.ok \ + t-pabsw.ok \ + t-paddb.ok \ + t-paddsb.ok \ + t-paddsh.ok \ + t-paddsw.ok \ + t-paddub.ok \ + t-padduh.ok \ + t-padduw.ok \ + t-pcpyh.ok \ + t-pdivbw.ok \ + t-pdivuw.ok \ + t-pdivw.ok \ + t-pexcw.ok \ + t-pexoh.ok \ + t-pext5.ok \ + t-pextlb.ok \ + t-pextlh.ok \ + t-pextlw.ok \ + t-pextub.ok \ + t-pextuh.ok \ + t-pextuw.ok \ + t-phmaddh.ok \ + t-phmsubh.ok \ + t-pinth.ok \ + t-pintoh.ok \ + t-pmaddh.ok \ + t-pmadduw.ok \ + t-pmaddw.ok \ + t-pmfhl-lh.ok \ + t-pmfhl-lw.ok \ + t-pmfhl-sh.ok \ + t-pmfhl-slw.ok \ + t-pmfhl-uw.ok \ + t-pmsubh.ok \ + t-pmthl-lw.ok \ + t-pmulth.ok \ + t-pmultuw.ok \ + t-pmultw.ok \ + t-ppac5.ok \ + t-ppacb.ok \ + t-ppach.ok \ + t-ppacw.ok \ + t-prot3w.ok \ + t-psllvw.ok \ + t-psrlvw.ok \ + t-psravw.ok \ + t-psubsb.ok \ + t-psubsh.ok \ + t-psubsw.ok \ + t-psubub.ok \ + t-psubuh.ok \ + t-psubuw.ok \ + t-psubw.ok \ + t-qfsrv.ok \ + t-sdl.ok \ + \ + trap.ok \ + +check: sanity $(TESTS) +sanity: + @eval echo AS_FOR_TARGET = $(AS_FOR_TARGET) + @eval echo LD_FOR_TARGET = $(LD_FOR_TARGET) + @eval echo RUN_FOR_TARGET = $(RUN_FOR_TARGET) + + + +# Rules for running all the tests, put into three types +# exit success, exit fail, print "Hello World" + +.u.log: + uudecode $*.u + $(RUN_FOR_TARGET) $* > $*.log + + +# Rules for running the tests + +.SUFFIXES: .u .uue .ok .ok .run .hi .ko .ko +.run.ok: + rm -f tmp-$* $*.ok + ulimit -t 5 ; $(RUN_FOR_TARGET) $*.run > tmp-$* + mv tmp-$* $*.ok +.run.hi: + rm -f tmp-$* $*.hi diff-$* + ulimit -t 5 ; $(RUN_FOR_TARGET) $*.run > tmp-$* + echo 'Hello World!' | diff - tmp-$* > diff-$* + cat tmp-$* diff-$* > $*.hi +.run.ko: + rm -f tmp-$* $*.ko + set +e ; \ + ulimit -t 5 ; $(RUN_FOR_TARGET) $*.run > tmp-$* ; \ + if [ $$? -eq 47 ] ; then \ + exit 0 ; \ + else \ + exit 1 ; \ + fi + mv tmp-$* $*.ko + + +# Rules for building all the tests and packing them into +# uuencoded files. + +.run.u: + uuencode < $*.run $*.run > $*.u + @echo "Move $*.u $*.uue" +.uue.run: + uudecode $(srcdir)/$*.uue +.o.run: + $(LD_FOR_TARGET) -Ttext 0xa0020000 -o $*.run $*.o +.s.o: + $(AS_FOR_TARGET) -I $(srcdir) $(srcdir)/$*.s -o $*.o + + +# +# Standard +# +clean mostlyclean: + -rm -f *~ core *.o a.out *.x *.grt *.run tmp-* diff-* + rm -f $(TESTS) +# if [ x"${SUBDIRS}" != x ] ; then \ +# for dir in ${SUBDIRS}; \ +# do \ +# echo "$$dir:"; \ +# if [ -d $$dir ]; then \ +# (cd $$dir; $(MAKE) clean); \ +# fi; \ +# done ; \ +# else true; fi + +distclean maintainer-clean realclean: clean + -rm -f *~ core + -rm -f Makefile config.status *-init.exp + -rm -fr *.log summary detail *.plog *.sum *.psum site.* +# if [ x"${SUBDIRS}" != x ] ; then \ +# for dir in ${SUBDIRS}; \ +# do \ +# echo "$$dir:"; \ +# if [ -d $$dir ]; then \ +# (cd $$dir; $(MAKE) distclean); \ +# fi; \ +# done ; \ +# else true; fi + +Makefile : Makefile.in config.status + $(SHELL) config.status + +config.status: configure + $(SHELL) config.status --recheck diff --git a/sim/testsuite/mips64r5900-elf/t-sub.s b/sim/testsuite/mips64r5900-elf/t-sub.s new file mode 100644 index 0000000..ef314ae --- /dev/null +++ b/sim/testsuite/mips64r5900-elf/t-sub.s @@ -0,0 +1,26 @@ +.include "t-macros.i" + + start + +test_sub: + + load $7 0x0000000000000000 0xffffffff80000001 + load $8 0x0000000000000000 0xffffffffffffffff + sub $10, $7, $8 + check10 0x0000000000000000 0xffffffff80000002 + +test_sub2: + load $7 0x0000000000000000 0xffffffff80000001 + load $8 0x0000000000000000 0x0000000000000001 + sub $10, $7, $8 + check10 0x0000000000000000 0xffffffff80000000 + + +test_sub3: + load $7 0x0000000000000000 0x0000000000000001 + load $8 0x0000000000000000 0x0000000000000002 + sub $10, $7, $8 + check10 0x0000000000000000 0xffffffffffffffff + + + exit0 -- cgit v1.1