1 # frv testcase for smsss $GRi,$GRj 2 # mach: fr405 fr450 3 4 .include "../testutils.inc" 5 6 start 7 8 .global smsss 9 smsss1: 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 7,iacc0l 15 smsss gr7,gr8 16 test_gr_immed 3,gr7 17 test_gr_immed 2,gr8 18 test_spr_immed 1,iacc0l ; result 7-3*2 19 test_spr_immed 0,iacc0h 20 smsss2: 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 3,iacc0l 25 smsss gr7,gr8 26 test_gr_immed 1,gr7 27 test_gr_immed 2,gr8 28 test_spr_immed 1,iacc0l ; result 3-1*2 29 test_spr_immed 0,iacc0h 30 smsss3: 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 3,iacc0l 35 smsss gr7,gr8 36 test_gr_immed 1,gr8 37 test_gr_immed 2,gr7 38 test_spr_immed 1,iacc0l ; result 3-2*1 39 test_spr_immed 0,iacc0h 40 smsss4: 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 smsss gr7,gr8 46 test_gr_immed 2,gr8 47 test_gr_immed 0,gr7 48 test_spr_immed 1,iacc0l ; result 1-0*2 49 test_spr_immed 0,iacc0h 50 smsss5: 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 smsss gr7,gr8 56 test_gr_immed 0,gr8 57 test_gr_immed 2,gr7 58 test_spr_immed 1,iacc0l ; result 1-2*0 59 test_spr_immed 0,iacc0h 60 smsss6: 61 set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result 62 set_gr_immed 2,gr8 63 set_spr_immed -1,iacc0h 64 set_spr_immed -1,iacc0l 65 smsss gr7,gr8 66 test_gr_immed 2,gr8 67 test_gr_limmed 0x3fff,0xffff,gr7 68 test_spr_limmed 0x8000,0x0001,iacc0l ; -1-3fffffff*2 69 test_spr_immed -1,iacc0h 70 smsss7: 71 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 72 set_gr_immed 2,gr8 73 set_spr_immed -1,iacc0h 74 set_spr_limmed 0x8000,0x0001,iacc0l 75 smsss gr7,gr8 76 test_gr_immed 2,gr8 77 test_gr_limmed 0x4000,0x0000,gr7 78 test_spr_immed 1,iacc0l ; ffffffff80000001-40000000*2 79 test_spr_immed -1,iacc0h 80 smsss8: 81 set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result 82 set_gr_immed 4,gr8 83 set_spr_immed -1,iacc0h 84 set_spr_immed 1,iacc0l 85 smsss gr7,gr8 86 test_gr_immed 4,gr8 87 test_gr_limmed 0x4000,0x0000,gr7 88 test_spr_immed 1,iacc0l ; ffffffff00000001-40000000*4 89 test_spr_immed -2,iacc0h 90 smsss9: 91 set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result 92 set_gr_limmed 0x7fff,0xffff,gr8 93 set_spr_limmed 0x7fff,0xffff,iacc0h 94 set_spr_immed -1,iacc0l 95 smsss gr7,gr8 96 test_gr_limmed 0x7fff,0xffff,gr8 97 test_gr_limmed 0x7fff,0xffff,gr7 98 test_spr_limmed 0xffff,0xfffe,iacc0l ; 7fffffffffffffff-7fffffff*7fffffff 99 test_spr_limmed 0x4000,0x0000,iacc0h 100 smsss10: 101 ; Mixed operands 102 set_gr_immed -3,gr7 ; multiply small numbers 103 set_gr_immed 2,gr8 104 set_spr_immed -1,iacc0h 105 set_spr_immed -5,iacc0l 106 smsss gr7,gr8 107 test_gr_immed 2,gr8 108 test_gr_immed -3,gr7 109 test_spr_immed 1,iacc0l ; -5-(-3*2) 110 test_spr_immed 0,iacc0h 111 smsss11: 112 set_gr_immed 3,gr7 ; multiply small numbers 113 set_gr_immed -2,gr8 114 set_spr_immed -1,iacc0h 115 set_spr_immed -5,iacc0l 116 smsss gr7,gr8 117 test_gr_immed -2,gr8 118 test_gr_immed 3,gr7 119 test_spr_immed 1,iacc0l ; -5-(3*-2) 120 test_spr_immed 0,iacc0h 121 smsss12: 122 set_gr_immed 1,gr7 ; multiply by 1 123 set_gr_immed -2,gr8 124 set_spr_immed -1,iacc0h 125 set_spr_immed -1,iacc0l 126 smsss gr7,gr8 127 test_gr_immed -2,gr8 128 test_gr_immed 1,gr7 129 test_spr_immed 1,iacc0l ; -1-(1*-2) 130 test_spr_immed 0,iacc0h 131 smsss13: 132 set_gr_immed -2,gr7 ; multiply by 1 133 set_gr_immed 1,gr8 134 set_spr_immed -1,iacc0h 135 set_spr_immed -1,iacc0l 136 smsss gr7,gr8 137 test_gr_immed 1,gr8 138 test_gr_immed -2,gr7 139 test_spr_immed 1,iacc0l ; -1-(-2*1) 140 test_spr_immed 0,iacc0h 141 smsss14: 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 smsss gr7,gr8 147 test_gr_immed -2,gr8 148 test_gr_immed 0,gr7 149 test_spr_immed 1,iacc0l ; 1-(0*-2) 150 test_spr_immed 0,iacc0h 151 smsss15: 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 smsss gr7,gr8 157 test_gr_immed 0,gr8 158 test_gr_immed -2,gr7 159 test_spr_immed 1,iacc0l ; 1-(-2*0) 160 test_spr_immed 0,iacc0h 161 smsss16: 162 set_gr_limmed 0x2000,0x0000,gr7 ; 31 bit result 163 set_gr_immed -2,gr8 164 set_spr_immed 0,iacc0h 165 set_spr_limmed 0x3fff,0xffff,iacc0l 166 smsss gr7,gr8 167 test_gr_immed -2,gr8 168 test_gr_limmed 0x2000,0x0000,gr7 169 test_spr_limmed 0x7fff,0xffff,iacc0l 170 test_spr_immed 0,iacc0h ; 3fffffff-20000001*-2 171 smsss17: 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 smsss gr7,gr8 177 test_gr_immed -2,gr8 178 test_gr_limmed 0x4000,0x0000,gr7 179 test_spr_limmed 0x8000,0x0001,iacc0l ; 1-40000000*-2 180 test_spr_immed 0,iacc0h 181 smsss18: 182 set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result 183 set_gr_immed -2,gr8 184 set_spr_immed -1,iacc0h 185 set_spr_immed -1,iacc0l 186 smsss gr7,gr8 187 test_gr_immed -2,gr8 188 test_gr_limmed 0x4000,0x0000,gr7 189 test_spr_limmed 0x7fff,0xffff,iacc0l 190 test_spr_immed 0,iacc0h ; -1-40000000*-2 191 smsss19: 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 smsss gr7,gr8 197 test_gr_immed -4,gr8 198 test_gr_limmed 0x4000,0x0000,gr7 199 test_spr_immed 1,iacc0l ; 200000001-(40000000*-4) 200 test_spr_immed 1,iacc0h 201 smsss20: 202 set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result 203 set_gr_limmed 0x7fff,0xffff,gr8 204 set_spr_limmed 0xbfff,0xffff,iacc0h 205 set_spr_limmed 0x0000,0x0001,iacc0l 206 smsss gr7,gr8 207 test_gr_limmed 0x7fff,0xffff,gr8 208 test_gr_limmed 0x7fff,0xffff,gr7 209 test_spr_immed 0,iacc0l ; bfffffff00000001-(7fffffff*7fffffff) 210 test_spr_limmed 0x8000,0x0000,iacc0h 211 smsss21: 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 7,iacc0l 217 smsss gr7,gr8 218 test_gr_immed -2,gr8 219 test_gr_immed -3,gr7 220 test_spr_immed 1,iacc0l ; 7-(-3*-2) 221 test_spr_immed 0,iacc0h 222 smsss22: 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 3,iacc0l 227 smsss gr7,gr8 228 test_gr_immed -2,gr8 229 test_gr_immed -1,gr7 230 test_spr_immed 1,iacc0l ; 3-(-1*-2) 231 test_spr_immed 0,iacc0h 232 smsss23: 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 3,iacc0l 237 smsss gr7,gr8 238 test_gr_immed -1,gr8 239 test_gr_immed -2,gr7 240 test_spr_immed 1,iacc0l ; 3-(-2*-1) 241 test_spr_immed 0,iacc0h 242 smsss24: 243 set_gr_immed -32768,gr7 ; 31 bit result 244 set_gr_immed -32768,gr8 245 set_spr_immed 0,iacc0h 246 set_spr_limmed 0xbfff,0xffff,iacc0l 247 smsss gr7,gr8 248 test_gr_immed -32768,gr8 249 test_gr_immed -32768,gr7 250 test_spr_limmed 0x7fff,0xffff,iacc0l ; 7ffffffb-(-2*-2) 251 test_spr_immed 0,iacc0h 252 smsss25: 253 set_gr_immed 0xffff,gr7 ; 32 bit result 254 set_gr_immed 0xffff,gr8 255 set_spr_immed 1,iacc0h 256 set_spr_limmed 0xfffe,0x0000,iacc0l 257 smsss gr7,gr8 258 test_gr_immed 0xffff,gr8 259 test_gr_immed 0xffff,gr7 260 test_spr_limmed 0xffff,0xffff,iacc0l ; 1fffe0000-ffff*ffff 261 test_spr_immed 0,iacc0h 262 smsss26: 263 set_gr_limmed 0x0001,0x0000,gr7 ; 33 bit result 264 set_gr_limmed 0x0001,0x0000,gr8 265 set_spr_immed 2,iacc0h 266 set_spr_immed 1,iacc0l 267 smsss gr7,gr8 268 test_gr_limmed 0x0001,0x0000,gr8 269 test_gr_limmed 0x0001,0x0000,gr7 270 test_spr_immed 1,iacc0l ; 0x200000001-0x10000*0x10000 271 test_spr_immed 1,iacc0h 272 smsss27: 273 set_gr_immed -2,gr7 ; almost max positive result 274 set_gr_immed -2,gr8 275 set_spr_limmed 0x7fff,0xffff,iacc0h 276 set_spr_limmed 0xffff,0xffff,iacc0l 277 smsss gr7,gr8 278 test_gr_immed -2,gr8 279 test_gr_immed -2,gr7 280 test_spr_limmed 0xffff,0xfffb,iacc0l ; maxpos - (-2*-2) 281 test_spr_limmed 0x7fff,0xffff,iacc0h 282 smsss28: 283 set_gr_immed 0,gr7 ; max positive result 284 set_gr_immed 0,gr8 285 set_spr_limmed 0x7fff,0xffff,iacc0h 286 set_spr_limmed 0xffff,0xffff,iacc0l 287 smsss gr7,gr8 288 test_gr_immed 0,gr8 289 test_gr_immed 0,gr7 290 test_spr_limmed 0xffff,0xffff,iacc0l ; maxpos-(0*0) 291 test_spr_limmed 0x7fff,0xffff,iacc0h 292 smsss29: 293 set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (pos) 294 set_gr_limmed 0x8000,0x0000,gr8 295 set_spr_limmed 0x4000,0x0000,iacc0h 296 set_spr_limmed 0x7fff,0xffff,iacc0l 297 smsss gr7,gr8 298 test_gr_limmed 0x8000,0x0000,gr8 299 test_gr_limmed 0x7fff,0xffff,gr7 300 test_spr_limmed 0xffff,0xffff,iacc0l ; 400000007fffffff - 301 test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff 302 smsss30: 303 set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (pos) 304 set_gr_limmed 0x8000,0x0000,gr8 305 set_spr_limmed 0x4000,0x0000,iacc0h 306 set_spr_limmed 0x8000,0x0000,iacc0l 307 smsss gr7,gr8 308 test_gr_limmed 0x8000,0x0000,gr8 309 test_gr_limmed 0x7fff,0xffff,gr7 310 test_spr_limmed 0xffff,0xffff,iacc0l ; 4000000080000000 - 311 test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff 312 313 smsss31: 314 set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (pos) 315 set_gr_limmed 0x8000,0x0000,gr8 316 set_spr_limmed 0xffff,0xffff,iacc0l 317 set_spr_limmed 0x7fff,0xffff,iacc0h 318 smsss gr7,gr8 319 test_gr_limmed 0x8000,0x0000,gr8 320 test_gr_limmed 0x7fff,0xffff,gr7 321 test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffffffffffff - 322 test_spr_limmed 0x7fff,0xffff,iacc0h ; 80000000*80000000 323 smsss32: 324 set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (neg) 325 set_gr_limmed 0x7fff,0xffff,gr8 326 set_spr_immed 1,iacc0l 327 set_spr_limmed 0xbfff,0xffff,iacc0h 328 smsss gr7,gr8 329 test_gr_limmed 0x7fff,0xffff,gr8 330 test_gr_limmed 0x7fff,0xffff,gr7 331 test_spr_limmed 0x0000,0x0000,iacc0l ; bfffffff00000001 - 332 test_spr_limmed 0x8000,0x0000,iacc0h ; 0x7fffffff*0x7fffffff 333 smsss33: 334 set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (neg) 335 set_gr_limmed 0x7fff,0xffff,gr8 336 set_spr_immed 0,iacc0l 337 set_spr_limmed 0xbfff,0xffff,iacc0h 338 smsss gr7,gr8 339 test_gr_limmed 0x7fff,0xffff,gr8 340 test_gr_limmed 0x7fff,0xffff,gr7 341 test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+ 342 test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff7fffffff 343 smsss34: 344 set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (neg) 345 set_gr_limmed 0x7fff,0xffff,gr8 346 set_spr_limmed 0x0000,0x0000,iacc0l 347 set_spr_limmed 0x8000,0x0000,iacc0h 348 smsss gr7,gr8 349 test_gr_limmed 0x7fff,0xffff,gr8 350 test_gr_limmed 0x7fff,0xffff,gr7 351 test_spr_limmed 0x0000,0x0000,iacc0l ; 8000000000000000- 352 test_spr_limmed 0x8000,0x0000,iacc0h ; 7fffffff*7fffffff+ 353 354 pass 355