@@ -124,24 +124,20 @@ contains
124124 integer(int32), parameter :: m3 = int(z'E9139917', int32)
125125
126126 integer(int16) :: vx16(2)
127- integer(int16), parameter :: &
128- m116(2) = transfer( m1, 0_int16, 2 ), &
129- m216(2) = transfer( m2, 0_int16, 2 ), &
130- m316(2) = transfer( m3, 0_int16, 2 )
131127
132128 vx32 = x
133129 vx32 = ieor( vx32, ieor( ishft( vx32, -12 ), ishft( vx32, -6 ) ) )
134130 vx16 = transfer( vx32, 0_int16, 2 )
135- vx16 = vx16 * m116
131+ vx16 = vx16 * transfer( m1, 0_int16, 2 )
136132 vx32 = transfer( vx16, 0_int32 )
137133 vx32 = ieor( vx32, ieor( ishft( vx32, 11 ), ishft( vx32, -19 ) ) )
138134 vx16 = transfer( vx32, 0_int16, 2 )
139- vx16 = vx16 * m216
135+ vx16 = vx16 * transfer( m2, 0_int16, 2 )
140136 vx32 = transfer( vx16, 0_int32 )
141137 vx32 = ieor( vx32, seed )
142138 vx32 = ieor( vx32, ieor( ishft( vx32, -15 ), ishft( vx32, -9 ) ) )
143139 vx16 = transfer( vx32, 0_int16, 2 )
144- vx16 = vx16 * m316
140+ vx16 = vx16 * transfer( m3, 0_int16, 2 )
145141 vx32 = transfer( vx16, 0_int32 )
146142 vx32 = ieor( vx32, ieor( ishft(vx32, 16), ishft(vx32, -11) ) )
147143
@@ -155,15 +151,23 @@ contains
155151
156152 integer(int32) :: xu32(0:3), yu32(0:3)
157153 integer(int16) :: xu16(0:1)
158- integer(int16), parameter :: &
159- nmh_m1_16(0:1) = transfer( nmh_m1, 0_int16, 2 ), &
160- nmh_m2_16(0:1) = transfer( nmh_m2, 0_int16, 2 ), &
161- 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)
162162 integer(int32) :: s1
163163 integer(int64) :: length
164164 integer(int32) :: length32(0:1)
165165 integer(int64) :: i, j, r
166166
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+
167171 ! base mixer: [f0d9649b 5 -13 29a7935d -9 11 55d35831 -20 -10 ] =
168172 ! 0.93495901789135362
169173
@@ -380,10 +384,17 @@ contains
380384 integer(int16) :: u16(0:1)
381385 integer(int32), parameter:: m1 = int(z'CCE5196D', int32)
382386 integer(int32), parameter:: m2 = int(z'464BE229', int32)
383- integer(int16), parameter:: m1_16(0:1) = transfer(m1, 0_int16, 2)
384- 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)
385393 ! [-21 -8 cce5196d 12 -7 464be229 -21 -8] = 3.2267098842182733
386394
395+ m1_16(0:1) = transfer(m1, 0_int16, 2)
396+ m2_16(0:1) = transfer(m2, 0_int16, 2)
397+
387398 u32 = x
388399 u32 = ieor( u32, ieor( ishft( u32, -8 ), ishft( u32, -21 ) ) )
389400 u16 = transfer( u32, 0_int16, 2 )
0 commit comments