diff options
| author | kennytm <kennytm@gmail.com> | 2018-03-30 01:31:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-30 01:31:16 +0200 |
| commit | 361ddfeb1324179811280002c1e40443cc9c74a1 (patch) | |
| tree | 1271a47d7590ed291d61220132971d886d2516c7 /src/rustllvm/RustWrapper.cpp | |
| parent | 9ab97a8747d968943662c3be533bf3337eb9876d (diff) | |
| parent | 262be13643cf5e3ff4f4e880b2dee601d4740fd8 (diff) | |
| download | rust-361ddfeb1324179811280002c1e40443cc9c74a1.tar.gz rust-361ddfeb1324179811280002c1e40443cc9c74a1.zip | |
Rollup merge of #49466 - glandium:master, r=rkruppe
Use f{32,64}::to_bits for is_zero test in vec::SpecFromElem
vec::SpecFromElem provides an optimization to use calloc to fill a Vec
when the element given to fill the Vec is represented by 0.
For floats, the test for that currently used is `x == 0. &&
x.is_sign_positive()`. When compiled in a standalone function, rustc
generates the following assembly:
```
xorps xmm1, xmm1
ucomisd xmm0, xmm1
setnp al
sete cl
and cl, al
movq rax, xmm0
test rax, rax
setns al
and al, cl
ret
```
A simpler test telling us whether the value is represented by 0, is
`x.to_bits() == 0`, which rustc compiles to:
```
movq rax, xmm0
test rax, rax
sete al
ret
```
Not that the test is hot in any way, but it also makes it clearer what
the intent in the rust code is.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
