| ! { dg-do run } |
| ! { dg-options "-ffree-line-length-none" } |
| |
| interface runtime_popcnt |
| procedure runtime_popcnt_i1 |
| procedure runtime_popcnt_i2 |
| procedure runtime_popcnt_i4 |
| procedure runtime_popcnt_i8 |
| end interface |
| |
| interface runtime_poppar |
| procedure runtime_poppar_i1 |
| procedure runtime_poppar_i2 |
| procedure runtime_poppar_i4 |
| procedure runtime_poppar_i8 |
| end interface |
| |
| #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_1, 0) |
| CHECK(0_2, 0) |
| CHECK(0_4, 0) |
| CHECK(0_8, 0) |
| |
| CHECK(1_1, 1) |
| CHECK(1_2, 1) |
| CHECK(1_4, 1) |
| CHECK(1_8, 1) |
| |
| CHECK(-1_1,8) |
| CHECK(-1_2,16) |
| CHECK(-1_4,32) |
| CHECK(-1_8,64) |
| |
| CHECK(-8_1,8-3) |
| CHECK(-8_2,16-3) |
| CHECK(-8_4,32-3) |
| CHECK(-8_8,64-3) |
| |
| CHECK(huge(0_1), 8-1) |
| CHECK(huge(0_2), 16-1) |
| CHECK(huge(0_4), 32-1) |
| CHECK(huge(0_8), 64-1) |
| |
| CHECK(-huge(0_1), 2) |
| CHECK(-huge(0_2), 2) |
| CHECK(-huge(0_4), 2) |
| CHECK(-huge(0_8), 2) |
| |
| CHECK2(0_1) |
| CHECK2(0_2) |
| CHECK2(0_4) |
| CHECK2(0_8) |
| |
| CHECK2(17_1) |
| CHECK2(17_2) |
| CHECK2(17_4) |
| CHECK2(17_8) |
| |
| CHECK2(-17_1) |
| CHECK2(-17_2) |
| CHECK2(-17_4) |
| CHECK2(-17_8) |
| |
| CHECK2(huge(0_1)) |
| CHECK2(huge(0_2)) |
| CHECK2(huge(0_4)) |
| CHECK2(huge(0_8)) |
| |
| CHECK2(-huge(0_1)) |
| CHECK2(-huge(0_2)) |
| CHECK2(-huge(0_4)) |
| CHECK2(-huge(0_8)) |
| |
| contains |
| integer function runtime_popcnt_i1 (i) result(res) |
| integer(kind=1), intent(in) :: i |
| res = popcnt(i) |
| end function |
| |
| integer function runtime_popcnt_i2 (i) result(res) |
| integer(kind=2), intent(in) :: i |
| res = popcnt(i) |
| end function |
| |
| integer function runtime_popcnt_i4 (i) result(res) |
| integer(kind=4), intent(in) :: i |
| res = popcnt(i) |
| end function |
| |
| integer function runtime_popcnt_i8 (i) result(res) |
| integer(kind=8), intent(in) :: i |
| res = popcnt(i) |
| end function |
| |
| integer function runtime_poppar_i1 (i) result(res) |
| integer(kind=1), intent(in) :: i |
| res = poppar(i) |
| end function |
| |
| integer function runtime_poppar_i2 (i) result(res) |
| integer(kind=2), intent(in) :: i |
| res = poppar(i) |
| end function |
| |
| integer function runtime_poppar_i4 (i) result(res) |
| integer(kind=4), intent(in) :: i |
| res = poppar(i) |
| end function |
| |
| integer function runtime_poppar_i8 (i) result(res) |
| integer(kind=8), intent(in) :: i |
| res = poppar(i) |
| end function |
| end |