1 2 /* Can be compiled both as ARM or Thumb using 3 gcc -Wall -g -O0 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -m{arm,thumb} -o vfp vfp.c 4 */ 5 6 #include <stdio.h> 7 #include <string.h> 8 #include <math.h> 9 10 #ifndef __thumb__ 11 // ARM 12 #define MOVE_to_FPSCR_from_R4 \ 13 ".word 0xEEE14A10 @ vmsr FPSCR, r4\n\t" 14 #define MOVE_to_R4_from_FPSCR \ 15 ".word 0xEEF14A10 @ vmrs r4, FPSCR\n\t" 16 #endif 17 18 #ifdef __thumb__ 19 // Thumb 20 #define MOVE_to_FPSCR_from_R4 \ 21 ".word 0x4A10EEE1 @ vmsr FPSCR, r4\n\t" 22 #define MOVE_to_R4_from_FPSCR \ 23 ".word 0x4A10EEF1 @ vmrs r4, FPSCR\n\t" 24 #endif 25 26 static inline unsigned int f2u(float x) { 27 union { 28 float f; 29 unsigned int u; 30 } cvt; 31 cvt.f = x; 32 return cvt.u; 33 } 34 35 static inline unsigned int f2u0(double x) { 36 union { 37 double f; 38 unsigned int u[2]; 39 } cvt; 40 cvt.f = x; 41 return cvt.u[0]; 42 } 43 44 static inline unsigned int f2u1(double x) { 45 union { 46 double f; 47 unsigned int u[2]; 48 } cvt; 49 cvt.f = x; 50 return cvt.u[1]; 51 } 52 53 /* test macros to generate and output the result of a single instruction */ 54 55 const unsigned int mem[] = { 56 0x121f1e1f, 0x131b1a1b, 0x141c1f1c, 0x151d191d, 57 0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a, 58 0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a, 59 0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c 60 }; 61 62 #define TESTINSN_vmovf32_imm(instruction, DD, imm) \ 63 { \ 64 unsigned int out[1]; \ 65 \ 66 __asm__ volatile( \ 67 instruction ", #"#imm"\n\t"\ 68 "vstmia %0, {" #DD "}\n\t" \ 69 : \ 70 : "r" (out) \ 71 : #DD, "memory" \ 72 ); \ 73 printf("%s, #" #imm " :: Sd 0x%08x\n", \ 74 instruction, out[0]); \ 75 } 76 77 #define TESTINSN_vmov_core_single(instruction, RN, SD, SDval) \ 78 { \ 79 unsigned int out[1]; \ 80 \ 81 printf(#SD" 0x%08x\t", SDval); \ 82 __asm__ volatile( \ 83 "mov " #RN ", #0\n\t" \ 84 "vmov.f32 " #SD ", %1\n\t" \ 85 instruction "\n\t" \ 86 "str " #RN ", [%0]\n\t" \ 87 : \ 88 : "r" (out), "r" (SDval) \ 89 : #SD, #RN, "memory" \ 90 ); \ 91 printf("%s :: "#RN" 0x%08x\n", \ 92 instruction, out[0]); \ 93 } 94 95 #define TESTINSN_vmov_single_core(instruction, SD, RN, RNval) \ 96 { \ 97 unsigned int out[1]; \ 98 \ 99 printf(#RN" 0x%08x\t", RNval); \ 100 __asm__ volatile( \ 101 "mov " #RN ", %1\n\t" \ 102 "vmov " #SD ", #0x40000000\n\t" \ 103 instruction "\n\t"\ 104 "vstmia %0, {" #SD "}\n\t" \ 105 : \ 106 : "r" (out), "r" (RNval) \ 107 : #SD, #RN, "memory" \ 108 ); \ 109 printf("%s :: "#SD" 0x%08x\n", \ 110 instruction, out[0]); \ 111 } 112 113 #define TESTINSN_vmov_2core_2single(instruction, RD1, RD2, SN, SM, SNval, SMval) \ 114 { \ 115 unsigned int out[2]; \ 116 \ 117 printf("\t\t\t "#SN" 0x%08x "#SM" 0x%08x\n", SNval, SMval); \ 118 __asm__ volatile( \ 119 "vmov " #SN ", %1\n\t" \ 120 "vmov " #SM ", %2\n\t" \ 121 "mov " #RD1 ", #0x4\n\t" \ 122 "mov " #RD2 ", #0x4\n\t" \ 123 instruction "\n\t"\ 124 "str " #RD1 ", [%0]\n\t" \ 125 "str " #RD2 ", [%0, #+4]\n\t" \ 126 : \ 127 : "r" (out), "r" (SNval), "r" (SMval) \ 128 : #RD1, #RD2, #SN, #SM, "memory" \ 129 ); \ 130 printf("%s :: "#RD1" 0x%08x "#RD2" 0x%08x\n", \ 131 instruction, out[0], out[1]); \ 132 } 133 134 #define TESTINSN_vmov_2single_2core(instruction, SD1, SD2, RN, RM, RNval, RMval) \ 135 { \ 136 unsigned int out[2]; \ 137 \ 138 printf("\t\t\t "#RN" 0x%08x "#RM" 0x%08x\n", RNval, RMval); \ 139 __asm__ volatile( \ 140 "mov " #RN ", %1\n\t" \ 141 "mov " #RM ", %2\n\t" \ 142 "vmov " #SD1 ", #0x40000000\n\t" \ 143 "vmov " #SD2 ", #0x40000000\n\t" \ 144 instruction "\n\t"\ 145 "vstmia %0, {" #SD1 ", " #SD2 " }\n\t" \ 146 : \ 147 : "r" (out), "r" (RNval), "r" (RMval) \ 148 : #SD1, #SD2, #RN, #RM, "memory" \ 149 ); \ 150 printf("%s :: "#SD1" 0x%08x "#SD2" 0x%08x\n", \ 151 instruction, out[0], out[1]); \ 152 } 153 154 #define TESTINSN_vmov_double_2core(instruction, DD, RN, RM, RNval, RMval) \ 155 { \ 156 unsigned int out[2]; \ 157 \ 158 printf(#RN" 0x%08x "#RM" 0x%08x\t", RNval, RMval); \ 159 __asm__ volatile( \ 160 "mov " #RN ", %1\n\t" \ 161 "mov " #RM ", %2\n\t" \ 162 "vmov.i8 " #DD ", #0x55\n\t" \ 163 instruction "\n\t"\ 164 "vstmia %0, {" #DD "}\n\t" \ 165 : \ 166 : "r" (out), "r" (RNval), "r" (RMval) \ 167 : #DD, #RN, #RM, "memory" \ 168 ); \ 169 printf("%s :: "#DD" 0x%08x 0x%08x\n", \ 170 instruction, out[0], out[1]); \ 171 } 172 173 #define TESTINSN_vmov_2core_double(instruction, RD1, RD2, DN, DNval0, DNval1) \ 174 { \ 175 unsigned int out[2]; \ 176 \ 177 printf(#DN" 0x%08x 0x%08x\t", DNval0, DNval1); \ 178 __asm__ volatile( \ 179 "mov " #RD1 ", #55\n\t" \ 180 "mov " #RD2 ", #55\n\t" \ 181 "vmov " #DN ", %1, %2\n\t" \ 182 instruction "\n\t" \ 183 "str " #RD1 ", [%0]\n\t" \ 184 "str " #RD2 ", [%0, #+4]\n\t" \ 185 : \ 186 : "r" (out), "r" (DNval0), "r" (DNval1) \ 187 : #DN, #RD1, #RD2, "memory" \ 188 ); \ 189 printf("%s :: "#RD1" 0x%08x "#RD2" 0x%08x\n", \ 190 instruction, out[0], out[1]); \ 191 } 192 193 #define TESTINSN_un_f64(instruction, DD, DM, DMtype, DMval0, DMval1) \ 194 { \ 195 unsigned int out[2]; \ 196 \ 197 __asm__ volatile( \ 198 "vmov.i8 " #DD ", #0x55" "\n\t" \ 199 "vmov " #DM ", %1, %2 \n\t" \ 200 instruction "\n\t" \ 201 "vstmia %0, {" #DD "}\n\t" \ 202 : \ 203 : "r" (out), "r" (DMval0), "r" (DMval1) \ 204 : #DD, #DM, "memory" \ 205 ); \ 206 printf("%s :: Dd 0x%08x 0x%08x Dm (" #DMtype ")0x%08x %08x\n", \ 207 instruction, out[1], out[0], DMval1, DMval0); \ 208 } 209 210 #define TESTINSN_un_f32(instruction, SD, SM, SMtype, SMval) \ 211 { \ 212 unsigned int out[1]; \ 213 \ 214 __asm__ volatile( \ 215 "vmov.f32 " #SM ", %1\n\t" \ 216 "vmov.f32 " #SD ", %2\n\t" \ 217 instruction "\n\t" \ 218 "vstmia %0, {" #SD "}\n\t" \ 219 : \ 220 : "r" (out), "r" (SMval), "r" (0xffffaaaa) \ 221 : #SD, #SM, "memory" \ 222 ); \ 223 printf("%s :: Sd 0x%08x Sm (" #SMtype ")0x%08x\n", \ 224 instruction, out[0], SMval); \ 225 } 226 227 #define TESTINSN_un_cvt_ds(instruction, DD, SM, SMval) \ 228 { \ 229 unsigned int out[2]; \ 230 \ 231 __asm__ volatile( \ 232 "vmov " #SM ", %1\n\t" \ 233 "vmov " #DD ", %2, %2\n\t" \ 234 instruction "\n\t" \ 235 "vstmia %0, {" #DD "}\n\t" \ 236 : \ 237 : "r" (out), "r" (SMval), "r" (0xffffaaaa) \ 238 : #DD, #SM, "memory" \ 239 ); \ 240 printf("%s :: Dd 0x%08x 0x%08x Sm 0x%08x\n", \ 241 instruction, out[1], out[0], SMval); \ 242 } 243 244 #define TESTINSN_un_cvt_sd(instruction, SD, DM, DMval0, DMval1) \ 245 { \ 246 unsigned int out[1]; \ 247 \ 248 __asm__ volatile( \ 249 "vmov " #SD ", %3\n\t" \ 250 "vmov " #DM ", %1, %2\n\t" \ 251 instruction "\n\t" \ 252 "vstmia %0, {" #SD "}\n\t" \ 253 : \ 254 : "r" (out), "r" (DMval0), "r" (DMval1), "r" (0xffffaaaa) \ 255 : #SD, #DM, "memory" \ 256 ); \ 257 printf("%s :: Sd 0x%08x Dm 0x%08x %08x\n", \ 258 instruction, out[0], DMval1, DMval0); \ 259 } 260 261 #define TESTINSN_cvt_i32_f64(instruction, SD, DM, DMval0, DMval1) \ 262 { \ 263 unsigned int out[1]; \ 264 \ 265 __asm__ volatile( \ 266 "vmov " #DM ", %1, %2\n\t" \ 267 "vmov " #SD ", %3\n\t" \ 268 instruction "\n\t" \ 269 "vstmia %0, {" #SD "}\n\t" \ 270 : \ 271 : "r" (out), "r" (DMval0), "r" (DMval1), "r" (0xffffaaaa) \ 272 : #SD, #DM, "memory" \ 273 ); \ 274 printf("%s :: Sd 0x%08x Dm 0x%08x %08x\n", \ 275 instruction, out[0], DMval1, DMval0); \ 276 } 277 278 #define TESTINSN_cvt_f64_i32(instruction, DD, SM, SMval) \ 279 { \ 280 unsigned int out[2]; \ 281 \ 282 __asm__ volatile( \ 283 "vmov " #SM ", %1\n\t" \ 284 "vmov " #DD ", %2, %2\n\t" \ 285 instruction "\n\t" \ 286 "vstmia %0, {" #DD "}\n\t" \ 287 : \ 288 : "r" (out), "r" (SMval), "r" (0xfffffff0) \ 289 : #DD, #SM, "memory" \ 290 ); \ 291 printf("%s :: Dd 0x%08x %08x Sm 0x%08x\n", \ 292 instruction, out[0], out[1], SMval); \ 293 } 294 295 #define TESTINSN_un_f64_q_vmrs(instruction, DD, DM, DMtype, DMval, RN) \ 296 { \ 297 unsigned int out[2]; \ 298 unsigned int fpscr; \ 299 \ 300 __asm__ volatile( \ 301 "vmov.i8 " #DD ", #0x55" "\n\t" \ 302 "mov r4, #0\n\t" \ 303 ".word 0xEEE14A10 @ vmsr FPSCR, "#RN"\n\t" \ 304 "vdup." #DMtype " " #DM ", %2\n\t" \ 305 instruction "\n\t" \ 306 "vstmia %1, {" #DD "}\n\t" \ 307 ".word 0xEEF14A10 @ vmrs "#RN", FPSCR\n\t" \ 308 "mov %0, r4" \ 309 : "=r" (fpscr) \ 310 : "r" (out), "r" (DMval) \ 311 : #DD, #DM, "memory", #RN \ 312 ); \ 313 printf("%s :: Dd 0x%08x 0x%08x Dm (" #DMtype ")0x%08x fpscr %08x\n", \ 314 instruction, out[1], out[0], DMval, fpscr); \ 315 } 316 317 #define TESTINSN_core_to_scalar(instruction, DD, DM, DMval) \ 318 { \ 319 unsigned int out[2]; \ 320 \ 321 __asm__ volatile( \ 322 "vmov.i8 " #DD ", #0x55" "\n\t" \ 323 "mov " #DM ", %1\n\t" \ 324 instruction "\n\t" \ 325 "vstmia %0, {" #DD "}\n\t" \ 326 : \ 327 : "r" (out), "r" (DMval) \ 328 : #DD, #DM, "memory" \ 329 ); \ 330 printf("%s :: Dd 0x%08x 0x%08x Dm 0x%08x\n", \ 331 instruction, out[1], out[0], DMval); \ 332 } 333 334 #define TESTINSN_vldr_f64(instruction, DD, RN, RNval, imm) \ 335 { \ 336 unsigned int out[2]; \ 337 \ 338 __asm__ volatile( \ 339 "vmov.i8 " #DD ", #0x55" "\n\t" \ 340 "mov " #RN ", %1\n\t" \ 341 instruction "\n\t" \ 342 "vstmia %0, {" #DD "}\n\t" \ 343 : \ 344 : "r" (out), "r" (RNval) \ 345 : #DD, #RN, "memory" \ 346 ); \ 347 printf("%s :: Dd 0x%08x 0x%08x *(int*) (Rn + shift) 0x%04x\n", \ 348 instruction, out[1], out[0], *(int*) (RNval + imm)); \ 349 } 350 351 #define TESTINSN_vldr_f32(instruction, SD, RN, RNval, imm) \ 352 { \ 353 unsigned int out[1]; \ 354 \ 355 __asm__ volatile( \ 356 "vmov " #SD ", %3" "\n\t" \ 357 "mov " #RN ", %1\n\t" \ 358 instruction "\n\t" \ 359 "vstmia %0, {" #SD "}\n\t" \ 360 : \ 361 : "r" (out), "r" (RNval), "r" (imm), "r" (0xffffffaa) \ 362 : #SD, #RN, "memory" \ 363 ); \ 364 printf("%s :: Sd 0x%08x *(int*) (Rn + shift) 0x%04x\n", \ 365 instruction, out[0], *(int*) (RNval + imm)); \ 366 } 367 368 #define TESTINSN_vstr64(instruction, DD, DDval, RM, RMval, imm) \ 369 { \ 370 unsigned int out[2]; \ 371 \ 372 __asm__ volatile( \ 373 "vmov.i8 " #DD ", #" #DDval "\n\t" \ 374 "add %1, %1, #" #imm "\n\t" \ 375 "mov " #RM ", #0x55\n\t" \ 376 "str " #RM ", [%1]\n\t" \ 377 "str " #RM ", [%1, #4]\n\t" \ 378 "sub %1, %1, #" #imm "\n\t" \ 379 "mov " #RM ", %1\n\t" \ 380 instruction "\n\t" \ 381 "vstmia %0, {" #DD "}\n\t" \ 382 : \ 383 : "r" (out), "r" (RMval) \ 384 : #DD, #RM, "memory" \ 385 ); \ 386 printf("%s :: Dd 0x%08x 0x%08x *(int*) (Rm + shift) 0x%04x\n", \ 387 instruction, out[1], out[0], *(int*) (RMval + imm)); \ 388 } 389 390 #define TESTINSN_vstr32(instruction, SD, RM, RMval, imm) \ 391 { \ 392 unsigned int out[1]; \ 393 \ 394 __asm__ volatile( \ 395 "vmov " #SD ", #0xbe280000\n\t" \ 396 "mov " #RM ", #0x55\n\t" \ 397 "str " #RM ", [%1, #" #imm "]\n\t" \ 398 "mov " #RM ", %1\n\t" \ 399 instruction "\n\t" \ 400 "vstmia %0, {" #SD "}\n\t" \ 401 : \ 402 : "r" (out), "r" (RMval) \ 403 : #SD, #RM, "memory" \ 404 ); \ 405 printf("%s :: Sd 0x%08x, *(int*) (Rm + shift) 0x%04x\n", \ 406 instruction, out[0], *(int*) (RMval + imm)); \ 407 } 408 409 #define TESTINSN_scalar_to_core(instruction, QD, QM, QMtype, QMval) \ 410 { \ 411 unsigned int out[2]; \ 412 \ 413 __asm__ volatile( \ 414 "mov " #QD ", #0x55" "\n\t" \ 415 "vdup." #QMtype " " #QM ", %1\n\t" \ 416 instruction "\n\t" \ 417 "str " #QD ", [%0]\n\t" \ 418 : \ 419 : "r" (out), "r" (QMval) \ 420 : #QD, #QM, "memory" \ 421 ); \ 422 printf("%s :: Rd 0x%08x Qm (" #QMtype ")0x%08x\n", \ 423 instruction, out[0], QMval); \ 424 } 425 426 #define TESTINSN_VLDn(instruction, QD1, QD2, QD3, QD4) \ 427 { \ 428 unsigned int out[8]; \ 429 \ 430 __asm__ volatile( \ 431 "vmov.i8 " #QD1 ", #0x55" "\n\t" \ 432 "vmov.i8 " #QD2 ", #0x55" "\n\t" \ 433 "vmov.i8 " #QD3 ", #0x55" "\n\t" \ 434 "vmov.i8 " #QD4 ", #0x55" "\n\t" \ 435 instruction ", [%1]\n\t" \ 436 "mov r4, %0\n\t" \ 437 "vstmia %0!, {" #QD1 "}\n\t" \ 438 "vstmia %0!, {" #QD2 "}\n\t" \ 439 "vstmia %0!, {" #QD3 "}\n\t" \ 440 "vstmia %0!, {" #QD4 "}\n\t" \ 441 "mov %0, r4\n\t" \ 442 : \ 443 : "r" (out), "r" (mem) \ 444 : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \ 445 ); \ 446 printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\ 447 "0x%08x 0x%08x 0x%08x 0x%08x\n", \ 448 instruction, out[0], out[1], out[2], out[3], out[4],\ 449 out[5], out[6], out[7]); \ 450 } 451 452 #define TESTINSN_VSTMIAnoWB(instruction, RN, QD, QDval) \ 453 { \ 454 unsigned int out[2]; \ 455 \ 456 __asm__ volatile( \ 457 "vmov.i8 " #QD ", " #QDval "\n\t" \ 458 "mov " #RN ", %0\n\t" \ 459 instruction "\n\t" \ 460 : \ 461 : "r" (out), "r" (mem) \ 462 : #QD, "memory", #RN \ 463 ); \ 464 printf("%s :: Result 0x%08x 0x%08x\n", \ 465 instruction, out[0], out[1]); \ 466 } 467 468 #define TESTINSN_VSTMIAnoWB32(instruction, RN, SD, SDval) \ 469 { \ 470 unsigned int out[1]; \ 471 \ 472 __asm__ volatile( \ 473 "vmov " #SD ", %2\n\t" \ 474 "mov " #RN ", %0\n\t" \ 475 instruction "\n\t" \ 476 : \ 477 : "r" (out), "r" (mem), "r" (SDval) \ 478 : #SD, "memory", #RN \ 479 ); \ 480 printf("%s :: Result 0x%08x\n", \ 481 instruction, out[0]); \ 482 } 483 484 #define TESTINSN_VSTMIAWB(RN, QD1, QD2) \ 485 { \ 486 unsigned int out[4]; \ 487 \ 488 __asm__ volatile( \ 489 "vmov.i8 " #QD1 ", #0xa0" "\n\t" \ 490 "vmov.i8 " #QD2 ", #0xb1" "\n\t" \ 491 "mov " #RN ", %0\n\t" \ 492 "vstmia " #RN "!, {" #QD1 "}\n\t" \ 493 "vstmia " #RN "!, {" #QD2 "}\n\t" \ 494 : \ 495 : "r" (out), "r" (mem) \ 496 : #QD1, #QD2, "memory", #RN \ 497 ); \ 498 printf("vstmia "#RN"!, "#QD1"; vstmia "#RN"!, "#QD2" :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \ 499 out[0], out[1], out[2], out[3]); \ 500 } 501 502 #define TESTINSN_VSTMIAWB32(RN, SD1, SD2) \ 503 { \ 504 unsigned int out[2]; \ 505 \ 506 __asm__ volatile( \ 507 "vmov " #SD1 ", #0xbff80000" "\n\t" \ 508 "vmov " #SD2 ", #0x3fa80000" "\n\t" \ 509 "mov " #RN ", %0\n\t" \ 510 "vstmia " #RN "!, {" #SD1 "}\n\t" \ 511 "vstmia " #RN "!, {" #SD2 "}\n\t" \ 512 : \ 513 : "r" (out), "r" (mem) \ 514 : #SD1, #SD2, "memory", #RN \ 515 ); \ 516 printf("vstmia " #RN "!, "#SD1"; vstmia "#RN"!, "#SD2" :: Result 0x%08x 0x%08x\n", \ 517 out[0], out[1]); \ 518 } 519 520 #define TESTINSN_VSTMDB(RN, QD1, QD2) \ 521 { \ 522 unsigned int out[4]; \ 523 long endout = (long) out + 8; \ 524 \ 525 __asm__ volatile( \ 526 "vmov.i8 " #QD1 ", #0xaa" "\n\t" \ 527 "vmov.i8 " #QD2 ", #0xbb" "\n\t" \ 528 "mov " #RN ", %0\n\t" \ 529 "vstmdb " #RN "!, {" #QD1 "}\n\t" \ 530 "vstmdb " #RN "!, {" #QD2 "}\n\t" \ 531 "mov %0, " #RN "\n\t" \ 532 : \ 533 : "r" (endout), "r" (mem) \ 534 : #QD1, #QD2, "memory", #RN \ 535 ); \ 536 printf("vstmdb " #RN "!, " #QD2 "; vstmdb " #RN "!, " #QD2 \ 537 " :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \ 538 out[0], out[1], out[2], out[3]); \ 539 } 540 541 #define TESTINSN_VLDMIAnoWB(instruction, RN, QD) \ 542 { \ 543 unsigned int in[2] = {0xaa0, 0xbb1}; \ 544 unsigned int out[2]; \ 545 \ 546 __asm__ volatile( \ 547 "vmov.i8 " #QD ", #0x55" "\n\t" \ 548 "mov " #RN ", %0\n\t" \ 549 instruction "\n\t" \ 550 "mov " #RN ", %1\n\t" \ 551 "vstmia " #RN ", {" #QD "}\n\t" \ 552 : \ 553 : "r" (in), "r" (out), "r" (mem) \ 554 : #QD, "memory", #RN \ 555 ); \ 556 printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \ 557 instruction, out[0], out[1], out[2], out[3]); \ 558 } 559 560 #define TESTINSN_VLDMIAWB(RN, QD1, QD2) \ 561 { \ 562 unsigned int in[4] = {0xaa0, 0xbb1, 0xcc2, 0xdd3}; \ 563 unsigned int out[4]; \ 564 \ 565 __asm__ volatile( \ 566 "vmov.i8 " #QD1 ", #0x55" "\n\t" \ 567 "vmov.i8 " #QD2 ", #0x55" "\n\t" \ 568 "mov " #RN ", %0\n\t" \ 569 "vldmia " #RN "!, {" #QD1 "}\n\t" \ 570 "vldmia " #RN "!, {" #QD2 "}\n\t" \ 571 "mov " #RN ", %1\n\t" \ 572 "vstmia " #RN "!, {" #QD1 "}\n\t" \ 573 "vstmia " #RN "!, {" #QD2 "}\n\t" \ 574 : \ 575 : "r" (in), "r" (out), "r" (mem) \ 576 : #QD1, #QD2, "memory", #RN \ 577 ); \ 578 printf("vldmia rN!, qD1; vldmia rN!, qD2 :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \ 579 out[0], out[1], out[2], out[3]); \ 580 } 581 582 #define TESTINSN_VLDMDB(RN, QD1, QD2) \ 583 { \ 584 unsigned int in[4] = {0xaa0, 0xbb1, 0xcc2, 0xdd3}; \ 585 unsigned int out[4]; \ 586 long endin = (long) in + 16; \ 587 \ 588 __asm__ volatile( \ 589 "vmov.i8 " #QD1 ", #0x55" "\n\t" \ 590 "vmov.i8 " #QD2 ", #0x55" "\n\t" \ 591 "mov " #RN ", %0\n\t" \ 592 "vldmdb " #RN "!, {" #QD1 "}\n\t" \ 593 "vldmdb " #RN "!, {" #QD2 "}\n\t" \ 594 "mov " #RN ", %1\n\t" \ 595 "vstmia " #RN "!, {" #QD1 "}\n\t" \ 596 "vstmia " #RN "!, {" #QD2 "}\n\t" \ 597 : \ 598 : "r" (endin), "r" (out), "r" (mem) \ 599 : #QD1, #QD2, "memory", #RN \ 600 ); \ 601 printf("vldmdb rN!, qD1; vldmia rN!, qD2 :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \ 602 out[0], out[1], out[2], out[3]); \ 603 } 604 605 #define TESTINSN_VLDR(instruction, dD, rN, rNval, offset) \ 606 { \ 607 unsigned int out[2]; \ 608 \ 609 __asm__ volatile( \ 610 "vmov.i8 " #dD ", #0x55\n\t" \ 611 "mov " #rN ", %1\n\t" \ 612 instruction ", #" #offset "]\n\t" \ 613 "vstmia %0, {" #dD "}\n\t" \ 614 : \ 615 : "r" (out), "r" (rNval) \ 616 : #dD, "memory" \ 617 ); \ 618 printf("%s :: dD 0x%08x 0x%08x rN 0x%08x\n", \ 619 instruction, out[1], out[0], rNval); \ 620 } 621 622 623 #define TESTINSN_vpush_vpop_f32(S1, Sval1, S2, Sval2, S3, Sval3, S4, S5, S6) \ 624 { \ 625 unsigned int out[6]; \ 626 \ 627 __asm__ volatile( \ 628 "vmov "#S4", %4\n\t" \ 629 "vmov "#S5", %4\n\t" \ 630 "vmov "#S6", %4\n\t" \ 631 "vmov "#S1", %1\n\t" \ 632 "vmov "#S2", %2\n\t" \ 633 "vmov "#S3", %3\n\t" \ 634 "vpush {"#S1", "#S2"}\n\t" \ 635 "vpush {"#S3"}\n\t" \ 636 "vpop {"#S4"}\n\t" \ 637 "vpop {"#S5", "#S6"}\n\t" \ 638 "mov r4, %0\n\t" \ 639 "vstmia %0!, {"#S1"}\n\t" \ 640 "vstmia %0!, {"#S2"}\n\t" \ 641 "vstmia %0!, {"#S3"}\n\t" \ 642 "vstmia %0!, {"#S4"}\n\t" \ 643 "vstmia %0!, {"#S5"}\n\t" \ 644 "vstmia %0!, {"#S6"}\n\t" \ 645 "mov %0, r4\n\t" \ 646 : \ 647 : "r" (out), "r" (Sval1), "r" (Sval2), "r" (Sval3), "r" (0x55555555) \ 648 : #S1, #S2, #S3, #S4, #S5, #S6, "r4", "memory" \ 649 ); \ 650 printf(#S1" 0x%08x "#S2" 0x%08x "#S3" 0x%08x "#S4" 0x%08x "\ 651 #S5" 0x%08x "#S6" 0x%08x\n", out[0], out[1],\ 652 out[2], out[3], out[4], out[5]); \ 653 } 654 655 #define TESTINSN_vpush_vpop_f64(D1, Dval10, Dval11, D2, Dval20, Dval21, D3, D4) \ 656 { \ 657 unsigned int out[8]; \ 658 \ 659 __asm__ volatile( \ 660 "vmov "#D3", %4, %4\n\t" \ 661 "vmov "#D4", %4, %4\n\t" \ 662 "vmov "#D1", %1, %2\n\t" \ 663 "vmov "#D2", %3, %4\n\t" \ 664 "vpush {"#D1", "#D2"}\n\t" \ 665 "vpop {"#D3", "#D4"}\n\t" \ 666 "mov r4, %0\n\t" \ 667 "vstmia %0!, {"#D1"}\n\t" \ 668 "vstmia %0!, {"#D2"}\n\t" \ 669 "vstmia %0!, {"#D3"}\n\t" \ 670 "vstmia %0!, {"#D4"}\n\t" \ 671 "mov %0, r4\n\t" \ 672 : \ 673 : "r" (out), "r" (Dval10), "r" (Dval11), "r" (Dval20), "r" (Dval21), "r" (0x55555555) \ 674 : #D1, #D2, #D3, #D4, "r4", "memory" \ 675 ); \ 676 printf(#D1" 0x%08x %08x "#D2" 0x%08x %08x "#D3" 0x%08x %08x "#D4" 0x%08x %08x\n",\ 677 out[0],out[1], out[2],out[3], out[4],out[5], out[6],out[7]); \ 678 } 679 680 #define TESTINSN_VSTn(instruction, QD1, QD2, QD3, QD4) \ 681 { \ 682 unsigned int out[8]; \ 683 \ 684 memset(out, 0x55, 8 * (sizeof(unsigned int)));\ 685 __asm__ volatile( \ 686 "mov r4, %1\n\t" \ 687 "vldmia %1!, {" #QD1 "}\n\t" \ 688 "vldmia %1!, {" #QD2 "}\n\t" \ 689 "vldmia %1!, {" #QD3 "}\n\t" \ 690 "vldmia %1!, {" #QD4 "}\n\t" \ 691 "mov %1, r4\n\t" \ 692 instruction ", [%0]\n\t" \ 693 : \ 694 : "r" (out), "r" (mem) \ 695 : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \ 696 ); \ 697 printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\ 698 "0x%08x 0x%08x 0x%08x 0x%08x\n", \ 699 instruction, out[0], out[1], out[2], out[3], out[4],\ 700 out[5], out[6], out[7]); \ 701 } 702 703 #define TESTINSN_bin(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ 704 { \ 705 unsigned int out[2]; \ 706 \ 707 __asm__ volatile( \ 708 "vmov.i8 " #QD ", #0x55" "\n\t" \ 709 "vdup." #QMtype " " #QM ", %1\n\t" \ 710 "vdup." #QNtype " " #QN ", %2\n\t" \ 711 instruction "\n\t" \ 712 "vstmia %0, {" #QD "}\n\t" \ 713 : \ 714 : "r" (out), "r" (QMval), "r" (QNval) \ 715 : #QD, #QM, #QN, "memory" \ 716 ); \ 717 printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ 718 " Qn (" #QNtype ")0x%08x\n", \ 719 instruction, out[1], out[0], QMval, QNval); \ 720 } 721 722 #define TESTINSN_bin_f64(instruction, QD, QM, QMtype, QMval0, QMval1, QN, QNtype, QNval0, QNval1) \ 723 { \ 724 unsigned int out[2]; \ 725 \ 726 __asm__ volatile( \ 727 "vdup.i32 " #QD ", %5\n\t" \ 728 "vmov " #QM ", %1, %2 \n\t" \ 729 "vmov " #QN ", %3, %4 \n\t" \ 730 instruction "\n\t" \ 731 "vstmia %0, {" #QD "}\n\t" \ 732 : \ 733 : "r" (out), "r" (QMval0), "r" (QMval1), "r" (QNval0), "r" (QNval1), "r"(0x3f800000) \ 734 : #QD, #QM, #QN, "memory" \ 735 ); \ 736 printf("%s :: Qd 0x%08x 0x%08x Qm 0x%08x %08x" \ 737 " Qn 0x%08x %08x\n", \ 738 instruction, out[1], out[0], QMval1, QMval0, QNval1, QNval0); \ 739 } 740 741 #define TESTINSN_bin_f32(instruction, SD, SM, SMtype, SMval, SN, SNtype, SNval) \ 742 { \ 743 unsigned int out[1]; \ 744 \ 745 __asm__ volatile( \ 746 "vmov.f32 " #SM ", %1\n\t" \ 747 "vmov.f32 " #SN ", %2\n\t" \ 748 "vmov.f32 " #SD ", %3\n\t" \ 749 instruction "\n\t" \ 750 "vstmia %0, {" #SD "}\n\t" \ 751 : \ 752 : "r" (out), "r" (SMval), "r" (SNval), "r" (0xaaaaaaaa) \ 753 : #SD, #SM, #SN, "memory" \ 754 ); \ 755 printf("%s :: Sd 0x%08x Sm (" #SMtype ")0x%08x" \ 756 " Sn (" #SNtype ")0x%08x\n", \ 757 instruction, out[0], SMval, SNval); \ 758 } 759 760 #define TESTINSN_cmp_f64(instruction, DD, DDval0, DDval1, DM, DMval0, DMval1) \ 761 { \ 762 unsigned int out[1]; \ 763 \ 764 __asm__ volatile( \ 765 "vmov " #DD ", %1, %2\n\t" \ 766 "vmov " #DM ", %3, %4\n\t" \ 767 "mov r4, #0\n\t" \ 768 MOVE_to_FPSCR_from_R4 \ 769 instruction "\n\t" \ 770 MOVE_to_R4_from_FPSCR \ 771 "str r4, [%0]\n\t" \ 772 : \ 773 : "r" (out), "r" (DDval0), "r" (DDval1),"r" (DMval0), "r" (DMval1) \ 774 : #DD, #DM, "r4", "memory" \ 775 ); \ 776 printf("%s :: FPSCR 0x%08x Dd 0x%08x %08x" \ 777 " Dm 0x%08x %08x\n", \ 778 instruction, out[0] & 0xffffff60, DDval1, DDval0, DMval1, DMval0); \ 779 } 780 781 #define TESTINSN_cmp_f32(instruction, SD, SDval, SM, SMval) \ 782 { \ 783 unsigned int out[1]; \ 784 \ 785 __asm__ volatile( \ 786 "vmov " #SD ", %1\n\t" \ 787 "vmov " #SM ", %2\n\t" \ 788 "mov r4, #0\n\t" \ 789 MOVE_to_FPSCR_from_R4 \ 790 instruction "\n\t" \ 791 MOVE_to_R4_from_FPSCR \ 792 "str r4, [%0]\n\t" \ 793 : \ 794 : "r" (out), "r" (SDval),"r" (SMval) \ 795 : #SD, #SM, "r4", "memory" \ 796 ); \ 797 printf("%s :: FPSCR 0x%01x Sd 0x%08x" \ 798 " Sm 0x%08x\n", \ 799 instruction, (out[0] & 0xf0000000) >> 28, SDval, SMval); \ 800 } 801 802 #define TESTINSN_cmpz_f32(instruction, SD, SDval) \ 803 { \ 804 unsigned int out[1]; \ 805 \ 806 __asm__ volatile( \ 807 "vmov " #SD ", %1\n\t" \ 808 instruction ", #0\n\t" \ 809 MOVE_to_R4_from_FPSCR \ 810 "vmov " #SD ", r4\n\t" \ 811 "vstmia %0, {" #SD "}\n\t" \ 812 : \ 813 : "r" (out), "r" (SDval)\ 814 : #SD, "r4", "memory" \ 815 ); \ 816 printf("%s :: FPSCR 0x%08x Sd 0x%08x\n", \ 817 instruction, out[0] & 0xffffff60, SDval); \ 818 } 819 820 #define TESTINSN_cmpz_f64(instruction, DD, DDval0, DDval1) \ 821 { \ 822 unsigned int out[1]; \ 823 \ 824 __asm__ volatile( \ 825 "vmov " #DD ", %1, %2\n\t" \ 826 instruction ", #0\n\t" \ 827 MOVE_to_R4_from_FPSCR \ 828 "str r4, [%0]\n\t" \ 829 : \ 830 : "r" (out), "r" (DDval0), "r" (DDval1) \ 831 : #DD, "r4", "memory" \ 832 ); \ 833 printf("%s :: FPSCR 0x%08x Dd 0x%08x %08x\n", \ 834 instruction, out[0] & 0xffffff60, DDval1, DDval0); \ 835 } 836 837 static void do_vldm_vstm_check(void) 838 { 839 int i; 840 const char *format = "\t0x%08x\n"; 841 unsigned int data[] = { 842 0x1a1b1c1d, 0x2a2b2c2d, 0x3a3b3c3d, 0x4a4b4c4d, 843 0x5a5b5c5d, 0x6a6b6c6d, 0x7a7b7c7d, 0x8a8b8c8d, 844 0x9a9b9c9d, 0xaaabacad, 0xbabbbcbd, 0xcacbcccd, 845 0xdadbdcdd, 0xeaebeced, 0xfafbfcfd, 0x0a0b0c0d 846 }; 847 unsigned int res; 848 printf("do_vldm_vstm_check:\n"); 849 __asm__ volatile( 850 "mov r1, %0\n\t" 851 "vldmia r1!, {s0, s1, s2, s3}\n\t" 852 "mov r0, %1\n\t" 853 "sub r1, r1, %0\n\t" 854 "mov r3, r1\n\t" 855 "bl printf\n\t" 856 "mov r0, %1\n\t" 857 "vmov r1, s2\n\t" 858 "mov r3, r1\n\t" 859 "bl printf\n\t" 860 "mov r0, %1\n\t" 861 "vmov r1, s3\n\t" 862 "mov r3, r1\n\t" 863 "bl printf\n\t" 864 "mov r0, %1\n\t" 865 "vmov r1, s0\n\t" 866 "mov r3, r1\n\t" 867 "bl printf\n\t" 868 /* --- */ 869 "add r1, %0, #32\n\t" 870 "vldmdb r1!, {s5, s6}\n\t" 871 "mov r0, %1\n\t" 872 "sub r1, r1, %0\n\t" 873 "mov r3, r1\n\t" 874 "bl printf\n\t" 875 "mov r0, %1\n\t" 876 "vmov r1, s5\n\t" 877 "mov r3, r1\n\t" 878 "bl printf\n\t" 879 "mov r0, %1\n\t" 880 "vmov r1, s6\n\t" 881 "mov r3, r1\n\t" 882 "bl printf\n\t" 883 /* --- */ 884 "add r1, %0, #4\n\t" 885 "vldmia r1, {s0, s1, s2, s3}\n\t" 886 "mov r0, %1\n\t" 887 "sub r1, r1, %0\n\t" 888 "mov r3, r1\n\t" 889 "bl printf\n\t" 890 "mov r0, %1\n\t" 891 "vmov r1, s2\n\t" 892 "mov r3, r1\n\t" 893 "bl printf\n\t" 894 "mov r0, %1\n\t" 895 "vmov r1, s3\n\t" 896 "mov r3, r1\n\t" 897 "bl printf\n\t" 898 "mov r0, %1\n\t" 899 "vmov r1, s0\n\t" 900 "mov r3, r1\n\t" 901 "bl printf\n\t" 902 /* --- */ 903 "add r1, %0, #48\n\t" 904 "vldmia r1!, {d30, d31}\n\t" 905 "mov r0, %1\n\t" 906 "sub r1, r1, %0\n\t" 907 "mov r3, r1\n\t" 908 "bl printf\n\t" 909 "mov r0, %1\n\t" 910 "vmov r1, r5, d30\n\t" 911 "mov r3, r1\n\t" 912 "bl printf\n\t" 913 "mov r0, %1\n\t" 914 "mov r1, r5\n\t" 915 "mov r3, r1\n\t" 916 "bl printf\n\t" 917 "mov r0, %1\n\t" 918 "vmov r1, r5, d31\n\t" 919 "mov r3, r1\n\t" 920 "bl printf\n\t" 921 "mov r0, %1\n\t" 922 "mov r1, r5\n\t" 923 "mov r3, r1\n\t" 924 "bl printf\n\t" 925 /* --- */ 926 "add r1, %0, #44\n\t" 927 "vldmia r1, {d30, d31}\n\t" 928 "mov r0, %1\n\t" 929 "sub r1, r1, %0\n\t" 930 "mov r3, r1\n\t" 931 "bl printf\n\t" 932 "mov r0, %1\n\t" 933 "vmov r1, r5, d30\n\t" 934 "mov r3, r1\n\t" 935 "bl printf\n\t" 936 "mov r0, %1\n\t" 937 "mov r1, r5\n\t" 938 "mov r3, r1\n\t" 939 "bl printf\n\t" 940 "mov r0, %1\n\t" 941 "vmov r1, r5, d31\n\t" 942 "mov r3, r1\n\t" 943 "bl printf\n\t" 944 "mov r0, %1\n\t" 945 "mov r1, r5\n\t" 946 "mov r3, r1\n\t" 947 "bl printf\n\t" 948 /* --- */ 949 "add r1, %0, #40\n\t" 950 "vldmdb r1!, {d30, d31}\n\t" 951 "mov r0, %1\n\t" 952 "sub r1, r1, %0\n\t" 953 "mov r3, r1\n\t" 954 "bl printf\n\t" 955 "mov r0, %1\n\t" 956 "vmov r1, r5, d30\n\t" 957 "mov r3, r1\n\t" 958 "bl printf\n\t" 959 "mov r0, %1\n\t" 960 "mov r1, r5\n\t" 961 "mov r3, r1\n\t" 962 "bl printf\n\t" 963 "mov r0, %1\n\t" 964 "vmov r1, r5, d31\n\t" 965 "mov r3, r1\n\t" 966 "bl printf\n\t" 967 "mov r0, %1\n\t" 968 "mov r1, r5\n\t" 969 "mov r3, r1\n\t" 970 "bl printf\n\t" 971 /* --- */ 972 "mov r0, #0x55\n\t" 973 "vmov s0, r0\n\t" 974 "mov r0, #0x56\n\t" 975 "vmov s1, r0\n\t" 976 "mov r0, #0x57\n\t" 977 "vmov s2, r0\n\t" 978 "mov r0, #0x58\n\t" 979 "vmov s3, r0\n\t" 980 "add r1, %0, #0\n\t" 981 "vstmia r1!, {s0, s1, s2, s3}\n\t" 982 "mov r0, %1\n\t" 983 "sub r1, r1, %0\n\t" 984 "mov r3, r1\n\t" 985 "bl printf\n\t" 986 /* --- */ 987 "mov r0, #0x65\n\t" 988 "vmov s16, r0\n\t" 989 "mov r0, #0x66\n\t" 990 "vmov s17, r0\n\t" 991 "add r1, %0, #16\n\t" 992 "vstmia r1, {s16, s17}\n\t" 993 "mov r0, %1\n\t" 994 "sub r1, r1, %0\n\t" 995 "mov r3, r1\n\t" 996 "bl printf\n\t" 997 /* --- */ 998 "mov r0, #0x75\n\t" 999 "vmov s16, r0\n\t" 1000 "mov r0, #0x76\n\t" 1001 "vmov s17, r0\n\t" 1002 "add r1, %0, #32\n\t" 1003 "vstmdb r1!, {s16, s17}\n\t" 1004 "mov r0, %1\n\t" 1005 "sub r1, r1, %0\n\t" 1006 "mov r3, r1\n\t" 1007 "bl printf\n\t" 1008 /* --- */ 1009 "mov r0, #0x42\n\t" 1010 "mov r1, #0x43\n\t" 1011 "vmov d30, r0, r1\n\t" 1012 "mov r0, #0x40\n\t" 1013 "mov r1, #0x41\n\t" 1014 "vmov d31, r0, r1\n\t" 1015 "mov r0, #0x57\n\t" 1016 "add r1, %0, #32\n\t" 1017 "vstmia r1!, {d30, d31}\n\t" 1018 "mov r0, %1\n\t" 1019 "sub r1, r1, %0\n\t" 1020 "mov r3, r1\n\t" 1021 "bl printf\n\t" 1022 /* --- */ 1023 "mov r0, #0x32\n\t" 1024 "mov r1, #0x33\n\t" 1025 "vmov d10, r0, r1\n\t" 1026 "mov r0, #0x57\n\t" 1027 "add r1, %0, #48\n\t" 1028 "vstmia r1, {d10}\n\t" 1029 "mov r0, %1\n\t" 1030 "sub r1, r1, %0\n\t" 1031 "mov r3, r1\n\t" 1032 "bl printf\n\t" 1033 /* --- */ 1034 "mov r0, #0x22\n\t" 1035 "mov r1, #0x23\n\t" 1036 "vmov d10, r0, r1\n\t" 1037 "mov r0, #0x57\n\t" 1038 "add r1, %0, #64\n\t" 1039 "vstmdb r1!, {d10}\n\t" 1040 "mov r0, %1\n\t" 1041 "sub r1, r1, %0\n\t" 1042 "mov r3, r1\n\t" 1043 "bl printf\n\t" 1044 : 1045 : "r" (data), "r" (format), "r"(&res) 1046 : "r0", "r1", "r2", "r3", "r5", "r12", "r14", "memory", 1047 "s0", "s1", "s2", "s3", "s5", "s6", "s16", "s17", 1048 "d10", "d30", "d31" 1049 ); 1050 printf("data:\n"); 1051 for (i = 0; i < 16; i++) { 1052 printf("\t0x%08x\n", data[i]); 1053 } 1054 } 1055 1056 int main(int argc, char **argv) 1057 { 1058 do_vldm_vstm_check(); 1059 1060 printf("---- VMOV (ARM core register to scalar) ----\n"); 1061 TESTINSN_core_to_scalar("vmov.32 d0[0], r5", d0, r5, f2u(13)); 1062 TESTINSN_core_to_scalar("vmov.32 d1[1], r6", d1, r6, 0x12); 1063 TESTINSN_core_to_scalar("vmov.32 d20[0], r5", d20, r5, f2u(NAN)); 1064 TESTINSN_core_to_scalar("vmov.32 d29[1], r6", d29, r6, f2u(172)); 1065 TESTINSN_core_to_scalar("vmov.32 d30[0], r5", d30, r5, f2u(INFINITY)); 1066 TESTINSN_core_to_scalar("vmov.32 d11[1], r6", d11, r6, f2u(-INFINITY)); 1067 TESTINSN_core_to_scalar("vmov.32 d18[0], r5", d11, r5, f2u(653)); 1068 TESTINSN_core_to_scalar("vmov.32 d9[1], r6", d9, r6, 12); 1069 TESTINSN_core_to_scalar("vmov.16 d0[0], r5", d0, r5, 13); 1070 TESTINSN_core_to_scalar("vmov.16 d14[1], r5", d14, r5, f2u(NAN)); 1071 TESTINSN_core_to_scalar("vmov.16 d28[2], r6", d28, r6, 14); 1072 TESTINSN_core_to_scalar("vmov.16 d30[3], r1", d30, r1, 17); 1073 TESTINSN_core_to_scalar("vmov.16 d0[0], r5", d0, r5, f2u(INFINITY)); 1074 TESTINSN_core_to_scalar("vmov.16 d7[1], r5", d7, r5, f2u(-INFINITY)); 1075 TESTINSN_core_to_scalar("vmov.16 d21[2], r6", d21, r6, 14); 1076 TESTINSN_core_to_scalar("vmov.16 d17[3], r1", d17, r1, 17); 1077 TESTINSN_core_to_scalar("vmov.8 d0[0], r5", d0, r5, 13); 1078 TESTINSN_core_to_scalar("vmov.8 d10[1], r5", d10, r5, f2u(NAN)); 1079 TESTINSN_core_to_scalar("vmov.8 d20[2], r5", d20, r5, f2u(INFINITY)); 1080 TESTINSN_core_to_scalar("vmov.8 d30[3], r5", d30, r5, f2u(-INFINITY)); 1081 TESTINSN_core_to_scalar("vmov.8 d13[4], r5", d13, r5, 213); 1082 TESTINSN_core_to_scalar("vmov.8 d17[5], r5", d17, r5, 1343); 1083 TESTINSN_core_to_scalar("vmov.8 d24[6], r5", d24, r5, 111); 1084 TESTINSN_core_to_scalar("vmov.8 d29[7], r5", d29, r5, 173); 1085 1086 printf("---- VMOV (scalar to ARM core register) ----\n"); 1087 TESTINSN_scalar_to_core("vmov.32 r5, d0[0]", r5, d0, i32, f2u(NAN)); 1088 TESTINSN_scalar_to_core("vmov.32 r6, d5[1]", r6, d5, i32, f2u(INFINITY)); 1089 TESTINSN_scalar_to_core("vmov.32 r4, d10[0]", r4, d10, i32, f2u(-INFINITY)); 1090 TESTINSN_scalar_to_core("vmov.32 r5, d15[1]", r5, d15, i32, 0x11223344); 1091 TESTINSN_scalar_to_core("vmov.32 r9, d20[0]", r9, d20, i32, 0x11223344); 1092 TESTINSN_scalar_to_core("vmov.32 r8, d25[1]", r8, d25, i32, 0x11223344); 1093 TESTINSN_scalar_to_core("vmov.32 r0, d30[0]", r0, d30, i32, 0x11223344); 1094 TESTINSN_scalar_to_core("vmov.32 r2, d19[1]", r2, d19, i32, 0x11223344); 1095 TESTINSN_scalar_to_core("vmov.u16 r5, d31[0]", r5, d31, i32, f2u(NAN)); 1096 TESTINSN_scalar_to_core("vmov.u16 r3, d30[1]", r3, d30, i32, f2u(INFINITY)); 1097 TESTINSN_scalar_to_core("vmov.u16 r6, d21[2]", r6, d21, i32, f2u(-INFINITY)); 1098 TESTINSN_scalar_to_core("vmov.u16 r9, d26[3]", r9, d26, i32, 0x11223344); 1099 TESTINSN_scalar_to_core("vmov.u16 r12, d11[0]", r12, d11, i32, 0x11223344); 1100 TESTINSN_scalar_to_core("vmov.u16 r0, d10[1]", r0, d10, i32, 0x11223344); 1101 TESTINSN_scalar_to_core("vmov.u16 r6, d1[2]", r6, d1, i32, 0x11223344); 1102 TESTINSN_scalar_to_core("vmov.u16 r8, d5[3]", r8, d5, i32, 0x11223344); 1103 TESTINSN_scalar_to_core("vmov.u8 r2, d4[0]", r2, d4, i32, f2u(NAN)); 1104 TESTINSN_scalar_to_core("vmov.u8 r6, d14[1]", r6, d14, i32, f2u(INFINITY)); 1105 TESTINSN_scalar_to_core("vmov.u8 r9, d24[2]", r9, d24, i32, f2u(-INFINITY)); 1106 TESTINSN_scalar_to_core("vmov.u8 r8, d31[3]", r8, d31, i32, 0x11223344); 1107 TESTINSN_scalar_to_core("vmov.u8 r10, d29[4]", r10, d29, i32, 0x11223344); 1108 TESTINSN_scalar_to_core("vmov.u8 r3, d19[5]", r3, d19, i32, 0x11223344); 1109 TESTINSN_scalar_to_core("vmov.u8 r12, d12[6]", r12, d12, i32, 0x11223344); 1110 TESTINSN_scalar_to_core("vmov.u8 r10, d18[4]", r10, d18, i32, 0x11223344); 1111 TESTINSN_scalar_to_core("vmov.s16 r5, d31[0]", r5, d31, i32, f2u(NAN)); 1112 TESTINSN_scalar_to_core("vmov.s16 r3, d30[1]", r3, d30, i32, f2u(INFINITY)); 1113 TESTINSN_scalar_to_core("vmov.s16 r6, d21[2]", r6, d21, i32, f2u(-INFINITY)); 1114 TESTINSN_scalar_to_core("vmov.s16 r9, d26[3]", r9, d26, i32, 0x11223344); 1115 TESTINSN_scalar_to_core("vmov.s16 r4, d11[0]", r4, d11, i32, 0x11223344); 1116 TESTINSN_scalar_to_core("vmov.s16 r0, d10[1]", r0, d10, i32, 0x11223344); 1117 TESTINSN_scalar_to_core("vmov.s16 r6, d1[2]", r6, d1, i32, 0x11223344); 1118 TESTINSN_scalar_to_core("vmov.s16 r8, d5[3]", r8, d5, i32, 0x11223344); 1119 TESTINSN_scalar_to_core("vmov.s8 r2, d4[0]", r2, d4, i32, f2u(NAN)); 1120 TESTINSN_scalar_to_core("vmov.s8 r6, d14[1]", r6, d14, i32, f2u(INFINITY)); 1121 TESTINSN_scalar_to_core("vmov.s8 r9, d24[2]", r9, d24, i32, f2u(-INFINITY)); 1122 TESTINSN_scalar_to_core("vmov.s8 r8, d31[3]", r8, d31, i32, 0x11223344); 1123 TESTINSN_scalar_to_core("vmov.s8 r6, d29[4]", r6, d29, i32, 0x11223344); 1124 TESTINSN_scalar_to_core("vmov.s8 r3, d19[5]", r3, d19, i32, 0x11223344); 1125 TESTINSN_scalar_to_core("vmov.s8 r12, d12[6]", r12, d12, i32, 0x11223344); 1126 TESTINSN_scalar_to_core("vmov.s8 r10, d18[7]", r10, d18, i32, 0x11223344); 1127 1128 printf("---- VMLA (fp) ----\n"); 1129 TESTINSN_bin_f64("vmla.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1130 TESTINSN_bin_f64("vmla.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1131 TESTINSN_bin_f64("vmla.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1132 TESTINSN_bin_f64("vmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1133 TESTINSN_bin_f64("vmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1134 TESTINSN_bin_f64("vmla.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1135 TESTINSN_bin_f64("vmla.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1136 TESTINSN_bin_f64("vmla.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1137 TESTINSN_bin_f64("vmla.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1138 TESTINSN_bin_f64("vmla.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1139 TESTINSN_bin_f64("vmla.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1140 TESTINSN_bin_f64("vmla.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1141 TESTINSN_bin_f64("vmla.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1142 TESTINSN_bin_f64("vmla.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1143 TESTINSN_bin_f64("vmla.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1144 TESTINSN_bin_f64("vmla.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1145 TESTINSN_bin_f64("vmla.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1146 TESTINSN_bin_f64("vmla.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1147 TESTINSN_bin_f64("vmla.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1148 TESTINSN_bin_f64("vmla.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1149 TESTINSN_bin_f64("vmla.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1150 TESTINSN_bin_f64("vmla.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1151 TESTINSN_bin_f64("vmla.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1152 TESTINSN_bin_f64("vmla.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1153 TESTINSN_bin_f32("vmla.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1154 TESTINSN_bin_f32("vmla.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1155 TESTINSN_bin_f32("vmla.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1156 TESTINSN_bin_f32("vmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1157 TESTINSN_bin_f32("vmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1158 TESTINSN_bin_f32("vmla.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1159 TESTINSN_bin_f32("vmla.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1160 TESTINSN_bin_f32("vmla.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1161 TESTINSN_bin_f32("vmla.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1162 TESTINSN_bin_f32("vmla.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1163 TESTINSN_bin_f32("vmla.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1164 TESTINSN_bin_f32("vmla.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1165 TESTINSN_bin_f32("vmla.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1166 TESTINSN_bin_f32("vmla.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1167 TESTINSN_bin_f32("vmla.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1168 TESTINSN_bin_f32("vmla.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1169 TESTINSN_bin_f32("vmla.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1170 TESTINSN_bin_f32("vmla.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1171 TESTINSN_bin_f32("vmla.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1172 TESTINSN_bin_f32("vmla.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1173 TESTINSN_bin_f32("vmla.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1174 TESTINSN_bin_f32("vmla.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1175 TESTINSN_bin_f32("vmla.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1176 TESTINSN_bin_f32("vmla.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1177 1178 printf("---- VNMLA (fp) ----\n"); 1179 TESTINSN_bin_f64("vnmla.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1180 TESTINSN_bin_f64("vnmla.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1181 TESTINSN_bin_f64("vnmla.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1182 TESTINSN_bin_f64("vnmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1183 TESTINSN_bin_f64("vnmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1184 TESTINSN_bin_f64("vnmla.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1185 TESTINSN_bin_f64("vnmla.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1186 TESTINSN_bin_f64("vnmla.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1187 TESTINSN_bin_f64("vnmla.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1188 TESTINSN_bin_f64("vnmla.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1189 TESTINSN_bin_f64("vnmla.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1190 TESTINSN_bin_f64("vnmla.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1191 TESTINSN_bin_f64("vnmla.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1192 TESTINSN_bin_f64("vnmla.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1193 TESTINSN_bin_f64("vnmla.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1194 TESTINSN_bin_f64("vnmla.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1195 TESTINSN_bin_f64("vnmla.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1196 TESTINSN_bin_f64("vnmla.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1197 TESTINSN_bin_f64("vnmla.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1198 TESTINSN_bin_f64("vnmla.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1199 TESTINSN_bin_f64("vnmla.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1200 TESTINSN_bin_f64("vnmla.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1201 TESTINSN_bin_f64("vnmla.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1202 TESTINSN_bin_f64("vnmla.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1203 TESTINSN_bin_f32("vnmla.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1204 TESTINSN_bin_f32("vnmla.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1205 TESTINSN_bin_f32("vnmla.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1206 TESTINSN_bin_f32("vnmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1207 TESTINSN_bin_f32("vnmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1208 TESTINSN_bin_f32("vnmla.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1209 TESTINSN_bin_f32("vnmla.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1210 TESTINSN_bin_f32("vnmla.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1211 TESTINSN_bin_f32("vnmla.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1212 TESTINSN_bin_f32("vnmla.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1213 TESTINSN_bin_f32("vnmla.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1214 TESTINSN_bin_f32("vnmla.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1215 TESTINSN_bin_f32("vnmla.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1216 TESTINSN_bin_f32("vnmla.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1217 TESTINSN_bin_f32("vnmla.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1218 TESTINSN_bin_f32("vnmla.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1219 TESTINSN_bin_f32("vnmla.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1220 TESTINSN_bin_f32("vnmla.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1221 TESTINSN_bin_f32("vnmla.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752.)); 1222 TESTINSN_bin_f32("vnmla.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1223 TESTINSN_bin_f32("vnmla.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1224 TESTINSN_bin_f32("vnmla.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1225 TESTINSN_bin_f32("vnmla.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1226 TESTINSN_bin_f32("vnmla.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1227 1228 printf("---- VMLS (fp) ----\n"); 1229 TESTINSN_bin_f64("vmls.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1230 TESTINSN_bin_f64("vmls.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1231 TESTINSN_bin_f64("vmls.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1232 TESTINSN_bin_f64("vmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1233 TESTINSN_bin_f64("vmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1234 TESTINSN_bin_f64("vmls.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1235 TESTINSN_bin_f64("vmls.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1236 TESTINSN_bin_f64("vmls.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1237 TESTINSN_bin_f64("vmls.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1238 TESTINSN_bin_f64("vmls.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1239 TESTINSN_bin_f64("vmls.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1240 TESTINSN_bin_f64("vmls.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1241 TESTINSN_bin_f64("vmls.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1242 TESTINSN_bin_f64("vmls.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1243 TESTINSN_bin_f64("vmls.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1244 TESTINSN_bin_f64("vmls.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1245 TESTINSN_bin_f64("vmls.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1246 TESTINSN_bin_f64("vmls.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1247 TESTINSN_bin_f64("vmls.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1248 TESTINSN_bin_f64("vmls.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1249 TESTINSN_bin_f64("vmls.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1250 TESTINSN_bin_f64("vmls.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1251 TESTINSN_bin_f64("vmls.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1252 TESTINSN_bin_f64("vmls.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1253 TESTINSN_bin_f32("vmls.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1254 TESTINSN_bin_f32("vmls.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1255 TESTINSN_bin_f32("vmls.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1256 TESTINSN_bin_f32("vmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1257 TESTINSN_bin_f32("vmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1258 TESTINSN_bin_f32("vmls.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1259 TESTINSN_bin_f32("vmls.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1260 TESTINSN_bin_f32("vmls.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1261 TESTINSN_bin_f32("vmls.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1262 TESTINSN_bin_f32("vmls.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1263 TESTINSN_bin_f32("vmls.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1264 TESTINSN_bin_f32("vmls.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1265 TESTINSN_bin_f32("vmls.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1266 TESTINSN_bin_f32("vmls.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1267 TESTINSN_bin_f32("vmls.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1268 TESTINSN_bin_f32("vmls.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1269 TESTINSN_bin_f32("vmls.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1270 TESTINSN_bin_f32("vmls.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1271 TESTINSN_bin_f32("vmls.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1272 TESTINSN_bin_f32("vmls.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1273 TESTINSN_bin_f32("vmls.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1274 TESTINSN_bin_f32("vmls.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1275 TESTINSN_bin_f32("vmls.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1276 TESTINSN_bin_f32("vmls.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1277 1278 printf("---- VNMLS (fp) ----\n"); 1279 TESTINSN_bin_f64("vnmls.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1280 TESTINSN_bin_f64("vnmls.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1281 TESTINSN_bin_f64("vnmls.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1282 TESTINSN_bin_f64("vnmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1283 TESTINSN_bin_f64("vnmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1284 TESTINSN_bin_f64("vnmls.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1285 TESTINSN_bin_f64("vnmls.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1286 TESTINSN_bin_f64("vnmls.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1287 TESTINSN_bin_f64("vnmls.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1288 TESTINSN_bin_f64("vnmls.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1289 TESTINSN_bin_f64("vnmls.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1290 TESTINSN_bin_f64("vnmls.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1291 TESTINSN_bin_f64("vnmls.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1292 TESTINSN_bin_f64("vnmls.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1293 TESTINSN_bin_f64("vnmls.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1294 TESTINSN_bin_f64("vnmls.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1295 TESTINSN_bin_f64("vnmls.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1296 TESTINSN_bin_f64("vnmls.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1297 TESTINSN_bin_f64("vnmls.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1298 TESTINSN_bin_f64("vnmls.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1299 TESTINSN_bin_f64("vnmls.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1300 TESTINSN_bin_f64("vnmls.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1301 TESTINSN_bin_f64("vnmls.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1302 TESTINSN_bin_f64("vnmls.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1303 TESTINSN_bin_f32("vnmls.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1304 TESTINSN_bin_f32("vnmls.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1305 TESTINSN_bin_f32("vnmls.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1306 TESTINSN_bin_f32("vnmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1307 TESTINSN_bin_f32("vnmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1308 TESTINSN_bin_f32("vnmls.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1309 TESTINSN_bin_f32("vnmls.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1310 TESTINSN_bin_f32("vnmls.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1311 TESTINSN_bin_f32("vnmls.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1312 TESTINSN_bin_f32("vnmls.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1313 TESTINSN_bin_f32("vnmls.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1314 TESTINSN_bin_f32("vnmls.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1315 TESTINSN_bin_f32("vnmls.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1316 TESTINSN_bin_f32("vnmls.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1317 TESTINSN_bin_f32("vnmls.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1318 TESTINSN_bin_f32("vnmls.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1319 TESTINSN_bin_f32("vnmls.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1320 TESTINSN_bin_f32("vnmls.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1321 TESTINSN_bin_f32("vnmls.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1322 TESTINSN_bin_f32("vnmls.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1323 TESTINSN_bin_f32("vnmls.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1324 TESTINSN_bin_f32("vnmls.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1325 TESTINSN_bin_f32("vnmls.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1326 TESTINSN_bin_f32("vnmls.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1327 1328 printf("---- VMUL (fp) ----\n"); 1329 TESTINSN_bin_f64("vmul.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1330 TESTINSN_bin_f64("vmul.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1331 TESTINSN_bin_f64("vmul.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1332 TESTINSN_bin_f64("vmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1333 TESTINSN_bin_f64("vmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1334 TESTINSN_bin_f64("vmul.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1335 TESTINSN_bin_f64("vmul.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1336 TESTINSN_bin_f64("vmul.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1337 TESTINSN_bin_f64("vmul.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1338 TESTINSN_bin_f64("vmul.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1339 TESTINSN_bin_f64("vmul.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1340 TESTINSN_bin_f64("vmul.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1341 TESTINSN_bin_f64("vmul.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1342 TESTINSN_bin_f64("vmul.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1343 TESTINSN_bin_f64("vmul.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1344 TESTINSN_bin_f64("vmul.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1345 TESTINSN_bin_f64("vmul.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1346 TESTINSN_bin_f64("vmul.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1347 TESTINSN_bin_f64("vmul.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1348 TESTINSN_bin_f64("vmul.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1349 TESTINSN_bin_f64("vmul.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1350 TESTINSN_bin_f64("vmul.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1351 TESTINSN_bin_f64("vmul.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1352 TESTINSN_bin_f64("vmul.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1353 TESTINSN_bin_f32("vmul.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1354 TESTINSN_bin_f32("vmul.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1355 TESTINSN_bin_f32("vmul.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1356 TESTINSN_bin_f32("vmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1357 TESTINSN_bin_f32("vmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1358 TESTINSN_bin_f32("vmul.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1359 TESTINSN_bin_f32("vmul.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1360 TESTINSN_bin_f32("vmul.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1361 TESTINSN_bin_f32("vmul.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1362 TESTINSN_bin_f32("vmul.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1363 TESTINSN_bin_f32("vmul.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1364 TESTINSN_bin_f32("vmul.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1365 TESTINSN_bin_f32("vmul.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1366 TESTINSN_bin_f32("vmul.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1367 TESTINSN_bin_f32("vmul.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1368 TESTINSN_bin_f32("vmul.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1369 TESTINSN_bin_f32("vmul.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1370 TESTINSN_bin_f32("vmul.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1371 TESTINSN_bin_f32("vmul.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1372 TESTINSN_bin_f32("vmul.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1373 TESTINSN_bin_f32("vmul.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1374 TESTINSN_bin_f32("vmul.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1375 TESTINSN_bin_f32("vmul.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1376 TESTINSN_bin_f32("vmul.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1377 1378 printf("---- VNMUL (fp) ----\n"); 1379 TESTINSN_bin_f64("vnmul.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1380 TESTINSN_bin_f64("vnmul.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1381 TESTINSN_bin_f64("vnmul.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1382 TESTINSN_bin_f64("vnmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1383 TESTINSN_bin_f64("vnmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1384 TESTINSN_bin_f64("vnmul.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1385 TESTINSN_bin_f64("vnmul.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1386 TESTINSN_bin_f64("vnmul.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1387 TESTINSN_bin_f64("vnmul.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1388 TESTINSN_bin_f64("vnmul.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1389 TESTINSN_bin_f64("vnmul.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1390 TESTINSN_bin_f64("vnmul.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1391 TESTINSN_bin_f64("vnmul.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1392 TESTINSN_bin_f64("vnmul.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1393 TESTINSN_bin_f64("vnmul.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1394 TESTINSN_bin_f64("vnmul.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1395 TESTINSN_bin_f64("vnmul.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1396 TESTINSN_bin_f64("vnmul.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1397 TESTINSN_bin_f64("vnmul.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1398 TESTINSN_bin_f64("vnmul.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1399 TESTINSN_bin_f64("vnmul.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1400 TESTINSN_bin_f64("vnmul.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1401 TESTINSN_bin_f64("vnmul.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1402 TESTINSN_bin_f64("vnmul.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1403 TESTINSN_bin_f32("vnmul.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1404 TESTINSN_bin_f32("vnmul.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1405 TESTINSN_bin_f32("vnmul.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1406 TESTINSN_bin_f32("vnmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1407 TESTINSN_bin_f32("vnmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1408 TESTINSN_bin_f32("vnmul.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1409 TESTINSN_bin_f32("vnmul.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1410 TESTINSN_bin_f32("vnmul.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1411 TESTINSN_bin_f32("vnmul.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1412 TESTINSN_bin_f32("vnmul.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1413 TESTINSN_bin_f32("vnmul.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1414 TESTINSN_bin_f32("vnmul.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1415 TESTINSN_bin_f32("vnmul.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1416 TESTINSN_bin_f32("vnmul.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1417 TESTINSN_bin_f32("vnmul.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1418 TESTINSN_bin_f32("vnmul.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1419 TESTINSN_bin_f32("vnmul.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1420 TESTINSN_bin_f32("vnmul.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1421 TESTINSN_bin_f32("vnmul.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1422 TESTINSN_bin_f32("vnmul.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1423 TESTINSN_bin_f32("vnmul.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1424 TESTINSN_bin_f32("vnmul.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1425 TESTINSN_bin_f32("vnmul.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1426 TESTINSN_bin_f32("vnmul.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1427 1428 printf("---- VADD (fp) ----\n"); 1429 TESTINSN_bin_f64("vadd.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1430 TESTINSN_bin_f64("vadd.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1431 TESTINSN_bin_f64("vadd.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1432 TESTINSN_bin_f64("vadd.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1433 TESTINSN_bin_f64("vadd.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1434 TESTINSN_bin_f64("vadd.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1435 TESTINSN_bin_f64("vadd.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1436 TESTINSN_bin_f64("vadd.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1437 TESTINSN_bin_f64("vadd.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1438 TESTINSN_bin_f64("vadd.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1439 TESTINSN_bin_f64("vadd.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1440 TESTINSN_bin_f64("vadd.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1441 TESTINSN_bin_f64("vadd.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1442 TESTINSN_bin_f64("vadd.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1443 TESTINSN_bin_f64("vadd.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1444 TESTINSN_bin_f64("vadd.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1445 TESTINSN_bin_f64("vadd.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1446 TESTINSN_bin_f64("vadd.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1447 TESTINSN_bin_f64("vadd.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1448 TESTINSN_bin_f64("vadd.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1449 TESTINSN_bin_f64("vadd.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1450 TESTINSN_bin_f64("vadd.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1451 TESTINSN_bin_f64("vadd.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1452 TESTINSN_bin_f64("vadd.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1453 TESTINSN_bin_f32("vadd.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1454 TESTINSN_bin_f32("vadd.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1455 TESTINSN_bin_f32("vadd.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1456 TESTINSN_bin_f32("vadd.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1457 TESTINSN_bin_f32("vadd.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1458 TESTINSN_bin_f32("vadd.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1459 TESTINSN_bin_f32("vadd.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1460 TESTINSN_bin_f32("vadd.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1461 TESTINSN_bin_f32("vadd.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1462 TESTINSN_bin_f32("vadd.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1463 TESTINSN_bin_f32("vadd.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1464 TESTINSN_bin_f32("vadd.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1465 TESTINSN_bin_f32("vadd.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1466 TESTINSN_bin_f32("vadd.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1467 TESTINSN_bin_f32("vadd.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1468 TESTINSN_bin_f32("vadd.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1469 TESTINSN_bin_f32("vadd.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1470 TESTINSN_bin_f32("vadd.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1471 TESTINSN_bin_f32("vadd.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1472 TESTINSN_bin_f32("vadd.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1473 TESTINSN_bin_f32("vadd.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1474 TESTINSN_bin_f32("vadd.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1475 TESTINSN_bin_f32("vadd.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1476 TESTINSN_bin_f32("vadd.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1477 1478 printf("---- VSUB (fp) ----\n"); 1479 TESTINSN_bin_f64("vsub.f64 d0, d11, d12", d0, d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN)); 1480 TESTINSN_bin_f64("vsub.f64 d7, d1, d6", d7, d1, i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN)); 1481 TESTINSN_bin_f64("vsub.f64 d0, d5, d2", d0, d5, i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0)); 1482 TESTINSN_bin_f64("vsub.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0)); 1483 TESTINSN_bin_f64("vsub.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN)); 1484 TESTINSN_bin_f64("vsub.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1485 TESTINSN_bin_f64("vsub.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1486 TESTINSN_bin_f64("vsub.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1487 TESTINSN_bin_f64("vsub.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1488 TESTINSN_bin_f64("vsub.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1489 TESTINSN_bin_f64("vsub.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1490 TESTINSN_bin_f64("vsub.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1491 TESTINSN_bin_f64("vsub.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1492 TESTINSN_bin_f64("vsub.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1493 TESTINSN_bin_f64("vsub.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1494 TESTINSN_bin_f64("vsub.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1495 TESTINSN_bin_f64("vsub.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1496 TESTINSN_bin_f64("vsub.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1497 TESTINSN_bin_f64("vsub.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1498 TESTINSN_bin_f64("vsub.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1499 TESTINSN_bin_f64("vsub.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1500 TESTINSN_bin_f64("vsub.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1501 TESTINSN_bin_f64("vsub.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1502 TESTINSN_bin_f64("vsub.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1503 TESTINSN_bin_f32("vsub.f32 s0, s11, s12", s0, s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN)); 1504 TESTINSN_bin_f32("vsub.f32 s7, s1, s6", s7, s1, i32, f2u(INFINITY), s6, i32, f2u(NAN)); 1505 TESTINSN_bin_f32("vsub.f32 s0, s5, s2", s0, s5, i32, f2u(NAN), s2, i32, f2u(-1.0)); 1506 TESTINSN_bin_f32("vsub.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0)); 1507 TESTINSN_bin_f32("vsub.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN)); 1508 TESTINSN_bin_f32("vsub.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1509 TESTINSN_bin_f32("vsub.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1510 TESTINSN_bin_f32("vsub.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1511 TESTINSN_bin_f32("vsub.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1512 TESTINSN_bin_f32("vsub.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1513 TESTINSN_bin_f32("vsub.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1514 TESTINSN_bin_f32("vsub.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1515 TESTINSN_bin_f32("vsub.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1516 TESTINSN_bin_f32("vsub.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1517 TESTINSN_bin_f32("vsub.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1518 TESTINSN_bin_f32("vsub.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1519 TESTINSN_bin_f32("vsub.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1520 TESTINSN_bin_f32("vsub.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1521 TESTINSN_bin_f32("vsub.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1522 TESTINSN_bin_f32("vsub.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1523 TESTINSN_bin_f32("vsub.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1524 TESTINSN_bin_f32("vsub.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1525 TESTINSN_bin_f32("vsub.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1526 TESTINSN_bin_f32("vsub.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1527 1528 printf("---- VDIV (fp) ----\n"); 1529 TESTINSN_bin_f64("vdiv.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687)); 1530 TESTINSN_bin_f64("vdiv.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346)); 1531 TESTINSN_bin_f64("vdiv.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476)); 1532 TESTINSN_bin_f64("vdiv.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065)); 1533 TESTINSN_bin_f64("vdiv.f64 d30, d15, d2", d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76)); 1534 TESTINSN_bin_f64("vdiv.f64 d23, d24, d5", d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346)); 1535 TESTINSN_bin_f64("vdiv.f64 d10, d11, d2", d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089)); 1536 TESTINSN_bin_f64("vdiv.f64 d29, d15, d7", d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065)); 1537 TESTINSN_bin_f64("vdiv.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009)); 1538 TESTINSN_bin_f64("vdiv.f64 d27, d21, d6", d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575)); 1539 TESTINSN_bin_f64("vdiv.f64 d30, d31, d2", d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107)); 1540 TESTINSN_bin_f64("vdiv.f64 d13, d24, d5", d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6)); 1541 TESTINSN_bin_f64("vdiv.f64 d10, d11, d2", d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109)); 1542 TESTINSN_bin_f64("vdiv.f64 d29, d25, d7", d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752)); 1543 TESTINSN_bin_f64("vdiv.f64 d0, d11, d12", d0, d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47)); 1544 TESTINSN_bin_f64("vdiv.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676)); 1545 TESTINSN_bin_f64("vdiv.f64 d0, d5, d2", d0, d5, i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1546 TESTINSN_bin_f64("vdiv.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1547 TESTINSN_bin_f64("vdiv.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0)); 1548 TESTINSN_bin_f32("vdiv.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687)); 1549 TESTINSN_bin_f32("vdiv.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346)); 1550 TESTINSN_bin_f32("vdiv.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476)); 1551 TESTINSN_bin_f32("vdiv.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065)); 1552 TESTINSN_bin_f32("vdiv.f32 s30, s15, s2", s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76)); 1553 TESTINSN_bin_f32("vdiv.f32 s23, s24, s5", s23, s24, i32, f2u(24), s5, i32, f2u(1346)); 1554 TESTINSN_bin_f32("vdiv.f32 s10, s11, s2", s10, s11, i32, f2u(48755), s2, i32, f2u(1089)); 1555 TESTINSN_bin_f32("vdiv.f32 s29, s15, s7", s29, s15, i32, f2u(214), s7, i32, f2u(1752065)); 1556 TESTINSN_bin_f32("vdiv.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009)); 1557 TESTINSN_bin_f32("vdiv.f32 s27, s21, s6", s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575)); 1558 TESTINSN_bin_f32("vdiv.f32 s30, s31, s2", s30, s31, i32, f2u(2754), s2, i32, f2u(107)); 1559 TESTINSN_bin_f32("vdiv.f32 s13, s24, s5", s13, s24, i32, f2u(874), s5, i32, f2u(1384.6)); 1560 TESTINSN_bin_f32("vdiv.f32 s10, s11, s2", s10, s11, i32, f2u(487.587), s2, i32, f2u(109)); 1561 TESTINSN_bin_f32("vdiv.f32 s29, s25, s7", s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752)); 1562 TESTINSN_bin_f32("vdiv.f32 s0, s11, s12", s0, s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47)); 1563 TESTINSN_bin_f32("vdiv.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676)); 1564 TESTINSN_bin_f32("vdiv.f32 s0, s5, s2", s0, s5, i32, f2u(INFINITY), s2, i32, f2u(-INFINITY)); 1565 TESTINSN_bin_f32("vdiv.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0)); 1566 TESTINSN_bin_f32("vdiv.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0)); 1567 1568 printf("---- VABS ----\n"); 1569 TESTINSN_un_f64("vabs.f64 d15, d4", d15, d4, i32, f2u0(NAN), f2u1(NAN)); 1570 TESTINSN_un_f64("vabs.f64 d31, d4", d31, d4, i32, f2u0(NAN), f2u1(NAN)); 1571 TESTINSN_un_f64("vabs.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY)); 1572 TESTINSN_un_f64("vabs.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY)); 1573 TESTINSN_un_f64("vabs.f64 d30, d1", d30, d1, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1574 TESTINSN_un_f64("vabs.f64 d8, d27", d8, d27, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1575 TESTINSN_un_f64("vabs.f64 d20, d1", d20, d1, i32, f2u0(76543.001002), f2u1(76543.001002)); 1576 TESTINSN_un_f64("vabs.f64 d28, d7", d28, d7, i32, f2u0(-4856.234), f2u1(-4856.234)); 1577 TESTINSN_un_f64("vabs.f64 d2, d19", d2, d19, i32,f2u0(87.098217), f2u1(87.098217)); 1578 TESTINSN_un_f64("vabs.f64 d8, d7", d8, d7, i32, f2u0(-122156.2), f2u1(-122156.2)); 1579 TESTINSN_un_f32("vabs.f32 s15, s4", s15, s4, i32, f2u(NAN)); 1580 TESTINSN_un_f32("vabs.f32 s31, s4", s31, s4, i32, f2u(NAN)); 1581 TESTINSN_un_f32("vabs.f32 s25, s25", s25, s24, i32, f2u(INFINITY)); 1582 TESTINSN_un_f32("vabs.f32 s18, s17", s18, s17, i32, f2u(INFINITY)); 1583 TESTINSN_un_f32("vabs.f32 s30, s1", s30, s1, i32, f2u(-INFINITY)); 1584 TESTINSN_un_f32("vabs.f32 s8, s27", s8, s27, i32, f2u(-INFINITY)); 1585 TESTINSN_un_f32("vabs.f32 s20, s1", s20, s1, i32, f2u(76543.001002)); 1586 TESTINSN_un_f32("vabs.f32 s28, s7", s28, s7, i32, f2u(-4856.234)); 1587 TESTINSN_un_f32("vabs.f32 s2, s19", s2, s19, i32,f2u(87.098217)); 1588 TESTINSN_un_f32("vabs.f32 s8, s7", s8, s7, i32, f2u(-122156.2)); 1589 1590 printf("---- VNEG ----\n"); 1591 TESTINSN_un_f64("vneg.f64 d15, d4", d15, d4, i32, f2u0(NAN), f2u1(NAN)); 1592 TESTINSN_un_f64("vneg.f64 d31, d4", d31, d4, i32, f2u0(NAN), f2u1(NAN)); 1593 TESTINSN_un_f64("vneg.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY)); 1594 TESTINSN_un_f64("vneg.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY)); 1595 TESTINSN_un_f64("vneg.f64 d30, d1", d30, d1, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1596 TESTINSN_un_f64("vneg.f64 d8, d27", d8, d27, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1597 TESTINSN_un_f64("vneg.f64 d20, d1", d20, d1, i32, f2u0(76543.001002), f2u1(76543.001002)); 1598 TESTINSN_un_f64("vneg.f64 d28, d7", d28, d7, i32, f2u0(-4856.234), f2u1(-4856.234)); 1599 TESTINSN_un_f64("vneg.f64 d2, d19", d2, d19, i32,f2u0(87.098217), f2u1(87.098217)); 1600 TESTINSN_un_f64("vneg.f64 d8, d7", d8, d7, i32, f2u0(-122156.2), f2u1(-122156.2)); 1601 TESTINSN_un_f32("vneg.f32 s15, s4", s15, s4, i32, f2u(NAN)); 1602 TESTINSN_un_f32("vneg.f32 s31, s4", s31, s4, i32, f2u(NAN)); 1603 TESTINSN_un_f32("vneg.f32 s25, s25", s25, s24, i32, f2u(INFINITY)); 1604 TESTINSN_un_f32("vneg.f32 s18, s17", s18, s17, i32, f2u(INFINITY)); 1605 TESTINSN_un_f32("vneg.f32 s30, s1", s30, s1, i32, f2u(-INFINITY)); 1606 TESTINSN_un_f32("vneg.f32 s8, s27", s8, s27, i32, f2u(-INFINITY)); 1607 TESTINSN_un_f32("vneg.f32 s20, s1", s20, s1, i32, f2u(76543.001002)); 1608 TESTINSN_un_f32("vneg.f32 s28, s7", s28, s7, i32, f2u(-4856.234)); 1609 TESTINSN_un_f32("vneg.f32 s2, s19", s2, s19, i32,f2u(87.098217)); 1610 TESTINSN_un_f32("vneg.f32 s8, s7", s8, s7, i32, f2u(-122156.2)); 1611 1612 printf("---- VMOV (register) ----\n"); 1613 TESTINSN_un_f64("vmov.f64 d15, d4", d15, d4, i32, f2u0(NAN), f2u1(NAN)); 1614 TESTINSN_un_f64("vmov.f64 d31, d4", d31, d4, i32, f2u0(NAN), f2u1(NAN)); 1615 TESTINSN_un_f64("vmov.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY)); 1616 TESTINSN_un_f64("vmov.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY)); 1617 TESTINSN_un_f64("vmov.f64 d30, d1", d30, d1, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1618 TESTINSN_un_f64("vmov.f64 d8, d27", d8, d27, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1619 TESTINSN_un_f64("vmov.f64 d20, d1", d20, d1, i32, f2u0(76543.001002), f2u1(76543.001002)); 1620 TESTINSN_un_f64("vmov.f64 d28, d7", d28, d7, i32, f2u0(-4856.234), f2u1(-4856.234)); 1621 TESTINSN_un_f64("vmov.f64 d2, d19", d2, d19, i32,f2u0(87.098217), f2u1(87.098217)); 1622 TESTINSN_un_f64("vmov.f64 d8, d7", d8, d7, i32, f2u0(-122156.2), f2u1(-122156.2)); 1623 TESTINSN_un_f32("vmov.f32 s15, s4", s15, s4, i32, f2u(NAN)); 1624 TESTINSN_un_f32("vmov.f32 s31, s4", s31, s4, i32, f2u(NAN)); 1625 TESTINSN_un_f32("vmov.f32 s25, s25", s25, s24, i32, f2u(INFINITY)); 1626 TESTINSN_un_f32("vmov.f32 s18, s17", s18, s17, i32, f2u(INFINITY)); 1627 TESTINSN_un_f32("vmov.f32 s30, s1", s30, s1, i32, f2u(-INFINITY)); 1628 TESTINSN_un_f32("vmov.f32 s8, s27", s8, s27, i32, f2u(-INFINITY)); 1629 TESTINSN_un_f32("vmov.f32 s20, s1", s20, s1, i32, f2u(76543.001002)); 1630 TESTINSN_un_f32("vmov.f32 s28, s7", s28, s7, i32, f2u(-4856.234)); 1631 TESTINSN_un_f32("vmov.f32 s2, s19", s2, s19, i32,f2u(87.098217)); 1632 TESTINSN_un_f32("vmov.f32 s8, s7", s8, s7, i32, f2u(-122156.2)); 1633 1634 printf("---- VSQRT ----\n"); 1635 TESTINSN_un_f64("vsqrt.f64 d15, d4", d15, d4, i32, f2u0(NAN), f2u1(NAN)); 1636 TESTINSN_un_f64("vsqrt.f64 d31, d4", d31, d4, i32, f2u0(NAN), f2u1(NAN)); 1637 TESTINSN_un_f64("vsqrt.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY)); 1638 TESTINSN_un_f64("vsqrt.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY)); 1639 TESTINSN_un_f64("vsqrt.f64 d30, d1", d30, d1, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1640 TESTINSN_un_f64("vsqrt.f64 d8, d27", d8, d27, i32, f2u0(-INFINITY), f2u1(-INFINITY)); 1641 TESTINSN_un_f64("vsqrt.f64 d20, d1", d20, d1, i32, f2u0(76543.001002), f2u1(76543.001002)); 1642 TESTINSN_un_f64("vsqrt.f64 d28, d7", d28, d7, i32, f2u0(-4856.234), f2u1(-4856.234)); 1643 TESTINSN_un_f64("vsqrt.f64 d2, d19", d2, d19, i32,f2u0(87.098217), f2u1(87.098217)); 1644 TESTINSN_un_f64("vsqrt.f64 d8, d7", d8, d7, i32, f2u0(-122156.2), f2u1(-122156.2)); 1645 TESTINSN_un_f32("vsqrt.f32 s15, s4", s15, s4, i32, f2u(NAN)); 1646 TESTINSN_un_f32("vsqrt.f32 s31, s4", s31, s4, i32, f2u(NAN)); 1647 TESTINSN_un_f32("vsqrt.f32 s25, s25", s25, s24, i32, f2u(INFINITY)); 1648 TESTINSN_un_f32("vsqrt.f32 s18, s17", s18, s17, i32, f2u(INFINITY)); 1649 TESTINSN_un_f32("vsqrt.f32 s30, s1", s30, s1, i32, f2u(-INFINITY)); 1650 TESTINSN_un_f32("vsqrt.f32 s8, s27", s8, s27, i32, f2u(-INFINITY)); 1651 TESTINSN_un_f32("vsqrt.f32 s20, s1", s20, s1, i32, f2u(76543.001002)); 1652 TESTINSN_un_f32("vsqrt.f32 s28, s7", s28, s7, i32, f2u(-4856.234)); 1653 TESTINSN_un_f32("vsqrt.f32 s2, s19", s2, s19, i32,f2u(87.098217)); 1654 TESTINSN_un_f32("vsqrt.f32 s8, s7", s8, s7, i32, f2u(-122156.2)); 1655 1656 printf("---- VCVT (integer <-> fp) ----\n"); 1657 TESTINSN_un_f32("vcvt.u32.f32 s0, s1", s0, s1, i32, f2u(3.2)); 1658 TESTINSN_un_f32("vcvt.u32.f32 s10, s11", s10, s11, i32, f2u(3e22)); 1659 TESTINSN_un_f32("vcvt.u32.f32 s15, s4", s15, s4, i32, f2u(3e9)); 1660 TESTINSN_un_f32("vcvt.u32.f32 s25, s24", s25, s24, i32, f2u(-0.5)); 1661 TESTINSN_un_f32("vcvt.u32.f32 s19, s21", s19, s21, i32, f2u(-7.1)); 1662 TESTINSN_un_f32("vcvt.u32.f32 s12, s8", s12, s8, i32, f2u(8.0 - 1.0/1024.0)); 1663 TESTINSN_un_f32("vcvt.u32.f32 s12, s18", s12, s18, i32, f2u(-8.0 + 1.0/1024.0)); 1664 TESTINSN_un_f32("vcvt.u32.f32 s30, s1", s30, s1, i32, f2u(0.0)); 1665 TESTINSN_un_f32("vcvt.u32.f32 s11, s1", s11, s1, i32, f2u(INFINITY)); 1666 TESTINSN_un_f32("vcvt.u32.f32 s21, s12", s21, s12, i32, f2u(-INFINITY)); 1667 TESTINSN_un_f32("vcvt.u32.f32 s20, s11", s20, s11, i32, f2u(NAN)); 1668 TESTINSN_un_f32("vcvt.s32.f32 s29, s13", s29, s13, i32, f2u(NAN)); 1669 TESTINSN_un_f32("vcvt.s32.f32 s9, s19", s9, s19, i32, f2u(0.0)); 1670 TESTINSN_un_f32("vcvt.s32.f32 s0, s17", s0, s17, i32, f2u(INFINITY)); 1671 TESTINSN_un_f32("vcvt.s32.f32 s0, s1", s0, s1, i32, f2u(-INFINITY)); 1672 TESTINSN_un_f32("vcvt.s32.f32 s30, s11", s30, s11, i32, f2u(3.2)); 1673 TESTINSN_un_f32("vcvt.s32.f32 s20, s21", s20, s21, i32, f2u(3e22)); 1674 TESTINSN_un_f32("vcvt.s32.f32 s15, s14", s15, s14, i32, f2u(3e9)); 1675 TESTINSN_un_f32("vcvt.s32.f32 s15, s24", s15, s24, i32, f2u(-0.5)); 1676 TESTINSN_un_f32("vcvt.s32.f32 s15, s29", s15, s29, i32, f2u(-7.1)); 1677 TESTINSN_un_f32("vcvt.s32.f32 s12, s31", s12, s31, i32, f2u(8.0 - 1.0/1024.0)); 1678 TESTINSN_un_f32("vcvt.s32.f32 s1, s8", s1, s8, i32, f2u(-8.0 + 1.0/1024.0)); 1679 1680 TESTINSN_un_f32("vcvt.f32.u32 s30, s1", s30, s1, i32, f2u(7)); 1681 TESTINSN_un_f32("vcvt.f32.u32 s10, s17", s10, s17, i32, f2u(1 << 31)); 1682 TESTINSN_un_f32("vcvt.f32.u32 s20, s1", s20, s1, i32, f2u((1U << 31) + 1)); 1683 TESTINSN_un_f32("vcvt.f32.u32 s24, s26", s24, s26, i32, f2u((1U << 31) - 1)); 1684 TESTINSN_un_f32("vcvt.f32.u32 s0, s14", s0, s14, i32, f2u(0x30a0bcef)); 1685 TESTINSN_un_f32("vcvt.f32.u32 s11, s1", s11, s1, i32, f2u(INFINITY)); 1686 TESTINSN_un_f32("vcvt.f32.u32 s21, s12", s21, s12, i32, f2u(-INFINITY)); 1687 TESTINSN_un_f32("vcvt.f32.u32 s29, s13", s29, s13, i32, f2u(NAN)); 1688 TESTINSN_un_f32("vcvt.f32.s32 s0, s1", s0, s1, i32, f2u(7)); 1689 TESTINSN_un_f32("vcvt.f32.s32 s30, s31", s30, s31, i32, f2u(1 << 31)); 1690 TESTINSN_un_f32("vcvt.f32.s32 s0, s12", s0, s12, i32, f2u((1U << 31) + 1)); 1691 TESTINSN_un_f32("vcvt.f32.s32 s10, s16", s10, s16, i32, f2u((1U << 31) - 1)); 1692 TESTINSN_un_f32("vcvt.f32.s32 s1, s8", s1, s8, i32, f2u(-8.0 + 1.0/1024.0)); 1693 TESTINSN_un_f32("vcvt.f32.s32 s29, s13", s29, s13, i32, f2u(NAN)); 1694 TESTINSN_un_f32("vcvt.f32.s32 s9, s19", s9, s19, i32, f2u(0.0)); 1695 TESTINSN_un_f32("vcvt.f32.s32 s0, s17", s0, s17, i32, f2u(INFINITY)); 1696 TESTINSN_un_f32("vcvt.f32.s32 s0, s1", s0, s1, i32, f2u(-INFINITY)); 1697 1698 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s0, d1", s0, d1, f2u0(3.2), f2u1(3.2)); 1699 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s13, d26", s13, d26, f2u0(234.54), f2u1(234.54)); 1700 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s29, d30", s29, d30, f2u0(46245.345), f2u1(46245.345)); 1701 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s30, d21", s30, d21, f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0)); 1702 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s11, d8", s11, d8, f2u0(INFINITY), f2u1(INFINITY)); 1703 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s8, d12", s8, d12, f2u0(-INFINITY), f2u1(-INFINITY)); 1704 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s19, d7", s19, d7, f2u0(NAN), f2u1(NAN)); 1705 TESTINSN_cvt_i32_f64("vcvt.u32.f64 s16, d16", s16, d16, f2u0(76.67), f2u1(76.67)); 1706 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s0, d1", s0, d1, f2u0(3.2), f2u1(3.2)); 1707 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s13, d26", s13, d26, f2u0(234.54), f2u1(234.54)); 1708 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s29, d30", s29, d30, f2u0(46245.345), f2u1(46245.345)); 1709 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s30, d21", s30, d21, f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0)); 1710 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s11, d8", s11, d8, f2u0(INFINITY), f2u1(INFINITY)); 1711 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s8, d12", s8, d12, f2u0(-INFINITY), f2u1(-INFINITY)); 1712 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s19, d7", s19, d7, f2u0(NAN), f2u1(NAN)); 1713 TESTINSN_cvt_i32_f64("vcvt.s32.f64 s16, d16", s16, d16, f2u0(76.67), f2u1(76.67)); 1714 1715 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d0, s1", d0, s1, f2u(3.2)); 1716 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d30, s21", d30, s21, f2u(-656.42)); 1717 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d16, s12", d16, s12, f2u(870.024)); 1718 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d29, s7", d29, s7, f2u(-2543.4506)); 1719 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d12, s28", d12, s28, f2u(5.00003245)); 1720 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d7, s5", d7, s5, f2u(-INFINITY)); 1721 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d21, s20", d21, s20, f2u(INFINITY)); 1722 TESTINSN_cvt_f64_i32("vcvt.f64.u32 d11, s11", d11, s11, f2u(NAN)); 1723 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d0, s1", d0, s1, f2u(3.2)); 1724 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d30, s21", d30, s21, f2u(-656.42)); 1725 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d16, s12", d16, s12, f2u(870.024)); 1726 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d29, s7", d29, s7, f2u(-2543.4506)); 1727 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d12, s28", d12, s28, f2u(5.00003245)); 1728 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d7, s5", d7, s5, f2u(-INFINITY)); 1729 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d21, s20", d21, s20, f2u(INFINITY)); 1730 TESTINSN_cvt_f64_i32("vcvt.f64.s32 d11, s11", d11, s11, f2u(NAN)); 1731 1732 /* printf("---- VCVT (fixed <-> fp) ----\n"); 1733 TESTINSN_un_f32("vcvt.u32.f32 s0, s0, #3", s0, s0, i32, f2u(3.2)); 1734 TESTINSN_un_f32("vcvt.u32.f32 s11, s11, #1", s11, s11, i32, f2u(3e22)); 1735 TESTINSN_un_f32("vcvt.u32.f32 s15, s15, #32", s15, s15, i32, f2u(3e9)); 1736 TESTINSN_un_f32("vcvt.u32.f32 s4, s4, #7", s4, s4, i32, f2u(-0.5)); 1737 TESTINSN_un_f32("vcvt.u32.f32 s6, s6, #4", s6, s6, i32, f2u(-7.1)); 1738 TESTINSN_un_f32("vcvt.u32.f32 s12, s12, #3", s12, s12, i32, f2u(8.0 - 1.0/1024.0)); 1739 TESTINSN_un_f32("vcvt.u32.f32 s8, s8, #3", s8, s8, i32, f2u(-8.0 + 1.0/1024.0)); 1740 TESTINSN_un_f32("vcvt.u32.f32 s30, s30, #3", s30, s30, i32, f2u(NAN)); 1741 TESTINSN_un_f32("vcvt.u32.f32 s20, s20, #3", s20, s20, i32, f2u(0.0)); 1742 TESTINSN_un_f32("vcvt.u32.f32 s13, s13, #6", s13, s13, i32, f2u(INFINITY)); 1743 TESTINSN_un_f32("vcvt.u32.f32 s16, s16, #3", s16, s16, i32, f2u(-INFINITY)); 1744 TESTINSN_un_f32("vcvt.s32.f32 s1, s1, #5", s1, s1, i32, f2u(3.2)); 1745 TESTINSN_un_f32("vcvt.s32.f32 s21, s21, #1", s21, s21, i32, f2u(3e22)); 1746 TESTINSN_un_f32("vcvt.s32.f32 s17, s17, #8", s17, s17, i32, f2u(3e9)); 1747 TESTINSN_un_f32("vcvt.s32.f32 s27, s27, #2", s27, s27, i32, f2u(-0.5)); 1748 TESTINSN_un_f32("vcvt.s32.f32 s15, s15, #1", s15, s15, i32, f2u(-7.1)); 1749 TESTINSN_un_f32("vcvt.s32.f32 s8, s8, #2", s8, s8, i32, f2u(8.0 - 1.0/1024.0)); 1750 TESTINSN_un_f32("vcvt.s32.f32 s31, s31, #2", s31, s31, i32, f2u(-8.0 + 1.0/1024.0)); 1751 TESTINSN_un_f32("vcvt.s32.f32 s10, s10, #3", s10, s10, i32, f2u(0.0)); 1752 TESTINSN_un_f32("vcvt.s32.f32 s13, s13, #9", s13, s13, i32, f2u(INFINITY)); 1753 TESTINSN_un_f32("vcvt.s32.f32 s22, s22, #3", s22, s22, i32, f2u(-INFINITY)); 1754 TESTINSN_un_f32("vcvt.s32.f32 s1, s1, #7", s1, s1, i32, f2u(NAN)); 1755 1756 TESTINSN_un_f32("vcvt.f32.u32 s0, s0, #3", s0, s0, i32, f2u(3.2)); 1757 TESTINSN_un_f32("vcvt.f32.u32 s11, s11, #1", s11, s11, i32, f2u(3e22)); 1758 TESTINSN_un_f32("vcvt.f32.u32 s15, s15, #32", s15, s15, i32, f2u(3e9)); 1759 TESTINSN_un_f32("vcvt.f32.u32 s4, s4, #7", s4, s4, i32, f2u(-0.5)); 1760 TESTINSN_un_f32("vcvt.f32.u32 s6, s6, #4", s6, s6, i32, f2u(-7.1)); 1761 TESTINSN_un_f32("vcvt.f32.u32 s12, s12, #3", s12, s12, i32, f2u(8.0 - 1.0/1024.0)); 1762 TESTINSN_un_f32("vcvt.f32.u32 s8, s8, #3", s8, s8, i32, f2u(-8.0 + 1.0/1024.0)); 1763 TESTINSN_un_f32("vcvt.f32.u32 s30, s30, #3", s30, s30, i32, f2u(NAN)); 1764 TESTINSN_un_f32("vcvt.f32.u32 s20, s20, #3", s20, s20, i32, f2u(0.0)); 1765 TESTINSN_un_f32("vcvt.f32.u32 s13, s13, #6", s13, s13, i32, f2u(INFINITY)); 1766 TESTINSN_un_f32("vcvt.f32.u32 s16, s16, #3", s16, s16, i32, f2u(-INFINITY)); 1767 TESTINSN_un_f32("vcvt.f32.s32 s1, s1, #5", s1, s1, i32, f2u(3.2)); 1768 TESTINSN_un_f32("vcvt.f32.s32 s21, s21, #1", s21, s21, i32, f2u(3e22)); 1769 TESTINSN_un_f32("vcvt.f32.s32 s17, s17, #8", s17, s17, i32, f2u(3e9)); 1770 TESTINSN_un_f32("vcvt.f32.s32 s27, s27, #2", s27, s27, i32, f2u(-0.5)); 1771 TESTINSN_un_f32("vcvt.f32.s32 s15, s15, #1", s15, s15, i32, f2u(-7.1)); 1772 TESTINSN_un_f32("vcvt.f32.s32 s8, s8, #2", s8, s8, i32, f2u(8.0 - 1.0/1024.0)); 1773 TESTINSN_un_f32("vcvt.f32.s32 s31, s31, #2", s31, s31, i32, f2u(-8.0 + 1.0/1024.0)); 1774 TESTINSN_un_f32("vcvt.f32.s32 s10, s10, #3", s10, s10, i32, f2u(0.0)); 1775 TESTINSN_un_f32("vcvt.f32.s32 s13, s13, #9", s13, s13, i32, f2u(INFINITY)); 1776 TESTINSN_un_f32("vcvt.f32.s32 s22, s22, #3", s22, s22, i32, f2u(-INFINITY)); 1777 TESTINSN_un_f32("vcvt.f32.s32 s1, s1, #7", s1, s1, i32, f2u(NAN)); 1778 */ 1779 1780 printf("---- VCVT (single <-> double) ----\n"); 1781 TESTINSN_un_cvt_ds("vcvt.f64.f32 d0, s1", d0, s1, f2u(3.2)); 1782 TESTINSN_un_cvt_ds("vcvt.f64.f32 d29, s21", d29, s21, f2u(234.65)); 1783 TESTINSN_un_cvt_ds("vcvt.f64.f32 d16, s30", d16, s30, f2u(-700.63)); 1784 TESTINSN_un_cvt_ds("vcvt.f64.f32 d11, s7", d11, s7, f2u(8.0 - 1.0/1024.0)); 1785 TESTINSN_un_cvt_ds("vcvt.f64.f32 d30, s3", d30, s3, f2u(-8.0 + 1.0/1024.0)); 1786 TESTINSN_un_cvt_ds("vcvt.f64.f32 d7, s19", d7, s19, f2u(12.43303)); 1787 TESTINSN_un_cvt_ds("vcvt.f64.f32 d2, s11", d2, s11, f2u(65.4235)); 1788 TESTINSN_un_cvt_ds("vcvt.f64.f32 d9, s21", d9, s21, f2u(NAN)); 1789 TESTINSN_un_cvt_ds("vcvt.f64.f32 d17, s29", d17, s29, f2u(-INFINITY)); 1790 TESTINSN_un_cvt_ds("vcvt.f64.f32 d19, s0", d19, s0, f2u(INFINITY)); 1791 TESTINSN_un_cvt_sd("vcvt.f32.f64 s0, d1", s0, d1, f2u0(3.2), f2u1(3.2)); 1792 TESTINSN_un_cvt_sd("vcvt.f32.f64 s29, d21", s29, d21, f2u0(234.65), f2u1(234.65)); 1793 TESTINSN_un_cvt_sd("vcvt.f32.f64 s16, d30", s16, d30, f2u0(-700.63), f2u1(-700.63)); 1794 TESTINSN_un_cvt_sd("vcvt.f32.f64 s11, d7", s11, d7, f2u0(8.0 - 1.0/1024.0), f2u1(8.0 - 1.0/1024.0)); 1795 TESTINSN_un_cvt_sd("vcvt.f32.f64 s30, d3", s30, d3, f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0)); 1796 TESTINSN_un_cvt_sd("vcvt.f32.f64 s7, d19", s7, d19, f2u0(12.43303), f2u1(12.43303)); 1797 TESTINSN_un_cvt_sd("vcvt.f32.f64 s2, d11", s2, d11, f2u0(65.4235), f2u1(65.4235)); 1798 TESTINSN_un_cvt_sd("vcvt.f32.f64 s9, d21", s9, d21, f2u0(NAN), f2u1(NAN)); 1799 TESTINSN_un_cvt_sd("vcvt.f32.f64 s17, d29", s17, d29, f2u0(-INFINITY), f2u1(-INFINITY)); 1800 TESTINSN_un_cvt_sd("vcvt.f32.f64 s19, d0", s19, d0, f2u0(INFINITY), f2u1(INFINITY)); 1801 1802 printf("---- VCMP ----\n"); 1803 TESTINSN_cmp_f64("vcmp.f64 d0, d19", d0, f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245)); 1804 TESTINSN_cmp_f64("vcmp.f64 d11, d16", d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(3425.5), f2u1(3425.5)); 1805 TESTINSN_cmp_f64("vcmp.f64 d21, d30", d21, f2u0(-4524.5), f2u1(-4524.5), d30, f2u0(-452345.5), f2u1(-452345.5)); 1806 TESTINSN_cmp_f64("vcmp.f64 d7, d28", d7, f2u0(425.5), f2u1(425.5), d28, f2u0(-456.3), f2u1(-456.3)); 1807 TESTINSN_cmp_f64("vcmp.f64 d29, d3", d29, f2u0(INFINITY), f2u1(INFINITY), d3, f2u0(34562.45), f2u1(34562.45)); 1808 TESTINSN_cmp_f64("vcmp.f64 d3, d22", d3, f2u0(2.0), f2u1(2.0), d22, f2u0(2.0), f2u1(2.0)); 1809 TESTINSN_cmp_f64("vcmp.f64 d3, d22", d3, f2u0(12.023), f2u1(12.023), d22, f2u0(12.023), f2u1(12.023)); 1810 TESTINSN_cmp_f64("vcmp.f64 d3, d22", d3, f2u0(0.0), f2u1(0.0), d22, f2u0(0.0), f2u1(0.0)); 1811 TESTINSN_cmp_f64("vcmp.f64 d9, d2", d9, f2u0(INFINITY), f2u1(INFINITY), d2, f2u0(INFINITY), f2u1(INFINITY)); 1812 TESTINSN_cmp_f64("vcmp.f64 d30, d15", d30, f2u0(-INFINITY), f2u1(-INFINITY), d15, f2u0(-INFINITY), f2u1(-INFINITY)); 1813 TESTINSN_cmp_f64("vcmp.f64 d0, d19", d0, f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245)); 1814 TESTINSN_cmp_f64("vcmp.f64 d11, d16", d11, f2u0(-5463.7), f2u1(-5463.7), d16, f2u0(-INFINITY), f2u1(-INFINITY)); 1815 TESTINSN_cmp_f64("vcmp.f64 d21, d30", d21, f2u0(-INFINITY), f2u1(-INFINITY), d30, f2u0(86.7), f2u1(86.7)); 1816 TESTINSN_cmp_f64("vcmp.f64 d7, d28", d7, f2u0(INFINITY), f2u1(INFINITY), d28, f2u0(-8567.456), f2u1(-8567.456)); 1817 TESTINSN_cmp_f64("vcmp.f64 d29, d3", d29, f2u0(-524.4), f2u1(-524.4), d3, f2u0(654.5), f2u1(654.5)); 1818 TESTINSN_cmp_f64("vcmp.f64 d3, d22", d3, f2u0(NAN), f2u1(NAN), d22, f2u0(-6.46524), f2u1(-6.46524)); 1819 TESTINSN_cmp_f64("vcmp.f64 d9, d2", d9, f2u0(56.563), f2u1(56.563), d2, f2u0(56.56), f2u1(56.56)); 1820 TESTINSN_cmp_f64("vcmp.f64 d30, d15", d30, f2u0(5365.60001), f2u1(5365.60001), d15, f2u0(56763.5), f2u1(56763.5)); 1821 TESTINSN_cmp_f64("vcmpe.f64 d0, d19", d0, f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245)); 1822 TESTINSN_cmp_f64("vcmpe.f64 d11, d16", d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(3425.5), f2u1(3425.5)); 1823 TESTINSN_cmp_f64("vcmpe.f64 d11, d16", d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(NAN), f2u1(NAN)); 1824 TESTINSN_cmp_f64("vcmpe.f64 d21, d30", d21, f2u0(-4524.5), f2u1(-4524.5), d30, f2u0(-452345.5), f2u1(-452345.5)); 1825 TESTINSN_cmp_f64("vcmpe.f64 d7, d28", d7, f2u0(425.5), f2u1(425.5), d28, f2u0(-456.3), f2u1(-456.3)); 1826 TESTINSN_cmp_f64("vcmpe.f64 d29, d3", d29, f2u0(INFINITY), f2u1(INFINITY), d3, f2u0(34562.45), f2u1(34562.45)); 1827 TESTINSN_cmp_f64("vcmpe.f64 d3, d22", d3, f2u0(2.0), f2u1(2.0), d22, f2u0(2.0), f2u1(2.0)); 1828 TESTINSN_cmp_f64("vcmpe.f64 d9, d2", d9, f2u0(INFINITY), f2u1(INFINITY), d2, f2u0(INFINITY), f2u1(INFINITY)); 1829 TESTINSN_cmp_f64("vcmpe.f64 d30, d15", d30, f2u0(-INFINITY), f2u1(-INFINITY), d15, f2u0(-INFINITY), f2u1(-INFINITY)); 1830 TESTINSN_cmp_f64("vcmpe.f64 d0, d19", d0, f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245)); 1831 TESTINSN_cmp_f64("vcmpe.f64 d11, d16", d11, f2u0(-5463.7), f2u1(-5463.7), d16, f2u0(-INFINITY), f2u1(-INFINITY)); 1832 TESTINSN_cmp_f64("vcmpe.f64 d21, d30", d21, f2u0(-INFINITY), f2u1(-INFINITY), d30, f2u0(86.7), f2u1(86.7)); 1833 TESTINSN_cmp_f64("vcmpe.f64 d7, d28", d7, f2u0(INFINITY), f2u1(INFINITY), d28, f2u0(-8567.456), f2u1(-8567.456)); 1834 TESTINSN_cmp_f64("vcmpe.f64 d29, d3", d29, f2u0(-524.4), f2u1(-524.4), d3, f2u0(654.5), f2u1(654.5)); 1835 TESTINSN_cmp_f64("vcmpe.f64 d3, d22", d3, f2u0(4624.5), f2u1(4624.5), d22, f2u0(-6.46524), f2u1(-6.46524)); 1836 TESTINSN_cmp_f64("vcmpe.f64 d9, d2", d9, f2u0(56.563), f2u1(56.563), d2, f2u0(56.56), f2u1(56.56)); 1837 TESTINSN_cmp_f64("vcmpe.f64 d30, d15", d30, f2u0(5365.60001), f2u1(5365.60001), d15, f2u0(56763.5), f2u1(56763.5)); 1838 1839 TESTINSN_cmp_f32("vcmp.f32 s0, s19", s0, f2u(-3.4567), s19, f2u(-2.6245)); 1840 TESTINSN_cmp_f32("vcmp.f32 s11, s16", s11, f2u(23475.45), s16, f2u(3425.5)); 1841 TESTINSN_cmp_f32("vcmp.f32 s3, s22", s3, f2u(2.0), s22, f2u(2.0)); 1842 TESTINSN_cmp_f32("vcmp.f32 s0, s19", s0, f2u(-3.4567), s19, f2u(-2.6245)); 1843 TESTINSN_cmp_f32("vcmp.f32 s11, s16", s11, f2u(23475.45), s16, f2u(3425.5)); 1844 TESTINSN_cmp_f32("vcmp.f32 s21, s30", s21, f2u(-4524.5), s30, f2u(-452345.5)); 1845 TESTINSN_cmp_f32("vcmp.f32 s7, s28", s7, f2u(425.5), s28, f2u(-456.3)); 1846 TESTINSN_cmp_f32("vcmp.f32 s29, s3", s29, f2u(INFINITY), s3, f2u(34562.45)); 1847 TESTINSN_cmp_f32("vcmp.f32 s3, s22", s3, f2u(12.023), s22, f2u(12.023)); 1848 TESTINSN_cmp_f32("vcmp.f32 s3, s22", s3, f2u(0.0), s22, f2u(0.0)); 1849 TESTINSN_cmp_f32("vcmp.f32 s9, s2", s9, f2u(INFINITY), s2, f2u(INFINITY)); 1850 TESTINSN_cmp_f32("vcmp.f32 s30, s15", s30, f2u(-INFINITY),s15, f2u(-INFINITY)); 1851 TESTINSN_cmp_f32("vcmp.f32 s0, s19", s0, f2u(-3.4567), s19, f2u(-2.6245)); 1852 TESTINSN_cmp_f32("vcmp.f32 s11, s16", s11, f2u(-5463.7), s16, f2u(-INFINITY)); 1853 TESTINSN_cmp_f32("vcmp.f32 s21, s30", s21, f2u(-INFINITY),s30, f2u(86.7)); 1854 TESTINSN_cmp_f32("vcmp.f32 s7, s28", s7, f2u(INFINITY), s28, f2u(-8567.456)); 1855 TESTINSN_cmp_f32("vcmp.f32 s29, s3", s29, f2u(-524.4), s3, f2u(654.5)); 1856 TESTINSN_cmp_f32("vcmp.f32 s3, s22", s3, f2u(NAN), s22, f2u(-6.46524)); 1857 TESTINSN_cmp_f32("vcmp.f32 s9, s2", s9, f2u(56.563), s2, f2u(56.56)); 1858 TESTINSN_cmp_f32("vcmp.f32 s30, s15", s30, f2u(5365.60001), s15, f2u(56763.5)); 1859 TESTINSN_cmp_f32("vcmpe.f32 s0, s19", s0, f2u(-3.4567), s19, f2u(-2.6245)); 1860 TESTINSN_cmp_f32("vcmpe.f32 s11, s16", s11, f2u(23475.45), s16, f2u(3425.5)); 1861 TESTINSN_cmp_f32("vcmpe.f32 s11, s16", s11, f2u(23475.45), s16, f2u(NAN)); 1862 TESTINSN_cmp_f32("vcmpe.f32 s21, s30", s21, f2u(-4524.5), s30, f2u(-452345.5)); 1863 TESTINSN_cmp_f32("vcmpe.f32 s7, s28", s7, f2u(425.5), s28, f2u(-456.3)); 1864 TESTINSN_cmp_f32("vcmpe.f32 s29, s3", s29, f2u(INFINITY), s3, f2u(34562.45)); 1865 TESTINSN_cmp_f32("vcmpe.f32 s3, s22", s3, f2u(2.0), s22, f2u(2.0)); 1866 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(INFINITY), s2, f2u(INFINITY)); 1867 TESTINSN_cmp_f32("vcmpe.f32 s30, s15", s30, f2u(-INFINITY), s15, f2u(-INFINITY)); 1868 TESTINSN_cmp_f32("vcmpe.f32 s0, s19", s0, f2u(-3.4567), s19, f2u(-2.6245)); 1869 TESTINSN_cmp_f32("vcmpe.f32 s11, s16", s11, f2u(-5463.7), s16, f2u(-INFINITY)); 1870 TESTINSN_cmp_f32("vcmpe.f32 s21, s30", s21, f2u(-INFINITY), s30, f2u(86.7)); 1871 TESTINSN_cmp_f32("vcmpe.f32 s7, s28", s7, f2u(INFINITY), s28, f2u(-8567.456)); 1872 TESTINSN_cmp_f32("vcmpe.f32 s29, s3", s29, f2u(-524.4), s3, f2u(654.5)); 1873 TESTINSN_cmp_f32("vcmpe.f32 s3, s22", s3, f2u(4624.5), s22, f2u(-6.46524)); 1874 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(56.563), s2, f2u(56.56)); 1875 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(0.0), s2, f2u(56.56)); 1876 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(10.0), s2, f2u(0.0)); 1877 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(0.0), s2, f2u(0.0)); 1878 TESTINSN_cmp_f32("vcmpe.f32 s9, s2", s9, f2u(0.0), s2, f2u(0.0)); 1879 1880 printf("---- VCMP (zero) ----\n"); 1881 TESTINSN_cmpz_f64("vcmp.f64 d0", d0, f2u0(-3.4567), f2u1(-3.4567)); 1882 TESTINSN_cmpz_f64("vcmp.f64 d11", d11, f2u0(23475.45), f2u1(23475.45)); 1883 TESTINSN_cmpz_f64("vcmp.f64 d21", d21, f2u0(-4524.5), f2u1(-4524.5)); 1884 TESTINSN_cmpz_f64("vcmp.f64 d7", d7, f2u0(425.5), f2u1(425.5)); 1885 TESTINSN_cmpz_f64("vcmp.f64 d29", d29, f2u0(INFINITY), f2u1(INFINITY)); 1886 TESTINSN_cmpz_f64("vcmp.f64 d3", d3, f2u0(2.0), f2u1(2.0)); 1887 TESTINSN_cmpz_f64("vcmp.f64 d3", d3, f2u0(0.0), f2u1(0.0)); 1888 TESTINSN_cmpz_f64("vcmp.f64 d9", d9, f2u0(INFINITY), f2u1(INFINITY)); 1889 TESTINSN_cmpz_f64("vcmp.f64 d30", d30, f2u0(-INFINITY), f2u1(-INFINITY)); 1890 TESTINSN_cmpz_f64("vcmp.f64 d0", d0, f2u0(-3.4567), f2u1(-3.4567)); 1891 TESTINSN_cmpz_f64("vcmp.f64 d11", d11, f2u0(-5463.7), f2u1(-5463.7)); 1892 TESTINSN_cmpz_f64("vcmp.f64 d21", d21, f2u0(-INFINITY), f2u1(-INFINITY)); 1893 TESTINSN_cmpz_f64("vcmp.f64 d7", d7, f2u0(INFINITY), f2u1(INFINITY)); 1894 TESTINSN_cmpz_f64("vcmp.f64 d29", d29, f2u0(-524.4), f2u1(-524.4)); 1895 TESTINSN_cmpz_f64("vcmp.f64 d3", d3, f2u0(4624.5), f2u1(4624.5)); 1896 TESTINSN_cmpz_f64("vcmp.f64 d9", d9, f2u0(NAN), f2u1(NAN)); 1897 TESTINSN_cmpz_f64("vcmp.f64 d30", d30, f2u0(5365.60001), f2u1(5365.60001)); 1898 1899 TESTINSN_cmpz_f64("vcmpe.f64 d0", d0, f2u0(-3.4567), f2u1(-3.4567)); 1900 TESTINSN_cmpz_f64("vcmpe.f64 d11", d11, f2u0(23475.45), f2u1(23475.45)); 1901 TESTINSN_cmpz_f64("vcmpe.f64 d21", d21, f2u0(-4524.5), f2u1(-4524.5)); 1902 TESTINSN_cmpz_f64("vcmpe.f64 d7", d7, f2u0(425.5), f2u1(425.5)); 1903 TESTINSN_cmpz_f64("vcmpe.f64 d29", d29, f2u0(INFINITY), f2u1(INFINITY)); 1904 TESTINSN_cmpz_f64("vcmpe.f64 d3", d3, f2u0(2.0), f2u1(2.0)); 1905 TESTINSN_cmpz_f64("vcmpe.f64 d3", d3, f2u0(0.0), f2u1(0.0)); 1906 TESTINSN_cmpz_f64("vcmpe.f64 d9", d9, f2u0(INFINITY), f2u1(INFINITY)); 1907 TESTINSN_cmpz_f64("vcmpe.f64 d30", d30, f2u0(-INFINITY), f2u1(-INFINITY)); 1908 TESTINSN_cmpz_f64("vcmpe.f64 d0", d0, f2u0(-3.4567), f2u1(-3.4567)); 1909 TESTINSN_cmpz_f64("vcmpe.f64 d11", d11, f2u0(-5463.7), f2u1(-5463.7)); 1910 TESTINSN_cmpz_f64("vcmpe.f64 d21", d21, f2u0(-INFINITY), f2u1(-INFINITY)); 1911 TESTINSN_cmpz_f64("vcmpe.f64 d7", d7, f2u0(INFINITY), f2u1(INFINITY)); 1912 TESTINSN_cmpz_f64("vcmpe.f64 d29", d29, f2u0(-524.4), f2u1(-524.4)); 1913 TESTINSN_cmpz_f64("vcmpe.f64 d3", d3, f2u0(4624.5), f2u1(4624.5)); 1914 TESTINSN_cmpz_f64("vcmpe.f64 d9", d9, f2u0(NAN), f2u1(NAN)); 1915 TESTINSN_cmpz_f64("vcmpe.f64 d30", d30, f2u0(5365.60001), f2u1(5365.60001)); 1916 1917 TESTINSN_cmpz_f32("vcmp.f32 s0", s0, f2u(-3.4567)); 1918 TESTINSN_cmpz_f32("vcmp.f32 s11", s11, f2u(23475.45)); 1919 TESTINSN_cmpz_f32("vcmp.f32 s21", s21, f2u(-4524.5)); 1920 TESTINSN_cmpz_f32("vcmp.f32 s7", s7, f2u(425.5)); 1921 TESTINSN_cmpz_f32("vcmp.f32 s29", s29, f2u(INFINITY)); 1922 TESTINSN_cmpz_f32("vcmp.f32 s3", s3, f2u(2.0)); 1923 TESTINSN_cmpz_f32("vcmp.f32 s3", s3, f2u(0.0)); 1924 TESTINSN_cmpz_f32("vcmp.f32 s9", s9, f2u(INFINITY)); 1925 TESTINSN_cmpz_f32("vcmp.f32 s30", s30, f2u(-INFINITY)); 1926 TESTINSN_cmpz_f32("vcmp.f32 s0", s0, f2u(-3.4567)); 1927 TESTINSN_cmpz_f32("vcmp.f32 s11", s11, f2u(-5463.7)); 1928 TESTINSN_cmpz_f32("vcmp.f32 s21", s21, f2u(-INFINITY)); 1929 TESTINSN_cmpz_f32("vcmp.f32 s7", s7, f2u(INFINITY)); 1930 TESTINSN_cmpz_f32("vcmp.f32 s29", s29, f2u(-524.4)); 1931 TESTINSN_cmpz_f32("vcmp.f32 s3", s3, f2u(4624.5)); 1932 TESTINSN_cmpz_f32("vcmp.f32 s9", s9, f2u(NAN)); 1933 TESTINSN_cmpz_f32("vcmp.f32 s30", s30, f2u(5365.60001)); 1934 TESTINSN_cmpz_f32("vcmpe.f32 s0", s0, f2u(-3.4567)); 1935 TESTINSN_cmpz_f32("vcmpe.f32 s11", s11, f2u(23475.45)); 1936 TESTINSN_cmpz_f32("vcmpe.f32 s21", s21, f2u(-4524.5)); 1937 TESTINSN_cmpz_f32("vcmpe.f32 s7", s7, f2u(425.5)); 1938 TESTINSN_cmpz_f32("vcmpe.f32 s29", s29, f2u(INFINITY)); 1939 TESTINSN_cmpz_f32("vcmpe.f32 s3", s3, f2u(2.0)); 1940 TESTINSN_cmpz_f32("vcmpe.f32 s3", s3, f2u(0.0)); 1941 TESTINSN_cmpz_f32("vcmpe.f32 s9", s9, f2u(INFINITY)); 1942 TESTINSN_cmpz_f32("vcmpe.f32 s30", s30, f2u(-INFINITY)); 1943 TESTINSN_cmpz_f32("vcmpe.f32 s0", s0, f2u(-3.4567)); 1944 TESTINSN_cmpz_f32("vcmpe.f32 s11", s11, f2u(-5463.7)); 1945 TESTINSN_cmpz_f32("vcmpe.f32 s21", s21, f2u(-INFINITY)); 1946 TESTINSN_cmpz_f32("vcmpe.f32 s7", s7, f2u(INFINITY)); 1947 TESTINSN_cmpz_f32("vcmpe.f32 s29", s29, f2u(-524.4)); 1948 TESTINSN_cmpz_f32("vcmpe.f32 s3", s3, f2u(4624.5)); 1949 TESTINSN_cmpz_f32("vcmpe.f32 s9", s9, f2u(NAN)); 1950 TESTINSN_cmpz_f32("vcmpe.f32 s30", s30, f2u(5365.60001)); 1951 1952 int numbers[8] ={ 0xaa0, 0xbb1, 0xcc2, 0xdd3, 0x11a, 0x22b, 0x33c, 0x44d }; 1953 1954 printf("---- VLDR ----\n"); 1955 TESTINSN_vldr_f64("vldr d9, [r6, #+4]", d9, r6, (long) numbers + 8, 4); 1956 TESTINSN_vldr_f64("vldr d16, [r9, #-4]", d16, r9, (long) numbers + 8, -4); 1957 TESTINSN_vldr_f64("vldr d30, [r12]", d30, r12, (long) numbers + 8, 0); 1958 TESTINSN_vldr_f64("vldr d22, [r9, #+8]", d22, r9, (long) numbers + 8, 8); 1959 TESTINSN_vldr_f64("vldr d29, [r2, #-8]", d29, r2, (long) numbers + 8, -8); 1960 TESTINSN_vldr_f64("vldr d8, [r8, #+8]", d8, r8, (long) numbers + 8, 8); 1961 TESTINSN_vldr_f64("vldr d11, [r12, #-4]", d11, r12, (long) numbers + 8, -4); 1962 TESTINSN_vldr_f64("vldr d18, [r3]", d18, r3, (long) numbers + 8, 0); 1963 TESTINSN_vldr_f64("vldr d5, [r10, #+8]", d5, r10, (long) numbers + 8, 8); 1964 TESTINSN_vldr_f64("vldr d17, [r10]", d17, r10, (long) numbers + 8, 0); 1965 TESTINSN_vldr_f64("vldr d9, [r9, #-4]", d9, r9, (long) numbers + 8, -4); 1966 TESTINSN_vldr_f64("vldr d29, [r4, #-8]", d29, r4, (long) numbers + 8, -8); 1967 TESTINSN_vldr_f64("vldr d21, [r6, #+4]", d21, r6, (long) numbers + 8, 4); 1968 TESTINSN_vldr_f64("vldr d8, [r4]", d8, r4, (long) numbers + 8, 0); 1969 TESTINSN_vldr_f64("vldr d19, [r0, #-8]", d19, r0, (long) numbers + 8, -8); 1970 TESTINSN_vldr_f64("vldr d10, [r3, #+4]", d10, r3, (long) numbers + 8, 4); 1971 TESTINSN_vldr_f32("vldr s10, [r3, #+4]", s10, r3, (long) numbers + 8, 4); 1972 TESTINSN_vldr_f32("vldr s9, [r6, #+4]", s9, r6, (long) numbers + 8, 4); 1973 TESTINSN_vldr_f32("vldr s16, [r9, #-4]", s16, r9, (long) numbers + 8, -4); 1974 TESTINSN_vldr_f32("vldr s30, [r12]", s30, r12, (long) numbers + 8, 0); 1975 TESTINSN_vldr_f32("vldr s22, [r9, #+8]", s22, r9, (long) numbers + 8, 8); 1976 TESTINSN_vldr_f32("vldr s29, [r2, #-8]", s29, r2, (long) numbers + 8, -8); 1977 TESTINSN_vldr_f32("vldr s8, [r8, #+8]", s8, r8, (long) numbers + 8, 8); 1978 TESTINSN_vldr_f32("vldr s11, [r12, #-4]", s11, r12, (long) numbers + 8, -4); 1979 TESTINSN_vldr_f32("vldr s18, [r3]", s18, r3, (long) numbers + 8, 0); 1980 TESTINSN_vldr_f32("vldr s5, [r10, #+8]", s5, r10, (long) numbers + 8, 8); 1981 TESTINSN_vldr_f32("vldr s17, [r10]", s17, r10, (long) numbers + 8, 0); 1982 TESTINSN_vldr_f32("vldr s9, [r9, #-4]", s9, r9, (long) numbers + 8, -4); 1983 TESTINSN_vldr_f32("vldr s29, [r4, #-8]", s29, r4, (long) numbers + 8, -8); 1984 TESTINSN_vldr_f32("vldr s21, [r6, #+4]", s21, r6, (long) numbers + 8, 4); 1985 TESTINSN_vldr_f32("vldr s8, [r4]", s8, r4, (long) numbers + 8, 0); 1986 TESTINSN_vldr_f32("vldr s19, [r0, #-8]", s19, r0, (long) numbers + 8, -8); 1987 TESTINSN_vldr_f32("vldr s10, [r3, #+4]", s10, r3, (long) numbers + 8, 4); 1988 1989 printf("---- VLDM (Increment After, writeback) ----\n"); 1990 TESTINSN_VLDMIAWB(r6, d17, d7); 1991 TESTINSN_VLDMIAWB(r4, d11, d23); 1992 TESTINSN_VLDMIAWB(r9, d29, d12); 1993 TESTINSN_VLDMIAWB(r9, d0, d30); 1994 TESTINSN_VLDMIAWB(r12, d8, d24); 1995 TESTINSN_VLDMIAWB(r3, d27, d13); 1996 TESTINSN_VLDMIAWB(r10, d20, d30); 1997 TESTINSN_VLDMIAWB(r0, d0, d1); 1998 TESTINSN_VLDMIAWB(r8, d15, d19); 1999 TESTINSN_VLDMIAWB(r3, d31, d30); 2000 TESTINSN_VLDMIAWB(r10, d6, d23); 2001 TESTINSN_VLDMIAWB(r8, d8, d16); 2002 TESTINSN_VLDMIAWB(r9, d13, d11); 2003 TESTINSN_VLDMIAWB(r1, d3, d8); 2004 TESTINSN_VLDMIAWB(r2, d4, d8); 2005 TESTINSN_VLDMIAWB(r3, d9, d27); 2006 2007 printf("---- VSTR ----\n"); 2008 TESTINSN_vstr64("vstr d9, [r6, #+4]", d9, 0xa0, r6, (long) numbers + 8, 4); 2009 TESTINSN_vstr64("vstr d16, [r9, #-4]", d16, 0xb1, r9, (long) numbers + 8, -4); 2010 TESTINSN_vstr64("vstr d30, [r12]", d30, 0xc2, r12, (long) numbers + 8, 0); 2011 TESTINSN_vstr64("vstr d22, [r9, #+8]", d22, 0xd4, r9, (long) numbers + 8, 8); 2012 TESTINSN_vstr64("vstr d29, [r2, #-8]", d29, 0x00, r2, (long) numbers + 8, -8); 2013 TESTINSN_vstr64("vstr d8, [r8, #+8]", d8, 0x11, r8, (long) numbers + 8, 8); 2014 TESTINSN_vstr64("vstr d11, [r12, #-4]", d11, 0x22, r12, (long) numbers + 8, -4); 2015 TESTINSN_vstr64("vstr d18, [r3]", d18, 0x33, r3, (long) numbers + 8, 0); 2016 TESTINSN_vstr64("vstr d5, [r10, #+8]", d5, 0x99, r10, (long) numbers + 8, 8); 2017 TESTINSN_vstr64("vstr d17, [r10]", d17, 0x77, r10, (long) numbers + 8, 0); 2018 TESTINSN_vstr64("vstr d9, [r9, #-4]", d9, 0xee, r9, (long) numbers + 8, -4); 2019 TESTINSN_vstr64("vstr d29, [r4, #-8]", d29, 0xff, r4, (long) numbers + 8, -8); 2020 TESTINSN_vstr64("vstr d10, [r3, #+4]", d10, 0xbc, r3, (long) numbers + 8, 4); 2021 TESTINSN_vstr64("vstr d21, [r6, #+4]", d21, 0x48, r6, (long) numbers + 8, 4); 2022 TESTINSN_vstr64("vstr d8, [r4]", d8, 0x1f, r4, (long) numbers + 8, 0); 2023 TESTINSN_vstr64("vstr d19, [r0, #-8]", d19, 0xf9, r0, (long) numbers + 8, -8); 2024 TESTINSN_vstr32("vstr s9, [r6, #+4]", s9, r6, (long) numbers + 8, 4); 2025 TESTINSN_vstr32("vstr s21, [r9, #-4]", s21, r9, (long) numbers + 8, -4); 2026 TESTINSN_vstr32("vstr s4, [r3, #+8]", s4, r3, (long) numbers + 8, 8); 2027 TESTINSN_vstr32("vstr s19, [r4, #-8]", s19, r4, (long) numbers + 8, -8); 2028 TESTINSN_vstr32("vstr s29, [r8]", s29, r8, (long) numbers + 8, 0); 2029 TESTINSN_vstr32("vstr s8, [r12]", s8, r12, (long) numbers + 8, 0); 2030 TESTINSN_vstr32("vstr s16, [r0, #+4]", s16, r0, (long) numbers + 8, 4); 2031 TESTINSN_vstr32("vstr s0, [r8, #-4]", s0, r8, (long) numbers + 8, -4); 2032 TESTINSN_vstr32("vstr s3, [r9, #+8]", s3, r9, (long) numbers + 8, 8); 2033 TESTINSN_vstr32("vstr s9, [r10, #-8]", s9, r10, (long) numbers + 8, -8); 2034 TESTINSN_vstr32("vstr s11, [r2]", s11, r2, (long) numbers + 8, 0); 2035 TESTINSN_vstr32("vstr s30, [r0]", s30, r0, (long) numbers + 8, 0); 2036 2037 printf("---- VSTM (Increment After, no writeback) ----\n"); 2038 TESTINSN_VSTMIAnoWB("vstmia r6, {d21}", r6, d21, 0xab); 2039 TESTINSN_VSTMIAnoWB("vstmia r1, {d1}", r1, d1, 0x13); 2040 TESTINSN_VSTMIAnoWB("vstmia r9, {d2}", r9, d2, 0x78); 2041 TESTINSN_VSTMIAnoWB("vstmia r4, {d30}", r4, d30, 0x0); 2042 TESTINSN_VSTMIAnoWB("vstmia r12, {d23}", r12, d23, 0xb9); 2043 TESTINSN_VSTMIAnoWB("vstmia r6, {d16}", r6, d16, 0xa6); 2044 TESTINSN_VSTMIAnoWB("vstmia r6, {d8}", r6, d8, 0x7f); 2045 TESTINSN_VSTMIAnoWB("vstmia r6, {d27}", r6, d27, 0xff); 2046 TESTINSN_VSTMIAnoWB("vstmia r5, {d11}", r5, d11, 0x32); 2047 TESTINSN_VSTMIAnoWB("vstmia r6, {d4}", r6, d4, 0x10); 2048 TESTINSN_VSTMIAnoWB("vstmia r10, {d9}", r10, d9, 0x4f); 2049 TESTINSN_VSTMIAnoWB("vstmia r9, {d29}", r9, d29, 0x97); 2050 TESTINSN_VSTMIAnoWB("vstmia r10, {d17}", r10, d17, 0xaa); 2051 TESTINSN_VSTMIAnoWB("vstmia r5, {d5}", r5, d5, 0x2b); 2052 TESTINSN_VSTMIAnoWB("vstmia r9, {d7}", r9, d7, 0x7b); 2053 TESTINSN_VSTMIAnoWB("vstmia r3, {d16}", r3, d16, 0x11); 2054 TESTINSN_VSTMIAnoWB32("vstmia r6, {s21}", r6, s21, 0xab); 2055 TESTINSN_VSTMIAnoWB32("vstmia r1, {s1}", r1, s1, 0x13); 2056 TESTINSN_VSTMIAnoWB32("vstmia r9, {s2}", r9, s2, 0x78); 2057 TESTINSN_VSTMIAnoWB32("vstmia r4, {s30}", r4, s30, 0x0); 2058 TESTINSN_VSTMIAnoWB32("vstmia r12, {s23}", r12, s23, 0xb9); 2059 TESTINSN_VSTMIAnoWB32("vstmia r6, {s16}", r6, s16, 0xa613451d); 2060 TESTINSN_VSTMIAnoWB32("vstmia r6, {s8}", r6, s8, 0x7f); 2061 TESTINSN_VSTMIAnoWB32("vstmia r6, {s27}", r6, s27, f2u(-INFINITY)); 2062 TESTINSN_VSTMIAnoWB32("vstmia r5, {s11}", r5, s11, f2u(NAN)); 2063 TESTINSN_VSTMIAnoWB32("vstmia r6, {s4}", r6, s4, 0x10ccb); 2064 TESTINSN_VSTMIAnoWB32("vstmia r10, {s9}", r10, s9, 0x4f543); 2065 TESTINSN_VSTMIAnoWB32("vstmia r9, {s29}", r9, s29, 0x97001a); 2066 TESTINSN_VSTMIAnoWB32("vstmia r10, {s17}", r10, s17, 0xaa45f); 2067 TESTINSN_VSTMIAnoWB32("vstmia r5, {s5}", r5, s5, f2u(NAN)); 2068 TESTINSN_VSTMIAnoWB32("vstmia r9, {s7}", r9, s7, f2u(-INFINITY)); 2069 TESTINSN_VSTMIAnoWB32("vstmia r3, {s16}", r3, s16, f2u(INFINITY)); 2070 2071 printf("---- VSTM (Increment After, writeback) ----\n"); 2072 TESTINSN_VSTMIAWB(r6, d21, d2); 2073 TESTINSN_VSTMIAWB(r1, d1, d5); 2074 TESTINSN_VSTMIAWB(r9, d2, d17); 2075 TESTINSN_VSTMIAWB(r4, d30, d21); 2076 TESTINSN_VSTMIAWB(r12, d23, d29); 2077 TESTINSN_VSTMIAWB(r6, d16, d30); 2078 TESTINSN_VSTMIAWB(r6, d8, d12); 2079 TESTINSN_VSTMIAWB(r6, d27, d24); 2080 TESTINSN_VSTMIAWB(r5, d11, d13); 2081 TESTINSN_VSTMIAWB(r6, d4, d31); 2082 TESTINSN_VSTMIAWB(r10, d9, d27); 2083 TESTINSN_VSTMIAWB(r9, d29, d17); 2084 TESTINSN_VSTMIAWB(r10, d17, d7); 2085 TESTINSN_VSTMIAWB(r5, d5, d8); 2086 TESTINSN_VSTMIAWB(r9, d7, d16); 2087 TESTINSN_VSTMIAWB(r3, d16, d21); 2088 TESTINSN_VSTMIAWB32(r6, s21, s2); 2089 TESTINSN_VSTMIAWB32(r12, s23, s21); 2090 TESTINSN_VSTMIAWB32(r3, s3, s3); 2091 TESTINSN_VSTMIAWB32(r10, s19, s5); 2092 TESTINSN_VSTMIAWB32(r2, s3, s12); 2093 TESTINSN_VSTMIAWB32(r8, s7, s10); 2094 TESTINSN_VSTMIAWB32(r4, s30, s13); 2095 TESTINSN_VSTMIAWB32(r6, s17, s17); 2096 TESTINSN_VSTMIAWB32(r9, s11, s21); 2097 TESTINSN_VSTMIAWB32(r9, s8, s30); 2098 TESTINSN_VSTMIAWB32(r3, s12, s9); 2099 TESTINSN_VSTMIAWB32(r6, s6, s11); 2100 TESTINSN_VSTMIAWB32(r8, s17, s12); 2101 TESTINSN_VSTMIAWB32(r9, s12, s12); 2102 TESTINSN_VSTMIAWB32(r4, s11, s11); 2103 2104 printf("---- VLDM (Decrement Before) ----\n"); 2105 TESTINSN_VLDMDB(r4, d11, d23); 2106 TESTINSN_VLDMDB(r9, d29, d12); 2107 TESTINSN_VLDMDB(r9, d0, d30); 2108 TESTINSN_VLDMDB(r12, d8, d24); 2109 TESTINSN_VLDMDB(r3, d27, d13); 2110 TESTINSN_VLDMDB(r6, d17, d7); 2111 TESTINSN_VLDMDB(r10, d20, d30); 2112 TESTINSN_VLDMDB(r0, d0, d1); 2113 TESTINSN_VLDMDB(r8, d15, d19); 2114 TESTINSN_VLDMDB(r3, d31, d30); 2115 TESTINSN_VLDMDB(r10, d6, d23); 2116 TESTINSN_VLDMDB(r8, d8, d16); 2117 TESTINSN_VLDMDB(r9, d13, d11); 2118 TESTINSN_VLDMDB(r1, d3, d8); 2119 TESTINSN_VLDMDB(r2, d4, d8); 2120 TESTINSN_VLDMDB(r3, d9, d27); 2121 2122 printf("----- VMOV (immediate) -----\n"); 2123 TESTINSN_vmovf32_imm("vmov s0", s0, 0xbe880000); 2124 TESTINSN_vmovf32_imm("vmov s1", s1, 0x3fa80000); 2125 TESTINSN_vmovf32_imm("vmov s2", s2, 0xbf080000); 2126 TESTINSN_vmovf32_imm("vmov s5", s5, 0x3eb80000); 2127 TESTINSN_vmovf32_imm("vmov s7", s7, 0xbff80000); 2128 TESTINSN_vmovf32_imm("vmov s10", s10, 0xbe280000); 2129 TESTINSN_vmovf32_imm("vmov s12", s12, 0x40000000); 2130 TESTINSN_vmovf32_imm("vmov s13", s13, 0x3e880000); 2131 TESTINSN_vmovf32_imm("vmov s14", s14, 0xbee80000); 2132 TESTINSN_vmovf32_imm("vmov s15", s15, 0xc0b80000); 2133 2134 printf("----- VMOV (ARM core register and single register) -----\n"); 2135 TESTINSN_vmov_core_single("vmov r12, s12", r12, s12, 0x4000aad); 2136 TESTINSN_vmov_core_single("vmov r2, s5", r2, s5, 0xab45e7); 2137 TESTINSN_vmov_core_single("vmov r5, s15", r5, s15, 0x00add12); 2138 TESTINSN_vmov_core_single("vmov r8, s11", r8, s11, 0x876450ff); 2139 TESTINSN_vmov_core_single("vmov r9, s5", r9, s5, 0xffff); 2140 TESTINSN_vmov_core_single("vmov r10, s9", r10, s9, 0x87d34f); 2141 TESTINSN_vmov_core_single("vmov r9, s10", r9, s10, 0x00ffff); 2142 TESTINSN_vmov_core_single("vmov r6, s8", r6, s8, 0xad4f8); 2143 TESTINSN_vmov_core_single("vmov r4, s14", r4, s14, 0x920b8cf); 2144 TESTINSN_vmov_core_single("vmov r3, s7", r3, s7, f2u(NAN)); 2145 TESTINSN_vmov_core_single("vmov r2, s0", r2, s0, f2u(-INFINITY)); 2146 TESTINSN_vmov_core_single("vmov r0, s1", r0, s1, f2u(INFINITY)); 2147 TESTINSN_vmov_single_core("vmov s2, r9", s2, r9, 0x9465a); 2148 TESTINSN_vmov_single_core("vmov s14, r0", s14, r0, 0xd0b87a); 2149 TESTINSN_vmov_single_core("vmov s4, r2", s4, r2, 0x452bbc8); 2150 TESTINSN_vmov_single_core("vmov s7, r8", s7, r8, 0xa7cb3d); 2151 TESTINSN_vmov_single_core("vmov s9, r4", s9, r4, 0xdd8ec); 2152 TESTINSN_vmov_single_core("vmov s10, r12", s10, r12, 0x8a7b6e); 2153 TESTINSN_vmov_single_core("vmov s13, r9", s13, r9, 0x4b00a); 2154 TESTINSN_vmov_single_core("vmov s3, r3", s3, r3, 0x0023455); 2155 TESTINSN_vmov_single_core("vmov s5, r5", s5, r5, f2u(INFINITY)); 2156 TESTINSN_vmov_single_core("vmov s8, r6", s8, r6, f2u(-INFINITY)); 2157 TESTINSN_vmov_single_core("vmov s4, r0", s4, r0, 0x000acb45); 2158 TESTINSN_vmov_single_core("vmov s0, r6", s0, r6, f2u(NAN)); 2159 2160 printf("----- VMOV (ARM two core registers and two single registers) -----\n"); 2161 TESTINSN_vmov_2single_2core("vmov s0, s1, r6, r9", s0, s1, r6, r9, 0x43252acc, 0xabcc4); 2162 TESTINSN_vmov_2single_2core("vmov s0, s1, r9, r9", s0, s1, r9, r9, 0x43252acc, 0xabcc4); 2163 TESTINSN_vmov_2single_2core("vmov s30, s31, r9, r1", s30, s31, r9, r1, 0xaa2e2acc, 0x00337); 2164 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(NAN)); 2165 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(INFINITY)); 2166 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(-INFINITY)); 2167 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(0)); 2168 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(NAN)); 2169 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(INFINITY)); 2170 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(-INFINITY)); 2171 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(0)); 2172 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(NAN)); 2173 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(INFINITY)); 2174 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(-INFINITY)); 2175 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(0)); 2176 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(NAN)); 2177 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(INFINITY)); 2178 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(-INFINITY)); 2179 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(0)); 2180 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN) + 1, f2u(NAN)); 2181 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN) + 1, f2u(0)); 2182 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(NAN) - 1); 2183 TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(NAN) - 1); 2184 TESTINSN_vmov_2core_2single("vmov r12, r9, s12, s13", r12, r9, s12, s13, 0x4000aad, 0xaffff); 2185 TESTINSN_vmov_2core_2single("vmov r0, r9, s12, s13", r0, r9, s12, s13, 0x40ee56d, 0x123ff); 2186 TESTINSN_vmov_2core_2single("vmov r12, r9, s12, s13", r12, r9, s12, s13, 0x4000aad, 0xaffff); 2187 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(NAN)); 2188 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(INFINITY)); 2189 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(-INFINITY)); 2190 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(0)); 2191 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(NAN)); 2192 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(INFINITY)); 2193 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(-INFINITY)); 2194 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(0)); 2195 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(NAN)); 2196 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(INFINITY)); 2197 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(-INFINITY)); 2198 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(0)); 2199 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(NAN)); 2200 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(INFINITY)); 2201 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(-INFINITY)); 2202 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(0)); 2203 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN) + 1, f2u(NAN)); 2204 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN) + 1, f2u(0)); 2205 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(NAN) - 1); 2206 TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(NAN) - 1); 2207 2208 printf("----- VMOV (ARM two core registers and double register) -----\n"); 2209 TESTINSN_vmov_double_2core("vmov d3, r6, r9", d3, r6, r9, 0x43252acc, 0x45bbd); 2210 TESTINSN_vmov_double_2core("vmov d4, r10, r2", d4, r10, r2, 0x1243b4, 0x237ffb); 2211 TESTINSN_vmov_double_2core("vmov d21, r1, r6", d21, r1, r6, 0x30cc4, 0x314c043); 2212 TESTINSN_vmov_double_2core("vmov d30, r9, r9", d30, r9, r9, 0x08ddf, 0x87bbca); 2213 TESTINSN_vmov_double_2core("vmov d29, r3, r5", d29, r3, r5, 0xaaa0, 0xbbb1); 2214 TESTINSN_vmov_double_2core("vmov d16, r8, r8", d16, r8, r8, 0xaa455bb, 0x13434); 2215 TESTINSN_vmov_double_2core("vmov d17, r12, r9", d17, r12, r9, 0x004003, 0x452bbc1); 2216 TESTINSN_vmov_double_2core("vmov d9, r9, r0", d9, r9, r0, 0x134c, 0x41ffb6); 2217 TESTINSN_vmov_double_2core("vmov d7, r0, r6", d7, r0, r6, 0x35425dcc, 0x0876c43); 2218 TESTINSN_vmov_double_2core("vmov d13, r3, r9", d13, r3, r9, f2u0(NAN), f2u1(NAN)); 2219 TESTINSN_vmov_double_2core("vmov d19, r6, r5", d19, r6, r5, f2u0(INFINITY), f2u1(INFINITY)); 2220 TESTINSN_vmov_double_2core("vmov d0, r2, r6", d0, r2, r6, f2u0(-INFINITY), f2u1(-INFINITY)); 2221 2222 TESTINSN_vmov_2core_double("vmov r3, r6, d9", r3, r6, d9, 0x43252acc, 0x45bbd); 2223 TESTINSN_vmov_2core_double("vmov r4, r10, d2", r4, r10, d2, 0x1243b4, 0x237ffb); 2224 TESTINSN_vmov_2core_double("vmov r2, r1, d6", r2, r1, d6, 0x30cc4, 0x314c043); 2225 TESTINSN_vmov_2core_double("vmov r0, r9, d11", r0, r9, d11, 0x08ddf, 0x87bbca); 2226 TESTINSN_vmov_2core_double("vmov r9, r3, d5", r9, r3, d5, 0xaaa0, 0xbbb1); 2227 TESTINSN_vmov_2core_double("vmov r10, r8, d8", r10, r8, d8, 0xaa455bb, 0x13434); 2228 TESTINSN_vmov_2core_double("vmov r9, r12, d11", r9, r12, d11, 0x004003, 0x452bbc1); 2229 2230 // ARM ARM says this is UNDEFINED, hence we don't decode it 2231 //TESTINSN_vmov_2core_double("vmov r9, r9, d0", r9, r9, d0, 0x134c, 0x41ffb6); 2232 2233 TESTINSN_vmov_2core_double("vmov r6, r0, d7", r6, r0, d7, 0x35425dcc, 0x0876c43); 2234 TESTINSN_vmov_2core_double("vmov r12, r3, d11", r12, r3, d11, f2u0(NAN), f2u1(NAN)); 2235 TESTINSN_vmov_2core_double("vmov r1, r6, d5", r1, r6, d5, f2u0(INFINITY), f2u1(INFINITY)); 2236 TESTINSN_vmov_2core_double("vmov r0, r2, d7", r0, r2, d7, f2u0(-INFINITY), f2u1(-INFINITY)); 2237 2238 TESTINSN_vmov_2core_double("vmov r2, r9, d0", r2, r9, d0, f2u0(INFINITY), f2u1(INFINITY)); 2239 TESTINSN_vmov_2core_double("vmov r6, r9, d10", r6, r9, d10, 0x14534c, 0x41ffb6); 2240 TESTINSN_vmov_2core_double("vmov r0, r9, d20", r0, r9, d20, f2u0(NAN), f2u1(NAN)); 2241 2242 printf("----- VPUSH, VPOP -----\n"); 2243 TESTINSN_vpush_vpop_f32(s3, 0x00aaaaaa, s4, 0x00bbbbbb, s5, 0x00cccccc, s0, s1, s2); 2244 TESTINSN_vpush_vpop_f32(s1, 0x000134f4, s2, 0x0870ccb3, s3, 0x00aba0f1, s9, s10, s11); 2245 TESTINSN_vpush_vpop_f32(s3, 0x00dddddd, s4, 0x00eeeeee, s5, 0x00ffffff, s0, s1, s2); 2246 TESTINSN_vpush_vpop_f32(s11, 0x13454c, s12, 0x341, s13, 0xaac45f, s6, s7, s8); 2247 TESTINSN_vpush_vpop_f32(s21, 0x0, s22, f2u(NAN), s23, f2u(INFINITY), s23, s24, s25); 2248 TESTINSN_vpush_vpop_f32(s12, 0xffffff, s13, 0xf542dd4, s14, f2u(-INFINITY), s11, s12, s13); 2249 TESTINSN_vpush_vpop_f32(s25, 0x45cd, s26, 0xa3ccb5, s27, 0xbbcaf, s0, s1, s2); 2250 TESTINSN_vpush_vpop_f32(s1, f2u(NAN), s2, 0xaaca3, s3, 0x876008, s6, s7, s8); 2251 TESTINSN_vpush_vpop_f32(s9, 0x2f43, s10, f2u(INFINITY), s11, 0x3cc66a, s9, s10, s11); 2252 TESTINSN_vpush_vpop_f32(s10, f2u(INFINITY), s11, 0x134cc5, s12, f2u(NAN), s2, s3, s4); 2253 TESTINSN_vpush_vpop_f32(s7, 0xcc006d, s8, 0x1308c, s9, 0xabbc45, s21, s22, s23); 2254 TESTINSN_vpush_vpop_f32(s19, f2u(-INFINITY), s20, 0x452146, s21, 0x388bbc, s4, s5, s6); 2255 TESTINSN_vpush_vpop_f32(s16, 0x542aa, s17, 0xaddcd5, s18, 0x87acc, s18, s19, s20); 2256 TESTINSN_vpush_vpop_f32(s22, 0x5ccb708, s23, 0x52345c, s24, 0x98745c, s12, s13, s14); 2257 TESTINSN_vpush_vpop_f32(s24, 0x99234f, s25, 0x1aac, s26, 0x3746c, s28, s29, s30); 2258 TESTINSN_vpush_vpop_f32(s13, 0x134ccc, s14, 0x6bb43, s15, 0x834aa, s0, s1, s2); 2259 TESTINSN_vpush_vpop_f64(d3, 0x00aaaaaa, 0xaac3, d4, 0x00bbbbbb, 0x34ccb, d0, d1); 2260 TESTINSN_vpush_vpop_f64(d1, 0x000134f4, 0x341531, d2, 0x0870ccb3, 0x4576bbc, d9, d10); 2261 TESTINSN_vpush_vpop_f64(d3, 0x00dddddd, 0x13451cc, d4, 0x00eeeeee, 0x123ddc8, d0, d1); 2262 TESTINSN_vpush_vpop_f64(d11, 0x13454c, 0x541bbc3, d12, 0x341, 0xccb5, d6, d7); 2263 TESTINSN_vpush_vpop_f64(d21, 0x0, 0x123c33, d22, f2u0(NAN), f2u1(NAN), d23, d24); 2264 TESTINSN_vpush_vpop_f64(d12, 0xffffff, 0x1940c, d13, 0xf542dd4, 0x788ffc, d11, d12); 2265 TESTINSN_vpush_vpop_f64(d25, 0x45cd, 0x1309c, d26, 0xa3ccb5, 0x4588b, d0, d1); 2266 TESTINSN_vpush_vpop_f64(d1, f2u0(NAN), f2u1(NAN), d2, 0xaaca3, 0x1120a, d6, d7); 2267 TESTINSN_vpush_vpop_f64(d9, 0x2f43, 0x19ff9, d10, f2u0(INFINITY), f2u1(INFINITY), d9, d10); 2268 TESTINSN_vpush_vpop_f64(d10, f2u0(INFINITY), f2u1(INFINITY), d11, 0x134cc5, 0x78cbbd, d2, d3); 2269 TESTINSN_vpush_vpop_f64(d7, 0xcc006d, 0x28354, d8, 0x1308c, 0x1993bc, d21, d22); 2270 TESTINSN_vpush_vpop_f64(d19, f2u0(-INFINITY), f2u1(-INFINITY), d20, 0x452146, 0x138476c, d4, d5); 2271 TESTINSN_vpush_vpop_f64(d16, 0x542aa, 0x12dd4, d17, 0xaddcd5, 0x399cb, d18, d19); 2272 TESTINSN_vpush_vpop_f64(d22, 0x5ccb708, 0x8009c, d23, 0x52345c, 0x29902c, d12, d13); 2273 TESTINSN_vpush_vpop_f64(d24, 0x99234f, 0x3457ff, d25, 0x1aac, 0x1002cba, d28, d29); 2274 TESTINSN_vpush_vpop_f64(d13, 0x134ccc, 0xfaa309, d14, 0x6bb43, 0x199cb, d0, d1); 2275 2276 return 0; 2277 } 2278