1! { dg-do run } 2 3program main 4 integer, parameter :: N = 32 5 integer igot, iexp, itmp 6 integer, dimension (0:N) :: iarr 7 real fgot, fexp, ftmp 8 real, dimension (0:N) :: farr 9 logical lgot, lexp, ltmp 10 11 igot = 0 12 iexp = N * 2 13 14 !$acc parallel copy (igot, itmp) 15 do i = 1, N 16 !$acc atomic capture 17 itmp = igot 18 igot = i + i 19 !$acc end atomic 20 end do 21 !$acc end parallel 22 23 if (igot /= iexp) STOP 1 24 if (itmp /= iexp - 2) STOP 2 25 26 fgot = 1234.0 27 fexp = 1266.0 28 29 !$acc parallel loop copy (fgot, ftmp) 30 do i = 1, N 31 !$acc atomic capture 32 farr(i) = fgot 33 fgot = fgot + 1.0 34 !$acc end atomic 35 end do 36 !$acc end parallel loop 37 38 do i = 1, N 39 if (.not. & 40 (1234.0 <= farr(i) .and. farr(i) < fexp & 41 .and. aint (farr(i)) == farr(i))) STOP 3 42 end do 43 if (fgot /= fexp) STOP 4 44 45 fgot = 1.0 46 fexp = 2.0**32 47 48 !$acc parallel loop copy (fgot, ftmp) 49 do i = 1, N 50 !$acc atomic capture 51 farr(i) = fgot 52 fgot = fgot * 2.0 53 !$acc end atomic 54 end do 55 !$acc end parallel loop 56 57 do i = 1, N 58 if (.not. & 59 (1.0 <= farr(i) .and. farr(i) < fexp & 60 .and. aint (farr(i)) == farr(i))) STOP 5 61 end do 62 if (fgot /= fexp) STOP 6 63 64 fgot = 32.0 65 fexp = fgot - N 66 67 !$acc parallel loop copy (fgot, ftmp) 68 do i = 1, N 69 !$acc atomic capture 70 farr(i) = fgot 71 fgot = fgot - 1.0 72 !$acc end atomic 73 end do 74 !$acc end parallel loop 75 76 do i = 1, N 77 if (.not. & 78 (fexp < farr(i) .and. farr(i) <= 32.0 & 79 .and. aint (farr(i)) == farr(i))) STOP 7 80 end do 81 if (fgot /= fexp) STOP 8 82 83 fgot = 2**32.0 84 fexp = 1.0 85 86 !$acc parallel loop copy (fgot, ftmp) 87 do i = 1, N 88 !$acc atomic capture 89 farr(i) = fgot 90 fgot = fgot / 2.0 91 !$acc end atomic 92 end do 93 !$acc end parallel loop 94 95 do i = 1, N 96 if (.not. & 97 (fexp < farr(i) .and. farr(i) <= 2**32.0 & 98 .and. aint (farr(i)) == farr(i))) STOP 9 99 end do 100 if (fgot /= fexp) STOP 10 101 102 lgot = .TRUE. 103 lexp = .FALSE. 104 105 !$acc parallel copy (lgot, ltmp) 106 !$acc atomic capture 107 ltmp = lgot 108 lgot = lgot .and. .FALSE. 109 !$acc end atomic 110 !$acc end parallel 111 112 if (ltmp .neqv. .not. lexp) STOP 11 113 if (lgot .neqv. lexp) STOP 12 114 115 lgot = .FALSE. 116 lexp = .FALSE. 117 118 !$acc parallel copy (lgot, ltmp) 119 !$acc atomic capture 120 ltmp = lgot 121 lgot = lgot .or. .FALSE. 122 !$acc end atomic 123 !$acc end parallel 124 125 if (ltmp .neqv. lexp) STOP 13 126 if (lgot .neqv. lexp) STOP 14 127 128 lgot = .FALSE. 129 lexp = .FALSE. 130 131 !$acc parallel copy (lgot, ltmp) 132 !$acc atomic capture 133 ltmp = lgot 134 lgot = lgot .eqv. .TRUE. 135 !$acc end atomic 136 !$acc end parallel 137 138 if (ltmp .neqv. lexp) STOP 15 139 if (lgot .neqv. lexp) STOP 16 140 141 lgot = .FALSE. 142 lexp = .TRUE. 143 144 !$acc parallel copy (lgot, ltmp) 145 !$acc atomic capture 146 ltmp = lgot 147 lgot = lgot .neqv. .TRUE. 148 !$acc end atomic 149 !$acc end parallel 150 151 if (ltmp .neqv. .not. lexp) STOP 17 152 if (lgot .neqv. lexp) STOP 18 153 154 fgot = 1234.0 155 fexp = 1266.0 156 157 !$acc parallel loop copy (fgot, ftmp) 158 do i = 1, N 159 !$acc atomic capture 160 farr(i) = fgot 161 fgot = 1.0 + fgot 162 !$acc end atomic 163 end do 164 !$acc end parallel loop 165 166 do i = 1, N 167 if (.not. & 168 (1234.0 <= farr(i) .and. farr(i) < fexp & 169 .and. aint (farr(i)) == farr(i))) STOP 19 170 end do 171 if (fgot /= fexp) STOP 20 172 173 fgot = 1.0 174 fexp = 2.0**32 175 176 !$acc parallel loop copy (fgot, ftmp) 177 do i = 1, N 178 !$acc atomic capture 179 farr(i) = fgot 180 fgot = 2.0 * fgot 181 !$acc end atomic 182 end do 183 !$acc end parallel loop 184 185 do i = 1, N 186 if (.not. & 187 (1.0 <= farr(i) .and. farr(i) < fexp & 188 .and. aint (farr(i)) == farr(i))) STOP 21 189 end do 190 if (fgot /= fexp) STOP 22 191 192 fgot = 32.0 193 fexp = 32.0 194 195 !$acc parallel loop copy (fgot, ftmp) 196 do i = 1, N 197 !$acc atomic capture 198 farr(i) = fgot 199 fgot = 2.0 - fgot 200 !$acc end atomic 201 end do 202 !$acc end parallel loop 203 204 do i = 1, N 205 if (.not. (farr(i) == fexp .or. farr(i) == -30.0)) STOP 23 206 end do 207 if (fgot /= fexp) STOP 24 208 209 fgot = 2.0**16 210 fexp = 2.0**16 211 212 !$acc parallel loop copy (fgot, ftmp) 213 do i = 1, N 214 !$acc atomic capture 215 farr(i) = fgot 216 fgot = 2.0 / fgot 217 !$acc end atomic 218 end do 219 !$acc end parallel loop 220 221 do i = 1, N 222 if (.not. (farr(i) == fexp .or. farr(i) == 1.0 / 2.0**15)) STOP 25 223 end do 224 if (fgot /= fexp) STOP 26 225 226 lgot = .TRUE. 227 lexp = .FALSE. 228 229 !$acc parallel copy (lgot, ltmp) 230 !$acc atomic capture 231 ltmp = lgot 232 lgot = .FALSE. .and. lgot 233 !$acc end atomic 234 !$acc end parallel 235 236 if (ltmp .neqv. .not. lexp) STOP 27 237 if (lgot .neqv. lexp) STOP 28 238 239 lgot = .FALSE. 240 lexp = .FALSE. 241 242 !$acc parallel copy (lgot, ltmp) 243 !$acc atomic capture 244 ltmp = lgot 245 lgot = .FALSE. .or. lgot 246 !$acc end atomic 247 !$acc end parallel 248 249 if (ltmp .neqv. lexp) STOP 29 250 if (lgot .neqv. lexp) STOP 30 251 252 lgot = .FALSE. 253 lexp = .FALSE. 254 255 !$acc parallel copy (lgot, ltmp) 256 !$acc atomic capture 257 ltmp = lgot 258 lgot = .TRUE. .eqv. lgot 259 !$acc end atomic 260 !$acc end parallel 261 262 if (ltmp .neqv. lexp) STOP 31 263 if (lgot .neqv. lexp) STOP 32 264 265 lgot = .FALSE. 266 lexp = .TRUE. 267 268 !$acc parallel copy (lgot, ltmp) 269 !$acc atomic capture 270 ltmp = lgot 271 lgot = .TRUE. .neqv. lgot 272 !$acc end atomic 273 !$acc end parallel 274 275 if (ltmp .neqv. .not. lexp) STOP 33 276 if (lgot .neqv. lexp) STOP 34 277 278 igot = 0 279 iexp = N 280 iarr = -42 281 282 !$acc parallel loop copy (igot, itmp) 283 do i = 1, N 284 !$acc atomic capture 285 iarr(i) = igot 286 igot = max (igot, i) 287 !$acc end atomic 288 end do 289 !$acc end parallel loop 290 291 if (igot /= N) stop 107 292 itmp = 0 293 do i = 1, N 294 if (iarr(i) == 0) then 295 itmp = i 296 exit 297 end if 298 end do 299 ! At most one iarr element can be 0. 300 do i = 1, N 301 if ((iarr(i) == 0 .and. i /= itmp) & 302 .or. iarr(i) < 0 .or. iarr(i) > N) STOP 35 303 end do 304 if (igot /= iexp) STOP 36 305 306 igot = N + 1 307 iexp = 1 308 iarr = -42 309 310 !$acc parallel loop copy (igot, itmp) 311 do i = 1, N 312 !$acc atomic capture 313 iarr(i) = igot 314 igot = min (igot, i) 315 !$acc end atomic 316 end do 317 !$acc end parallel loop 318 319 if (igot /= 1) stop 108 320 itmp = N + 1 321 ! At most one iarr element can be N+1. 322 do i = 1, N 323 if (iarr(i) == N + 1) then 324 itmp = i 325 exit 326 end if 327 end do 328 do i = 1, N 329 if ((iarr(i) == N + 1 .and. i /= itmp) & 330 .or. iarr(i) <= 0 .or. iarr(i) > N + 1) STOP 37 331 end do 332 if (igot /= iexp) STOP 38 333 334 igot = -1 335 iexp = 0 336 337 !$acc parallel loop copy (igot, itmp) 338 do i = 0, N - 1 339 iexpr = ibclr (-1, i) 340 !$acc atomic capture 341 iarr(i) = igot 342 igot = iand (igot, iexpr) 343 !$acc end atomic 344 end do 345 !$acc end parallel loop 346 347 do i = 1, N 348 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 39 349 end do 350 if (igot /= iexp) STOP 40 351 352 igot = 0 353 iexp = -1 354 355 !$acc parallel loop copy (igot, itmp) 356 do i = 0, N - 1 357 iexpr = lshift (1, i) 358 !$acc atomic capture 359 iarr(i) = igot 360 igot = ior (igot, iexpr) 361 !$acc end atomic 362 end do 363 !$acc end parallel loop 364 365 do i = 1, N 366 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 41 367 end do 368 if (igot /= iexp) STOP 42 369 370 igot = -1 371 iexp = 0 372 373 !$acc parallel loop copy (igot, itmp) 374 do i = 0, N - 1 375 iexpr = lshift (1, i) 376 !$acc atomic capture 377 iarr(i) = igot 378 igot = ieor (igot, iexpr) 379 !$acc end atomic 380 end do 381 !$acc end parallel loop 382 383 do i = 1, N 384 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 43 385 end do 386 if (igot /= iexp) STOP 44 387 388 igot = 1 389 iexp = N 390 391 !$acc parallel loop copy (igot, itmp) 392 do i = 1, N 393 !$acc atomic capture 394 iarr(i) = igot 395 igot = max (i, igot) 396 !$acc end atomic 397 end do 398 !$acc end parallel loop 399 400 do i = 1, N 401 if (.not. (1 <= iarr(i) .and. iarr(i) <= iexp)) STOP 45 402 end do 403 if (igot /= iexp) STOP 46 404 405 igot = N 406 iexp = 1 407 408 !$acc parallel loop copy (igot, itmp) 409 do i = 1, N 410 !$acc atomic capture 411 iarr(i) = igot 412 igot = min (i, igot) 413 !$acc end atomic 414 end do 415 !$acc end parallel loop 416 417 do i = 1, N 418 if (.not. (iarr(i) >= 1 .or. iarr(i) <= N)) STOP 47 419 end do 420 if (igot /= iexp) STOP 48 421 422 igot = -1 423 iexp = 0 424 425 !$acc parallel loop copy (igot, itmp) 426 do i = 0, N - 1 427 iexpr = ibclr (-1, i) 428 !$acc atomic capture 429 iarr(i) = igot 430 igot = iand (iexpr, igot) 431 !$acc end atomic 432 end do 433 !$acc end parallel loop 434 435 do i = 1, N 436 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 49 437 end do 438 if (igot /= iexp) STOP 50 439 440 igot = 0 441 iexp = -1 442 !! 443 !$acc parallel loop copy (igot, itmp) 444 do i = 0, N - 1 445 iexpr = lshift (1, i) 446 !$acc atomic capture 447 iarr(i) = igot 448 igot = ior (iexpr, igot) 449 !$acc end atomic 450 end do 451 !$acc end parallel loop 452 453 do i = 1, N 454 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 51 455 end do 456 if (igot /= iexp) STOP 52 457 458 igot = -1 459 iexp = 0 460 461 !$acc parallel loop copy (igot, itmp) 462 do i = 0, N - 1 463 iexpr = lshift (1, i) 464 !$acc atomic capture 465 iarr(i) = igot 466 igot = ieor (iexpr, igot) 467 !$acc end atomic 468 end do 469 !$acc end parallel loop 470 471 do i = 1, N 472 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 53 473 end do 474 if (igot /= iexp) STOP 54 475 476 fgot = 1234.0 477 fexp = 1266.0 478 479 !$acc parallel loop copy (fgot, ftmp) 480 do i = 1, N 481 !$acc atomic capture 482 fgot = fgot + 1.0 483 farr(i) = fgot 484 !$acc end atomic 485 end do 486 !$acc end parallel loop 487 488 do i = 1, N 489 if (.not. & 490 (1234.0 < farr(i) .and. farr(i) <= fexp & 491 .and. aint (farr(i)) == farr(i))) STOP 55 492 end do 493 if (fgot /= fexp) STOP 56 494 495 fgot = 1.0 496 fexp = 2.0**32 497 498 !$acc parallel loop copy (fgot, ftmp) 499 do i = 1, N 500 !$acc atomic capture 501 fgot = fgot * 2.0 502 farr(i) = fgot 503 !$acc end atomic 504 end do 505 !$acc end parallel loop 506 507 do i = 1, N 508 if (.not. & 509 (1.0 < farr(i) .and. farr(i) <= fexp & 510 .and. aint (farr(i)) == farr(i))) STOP 57 511 end do 512 if (fgot /= fexp) STOP 58 513 514 fgot = 32.0 515 fexp = fgot - N 516 517 !$acc parallel loop copy (fgot, ftmp) 518 do i = 1, N 519 !$acc atomic capture 520 fgot = fgot - 1.0 521 farr(i) = fgot 522 !$acc end atomic 523 end do 524 !$acc end parallel loop 525 526 do i = 1, N 527 if (.not. & 528 (fexp <= farr(i) .and. farr(i) < 32.0 & 529 .and. aint (farr(i)) == farr(i))) STOP 59 530 end do 531 if (fgot /= fexp) STOP 60 532 533 fgot = 2**32.0 534 fexp = 1.0 535 536 !$acc parallel loop copy (fgot, ftmp) 537 do i = 1, N 538 !$acc atomic capture 539 fgot = fgot / 2.0 540 farr(i) = fgot 541 !$acc end atomic 542 end do 543 !$acc end parallel loop 544 545 do i = 1, N 546 if (.not. & 547 (fexp <= farr(i) .and. farr(i) < 2**32.0 & 548 .and. aint (farr(i)) == farr(i))) STOP 61 549 end do 550 if (fgot /= fexp) STOP 62 551 552 lgot = .TRUE. 553 lexp = .FALSE. 554 555 !$acc parallel copy (lgot, ltmp) 556 !$acc atomic capture 557 lgot = lgot .and. .FALSE. 558 ltmp = lgot 559 !$acc end atomic 560 !$acc end parallel 561 562 if (ltmp .neqv. lexp) STOP 63 563 if (lgot .neqv. lexp) STOP 64 564 565 lgot = .FALSE. 566 lexp = .FALSE. 567 568 !$acc parallel copy (lgot, ltmp) 569 !$acc atomic capture 570 lgot = lgot .or. .FALSE. 571 ltmp = lgot 572 !$acc end atomic 573 !$acc end parallel 574 575 if (ltmp .neqv. lexp) STOP 65 576 if (lgot .neqv. lexp) STOP 66 577 578 lgot = .FALSE. 579 lexp = .FALSE. 580 581 !$acc parallel copy (lgot, ltmp) 582 !$acc atomic capture 583 lgot = lgot .eqv. .TRUE. 584 ltmp = lgot 585 !$acc end atomic 586 !$acc end parallel 587 588 if (ltmp .neqv. lexp) STOP 67 589 if (lgot .neqv. lexp) STOP 68 590 591 lgot = .FALSE. 592 lexp = .TRUE. 593 594 !$acc parallel copy (lgot, ltmp) 595 !$acc atomic capture 596 lgot = lgot .neqv. .TRUE. 597 ltmp = lgot 598 !$acc end atomic 599 !$acc end parallel 600 601 if (ltmp .neqv. lexp) STOP 69 602 if (lgot .neqv. lexp) STOP 70 603 604 fgot = 1234.0 605 fexp = 1266.0 606 607 !$acc parallel loop copy (fgot, ftmp) 608 do i = 1, N 609 !$acc atomic capture 610 fgot = 1.0 + fgot 611 farr(i) = fgot 612 !$acc end atomic 613 end do 614 !$acc end parallel loop 615 616 do i = 1, N 617 if (.not. & 618 (1234.0 < farr(i) .and. farr(i) <= fexp & 619 .and. aint (farr(i)) == farr(i))) STOP 71 620 end do 621 if (fgot /= fexp) STOP 72 622 623 fgot = 1.0 624 fexp = 2.0**32 625 626 !$acc parallel loop copy (fgot, ftmp) 627 do i = 1, N 628 !$acc atomic capture 629 fgot = 2.0 * fgot 630 farr(i) = fgot 631 !$acc end atomic 632 end do 633 !$acc end parallel loop 634 635 do i = 1, N 636 if (.not. & 637 (1.0 < farr(i) .and. farr(i) <= 2**32.0 & 638 .and. aint (farr(i)) == farr(i))) STOP 73 639 end do 640 if (fgot /= fexp) STOP 74 641 642 fgot = 32.0 643 fexp = 32.0 644 645 !$acc parallel loop copy (fgot, ftmp) 646 do i = 1, N 647 !$acc atomic capture 648 fgot = 2.0 - fgot 649 farr(i) = fgot 650 !$acc end atomic 651 end do 652 !$acc end parallel loop 653 654 do i = 1, N 655 if (.not. (farr(i) == fexp .or. farr(i) == 2.0 - fexp)) STOP 75 656 end do 657 if (fgot /= fexp) STOP 76 658 659 fgot = 2.0**16 660 fexp = 2.0**16 661 662 !$acc parallel loop copy (fgot, ftmp) 663 do i = 1, N 664 !$acc atomic capture 665 fgot = 2.0 / fgot 666 farr(i) = fgot 667 !$acc end atomic 668 end do 669 !$acc end parallel loop 670 671 do i = 1, N 672 if (.not. (farr(i) == fexp .or. farr(i) == 2.0 / fexp)) STOP 77 673 end do 674 if (fgot /= fexp) STOP 78 675 676 lgot = .TRUE. 677 lexp = .FALSE. 678 679 !$acc parallel copy (lgot, ltmp) 680 !$acc atomic capture 681 lgot = .FALSE. .and. lgot 682 ltmp = lgot 683 !$acc end atomic 684 !$acc end parallel 685 686 if (ltmp .neqv. lexp) STOP 79 687 if (lgot .neqv. lexp) STOP 80 688 689 lgot = .FALSE. 690 lexp = .FALSE. 691 692 !$acc parallel copy (lgot, ltmp) 693 !$acc atomic capture 694 lgot = .FALSE. .or. lgot 695 ltmp = lgot 696 !$acc end atomic 697 !$acc end parallel 698 699 if (ltmp .neqv. lexp) STOP 81 700 if (lgot .neqv. lexp) STOP 82 701 702 lgot = .FALSE. 703 lexp = .FALSE. 704 705 !$acc parallel copy (lgot, ltmp) 706 !$acc atomic capture 707 lgot = .TRUE. .eqv. lgot 708 ltmp = lgot 709 !$acc end atomic 710 !$acc end parallel 711 712 if (ltmp .neqv. lexp) STOP 83 713 if (lgot .neqv. lexp) STOP 84 714 715 lgot = .FALSE. 716 lexp = .TRUE. 717 718 !$acc parallel copy (lgot, ltmp) 719 !$acc atomic capture 720 lgot = .TRUE. .neqv. lgot 721 ltmp = lgot 722 !$acc end atomic 723 !$acc end parallel 724 725 if (ltmp .neqv. lexp) STOP 85 726 if (lgot .neqv. lexp) STOP 86 727 728 igot = 1 729 iexp = N 730 731 !$acc parallel loop copy (igot, itmp) 732 do i = 1, N 733 !$acc atomic capture 734 igot = max (igot, i) 735 iarr(i) = igot 736 !$acc end atomic 737 end do 738 !$acc end parallel loop 739 740 do i = 1, N 741 if (.not. (1 <= iarr(i) .and. iarr(i) <= N)) STOP 87 742 end do 743 if (igot /= iexp) STOP 88 744 745 igot = N 746 iexp = 1 747 748 !$acc parallel loop copy (igot, itmp) 749 do i = 1, N 750 !$acc atomic capture 751 igot = min (igot, i) 752 iarr(i) = igot 753 !$acc end atomic 754 end do 755 !$acc end parallel loop 756 757 do i = 1, N 758 if (.not. (iarr(i) <= i)) STOP 89 759 end do 760 if (igot /= iexp) STOP 90 761 762 igot = -1 763 iexp = 0 764 765 !$acc parallel loop copy (igot, itmp) 766 do i = 0, N - 1 767 iexpr = ibclr (-2, i) 768 !$acc atomic capture 769 igot = iand (igot, iexpr) 770 iarr(i) = igot 771 !$acc end atomic 772 end do 773 !$acc end parallel loop 774 775 do i = 1, N 776 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 91 777 end do 778 if (igot /= iexp) STOP 92 779 780 igot = 0 781 iexp = -1 782 783 !$acc parallel loop copy (igot, itmp) 784 do i = 0, N - 1 785 iexpr = lshift (1, i) 786 !$acc atomic capture 787 igot = ior (igot, iexpr) 788 iarr(i) = igot 789 !$acc end atomic 790 end do 791 !$acc end parallel loop 792 793 do i = 1, N 794 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 93 795 end do 796 if (igot /= iexp) STOP 94 797 798 igot = -1 799 iexp = 0 800 801 !$acc parallel loop copy (igot, itmp) 802 do i = 0, N - 1 803 iexpr = lshift (1, i) 804 !$acc atomic capture 805 igot = ieor (igot, iexpr) 806 iarr(i) = igot 807 !$acc end atomic 808 end do 809 !$acc end parallel loop 810 811 do i = 1, N 812 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 95 813 end do 814 if (igot /= iexp) STOP 96 815 816 igot = 1 817 iexp = N 818 819 !$acc parallel loop copy (igot, itmp) 820 do i = 1, N 821 !$acc atomic capture 822 igot = max (i, igot) 823 iarr(i) = igot 824 !$acc end atomic 825 end do 826 !$acc end parallel loop 827 828 do i = 1, N 829 if (.not. (1 <= iarr(i) .and. iarr(i) <= iexp)) STOP 97 830 end do 831 if (igot /= iexp) STOP 98 832 833 igot = N 834 iexp = 1 835 836 !$acc parallel loop copy (igot, itmp) 837 do i = 1, N 838 !$acc atomic capture 839 igot = min (i, igot) 840 iarr(i) = igot 841 !$acc end atomic 842 end do 843 !$acc end parallel loop 844 845 do i = 1, N 846 if (.not. (iarr(i) <= i)) STOP 99 847 end do 848 if (igot /= iexp) STOP 100 849 850 igot = -1 851 iexp = 0 852 853 !$acc parallel loop copy (igot, itmp) 854 do i = 0, N - 1 855 iexpr = ibclr (-2, i) 856 !$acc atomic capture 857 igot = iand (iexpr, igot) 858 iarr(i) = igot 859 !$acc end atomic 860 end do 861 !$acc end parallel loop 862 863 do i = 1, N 864 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 101 865 end do 866 if (igot /= iexp) STOP 102 867 868 igot = 0 869 iexp = -1 870 871 !$acc parallel loop copy (igot, itmp) 872 do i = 0, N - 1 873 iexpr = lshift (1, i) 874 !$acc atomic capture 875 igot = ior (iexpr, igot) 876 iarr(i) = igot 877 !$acc end atomic 878 end do 879 !$acc end parallel loop 880 881 do i = 1, N 882 if (.not. (popcnt(iarr(i - 1)) > 0)) STOP 103 883 end do 884 if (igot /= iexp) STOP 104 885 886 igot = -1 887 iexp = 0 888 889 !$acc parallel loop copy (igot, itmp) 890 do i = 0, N - 1 891 iexpr = lshift (1, i) 892 !$acc atomic capture 893 igot = ieor (iexpr, igot) 894 iarr(i) = igot 895 !$acc end atomic 896 end do 897 !$acc end parallel loop 898 899 do i = 1, N 900 if (.not. (popcnt(iarr(i - 1)) < 32)) STOP 105 901 end do 902 if (igot /= iexp) STOP 106 903 904end program 905