sim/frv/
* frv.c (frvbf_iacc_cut): Rework, taking rounding into account. testsuite/ * sim/frv/fr400/scutss.cgs: Fix tests to account for rounding. Add some new ones.
This commit is contained in:
parent
8ae0baa268
commit
8b73069fed
4 changed files with 132 additions and 72 deletions
|
@ -1,3 +1,7 @@
|
|||
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* frv.c (frvbf_iacc_cut): Rework, taking rounding into account.
|
||||
|
||||
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* decode.c, decode.h, model.c, sem.c: Regenerate.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* frv simulator support code
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 Free Software
|
||||
Foundation, Inc.
|
||||
Contributed by Red Hat.
|
||||
|
||||
This file is part of the GNU simulators.
|
||||
|
@ -1100,25 +1101,53 @@ frvbf_media_cut_ss (SIM_CPU *current_cpu, DI acc, SI cut_point)
|
|||
SI
|
||||
frvbf_iacc_cut (SIM_CPU *current_cpu, DI acc, SI cut_point)
|
||||
{
|
||||
/* The cut point is the lower 6 bits (signed) of what we are passed. */
|
||||
DI lower, upper;
|
||||
|
||||
/* The cut point is the lower 7 bits (signed) of what we are passed. */
|
||||
cut_point = cut_point << 25 >> 25;
|
||||
|
||||
if (cut_point <= -32)
|
||||
cut_point = -31; /* Special case for full shiftout. */
|
||||
/* Conceptually, the operation is on a 128-bit sign-extension of ACC.
|
||||
The top bit of the return value corresponds to bit (63 - CUT_POINT)
|
||||
of this 128-bit value.
|
||||
|
||||
/* Negative cuts (cannot saturate). */
|
||||
Since we can't deal with 128-bit values very easily, convert the
|
||||
operation into an equivalent 64-bit one. */
|
||||
if (cut_point < 0)
|
||||
return acc >> (32 + -cut_point);
|
||||
{
|
||||
/* Avoid an undefined shift operation. */
|
||||
if (cut_point == -64)
|
||||
acc >>= 63;
|
||||
else
|
||||
acc >>= -cut_point;
|
||||
cut_point = 0;
|
||||
}
|
||||
|
||||
/* Positive cuts will saturate if significant bits are shifted out. */
|
||||
if (acc != ((acc << cut_point) >> cut_point))
|
||||
if (acc >= 0)
|
||||
/* Get the shifted but unsaturated result. Set LOWER to the lowest
|
||||
32 bits of the result and UPPER to the result >> 31. */
|
||||
if (cut_point < 32)
|
||||
{
|
||||
/* The cut loses the (32 - CUT_POINT) least significant bits.
|
||||
Round the result up if the most significant of these lost bits
|
||||
is 1. */
|
||||
lower = acc >> (32 - cut_point);
|
||||
if (lower < 0x7fffffff)
|
||||
if (acc & LSBIT64 (32 - cut_point - 1))
|
||||
lower++;
|
||||
upper = lower >> 31;
|
||||
}
|
||||
else
|
||||
{
|
||||
lower = acc << (cut_point - 32);
|
||||
upper = acc >> (63 - cut_point);
|
||||
}
|
||||
|
||||
/* Saturate the result. */
|
||||
if (upper < -1)
|
||||
return ~0x7fffffff;
|
||||
else if (upper > 0)
|
||||
return 0x7fffffff;
|
||||
else
|
||||
return 0x80000000;
|
||||
|
||||
/* No saturate, just cut. */
|
||||
return ((acc << cut_point) >> 32);
|
||||
return lower;
|
||||
}
|
||||
|
||||
/* Compute the result of shift-left-arithmetic-with-saturation (SLASS). */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* sim/frv/fr400/scutss.cgs: Fix tests to account for rounding.
|
||||
Add some new ones.
|
||||
|
||||
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* sim/frv/{rstb,rsth,rst,rstd,rstq}.cgs: Delete.
|
||||
|
|
|
@ -12,7 +12,7 @@ scutss:
|
|||
|
||||
set_gr_immed 0,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffe7,gr11
|
||||
test_gr_limmed 0xffff,0xffe8,gr11
|
||||
|
||||
set_gr_immed 1,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -28,7 +28,7 @@ scutss:
|
|||
|
||||
set_gr_immed 4,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xfe78,gr11
|
||||
test_gr_limmed 0xffff,0xfe79,gr11
|
||||
|
||||
set_gr_immed 5,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -40,11 +40,11 @@ scutss:
|
|||
|
||||
set_gr_immed 7,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xf3c4,gr11
|
||||
test_gr_limmed 0xffff,0xf3c5,gr11
|
||||
|
||||
set_gr_immed 8,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xe789,gr11
|
||||
test_gr_limmed 0xffff,0xe78a,gr11
|
||||
|
||||
set_gr_immed 9,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -52,7 +52,7 @@ scutss:
|
|||
|
||||
set_gr_immed 10,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0x9e26,gr11
|
||||
test_gr_limmed 0xffff,0x9e27,gr11
|
||||
|
||||
set_gr_immed 11,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -60,7 +60,7 @@ scutss:
|
|||
|
||||
set_gr_immed 12,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfffe,0x789a,gr11
|
||||
test_gr_limmed 0xfffe,0x789b,gr11
|
||||
|
||||
set_gr_immed 13,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -68,19 +68,19 @@ scutss:
|
|||
|
||||
set_gr_immed 14,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfff9,0xe26a,gr11
|
||||
test_gr_limmed 0xfff9,0xe26b,gr11
|
||||
|
||||
set_gr_immed 15,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfff3,0xc4d5,gr11
|
||||
test_gr_limmed 0xfff3,0xc4d6,gr11
|
||||
|
||||
set_gr_immed 16,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffe7,0x89ab,gr11
|
||||
test_gr_limmed 0xffe7,0x89ac,gr11
|
||||
|
||||
set_gr_immed 17,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffcf,0x1357,gr11
|
||||
test_gr_limmed 0xffcf,0x1358,gr11
|
||||
|
||||
set_gr_immed 18,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -92,11 +92,11 @@ scutss:
|
|||
|
||||
set_gr_immed 20,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfe78,0x9abc,gr11
|
||||
test_gr_limmed 0xfe78,0x9abd,gr11
|
||||
|
||||
set_gr_immed 21,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfcf1,0x3579,gr11
|
||||
test_gr_limmed 0xfcf1,0x357a,gr11
|
||||
|
||||
set_gr_immed 22,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -104,19 +104,19 @@ scutss:
|
|||
|
||||
set_gr_immed 23,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xf3c4,0xd5e6,gr11
|
||||
test_gr_limmed 0xf3c4,0xd5e7,gr11
|
||||
|
||||
set_gr_immed 24,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xe789,0xabcd,gr11
|
||||
test_gr_limmed 0xe789,0xabce,gr11
|
||||
|
||||
set_gr_immed 25,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xcf13,0x579b,gr11
|
||||
test_gr_limmed 0xcf13,0x579c,gr11
|
||||
|
||||
set_gr_immed 26,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x9e26,0xaf37,gr11
|
||||
test_gr_limmed 0x9e26,0xaf38,gr11
|
||||
|
||||
set_gr_immed 27,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -268,11 +268,11 @@ scutss:
|
|||
|
||||
set_gr_immed 64,gr10 ; same as -64
|
||||
scutss gr10,gr11
|
||||
test_gr_immed -1,gr11
|
||||
test_gr_immed 0,gr11
|
||||
|
||||
set_gr_immed 128,gr10 ; same as 0
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffe7,gr11
|
||||
test_gr_limmed 0xffff,0xffe8,gr11
|
||||
|
||||
.global scutss2
|
||||
scutss2:
|
||||
|
@ -281,7 +281,7 @@ scutss2:
|
|||
|
||||
set_gr_limmed 0xffff,0xffff,gr10 ; -1
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xf3c4,0xd5e6,gr11
|
||||
test_gr_limmed 0xf3c4,0xd5e7,gr11
|
||||
|
||||
set_gr_limmed 0x0000,0x007e,gr10 ; -2 (only lower 7 bits matter)
|
||||
scutss gr10,gr11
|
||||
|
@ -289,11 +289,11 @@ scutss2:
|
|||
|
||||
set_gr_immed -3,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfcf1,0x3579,gr11
|
||||
test_gr_limmed 0xfcf1,0x357a,gr11
|
||||
|
||||
set_gr_immed -4,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfe78,0x9abc,gr11
|
||||
test_gr_limmed 0xfe78,0x9abd,gr11
|
||||
|
||||
set_gr_immed -5,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -305,19 +305,19 @@ scutss2:
|
|||
|
||||
set_gr_immed -7,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffcf,0x1357,gr11
|
||||
test_gr_limmed 0xffcf,0x1358,gr11
|
||||
|
||||
set_gr_immed -8,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffe7,0x89ab,gr11
|
||||
test_gr_limmed 0xffe7,0x89ac,gr11
|
||||
|
||||
set_gr_immed -9,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfff3,0xc4d5,gr11
|
||||
test_gr_limmed 0xfff3,0xc4d6,gr11
|
||||
|
||||
set_gr_immed -10,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfff9,0xe26a,gr11
|
||||
test_gr_limmed 0xfff9,0xe26b,gr11
|
||||
|
||||
set_gr_immed -11,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -325,7 +325,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -12,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfffe,0x789a,gr11
|
||||
test_gr_limmed 0xfffe,0x789b,gr11
|
||||
|
||||
set_gr_immed -13,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -333,7 +333,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -14,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0x9e26,gr11
|
||||
test_gr_limmed 0xffff,0x9e27,gr11
|
||||
|
||||
set_gr_immed -15,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -341,11 +341,11 @@ scutss2:
|
|||
|
||||
set_gr_immed -16,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xe789,gr11
|
||||
test_gr_limmed 0xffff,0xe78a,gr11
|
||||
|
||||
set_gr_immed -17,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xf3c4,gr11
|
||||
test_gr_limmed 0xffff,0xf3c5,gr11
|
||||
|
||||
set_gr_immed -18,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -357,7 +357,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -20,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xfe78,gr11
|
||||
test_gr_limmed 0xffff,0xfe79,gr11
|
||||
|
||||
set_gr_immed -21,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -373,19 +373,19 @@ scutss2:
|
|||
|
||||
set_gr_immed -24,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffe7,gr11
|
||||
test_gr_limmed 0xffff,0xffe8,gr11
|
||||
|
||||
set_gr_immed -25,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xfff3,gr11
|
||||
test_gr_limmed 0xffff,0xfff4,gr11
|
||||
|
||||
set_gr_immed -26,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xfff9,gr11
|
||||
test_gr_limmed 0xffff,0xfffa,gr11
|
||||
|
||||
set_gr_immed -27,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xfffc,gr11
|
||||
test_gr_limmed 0xffff,0xfffd,gr11
|
||||
|
||||
set_gr_immed -28,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -397,26 +397,26 @@ scutss2:
|
|||
|
||||
set_gr_immed -30,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffff,gr11
|
||||
test_gr_immed 0,gr11
|
||||
|
||||
set_gr_immed -31,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffff,gr11
|
||||
test_gr_immed 0,gr11
|
||||
|
||||
set_gr_immed -32,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffff,gr11
|
||||
test_gr_immed 0,gr11
|
||||
|
||||
set_gr_limmed 0,64,gr10 ; same as -32
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffff,gr11
|
||||
test_gr_immed 0,gr11
|
||||
|
||||
set_spr_immed 0x6789abcd,iacc0h
|
||||
set_spr_immed 0xefa5a5a5,iacc0l
|
||||
|
||||
set_gr_limmed 0xffff,0xffff,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x33c4,0xd5e6,gr11
|
||||
test_gr_limmed 0x33c4,0xd5e7,gr11
|
||||
|
||||
set_gr_limmed 0x0000,0x007e,gr10 ; -2 (only lower 7 bits matter)
|
||||
scutss gr10,gr11
|
||||
|
@ -424,11 +424,11 @@ scutss2:
|
|||
|
||||
set_gr_immed -3,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0cf1,0x3579,gr11
|
||||
test_gr_limmed 0x0cf1,0x357a,gr11
|
||||
|
||||
set_gr_immed -4,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0678,0x9abc,gr11
|
||||
test_gr_limmed 0x0678,0x9abd,gr11
|
||||
|
||||
set_gr_immed -5,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -440,19 +440,19 @@ scutss2:
|
|||
|
||||
set_gr_immed -7,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x00cf,0x1357,gr11
|
||||
test_gr_limmed 0x00cf,0x1358,gr11
|
||||
|
||||
set_gr_immed -8,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0067,0x89ab,gr11
|
||||
test_gr_limmed 0x0067,0x89ac,gr11
|
||||
|
||||
set_gr_immed -9,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0033,0xc4d5,gr11
|
||||
test_gr_limmed 0x0033,0xc4d6,gr11
|
||||
|
||||
set_gr_immed -10,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0019,0xe26a,gr11
|
||||
test_gr_limmed 0x0019,0xe26b,gr11
|
||||
|
||||
set_gr_immed -11,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -460,7 +460,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -12,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0006,0x789a,gr11
|
||||
test_gr_limmed 0x0006,0x789b,gr11
|
||||
|
||||
set_gr_immed -13,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -468,7 +468,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -14,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0001,0x9e26,gr11
|
||||
test_gr_limmed 0x0001,0x9e27,gr11
|
||||
|
||||
set_gr_immed -15,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -476,11 +476,11 @@ scutss2:
|
|||
|
||||
set_gr_immed -16,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x6789,gr11
|
||||
test_gr_limmed 0x0000,0x678a,gr11
|
||||
|
||||
set_gr_immed -17,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x33c4,gr11
|
||||
test_gr_limmed 0x0000,0x33c5,gr11
|
||||
|
||||
set_gr_immed -18,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -492,7 +492,7 @@ scutss2:
|
|||
|
||||
set_gr_immed -20,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0678,gr11
|
||||
test_gr_limmed 0x0000,0x0679,gr11
|
||||
|
||||
set_gr_immed -21,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -508,19 +508,19 @@ scutss2:
|
|||
|
||||
set_gr_immed -24,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0067,gr11
|
||||
test_gr_limmed 0x0000,0x0068,gr11
|
||||
|
||||
set_gr_immed -25,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0033,gr11
|
||||
test_gr_limmed 0x0000,0x0034,gr11
|
||||
|
||||
set_gr_immed -26,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0019,gr11
|
||||
test_gr_limmed 0x0000,0x001a,gr11
|
||||
|
||||
set_gr_immed -27,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x000c,gr11
|
||||
test_gr_limmed 0x0000,0x000d,gr11
|
||||
|
||||
set_gr_immed -28,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -532,11 +532,11 @@ scutss2:
|
|||
|
||||
set_gr_immed -30,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0001,gr11
|
||||
test_gr_limmed 0x0000,0x0002,gr11
|
||||
|
||||
set_gr_immed -31,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x0000,0x0000,gr11
|
||||
test_gr_limmed 0x0000,0x0001,gr11
|
||||
|
||||
set_gr_immed -32,gr10
|
||||
scutss gr10,gr11
|
||||
|
@ -630,13 +630,35 @@ scutss2:
|
|||
|
||||
set_gr_limmed 0xffff,0xfffc,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfaf5,0xa5a5,gr11
|
||||
test_gr_limmed 0xfaf5,0xa5a6,gr11
|
||||
|
||||
set_spr_immed 0x2f5a5a5a,iacc0h
|
||||
set_spr_immed 0x5a5a5a5a,iacc0l
|
||||
|
||||
set_gr_limmed 0xffff,0xfff9,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x005e,0xb4b4,gr11
|
||||
test_gr_limmed 0x005e,0xb4b5,gr11
|
||||
|
||||
# From the manual
|
||||
.global scutss3
|
||||
scutss3:
|
||||
set_spr_immed 0xfffffedc,iacc0h
|
||||
set_spr_immed 0xba987654,iacc0l
|
||||
|
||||
set_gr_immed 16,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xfedc,0xba98,gr11
|
||||
|
||||
set_gr_immed 12,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffed,0xcbaa,gr11
|
||||
|
||||
set_gr_immed -4,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0xffff,0xffee,gr11
|
||||
|
||||
set_gr_immed 24,gr10
|
||||
scutss gr10,gr11
|
||||
test_gr_limmed 0x8000,0x0000,gr11
|
||||
|
||||
pass
|
||||
|
|
Loading…
Reference in a new issue