Skip to content

Commit 216318b

Browse files
committed
remove parameter transfer
1 parent 404bd65 commit 216318b

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

src/stdlib_32_bit_nmhashes.fypp

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)