| ! { dg-do run } |
| ! { dg-options "-ffree-line-length-none" } |
| ! { dg-require-effective-target fortran_integer_16 } |
| |
| #define CHECK(val,res) \ |
| if (popcnt(val) /= res) STOP 1; \ |
| if (runtime_popcnt(val) /= res) STOP 2 |
| |
| #define CHECK2(val) \ |
| if (poppar(val) /= modulo(popcnt(val),2)) STOP 3; \ |
| if (runtime_poppar(val) /= poppar(val)) STOP 4 |
| |
| CHECK(0_16, 0) |
| CHECK(1_16, 1) |
| |
| CHECK(-1_16,128) |
| CHECK(-8_16,128-3) |
| |
| CHECK(huge(0_16), 128-1) |
| |
| CHECK(-huge(0_16), 2) |
| |
| CHECK2(0_16) |
| CHECK2(17_16) |
| CHECK2(-17_16) |
| CHECK2(huge(0_16)) |
| CHECK2(-huge(0_16)) |
| |
| contains |
| integer function runtime_popcnt (i) result(res) |
| integer(kind=16), intent(in) :: i |
| res = popcnt(i) |
| end function |
| |
| integer function runtime_poppar (i) result(res) |
| integer(kind=16), intent(in) :: i |
| res = poppar(i) |
| end function |
| end |