1// Test ALU RND RND12 RND20 2# mach: bfin 3 4.include "testutils.inc" 5 start 6 7 8// positive saturation 9 R0 = 0xffffffff; 10 A0.w = R0; 11 A1.w = R0; 12 R0 = 0x7f (X); 13 A0.x = R0; 14 A1.x = R0; 15 R3 = A1 + A0, R4 = A1 - A0 (S); 16 DBGA ( R3.H , 0x7fff ); DBGA ( R3.L , 0xffff ); 17 DBGA ( R4.H , 0x0000 ); DBGA ( R4.L , 0x0000 ); 18 19// neg saturation 20 R0 = 0; 21 A0.w = R0; 22 A1.w = R0; 23 R0 = 0x80 (X); 24 A0.x = R0; 25 A1.x = R0; 26 R3 = A1 + A0, R4 = A1 - A0 (S); 27 DBGA ( R3.H , 0x8000 ); DBGA ( R3.L , 0x0000 ); 28 DBGA ( R4.H , 0x0000 ); DBGA ( R4.L , 0x0000 ); 29 30// positive saturation 31 R0 = 0xfffffff0; 32 A0.w = R0; 33 A1.w = R0; 34 R0 = 0x01; 35 A0.x = R0; 36 A1.x = R0; 37 R3 = A1 + A0, R4 = A1 - A0 (S); 38 DBGA ( R3.H , 0x7fff ); DBGA ( R3.L , 0xffff ); 39 DBGA ( R4.H , 0x0000 ); DBGA ( R4.L , 0x0000 ); 40 41// no sat 42 R0 = 0xfffffff0; 43 A0.w = R0; 44 A1.w = R0; 45 R0 = 0x01; 46 A0.x = R0; 47 A1.x = R0; 48 R3 = A1 + A0, R4 = A1 - A0 (NS); 49 DBGA ( R3.H , 0xffff ); DBGA ( R3.L , 0xffe0 ); 50 DBGA ( R4.H , 0x0000 ); DBGA ( R4.L , 0x0000 ); 51 52// add and sub +1 -1 53 R0 = 0x00000001; 54 A0.w = R0; 55 R0 = 0xffffffff; 56 A1.w = R0; 57 R0 = 0; 58 A0.x = R0; 59 R0 = 0xff (X); 60 A1.x = R0; 61 R3 = A1 + A0, R4 = A1 - A0 (NS); 62 DBGA ( R3.H , 0x0000 ); DBGA ( R3.L , 0x0000 ); // 0 63 DBGA ( R4.H , 0xffff ); DBGA ( R4.L , 0xfffe ); // -2 64 65// should get the same with saturation 66 R3 = A1 + A0, R4 = A1 - A0 (S); 67 DBGA ( R3.H , 0x0000 ); DBGA ( R3.L , 0x0000 ); // 0 68 DBGA ( R4.H , 0xffff ); DBGA ( R4.L , 0xfffe ); // -2 69 70// add and sub -1 +1 but with reverse order of A0 A1 71 R0 = 0x00000001; 72 A0.w = R0; 73 R0 = 0xffffffff; 74 A1.w = R0; 75 R0 = 0; 76 A0.x = R0; 77 R0 = 0xff (X); 78 A1.x = R0; 79 R3 = A0 + A1, R4 = A0 - A1 (NS); 80 DBGA ( R3.H , 0x0000 ); DBGA ( R3.L , 0x0000 ); 81 DBGA ( R4.H , 0x0000 ); DBGA ( R4.L , 0x0002 ); 82 83 pass 84