mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
* New R5900 COP2 test case.
This commit is contained in:
@ -212,6 +212,7 @@ sce_test9_out_gif.dat
|
|||||||
sky.ld
|
sky.ld
|
||||||
t-cop2.s
|
t-cop2.s
|
||||||
t-cop2.vuexpect
|
t-cop2.vuexpect
|
||||||
|
t-cop2b.c
|
||||||
t-dma.c
|
t-dma.c
|
||||||
t-pke2.trc
|
t-pke2.trc
|
||||||
t-pke2.vif1expect
|
t-pke2.vif1expect
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
Fri Apr 17 14:47:53 1998 Frank Ch. Eigler <fche@cygnus.com>
|
||||||
|
|
||||||
|
* t-cop2b.c: New test for COP2 via inline asm.
|
||||||
|
* Makefile.in: Build t-cop2b.
|
||||||
|
* t-cop2.s: Update for new VCALLMSR instruction.
|
||||||
|
|
||||||
Thu Apr 16 15:05:51 1998 Jillian Ye <jillian@cygnus.com>
|
Thu Apr 16 15:05:51 1998 Jillian Ye <jillian@cygnus.com>
|
||||||
|
|
||||||
* t-pke2.trc t-pke2.vif1expect : Update the testcase
|
* t-pke2.trc t-pke2.vif1expect : Update the testcase
|
||||||
|
@ -109,7 +109,7 @@ TESTS = \
|
|||||||
tsv408_0.ok tsv408_1.ok \
|
tsv408_0.ok tsv408_1.ok \
|
||||||
tsv416_0.ok tsv416_1.ok \
|
tsv416_0.ok tsv416_1.ok \
|
||||||
tsv432_0.ok tsv432_1.ok \
|
tsv432_0.ok tsv432_1.ok \
|
||||||
t-cop2.vuok
|
t-cop2.vuok t-cop2b.ok
|
||||||
|
|
||||||
#SCE_TESTS := $(patsubst %.dvpasm, %.ok, $(wildcard sce*.dvpasm))
|
#SCE_TESTS := $(patsubst %.dvpasm, %.ok, $(wildcard sce*.dvpasm))
|
||||||
SCE_TESTS = \
|
SCE_TESTS = \
|
||||||
@ -145,7 +145,7 @@ sanity:
|
|||||||
#------------------------------------
|
#------------------------------------
|
||||||
|
|
||||||
LDFLAGS=-T$(srcdir)/sky.ld
|
LDFLAGS=-T$(srcdir)/sky.ld
|
||||||
CFLAGS += -I$(srcdir)
|
CFLAGS += -g -I$(srcdir)
|
||||||
ASFLAGS = -I$(srcdir)
|
ASFLAGS = -I$(srcdir)
|
||||||
|
|
||||||
sce%.exe: sce%.o sce_main.o refresh.o
|
sce%.exe: sce%.o sce_main.o refresh.o
|
||||||
@ -217,7 +217,7 @@ sce%.ok: sce%.exe
|
|||||||
.trc.c:
|
.trc.c:
|
||||||
$(C_GEN) $< $@
|
$(C_GEN) $< $@
|
||||||
.c.run:
|
.c.run:
|
||||||
$(GCC_FOR_TARGET) -T$(srcdir)/sky.ld -o $@ $<
|
$(GCC_FOR_TARGET) $(CFLAGS) $(LDFLAGS) -o $@ $<
|
||||||
.uu.run:
|
.uu.run:
|
||||||
uudecode $< > $@
|
uudecode $< > $@
|
||||||
.run.vif0out:
|
.run.vif0out:
|
||||||
@ -232,6 +232,8 @@ sce%.ok: sce%.exe
|
|||||||
.s.run:
|
.s.run:
|
||||||
rm -f $@
|
rm -f $@
|
||||||
$(AS_FOR_TARGET) -mcpu=r5900 -o $@ $<
|
$(AS_FOR_TARGET) -mcpu=r5900 -o $@ $<
|
||||||
|
.c.s:
|
||||||
|
$(GCC_FOR_TARGET) -S -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -265,7 +265,7 @@ mpg:
|
|||||||
vaddaz.xyz ACC,vf2,vf3
|
vaddaz.xyz ACC,vf2,vf3
|
||||||
vaddaz.wxyz ACC,vf2,vf3
|
vaddaz.wxyz ACC,vf2,vf3
|
||||||
vcallms stuff
|
vcallms stuff
|
||||||
vcallmsr vi19
|
vcallmsr vi27
|
||||||
vclip vf4
|
vclip vf4
|
||||||
vdiv Q,vf4z,vf8w
|
vdiv Q,vf4z,vf8w
|
||||||
vdiv Q,vf4y,vf8x
|
vdiv Q,vf4y,vf8x
|
||||||
|
136
sim/testsuite/sky/t-cop2b.c
Normal file
136
sim/testsuite/sky/t-cop2b.c
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/* Copyright (C) 1998 Cygnus Solutions */
|
||||||
|
/* COP2 function test, with non-expert inline assembly */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* globals */
|
||||||
|
|
||||||
|
int num_ok = 0;
|
||||||
|
int num_errors = 0;
|
||||||
|
float data_array[128] __attribute__((aligned(16)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* macros */
|
||||||
|
|
||||||
|
#define TEST(x) do_test(x, #x, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
void enable_cop2();
|
||||||
|
void test00();
|
||||||
|
void do_test(int ok, const char* test, int line);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Utility functions */
|
||||||
|
|
||||||
|
void
|
||||||
|
enable_cop2()
|
||||||
|
{
|
||||||
|
asm volatile (".set noat");
|
||||||
|
asm volatile ("mfc0 $1,$12; dli $2,0x40000000; or $1,$2,$2; mtc0 $1,$12"
|
||||||
|
: /* no outputs */
|
||||||
|
: /* no inputs */
|
||||||
|
: "$1", "$2" /* clobbered */);
|
||||||
|
asm volatile (".set at");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
do_test(int ok, const char* test, int line)
|
||||||
|
{
|
||||||
|
static int test_num = 0;
|
||||||
|
|
||||||
|
printf("[%d @ %d] (%s): ", ++test_num, line, test);
|
||||||
|
if(ok)
|
||||||
|
{
|
||||||
|
num_ok ++;
|
||||||
|
printf("ok\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_errors ++;
|
||||||
|
printf("ko\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Tests */
|
||||||
|
|
||||||
|
|
||||||
|
/* test00: test LQC2/SQC2 data non-corruption */
|
||||||
|
void test00()
|
||||||
|
{
|
||||||
|
volatile float* data = & data_array[0];
|
||||||
|
volatile float* data2 = & data_array[4];
|
||||||
|
|
||||||
|
/* stuff some initial values */
|
||||||
|
data[0] = -10.0;
|
||||||
|
data[1] = +10.0;
|
||||||
|
data[2] = -20.0;
|
||||||
|
data[3] = +20.0;
|
||||||
|
|
||||||
|
/* save values */
|
||||||
|
asm volatile ("lqc2 vf01,%0"
|
||||||
|
: /* no output */
|
||||||
|
: "m" (data[0]) /* input */
|
||||||
|
: "memory" /* clobbered */);
|
||||||
|
|
||||||
|
/* test no clobbering */
|
||||||
|
TEST(data[0] == -10.0f);
|
||||||
|
TEST(data[1] == +10.0f);
|
||||||
|
TEST(data[2] == -20.0f);
|
||||||
|
TEST(data[3] == +20.0f);
|
||||||
|
|
||||||
|
/* overwrite with VU constants */
|
||||||
|
asm volatile ("sqc2 vf00,%0"
|
||||||
|
: /* no outputs */
|
||||||
|
: "m" (data[0]) /* input */
|
||||||
|
: "memory" /* clobbered */);
|
||||||
|
|
||||||
|
/* test proper values */
|
||||||
|
TEST(data[0] == 0.0f);
|
||||||
|
TEST(data[1] == 0.5f);
|
||||||
|
TEST(data[2] == -1.0f);
|
||||||
|
TEST(data[3] == +1.0f);
|
||||||
|
|
||||||
|
/* read back original array values */
|
||||||
|
asm volatile ("sqc2 vf01,%0"
|
||||||
|
: /* no outputs */
|
||||||
|
: "m" (data2[0]) /* input */
|
||||||
|
: "memory" /* clobbered */);
|
||||||
|
|
||||||
|
/* printf("%f,%f,%f,%f\n", data2[0], data2[1], data2[2], data2[3]); */
|
||||||
|
|
||||||
|
/* test proper values */
|
||||||
|
TEST(data2[0] == -10.0f);
|
||||||
|
TEST(data2[1] == +10.0f);
|
||||||
|
TEST(data2[2] == -20.0f);
|
||||||
|
TEST(data2[3] == +20.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Mainline */
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
enable_cop2();
|
||||||
|
|
||||||
|
/* tests */
|
||||||
|
test00();
|
||||||
|
|
||||||
|
|
||||||
|
/* summarize */
|
||||||
|
printf("%d ok, %d bad\n", num_ok, num_errors);
|
||||||
|
if(num_errors > 0)
|
||||||
|
exit(47);
|
||||||
|
else
|
||||||
|
exit(0);
|
||||||
|
}
|
Reference in New Issue
Block a user