1# frv testcase for smass $GRi,$GRj 2# mach: fr405 fr450 3 4 .include "../testutils.inc" 5 6 start 7 8 .global smass 9smass1: 10 ; Positive operands 11 set_gr_immed 3,gr7 ; multiply small numbers 12 set_gr_immed 2,gr8 13 set_spr_immed 0,iacc0h 14 set_spr_immed 1,iacc0l 15 smass gr7,gr8 16 test_gr_immed 3,gr7 17 test_gr_immed 2,gr8 18 test_spr_immed 7,iacc0l ; result 3*2+1 19 test_spr_immed 0,iacc0h 20smass2: 21 set_gr_immed 1,gr7 ; multiply by 1 22 set_gr_immed 2,gr8 23 set_spr_immed 0,iacc0h 24 set_spr_immed 1,iacc0l 25 smass gr7,gr8 26 test_gr_immed 1,gr7 27 test_gr_immed 2,gr8 28 test_spr_immed 3,iacc0l ; result 1*2+1 29 test_spr_immed 0,iacc0h 30smass3: 31 set_gr_immed 2,gr7 ; multiply by 1 32 set_gr_immed 1,gr8 33 set_spr_immed 0,iacc0h 34 set_spr_immed 1,iacc0l 35 smass gr7,gr8 36 test_gr_immed 1,gr8 37 test_gr_immed 2,gr7 38 test_spr_immed 3,iacc0l ; result 2*1+1 39 test_spr_immed 0,iacc0h 40smass4: 41 set_gr_immed 0,gr7 ; multiply by 0 42 set_gr_immed 2,gr8 43 set_spr_immed 0,iacc0h 44 set_spr_immed 1,iacc0l 45 smass gr7,gr8 46 test_gr_immed 2,gr8 47 test_gr_immed 0,gr7 48 test_spr_immed 1,iacc0l ; result 0*2+1 49 test_spr_immed 0,iacc0h 50smass5: 51 set_gr_immed 2,gr7 ; multiply by 0 52 set_gr_immed 0,gr8 53 set_spr_immed 0,iacc0h 54 set_spr_immed 1,iacc0l 55 smass gr7,gr8 56 test_gr_immed 0,gr8 57 test_gr_immed 2,gr7 58 test_spr_immed 1,iacc0l ; result 2*0+1 59 test_spr_immed 0,iacc0h 60smass6: 61 set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result 62 set_gr_immed 2,gr8 63 set_spr_immed 0,iacc0h 64 set_spr_immed 1,iacc0l 65 smass gr7,gr8 66 test_gr_immed 2,gr8 67 test_gr_limmed 0x3fff,0xffff,gr7 68 test_spr_limmed 0x7fff,0xffff,iacc0l ; 3fffffff*2+1 69 test_spr_immed 0,iacc0h 70smass7: 71 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 72 set_gr_immed 2,gr8 73 set_spr_immed 0,iacc0h 74 set_spr_immed 1,iacc0l 75 smass gr7,gr8 76 test_gr_immed 2,gr8 77 test_gr_limmed 0x4000,0x0000,gr7 78 test_spr_limmed 0x8000,0x0001,iacc0l ; 40000000*2+1 79 test_spr_immed 0,iacc0h 80smass8: 81 set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result 82 set_gr_immed 4,gr8 83 set_spr_immed 0,iacc0h 84 set_spr_immed 1,iacc0l 85 smass gr7,gr8 86 test_gr_immed 4,gr8 87 test_gr_limmed 0x4000,0x0000,gr7 88 test_spr_immed 1,iacc0l ; 40000000*4+1 89 test_spr_immed 1,iacc0h 90smass9: 91 set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result 92 set_gr_limmed 0x7fff,0xffff,gr8 93 set_spr_immed 0,iacc0h 94 set_spr_immed 1,iacc0l 95 smass gr7,gr8 96 test_gr_limmed 0x7fff,0xffff,gr8 97 test_gr_limmed 0x7fff,0xffff,gr7 98 test_spr_immed 0x00000002,iacc0l ; 7fffffff*7fffffff+1 99 test_spr_limmed 0x3fff,0xffff,iacc0h 100smass10: 101 ; Mixed operands 102 set_gr_immed -3,gr7 ; multiply small numbers 103 set_gr_immed 2,gr8 104 set_spr_immed 0,iacc0h 105 set_spr_immed 1,iacc0l 106 smass gr7,gr8 107 test_gr_immed 2,gr8 108 test_gr_immed -3,gr7 109 test_spr_immed -5,iacc0l ; -3*2+1 110 test_spr_immed -1,iacc0h 111smass11: 112 set_gr_immed 3,gr7 ; multiply small numbers 113 set_gr_immed -2,gr8 114 set_spr_immed 0,iacc0h 115 set_spr_immed 1,iacc0l 116 smass gr7,gr8 117 test_gr_immed -2,gr8 118 test_gr_immed 3,gr7 119 test_spr_immed -5,iacc0l ; 3*-2+1 120 test_spr_immed -1,iacc0h 121smass12: 122 set_gr_immed 1,gr7 ; multiply by 1 123 set_gr_immed -2,gr8 124 set_spr_immed 0,iacc0h 125 set_spr_immed 1,iacc0l 126 smass gr7,gr8 127 test_gr_immed -2,gr8 128 test_gr_immed 1,gr7 129 test_spr_immed -1,iacc0l ; 1*-2+1 130 test_spr_immed -1,iacc0h 131smass13: 132 set_gr_immed -2,gr7 ; multiply by 1 133 set_gr_immed 1,gr8 134 set_spr_immed 0,iacc0h 135 set_spr_immed 1,iacc0l 136 smass gr7,gr8 137 test_gr_immed 1,gr8 138 test_gr_immed -2,gr7 139 test_spr_immed -1,iacc0l ; -2*1+1 140 test_spr_immed -1,iacc0h 141smass14: 142 set_gr_immed 0,gr7 ; multiply by 0 143 set_gr_immed -2,gr8 144 set_spr_immed 0,iacc0h 145 set_spr_immed 1,iacc0l 146 smass gr7,gr8 147 test_gr_immed -2,gr8 148 test_gr_immed 0,gr7 149 test_spr_immed 1,iacc0l ; 0*-2+1 150 test_spr_immed 0,iacc0h 151smass15: 152 set_gr_immed -2,gr7 ; multiply by 0 153 set_gr_immed 0,gr8 154 set_spr_immed 0,iacc0h 155 set_spr_immed 1,iacc0l 156 smass gr7,gr8 157 test_gr_immed 0,gr8 158 test_gr_immed -2,gr7 159 test_spr_immed 1,iacc0l ; -2*0+1 160 test_spr_immed 0,iacc0h 161smass16: 162 set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result 163 set_gr_immed -2,gr8 164 set_spr_immed 0,iacc0h 165 set_spr_immed 1,iacc0l 166 smass gr7,gr8 167 test_gr_immed -2,gr8 168 test_gr_limmed 0x2000,0x0001,gr7 169 test_spr_limmed 0xbfff,0xffff,iacc0l ; 20000001*-2+1 170 test_spr_limmed 0xffff,0xffff,iacc0h 171smass17: 172 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 173 set_gr_immed -2,gr8 174 set_spr_immed 0,iacc0h 175 set_spr_immed 1,iacc0l 176 smass gr7,gr8 177 test_gr_immed -2,gr8 178 test_gr_limmed 0x4000,0x0000,gr7 179 test_spr_limmed 0x8000,0x0001,iacc0l ; 40000000*-2+1 180 test_spr_limmed 0xffff,0xffff,iacc0h 181smass18: 182 set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result 183 set_gr_immed -2,gr8 184 set_spr_immed 0,iacc0h 185 set_spr_immed 1,iacc0l 186 smass gr7,gr8 187 test_gr_immed -2,gr8 188 test_gr_limmed 0x4000,0x0001,gr7 189 test_spr_limmed 0x7fff,0xffff,iacc0l ; 40000001*-2+1 190 test_spr_limmed 0xffff,0xffff,iacc0h 191smass19: 192 set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result 193 set_gr_immed -4,gr8 194 set_spr_immed 0,iacc0h 195 set_spr_immed 1,iacc0l 196 smass gr7,gr8 197 test_gr_immed -4,gr8 198 test_gr_limmed 0x4000,0x0000,gr7 199 test_spr_limmed 0x0000,0x0001,iacc0l ; 40000000*-4+1 200 test_spr_limmed 0xffff,0xffff,iacc0h 201smass20: 202 set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result 203 set_gr_limmed 0x8000,0x0000,gr8 204 set_spr_immed 0,iacc0h 205 set_spr_immed 1,iacc0l 206 smass gr7,gr8 207 test_gr_limmed 0x8000,0x0000,gr8 208 test_gr_limmed 0x7fff,0xffff,gr7 209 test_spr_limmed 0x8000,0x0001,iacc0l ; 7fffffff*80000000+1 210 test_spr_limmed 0xc000,0x0000,iacc0h 211smass21: 212 ; Negative operands 213 set_gr_immed -3,gr7 ; multiply small numbers 214 set_gr_immed -2,gr8 215 set_spr_immed 0,iacc0h 216 set_spr_immed 1,iacc0l 217 smass gr7,gr8 218 test_gr_immed -2,gr8 219 test_gr_immed -3,gr7 220 test_spr_immed 7,iacc0l ; -3*-2+1 221 test_spr_immed 0,iacc0h 222smass22: 223 set_gr_immed -1,gr7 ; multiply by 1 224 set_gr_immed -2,gr8 225 set_spr_immed 0,iacc0h 226 set_spr_immed 1,iacc0l 227 smass gr7,gr8 228 test_gr_immed -2,gr8 229 test_gr_immed -1,gr7 230 test_spr_immed 3,iacc0l ; -1*-2+1 231 test_spr_immed 0,iacc0h 232smass23: 233 set_gr_immed -2,gr7 ; multiply by 1 234 set_gr_immed -1,gr8 235 set_spr_immed 0,iacc0h 236 set_spr_immed 1,iacc0l 237 smass gr7,gr8 238 test_gr_immed -1,gr8 239 test_gr_immed -2,gr7 240 test_spr_immed 3,iacc0l ; -2*-1+1 241 test_spr_immed 0,iacc0h 242smass24: 243 set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result 244 set_gr_immed -2,gr8 245 set_spr_immed 0,iacc0h 246 set_spr_immed 1,iacc0l 247 smass gr7,gr8 248 test_gr_immed -2,gr8 249 test_gr_limmed 0xc000,0x0001,gr7 250 test_spr_limmed 0x7fff,0xffff,iacc0l ; c0000001*-2+1 251 test_spr_immed 0,iacc0h 252smass25: 253 set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result 254 set_gr_immed -2,gr8 255 set_spr_immed 0,iacc0h 256 set_spr_immed 1,iacc0l 257 smass gr7,gr8 258 test_gr_immed -2,gr8 259 test_gr_limmed 0xc000,0x0000,gr7 260 test_spr_limmed 0x8000,0x0001,iacc0l ; c0000000*-2+1 261 test_spr_immed 0,iacc0h 262smass26: 263 set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result 264 set_gr_immed -4,gr8 265 set_spr_immed 0,iacc0h 266 set_spr_immed 1,iacc0l 267 smass gr7,gr8 268 test_gr_immed -4,gr8 269 test_gr_limmed 0xc000,0x0000,gr7 270 test_spr_immed 0x00000001,iacc0l ; c0000000*-4+1 271 test_spr_immed 1,iacc0h 272smass27: 273 set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result 274 set_gr_limmed 0x8000,0x0001,gr8 275 set_spr_immed 0,iacc0h 276 set_spr_immed 1,iacc0l 277 smass gr7,gr8 278 test_gr_limmed 0x8000,0x0001,gr8 279 test_gr_limmed 0x8000,0x0001,gr7 280 test_spr_immed 0x00000002,iacc0l ; 80000001*80000001+1 281 test_spr_limmed 0x3fff,0xffff,iacc0h 282smass28: 283 set_gr_limmed 0x8000,0x0000,gr7 ; max positive result 284 set_gr_limmed 0x8000,0x0000,gr8 285 set_spr_immed 0,iacc0h 286 set_spr_immed 1,iacc0l 287 smass gr7,gr8 288 test_gr_limmed 0x8000,0x0000,gr8 289 test_gr_limmed 0x8000,0x0000,gr7 290 test_spr_immed 0x00000001,iacc0l ; 80000000*80000000+1 291 test_spr_limmed 0x4000,0x0000,iacc0h 292 293smass29: 294 set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (pos) 295 set_gr_limmed 0x7fff,0xffff,gr8 296 set_spr_limmed 0xffff,0xfffe,iacc0l 297 set_spr_limmed 0x4000,0x0000,iacc0h 298 smass gr7,gr8 299 test_gr_limmed 0x7fff,0xffff,gr8 300 test_gr_limmed 0x7fff,0xffff,gr7 301 test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+ 302 test_spr_limmed 0x7fff,0xffff,iacc0h ; 40000000fffffffe 303 304smass30: 305 set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (pos) 306 set_gr_limmed 0x7fff,0xffff,gr8 307 set_spr_limmed 0xffff,0xffff,iacc0l 308 set_spr_limmed 0x4000,0x0000,iacc0h 309 smass gr7,gr8 310 test_gr_limmed 0x7fff,0xffff,gr8 311 test_gr_limmed 0x7fff,0xffff,gr7 312 test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+ 313 test_spr_limmed 0x7fff,0xffff,iacc0h ; 40000000ffffffff 314 315smass31: 316 set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (pos) 317 set_gr_limmed 0x7fff,0xffff,gr8 318 set_spr_limmed 0xffff,0xffff,iacc0l 319 set_spr_limmed 0x7fff,0xffff,iacc0h 320 smass gr7,gr8 321 test_gr_limmed 0x7fff,0xffff,gr8 322 test_gr_limmed 0x7fff,0xffff,gr7 323 test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+ 324 test_spr_limmed 0x7fff,0xffff,iacc0h ; 7fffffffffffffff 325 326smass32: 327 set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (neg) 328 set_gr_limmed 0x8000,0x0000,gr8 329 set_spr_limmed 0x8000,0x0000,iacc0l 330 set_spr_limmed 0xbfff,0xffff,iacc0h 331 smass gr7,gr8 332 test_gr_limmed 0x8000,0x0000,gr8 333 test_gr_limmed 0x7fff,0xffff,gr7 334 test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+ 335 test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff80000000 336 337smass33: 338 set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (neg) 339 set_gr_limmed 0x8000,0x0000,gr8 340 set_spr_limmed 0x7fff,0xffff,iacc0l 341 set_spr_limmed 0xbfff,0xffff,iacc0h 342 smass gr7,gr8 343 test_gr_limmed 0x8000,0x0000,gr8 344 test_gr_limmed 0x7fff,0xffff,gr7 345 test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+ 346 test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff7fffffff 347 348smass34: 349 set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (neg) 350 set_gr_limmed 0x8000,0x0000,gr8 351 set_spr_limmed 0x0000,0x0000,iacc0l 352 set_spr_limmed 0x8000,0x0000,iacc0h 353 smass gr7,gr8 354 test_gr_limmed 0x8000,0x0000,gr8 355 test_gr_limmed 0x7fff,0xffff,gr7 356 test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+ 357 test_spr_limmed 0x8000,0x0000,iacc0h ; 8000000000000000 358 359 pass 360