blob: 6f26cc8288f51413a7cdfbd538f456b5ce84be30 [file] [log] [blame]
// Immediate dual 16b SHIFT test program.
// Test r4 = ASHIFT/ASHIFT (r2 by 10);
// Test r4 = ASHIFT/ASHIFT (r2 by 10) S;
// Test r4 = LSHIFT/LSHIFT (r2 by 10);
# mach: bfin
.include "testutils.inc"
start
// arithmetic
// left by largest positive magnitude of 15 (0xf)
// 8001 -> 8000
R7 = 0;
ASTAT = R7;
R0.L = 0x8001;
R0.H = 0x0100;
R6 = R0 << 15 (V);
DBGA ( R6.L , 0x8000 );
DBGA ( R6.H , 0x0000 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// left by largest positive magnitude of 15 (0xf) with saturation
R7 = 0;
ASTAT = R7;
R0.L = 0x8001;
R0.H = 0x0100;
R6 = R0 << 15 (V , S);
DBGA ( R6.L , 0x8000 );
DBGA ( R6.H , 0x7fff );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// left by 1
R7 = 0;
ASTAT = R7;
R0.L = 0x8001;
R0.H = 0x0100;
R6 = R0 << 1 (V);
DBGA ( R6.L , 0x0002 );
DBGA ( R6.H , 0x0200 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// left by 1 saturating
R7 = 0;
ASTAT = R7;
R0.L = 0x8001;
R0.H = 0x0100;
R6 = R0 << 1 (V , S);
DBGA ( R6.L , 0x8000 );
DBGA ( R6.H , 0x0200 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// left by 15 saturating
R7 = 0;
ASTAT = R7;
R0.L = 0xfff0;
R0.H = 0x0000;
R6 = R0 << 15 (V , S);
DBGA ( R6.L , 0x8000 );
DBGA ( R6.H , 0x0000 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// right by 15
R7 = 0;
ASTAT = R7;
R0.L = 0x8000;
R0.H = 0x0100;
R6 = R0 >>> 15 (V);
DBGA ( R6.L , 0xffff );
DBGA ( R6.H , 0x0000 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// arithmetic
// right by 15 (sat has no effect)
R7 = 0;
ASTAT = R7;
R0.L = 0x8000;
R0.H = 0x0100;
R6 = R0 >>> 15 (V);
DBGA ( R6.L , 0xffff );
DBGA ( R6.H , 0x0000 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
// logic
// right by 15
R7 = 0;
ASTAT = R7;
R0.L = 0x8000;
R0.H = 0x0100;
R6 = R0 >> 15 (V);
DBGA ( R6.L , 0x0001 );
DBGA ( R6.H , 0x0000 );
CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
pass