Fix sign extension on 32 bit add/sub instructions.
This commit is contained in:
parent
8404825993
commit
26feb3a83d
|
@ -1,3 +1,8 @@
|
|||
Thu May 21 18:57:19 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,28 @@
|
|||
start-sanitize-am30
|
||||
Thu May 14 19:30:11 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_open): Create a polling PAL device.
|
||||
|
||||
end-sanitize-am30
|
||||
Fri May 1 16:39:15 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <noer@cygnus.com>
|
||||
|
||||
* configure: Regenerated to track ../common/aclocal.m4 changes.
|
||||
|
|
|
@ -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 },
|
||||
};
|
||||
|
|
|
@ -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 },
|
||||
};
|
||||
|
|
|
@ -1,6 +1,50 @@
|
|||
Thu May 21 19:04:52 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* Makefile.in (TESTS): Add t-sub.ok.
|
||||
(t-sub.s): New file.
|
||||
|
||||
Thu May 14 14:43:17 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
* 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 <cagney@b1.cygnus.com>
|
||||
|
||||
* t-sdl.s: New test.
|
||||
(dest): 8 byte align sdl destination.
|
||||
|
||||
* Makefile.in: Update.
|
||||
|
||||
Wed Sep 3 14:32:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue