Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
2afc1e0b
Commit
2afc1e0b
authored
Sep 22, 2012
by
Ian Lance Taylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
runtime: Return random number of hash of NaN.
From-SVN: r191632
parent
a7a90456
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
6 deletions
+22
-6
libgo/runtime/go-type-complex.c
+10
-4
libgo/runtime/go-type-float.c
+12
-2
No files found.
libgo/runtime/go-type-complex.c
View file @
2afc1e0b
...
...
@@ -32,10 +32,14 @@ __go_type_hash_complex (const void *vkey, uintptr_t key_size)
cf
=
ucf
.
cf
;
cfr
=
__builtin_crealf
(
cf
);
cfi
=
__builtin_cimagf
(
cf
);
if
(
__builtin_isinff
(
cfr
)
||
__builtin_isinff
(
cfi
)
||
__builtin_isnanf
(
cfr
)
||
__builtin_isnanf
(
cfi
))
if
(
__builtin_isinff
(
cfr
)
||
__builtin_isinff
(
cfi
))
return
0
;
/* NaN != NaN, so the hash code of a NaN is irrelevant. Make it
random so that not all NaNs wind up in the same place. */
if
(
__builtin_isnanf
(
cfr
)
||
__builtin_isnanf
(
cfi
))
return
runtime_fastrand1
();
/* Avoid negative zero. */
if
(
cfr
==
0
&&
cfi
==
0
)
return
0
;
...
...
@@ -62,10 +66,12 @@ __go_type_hash_complex (const void *vkey, uintptr_t key_size)
cd
=
ucd
.
cd
;
cdr
=
__builtin_crealf
(
cd
);
cdi
=
__builtin_cimagf
(
cd
);
if
(
__builtin_isinf
(
cdr
)
||
__builtin_isinf
(
cdi
)
||
__builtin_isnan
(
cdr
)
||
__builtin_isnan
(
cdi
))
if
(
__builtin_isinf
(
cdr
)
||
__builtin_isinf
(
cdi
))
return
0
;
if
(
__builtin_isnan
(
cdr
)
||
__builtin_isnan
(
cdi
))
return
runtime_fastrand1
();
/* Avoid negative zero. */
if
(
cdr
==
0
&&
cdi
==
0
)
return
0
;
...
...
libgo/runtime/go-type-float.c
View file @
2afc1e0b
...
...
@@ -29,8 +29,14 @@ __go_type_hash_float (const void *vkey, uintptr_t key_size)
__builtin_memcpy
(
uf
.
a
,
vkey
,
4
);
f
=
uf
.
f
;
if
(
__builtin_isinff
(
f
)
||
__builtin_isnanf
(
f
)
||
f
==
0
)
if
(
__builtin_isinff
(
f
)
||
f
==
0
)
return
0
;
/* NaN != NaN, so the hash code of a NaN is irrelevant. Make it
random so that not all NaNs wind up in the same place. */
if
(
__builtin_isnanf
(
f
))
return
runtime_fastrand1
();
return
(
uintptr_t
)
uf
.
si
;
}
else
if
(
key_size
==
8
)
...
...
@@ -45,8 +51,12 @@ __go_type_hash_float (const void *vkey, uintptr_t key_size)
__builtin_memcpy
(
ud
.
a
,
vkey
,
8
);
d
=
ud
.
d
;
if
(
__builtin_isinf
(
d
)
||
__builtin_isnan
(
d
)
||
d
==
0
)
if
(
__builtin_isinf
(
d
)
||
d
==
0
)
return
0
;
if
(
__builtin_isnan
(
d
))
return
runtime_fastrand1
();
return
(
uintptr_t
)
ud
.
di
;
}
else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment