Skip to content

Commit f872518

Browse files
committed
Merge branch 'myhash7' into myhash2
2 parents 26138a2 + 216318b commit f872518

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/stdlib_32_bit_nmhashes.fypp

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

Comments
 (0)