1 1.1 christos // Test r4 = ROT (r2 by r3); 2 1.1 christos # mach: bfin 3 1.1 christos 4 1.1 christos .include "testutils.inc" 5 1.1 christos start 6 1.1 christos 7 1.1 christos 8 1.1 christos R0.L = 0x0001; 9 1.1 christos R0.H = 0x8000; 10 1.1 christos 11 1.1 christos // rot 12 1.1 christos // left by 1 13 1.1 christos // 8000 0001 -> 0000 0002 cc=1 14 1.1 christos R7 = 0; 15 1.1 christos CC = R7; 16 1.1 christos R1 = 1; 17 1.1 christos R6 = ROT R0 BY R1.L; 18 1.1 christos DBGA ( R6.L , 0x0002 ); 19 1.1 christos DBGA ( R6.H , 0x0000 ); 20 1.1 christos R7 = CC; 21 1.1 christos DBGA ( R7.L , 0x0001 ); 22 1.1 christos 23 1.1 christos // rot 24 1.1 christos // right by -1 25 1.1 christos // 8000 0001 -> 4000 0000 cc=1 26 1.1 christos R7 = 0; 27 1.1 christos CC = R7; 28 1.1 christos R1.L = 0xffff; // check alternate mechanism for immediates 29 1.1 christos R1.H = 0xffff; 30 1.1 christos R6 = ROT R0 BY R1.L; 31 1.1 christos DBGA ( R6.L , 0x0000 ); 32 1.1 christos DBGA ( R6.H , 0x4000 ); 33 1.1 christos R7 = CC; 34 1.1 christos DBGA ( R7.L , 0x0001 ); 35 1.1 christos 36 1.1 christos // rot 37 1.1 christos // right by largest positive magnitude of 31 38 1.1 christos // 8000 0001 -> a000 0000 cc=0 39 1.1 christos R7 = 0; 40 1.1 christos CC = R7; 41 1.1 christos R1 = 31; 42 1.1 christos R6 = ROT R0 BY R1.L; 43 1.1 christos DBGA ( R6.L , 0x0000 ); 44 1.1 christos DBGA ( R6.H , 0xa000 ); 45 1.1 christos R7 = CC; 46 1.1 christos DBGA ( R7.L , 0x0000 ); 47 1.1 christos 48 1.1 christos // rot 49 1.1 christos // right by largest positive magnitude of 31 with cc=1 50 1.1 christos // 8000 0001 cc=1 -> a000 0000 cc=0 51 1.1 christos R7 = 1; 52 1.1 christos CC = R7; 53 1.1 christos R1 = 31; 54 1.1 christos R6 = ROT R0 BY R1.L; 55 1.1 christos DBGA ( R6.L , 0x0000 ); 56 1.1 christos DBGA ( R6.H , 0xe000 ); 57 1.1 christos R7 = CC; 58 1.1 christos DBGA ( R7.L , 0x0000 ); 59 1.1 christos 60 1.1 christos // rot 61 1.1 christos // right by largest negative magnitude of -31 62 1.1 christos // 8000 0001 -> 0000 0005 cc=0 63 1.1 christos R7 = 0; 64 1.1 christos CC = R7; 65 1.1 christos R1 = -31; 66 1.1 christos R6 = ROT R0 BY R1.L; 67 1.1 christos DBGA ( R6.L , 0x0005 ); 68 1.1 christos DBGA ( R6.H , 0x0000 ); 69 1.1 christos R7 = CC; 70 1.1 christos DBGA ( R7.L , 0x0000 ); 71 1.1 christos 72 1.1 christos // rot 73 1.1 christos // right by largest negative magnitude of -31 with cc=1 74 1.1 christos // 8000 0001 cc=1 -> 0000 0007 cc=0 75 1.1 christos R7 = 1; 76 1.1 christos CC = R7; 77 1.1 christos R1 = -31; 78 1.1 christos R6 = ROT R0 BY R1.L; 79 1.1 christos DBGA ( R6.L , 0x0007 ); 80 1.1 christos DBGA ( R6.H , 0x0000 ); 81 1.1 christos R7 = CC; 82 1.1 christos DBGA ( R7.L , 0x0000 ); 83 1.1 christos 84 1.1 christos // rot 85 1.1 christos // left by 7 86 1.1 christos // 8000 0001 cc=1 -> 0000 00e0 cc=0 87 1.1 christos R7 = 1; 88 1.1 christos CC = R7; 89 1.1 christos R1 = 7; 90 1.1 christos R6 = ROT R0 BY R1.L; 91 1.1 christos DBGA ( R6.L , 0x00e0 ); 92 1.1 christos DBGA ( R6.H , 0x0000 ); 93 1.1 christos R7 = CC; 94 1.1 christos DBGA ( R7.L , 0x0000 ); 95 1.1 christos 96 1.1 christos // rot by zero 97 1.1 christos // 8000 0001 -> 8000 0000 98 1.1 christos R7 = 1; 99 1.1 christos CC = R7; 100 1.1 christos R1 = 0; 101 1.1 christos R6 = ROT R0 BY R1.L; 102 1.1 christos DBGA ( R6.L , 0x0001 ); 103 1.1 christos DBGA ( R6.H , 0x8000 ); 104 1.1 christos R7 = CC; 105 1.1 christos DBGA ( R7.L , 0x0001 ); 106 1.1 christos 107 1.1 christos // rot by 0b1100 0001 is the same as by 1 (mask 6 bits) 108 1.1 christos // 8000 0001 -> 0000 0002 cc=1 109 1.1 christos R7 = 0; 110 1.1 christos CC = R7; 111 1.1 christos R1 = 0xc1 (X); 112 1.1 christos R6 = ROT R0 BY R1.L; 113 1.1 christos DBGA ( R6.L , 0x0002 ); 114 1.1 christos DBGA ( R6.H , 0x0000 ); 115 1.1 christos R7 = CC; 116 1.1 christos DBGA ( R7.L , 0x0001 ); 117 1.1 christos 118 1.1 christos pass 119