Commit graph

7525 commits

Author SHA1 Message Date
Ariel Ben-Yehuda
b0c80a93e4 remove the #[inline] attribute from drop_in_place
Apparently LLVM has exponential code growth while inlining landing pads
if that attribute is present.

Fixes #41696.
2017-05-11 23:17:11 +03:00
Martin Glagla
641d05353a Fix typo in size_hint example comment 2017-05-11 20:38:15 +02:00
mandeep
a2a9d1965b Added generic example of std::ops::Add in doc comments
Added blank lines around example

Added comment to Add example referencing the Output type

Removed whitespace from lines 272 and 273

Removed Debug derivation from Add examples

Added Debug derivation
2017-05-11 11:24:20 -05:00
Ralf Jung
ec141c8c96 fix typo in Unique::empty doc 2017-05-10 17:08:58 +02:00
bors
2b97174ada Auto merge of #41764 - scottmcm:faster-reverse, r=brson
Make [u8]::reverse() 5x faster

Since LLVM doesn't vectorize the loop for us, do unaligned reads of a larger type and use LLVM's bswap intrinsic to do the reversing of the actual bytes.  cfg!-restricted to x86 and x86_64, as I assume it wouldn't help on things like ARMv5.

Also makes [u16]::reverse() a more modest 1.5x faster by loading/storing u32 and swapping the u16s with ROT16.

Thank you ptr::*_unaligned for making this easy :)

Benchmark results (from my i5-2500K):
```text
# Before
test slice::reverse_u8      ... bench:  273,836 ns/iter (+/- 15,592) =  3829 MB/s
test slice::reverse_u16     ... bench:  139,793 ns/iter (+/- 17,748) =  7500 MB/s
test slice::reverse_u32     ... bench:   74,997 ns/iter  (+/- 5,130) = 13981 MB/s
test slice::reverse_u64     ... bench:   47,452 ns/iter  (+/- 2,213) = 22097 MB/s

# After
test slice::reverse_u8      ... bench:   52,170 ns/iter (+/- 3,962) = 20099 MB/s
test slice::reverse_u16     ... bench:   93,330 ns/iter (+/- 4,412) = 11235 MB/s
test slice::reverse_u32     ... bench:   74,731 ns/iter (+/- 1,425) = 14031 MB/s
test slice::reverse_u64     ... bench:   47,556 ns/iter (+/- 3,025) = 22049 MB/s
```

If you're curious about the assembly, instead of doing this
```
movzx	eax, byte ptr [rdi]
movzx	ecx, byte ptr [rsi]
mov	byte ptr [rdi], cl
mov	byte ptr [rsi], al
```
it does this
```
mov	rax, qword ptr [rdx]
mov	rbx, qword ptr [r11 + rcx - 8]
bswap	rbx
mov	qword ptr [rdx], rbx
bswap	rax
mov	qword ptr [r11 + rcx - 8], rax
```
2017-05-10 08:54:50 +00:00
Nathan Froyd
b1858447d3 fix confusion about parts required for float formatting
The documentation for flt2dec doesn't match up with the actual
implementation, so fix the documentation to align with reality.
Presumably due to the mismatch, the formatting code for floats in
std::fmt can use correspondingly shorter arrays in some places, so fix
those places up as well.

Fixes #41304.
2017-05-09 12:58:50 -04:00
Djzin
fcc970aca5 fix nit 2017-05-07 21:56:14 +01:00
Djzin
ca2fa97b6c improve wording 2017-05-07 20:29:39 +01:00
Djzin
165f3668d6 optimize out stack alignment for sizes < 32 2017-05-07 20:26:19 +01:00
Scott McMurray
1f891d11f5 Improve implementation approach comments in [T]::reverse() 2017-05-05 18:54:47 -07:00
Corey Farwell
6ace8a76cb Rollup merge of #41064 - Gankro:ptr-redux, r=alexcrichton
refactor NonZero, Shared, and Unique APIs

Major difference is that I removed Deref impls, as apparently LLVM has
trouble maintaining metadata with a `&ptr -> &ptr` API. This was cited
as a blocker for ever stabilizing this API. It wasn't that ergonomic
anyway.

