1 1.1 christos // Test result extraction of mac instructions. 2 1.1 christos // Test basic edge values 3 1.1 christos // SIGNED INTEGER mode into SINGLE destination register 4 1.1 christos // test ops: "+=" 5 1.1 christos # mach: bfin 6 1.1 christos 7 1.1 christos .include "testutils.inc" 8 1.1 christos start 9 1.1 christos 10 1.1 christos 11 1.1 christos // load r0=0x80000001 12 1.1 christos // load r1=0x80007fff 13 1.1 christos // load r2=0xf0000000 14 1.1 christos // load r3=0x0000007f 15 1.1 christos // load r4=0x00000080 16 1.1 christos loadsym P0, data0; 17 1.1 christos R0 = [ P0 ++ ]; 18 1.1 christos R1 = [ P0 ++ ]; 19 1.1 christos R2 = [ P0 ++ ]; 20 1.1 christos R3 = [ P0 ++ ]; 21 1.1 christos R4 = [ P0 ++ ]; 22 1.1 christos 23 1.1 christos // integer extraction with no saturation 24 1.1 christos // 0x1 * 0x1 = 0x0000000001 -> 0x1 25 1.1 christos A1 = A0 = 0; 26 1.1 christos R5.H = (A1 += R0.L * R0.L), R5.L = (A0 += R0.L * R0.L) (IS); 27 1.1 christos DBGA ( R5.L , 0x1 ); 28 1.1 christos DBGA ( R5.H , 0x1 ); 29 1.1 christos 30 1.1 christos // integer extraction with positive saturation 31 1.1 christos // 0x7fff * 0x7f -> 0x7fff 32 1.1 christos A1 = A0 = 0; 33 1.1 christos R5.H = (A1 += R1.L * R3.L), R5.L = (A0 += R1.L * R3.L) (IS); 34 1.1 christos DBGA ( R5.L , 0x7fff ); 35 1.1 christos DBGA ( R5.H , 0x7fff ); 36 1.1 christos 37 1.1 christos // integer extraction with negative saturation 38 1.1 christos // 0x8000 * 0x7f -> 0x8000 39 1.1 christos A1 = A0 = 0; 40 1.1 christos R5.H = (A1 += R1.H * R3.L), R5.L = (A0 += R1.H * R3.L) (IS); 41 1.1 christos DBGA ( R5.L , 0x8000 ); 42 1.1 christos DBGA ( R5.H , 0x8000 ); 43 1.1 christos 44 1.1 christos pass 45 1.1 christos 46 1.1 christos .data; 47 1.1 christos data0: 48 1.1 christos .dw 0x0001 49 1.1 christos .dw 0x8000 50 1.1 christos .dw 0x7fff 51 1.1 christos .dw 0x8000 52 1.1 christos .dw 0x0000 53 1.1 christos .dw 0xf000 54 1.1 christos .dw 0x007f 55 1.1 christos .dw 0x0000 56 1.1 christos .dw 0x0080 57 1.1 christos .dw 0x0000 58