1// Immediate SHIFT test program. 2// Test r4 = ASHIFT (r2 by 10); 3// Test r4 = LSHIFT (r2 by 10); 4// Test r4 = ROT (r2 by 10); 5# mach: bfin 6 7.include "testutils.inc" 8 start 9 10 11 init_r_regs 0; 12 ASTAT = R0; 13 14// load r0=0x80000001 15// load r1=0x00000000 16// load r2=0x00000000 17// load r3=0x00000000 18// load r4=0x00000000 19// load r5=0x00000000 20 loadsym P0, data0; 21 R0 = [ P0 ++ ]; 22 R1 = [ P0 ++ ]; 23 R2 = [ P0 ++ ]; 24 R3 = [ P0 ++ ]; 25 R4 = [ P0 ++ ]; 26 R5 = [ P0 ++ ]; 27 28// arithmetic 29// left by largest positive magnitude of 31 (0x1f) 30// 8000 0001 -> 8000 0000 31 R7 = 0; 32 ASTAT = R7; 33 R6 = R0 << 31; 34 DBGA ( R6.L , 0x0000 ); 35 DBGA ( R6.H , 0x8000 ); 36 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 37 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 38 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 39 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 40 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 41 42// arithmetic 43// left by 1 44// 8000 0001 -> 0000 0002 45 R6 = R0 << 1; 46 DBGA ( R6.L , 0x0002 ); 47 DBGA ( R6.H , 0x0000 ); 48 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 49 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 50 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 51 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 52 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 53 54// arithmetic 55// right by 1 56// 8000 0001 -> c000 0000 57 R7 = 0; 58 ASTAT = R7; 59 R6 = R0 >>> 1; 60 DBGA ( R6.L , 0x0000 ); 61 DBGA ( R6.H , 0xc000 ); 62 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); 63 CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); 64 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 65 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 66 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 67 68// arithmetic 69// right by largest negative magnitude of -31 70// 8000 0001 -> ffff ffff 71 R6 = R0 >>> 31; 72 DBGA ( R6.L , 0xffff ); 73 DBGA ( R6.H , 0xffff ); 74 75// logic 76// left by largest positive magnitude of 31 (0x1f) 77// 8000 0001 -> 8000 0000 78 R6 = R0 << 31; 79 DBGA ( R6.L , 0x0000 ); 80 DBGA ( R6.H , 0x8000 ); 81 82// logic 83// left by 1 84// 8000 0001 -> 0000 0002 85 R6 = R0 << 1; 86 DBGA ( R6.L , 0x0002 ); 87 DBGA ( R6.H , 0x0000 ); 88 89// logic 90// right by 1 91// 8000 0001 -> 4000 0000 92 R6 = R0 >> 1; 93 DBGA ( R6.L , 0x0000 ); 94 DBGA ( R6.H , 0x4000 ); 95 96// logic 97// right by largest negative magnitude of -31 98// 8000 0001 -> 0000 0001 99 R6 = R0 >> 31; 100 DBGA ( R6.L , 0x0001 ); 101 DBGA ( R6.H , 0x0000 ); 102 103// rot 104// left by 1 105// 8000 0001 -> 0000 0002 cc=1 106 R7 = 0; 107 CC = R7; 108 R6 = ROT R0 BY 1; 109 DBGA ( R6.L , 0x0002 ); 110 DBGA ( R6.H , 0x0000 ); 111 R7 = CC; 112 DBGA ( R7.L , 0x0001 ); 113 114// rot 115// right by -1 116// 8000 0001 -> 4000 0000 cc=1 117 R7 = 0; 118 CC = R7; 119 R6 = ROT R0 BY -1; 120 DBGA ( R6.L , 0x0000 ); 121 DBGA ( R6.H , 0x4000 ); 122 R7 = CC; 123 DBGA ( R7.L , 0x0001 ); 124 125// rot 126// right by largest positive magnitude of 31 127// 8000 0001 -> a000 0000 cc=0 128 R7 = 0; 129 CC = R7; 130 R6 = ROT R0 BY 31; 131 DBGA ( R6.L , 0x0000 ); 132 DBGA ( R6.H , 0xa000 ); 133 R7 = CC; 134 DBGA ( R7.L , 0x0000 ); 135 136// rot 137// right by largest positive magnitude of 31 with cc=1 138// 8000 0001 cc=1 -> a000 0000 cc=0 139 R7 = 1; 140 CC = R7; 141 R6 = ROT R0 BY 31; 142 DBGA ( R6.L , 0x0000 ); 143 DBGA ( R6.H , 0xe000 ); 144 R7 = CC; 145 DBGA ( R7.L , 0x0000 ); 146 147// rot 148// right by largest negative magnitude of -31 149// 8000 0001 -> 0000 0005 cc=0 150 R7 = 0; 151 CC = R7; 152 R6 = ROT R0 BY -31; 153 DBGA ( R6.L , 0x0005 ); 154 DBGA ( R6.H , 0x0000 ); 155 R7 = CC; 156 DBGA ( R7.L , 0x0000 ); 157 158// rot 159// right by largest negative magnitude of -31 with cc=1 160// 8000 0001 cc=1 -> 0000 0007 cc=0 161 R7 = 1; 162 CC = R7; 163 R6 = ROT R0 BY -31; 164 DBGA ( R6.L , 0x0007 ); 165 DBGA ( R6.H , 0x0000 ); 166 R7 = CC; 167 DBGA ( R7.L , 0x0000 ); 168 169// rot 170// left by 7 171// 8000 0001 cc=1 -> 0000 00e0 cc=0 172 R7 = 1; 173 CC = R7; 174 R6 = ROT R0 BY 7; 175 DBGA ( R6.L , 0x00e0 ); 176 DBGA ( R6.H , 0x0000 ); 177 R7 = CC; 178 DBGA ( R7.L , 0x0000 ); 179 180// rot by zero 181// 8000 0001 -> 8000 000 182 R7 = 1; 183 CC = R7; 184 R6 = ROT R0 BY 0; 185 DBGA ( R6.L , 0x0001 ); 186 DBGA ( R6.H , 0x8000 ); 187 R7 = CC; 188 DBGA ( R7.L , 0x0001 ); 189 190// 0 by 1 191 R7 = 0; 192 R0 = 0; 193 ASTAT = R7; 194 R6 = R0 << 1; 195 DBGA ( R6.L , 0x0000 ); 196 DBGA ( R6.H , 0x0000 ); 197 CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); 198 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); 199 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 ); 200 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 ); 201 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 ); 202 203 pass 204 205 .data 206data0: 207 .dw 0x0001 208 .dw 0x8000 209 .dd 0x0000 210 .dd 0x0 211 .dd 0x0 212 .dd 0x0 213 .dd 0x0 214 .dd 0x0 215