* Added `get` to NonZero to replace Deref impl
* Added `ptr` getter to Shared/Unique to replace Deref impl
* Added Unique's `get` and `get_mut` conveniences to Shared
* Deprecated `as_mut_ptr` on Shared in favour of `ptr`

Note that Shared used to primarily expose only `*const` but there isn't
a good justification for that, so I made it `*mut`.
2017-05-05 17:35:24 -04:00
Alexis Beingessner
4ff583b116 fallout from NonZero/Unique/Shared changes 2017-05-04 23:54:54 -04:00
Scott McMurray
e8fad325fe Make [u8]::reverse() 5x faster
Since LLVM doesn't vectorize the loop for us, do unaligned reads
of a larger type and use LLVM's bswap intrinsic to do the
reversing of the actual bytes.  cfg!-restricted to x86 and
x86_64, as I assume it wouldn't help on things like ARMv5.

Also makes [u16]::reverse() a more modest 1.5x faster by
loading/storing u32 and swapping the u16s with ROT16.

Thank you ptr::*_unaligned for making this easy :)
2017-05-04 20:28:34 -07:00
Alexis Beingessner
6e2efe3aa4 refactor NonZero, Shared, and Unique APIs
Major difference is that I removed Deref impls, as apparently LLVM has
trouble maintaining metadata with a `&ptr -> &ptr` API. This was cited
as a blocker for ever stabilizing this API. It wasn't that ergonomic
anyway.

* Added `get` to NonZero to replace Deref impl
* Added `as_ptr` to Shared/Unique to replace Deref impl
* Added Unique's `as_ref` and `as_mut` conveniences to Shared
* Added `::empty()` convenience constructor for Unique/Shared
* Deprecated `as_mut_ptr` on Shared in favour of `as_ptr`
* Improved documentation of types

Note that Shared now only refers to *mut, and not *const
2017-05-04 14:56:02 -04:00
Corey Farwell
7b94d6cf19 Simplify types in std::option doc comment example. 2017-05-04 11:53:24 -04:00
Corey Farwell
1a5284c32b Rollup merge of #41217 - topecongiro:docs/atomic-fence, r=steveklabnik
Update docs of 'fence'

This PR updates the docs for `std::sync::atomic::fence` with an example and a diagram.
Part of #29377.
r? @steveklabnik
2017-05-02 21:21:17 -04:00
bors
6a5fc9eece Auto merge of #41207 - sstewartgallus:spinpause, r=alexcrichton
Spin loop pause function redux

GitHub's interface is screwy.

This is the same PR as https://github.com/rust-lang/rust/pull/40537
2017-05-02 17:48:28 +00:00
est31
14bbd0a5a3 Address review 2017-05-02 06:35:36 +02:00
est31
d290849a23 Removal pass for anonymous parameters
Removes occurences of anonymous parameters from the
rustc codebase, as they are to be deprecated.

See issue #41686 and RFC 1685.
2017-05-02 05:55:20 +02:00
Steven Stewart-Gallus
f4fe3cd0e9 Added spin loop pause function 2017-05-01 17:11:44 -07:00
topecongiro
91a9866bb3 Add an example for 'fence' 2017-05-01 17:25:07 +09:00
bors
c0f86f5927 Auto merge of #41602 - hsivonen:explainnonnull, r=steveklabnik
Explain why zero-length slices require a non-null pointer

