@@ -62,8 +62,6 @@ submodule(stdlib_32_bit_hash_codes) stdlib_32_bit_nmhashes
6262 integer(int32), parameter :: nmh_m2_v(0:31) = nmh_m2
6363 integer(int32), parameter :: nmh_m3_v(0:31) = nmh_m3
6464
65- integer(int16), parameter :: nmh_m3_16(2) = transfer( nmh_m3, 0_int16, 2 )
66-
6765 logical, parameter :: nmh_short32_without_seed2=.false.
6866 logical, parameter :: nmh_short32_with_seed2=.true.
6967
@@ -126,24 +124,20 @@ contains
126124 integer(int32), parameter :: m3 = int(z'E9139917', int32)
127125
128126 integer(int16) :: vx16(2)
129- integer(int16), parameter :: &
130- m116(2) = transfer( m1, 0_int16, 2 ), &
131- m216(2) = transfer( m2, 0_int16, 2 ), &
132- m316(2) = transfer( m3, 0_int16, 2 )
133127
134128 vx32 = x
135129 vx32 = ieor( vx32, ieor( ishft( vx32, -12 ), ishft( vx32, -6 ) ) )
136130 vx16 = transfer( vx32, 0_int16, 2 )
137- vx16 = vx16 * m116
131+ vx16 = vx16 * transfer( m1, 0_int16, 2 )
138132 vx32 = transfer( vx16, 0_int32 )
139133 vx32 = ieor( vx32, ieor( ishft( vx32, 11 ), ishft( vx32, -19 ) ) )
140134 vx16 = transfer( vx32, 0_int16, 2 )
141- vx16 = vx16 * m216
135+ vx16 = vx16 * transfer( m2, 0_int16, 2 )
142136 vx32 = transfer( vx16, 0_int32 )
143137 vx32 = ieor( vx32, seed )
144138 vx32 = ieor( vx32, ieor( ishft( vx32, -15 ), ishft( vx32, -9 ) ) )
145139 vx16 = transfer( vx32, 0_int16, 2 )
146- vx16 = vx16 * m316
140+ vx16 = vx16 * transfer( m3, 0_int16, 2 )
147141 vx32 = transfer( vx16, 0_int32 )
148142 vx32 = ieor( vx32, ieor( ishft(vx32, 16), ishft(vx32, -11) ) )
149143
@@ -157,15 +151,23 @@ contains
157151
158152 integer(int32) :: xu32(0:3), yu32(0:3)
159153 integer(int16) :: xu16(0:1)
160- integer(int16), parameter :: &
161- nmh_m1_16(0:1) = transfer( nmh_m1, 0_int16, 2 ), &
162- nmh_m2_16(0:1) = transfer( nmh_m2, 0_int16, 2 ), &
163- nmh_m3_16(0:1) = transfer( nmh_m3, 0_int16, 2 )
154+ ! Due to an issue with Intel OneAPI ifort 2021 (see
155+ ! https://community.intel.com/t5/Intel-Fortran-Compiler/Intrinsic-transfer-with-a-provided-size-un-expected-behavior/m-p/1343313#M158733
156+ ! ), it is not possible to define the following variables as a parameter.
157+ ! integer(int16), parameter :: &
158+ ! nmh_m1_16(0:1) = transfer( nmh_m1, 0_int16, 2 ), &
159+ ! nmh_m2_16(0:1) = transfer( nmh_m2, 0_int16, 2 ), &
160+ ! nmh_m3_16(0:1) = transfer( nmh_m3, 0_int16, 2 )
161+ integer(int16) :: nmh_m1_16(0:1), nmh_m2_16(0:1), nmh_m3_16(0:1)
164162 integer(int32) :: s1
165163 integer(int64) :: length
166164 integer(int32) :: length32(0:1)
167165 integer(int64) :: i, j, r
168166
167+ nmh_m1_16(0:1) = transfer( nmh_m1, 0_int16, 2 )
168+ nmh_m2_16(0:1) = transfer( nmh_m2, 0_int16, 2 )
169+ nmh_m3_16(0:1) = transfer( nmh_m3, 0_int16, 2 )
170+
169171 ! base mixer: [f0d9649b 5 -13 29a7935d -9 11 55d35831 -20 -10 ] =
170172 ! 0.93495901789135362
171173
@@ -382,10 +384,17 @@ contains
382384 integer(int16) :: u16(0:1)
383385 integer(int32), parameter:: m1 = int(z'CCE5196D', int32)
384386 integer(int32), parameter:: m2 = int(z'464BE229', int32)
385- integer(int16), parameter:: m1_16(0:1) = transfer(m1, 0_int16, 2)
386- integer(int16), parameter:: m2_16(0:1) = transfer(m2, 0_int16, 2)
387+ ! Due to an issue with Intel OneAPI ifort 2021 (see
388+ ! https://community.intel.com/t5/Intel-Fortran-Compiler/Intrinsic-transfer-with-a-provided-size-un-expected-behavior/m-p/1343313#M158733
389+ ! ), it is not possible to define the following variables as a parameter.
390+ !integer(int16), parameter:: m1_16(0:1) = transfer(m1, 0_int16, 2)
391+ !integer(int16), parameter:: m2_16(0:1) = transfer(m2, 0_int16, 2)
392+ integer(int16) :: m1_16(0:1), m2_16(0:1)
387393 ! [-21 -8 cce5196d 12 -7 464be229 -21 -8] = 3.2267098842182733
388394
395+ m1_16(0:1) = transfer(m1, 0_int16, 2)
396+ m2_16(0:1) = transfer(m2, 0_int16, 2)
397+
389398 u32 = x
390399 u32 = ieor( u32, ieor( ishft( u32, -8 ), ishft( u32, -21 ) ) )
391400 u16 = transfer( u32, 0_int16, 2 )
0 commit comments