1// Test extraction from accumulators: 2// ROUND/TRUNCATE in SIGNED FRACTIONAL mode 3// test ops: "+=" 4# mach: bfin 5 6.include "testutils.inc" 7 start 8 9 10// load r0=0x7ffef000 11// load r1=0x7ffff000 12// load r2=0x00008000 13// load r3=0x00018000 14// load r4=0x0000007f 15 loadsym P0, data0; 16 R0 = [ P0 ++ ]; 17 R1 = [ P0 ++ ]; 18 R2 = [ P0 ++ ]; 19 R3 = [ P0 ++ ]; 20 R4 = [ P0 ++ ]; 21 22// round 23// 0x007ffef00 -> 0x7fff 24 A1 = A0 = 0; 25 A1.w = R0; 26 A0.w = R0; 27 R5.H = A1, R5.L = A0; 28 DBGA ( R5.L , 0x7fff ); 29 DBGA ( R5.H , 0x7fff ); 30 31// round with ovflw 32// 0x007ffff00 -> 0x7fff 33 A1 = A0 = 0; 34 A1.w = R1; 35 A0.w = R1; 36 R5.H = A1, R5.L = A0; 37 DBGA ( R5.L , 0x7fff ); 38 DBGA ( R5.H , 0x7fff ); 39 40// trunc 41// 0x007ffef00 -> 0x7ffe 42 A1 = A0 = 0; 43 A1.w = R0; 44 A0.w = R0; 45 R5.H = A1, R5.L = A0 (T); 46 DBGA ( R5.L , 0x7ffe ); 47 DBGA ( R5.H , 0x7ffe ); 48 49// round with ovflw 50// 0x7f7ffff00 -> 0x7fff 51 A1 = A0 = 0; 52 A1.w = R1; 53 A1.x = R4.L; 54 A0.w = R1; 55 A0.x = R4.L; 56 R5.H = A1, R5.L = A0; 57 DBGA ( R5.L , 0x7fff ); 58 DBGA ( R5.H , 0x7fff ); 59 60// round, nearest even is zero 61// 0x0000008000 -> 0x0000 62 A1 = A0 = 0; 63 A1.w = R2; 64 A0.w = R2; 65 R5.H = A1, R5.L = A0; 66 DBGA ( R5.L , 0x0 ); 67 DBGA ( R5.H , 0x0 ); 68 69// round, nearest even is 2 70// 0x00000018000 -> 0x0002 71 A1 = A0 = 0; 72 A1.w = R3; 73 A0.w = R3; 74 R5.H = A1, R5.L = A0; 75 DBGA ( R5.L , 0x2 ); 76 DBGA ( R5.H , 0x2 ); 77 78 pass 79 80 .data 81data0: 82 .dw 0xf000 83 .dw 0x7ffe 84 .dw 0xf000 85 .dw 0x7ffe 86 .dw 0x8000 87 .dw 0x0000 88 .dw 0x8000 89 .dw 0x0001 90 .dw 0x007f 91 .dw 0x0000 92