In reference to [a thread on Discourse](https://users.rust-lang.org/t/why-does-std-slice-from-raw-parts-require-a-non-null-pointer-for-zero-length-slices/10534), explain why `from_raw_parts` requires a non-null pointer for zero-length slices.

r? @steveklabnik
2017-04-30 07:58:10 +00:00
Corey Farwell
eab2af9af5 Rollup merge of #41636 - moosingin3space:fix/process-exit-in-forget-doc, r=sfackler
process:exit -> process::exit in mem::forget docs

The documentation in mem::forget says "...or call `process:exit`..."
instead of `process::exit`.

r? @steveklabnik
2017-04-29 23:44:30 -04:00
Corey Farwell
3c1070689b Rollup merge of #41509 - froydnj:float-stack-reduction, r=nagisa
reduce stack requirements for floating-point formatting

Doing this speeds up float formatting by ~10% or so, and also makes the formatting code more suitable for embedded environments where stack space is at a premium.
2017-04-29 23:44:27 -04:00
Alex Crichton
5daf557a77 Update stage0 bootstrap compiler
We've got a freshly minted beta compiler, let's update to use that on nightly!
This has a few other changes associated with it as well

* A bump to the rustc version number (to 1.19.0)
* Movement of the `cargo` and `rls` submodules to their "proper" location in
  `src/tools/{cargo,rls}`. Now that Cargo workspaces support the `exclude`
  option this can work.
* Updates of the `cargo` and `rls` submodules to their master branches.
* Tweak to the `src/stage0.txt` format to be more amenable for Cargo version
  numbers. On the beta channel Cargo will bootstrap from a different version
  than rustc (e.g. the version numbers are different), so we need different
  configuration for this.
* Addition of `dev` as a readable key in the `src/stage0.txt` format. If present
  then stage0 compilers are downloaded from `dev-static.rust-lang.org` instead
  of `static.rust-lang.org`. This is added to accomodate our updated release
  process with Travis and AppVeyor.
2017-04-29 12:11:14 -07:00
Nathan Moos
087b838dd2 process:exit -> process::exit in mem::forget docs
The documentation in mem::forget says "...or call `process:exit`..."
instead of `process::exit`.

r? @steveklabnik
2017-04-29 14:56:35 -04:00
Irfan Hudda
ed24829985 Simplify checked_next_power_of_two function 2017-04-29 01:51:54 +05:30
Nathan Froyd
b2c3102e62 fmt: use mem::uninitialized for float formatting buffers
Spending time to initialize these is just wasted work, as we'll
overwrite them soon anyway.

Fixes #41259.
2017-04-28 16:08:37 -04:00
Nathan Froyd
2499d819d4 fmt: use the minimum parts array size
The comments for flt2dec::to_shortest_str says that we only need a slice
of length 5 for the parts array.  Initializing a 16-part array is just
wasted effort and wasted stack space.  Other functions in the flt2dec
module have similar comments, so we adjust the parts arrays passed to
those functions accordingly.
2017-04-28 15:33:17 -04:00
Nathan Froyd
a21f61685d fmt: reduce the stack space required by float formatting
For the two major entry points for float formatting, we split the exact
case and the shortest cases into separate functions.  We mark the
separate functions as #[inline(never) so the exact cases won't bloat
stack space in their callers unnecessarily.  The shortest cases are
marked so for similar reasons.

Fixes #41234.
2017-04-28 15:27:08 -04:00
Nathan Froyd
5a0078520e num: add minimal benchmarks for full floating-point formatting
We have benchmarks for the floating-point formatting algorithms
themselves, but not for the surrounding machinery like Formatter and
translating to the flt2dec::Part slices.
2017-04-28 15:24:09 -04:00
Irfan Hudda
67684a399c Add comment about overflow behavior for next_power_of_two 2017-04-29 00:06:54 +05:30
Irfan Hudda
8f9caff988 Add helper functions for next_power_of_two and checked_next_power_of_two 2017-04-28 21:50:02 +05:30
Henri Sivonen
e36f59e1a2 Explain why zero-length slices require a non-null pointer 2017-04-28 12:25:02 +03:00
Ariel Ben-Yehuda
25834dcb9b Rollup merge of #41493 - scottmcm:fix-step-replace, r=sfackler
Step::replace_one should put a one, not a zero (Issue #41492)

Turns out all six of the replace_* impls were backwards.
2017-04-26 22:11:04 +00:00
Corey Farwell
9ae413c386 Rollup merge of #41528 - steveklabnik:gh33269, r=frewsxcv
Clarify "side effect" in peek's docs

Fixes #33269

/cc @tshepang
2017-04-25 23:05:59 -04:00
steveklabnik
696df71d0c Clarify "side effect" in peek's docs
Fixes #33269
2017-04-25 05:38:26 -04:00
Guillaume Gomez
3ad844cfe2 Add more explanation on RefCell::get_mut 2017-04-24 15:08:39 +02:00
Djzin
c6ca81aa92 change wording 2017-04-24 07:40:11 +01:00
Scott McMurray
f8c6436173 Step::replace_one should put a one, not a zero (Issue #41492)
Turns out all six of these impls are incorrect.
2017-04-23 21:47:09 -07:00
bors
a94124488a Auto merge of #41437 - cuviper:remove-unstable-deprecated, r=alexcrichton
Remove items that are unstable and deprecated

This removes unstable items that have been deprecated for more than one cycle.

- Since 1.16.0, `#![feature(enumset)]`
    - All of `mod collections::enum_set`
- Since 1.15.0, `#![feature(borrow_state)]`
    - `cell::BorrowState`
    - `RefCell::borrow_state()`
- Since 1.15.0, `#![feature(is_unique)]`
    - `Rc::is_unique()` (made private like `Arc::is_unique()`)
- Since 1.15.0, `#![feature(rc_would_unwrap)]`
    - `Rc::would_wrap()`
- Since 1.13.0, `#![feature(binary_heap_extras)]`
    - `BinaryHeap::push_pop()`
    - `BinaryHeap::replace()`
- Since 1.12.0, `#![feature(as_unsafe_cell)]`
    - `Cell::as_unsafe_cell()`
    - `RefCell::as_unsafe_cell()`
- Since 1.12.0, `#![feature(map_entry_recover_keys)]`
    - `btree_map::OccupiedEntry::remove_pair()`
    - `hash_map::OccupiedEntry::remove_pair()`
- Since 1.11.0, `#![feature(float_extras)]`
    - `Float::nan()`
    - `Float::infinity()`
    - `Float::neg_infinity()`
    - `Float::neg_zero()`
    - `Float::zero()`
    - `Float::one()`
    - `Float::integer_decode()`
    - `f32::integer_decode()`
    - `f32::ldexp()`
    - `f32::frexp()`
    - `f32::next_after()`
    - `f64::integer_decode()`
    - `f64::ldexp()`
    - `f64::frexp()`
    - `f64::next_after()`
- Since 1.11.0, `#![feature(zero_one)]`
    - `num::Zero`
    - `num::One`
2017-04-23 02:13:55 +00:00
bors
5695c3e943 Auto merge of #41349 - eddyb:ty-contents, r=nikomatsakis
rustc: replace TypeContents with two independent properties (is_freeze / needs_drop).

`InteriorUnsafe` / `interior_unsafe` was replaced with a private lang-item `Freeze` auto trait in libcore.

`OwnsDtor` / `needs_drop` was replaced with a specialized traversal that *doesn't* avoid caching results in case of a cycle, as the only cycles left can only occur in erroneous "types with infinite sizes", references and raw pointers not having destructors. Also, `Copy` is now checked at every step of the recursion.

r? @nikomatsakis
2017-04-21 14:02:37 +00:00
Josh Stone
c1aaa60d8d Remove float_extras
[unstable, deprecated since 1.11.0]
2017-04-20 21:16:31 -07:00
Josh Stone
c903ac64e5 Remove num::{Zero,One}
[unstable, deprecated since 1.11.0]
2017-04-20 21:16:31 -07:00
Josh Stone
313aab8fbe Remove RefCell::borrow_state
[unstable, deprecated since 1.15.0]
2017-04-20 21:16:31 -07:00
Josh Stone
cc605c895e Remove {Cell,RefCell}::as_unsafe_cell
[unstable, deprecated since 1.12.0]
2017-04-20 21:16:31 -07:00
Corey Farwell
9d918223a8 Rollup merge of #40987 - maccoda:convert-docs, r=steveklabnik
API docs: Convert

Clean up of the convert module documentation following points in #29349
2017-04-20 13:33:13 -04:00
Irfan Hudda
f7bd370818 remove redundant wrapping_sub 2017-04-20 19:51:38 +05:30
Eduard-Mihai Burtescu
6563374ed2 rustc: replace interior_unsafe with a Freeze trait. 2017-04-20 14:39:31 +03:00
Irfan Hudda
04e9c20228 next_power_of_two panic on overflow 2017-04-19 23:59:43 +05:30