Commit Graph

2445 Commits

Author SHA1 Message Date
Marvin Löbel
7ca216d750 Added case functions to Ascii 2013-04-20 22:51:55 +02:00
Marvin Löbel
61ffee738d Added Ascii type 2013-04-20 22:51:55 +02:00
Marvin Löbel
4357cbf2fa Made unsafely safe functions unsafe again, for safety 2013-04-20 22:51:55 +02:00
Marvin Löbel
276293af7c Cleaned up case related functions a bit 2013-04-20 22:51:55 +02:00
Matthijs Hofstra
51a68eb9b1 Replaced many instances of reinterpret_cast with transmute 2013-04-20 22:05:50 +02:00
bors
ae3b8690c1 auto merge of #5975 : huonw/rust/rustc-intrinsics-fixed-stack, r=pcwalton
This implements the fixed_stack_segment for items with the rust-intrinsic abi, and then uses it to make f32 and f64 use intrinsics where appropriate, but without overflowing stacks and killing canaries (cf. #5686 and #5697). Hopefully.

@pcwalton, the fixed_stack_segment implementation involved mirroring its implementation in `base.rs` in `trans_closure`, but without adding the `set_no_inline` (reasoning: that would defeat the purpose of intrinsics), which is possibly incorrect.

I'm a little hazy about how the underlying structure works, so I've annotated the 4 that have caused problems so far, but there's no guarantee that the other intrinsics are entirely well-behaved.

Anyway, it has good results (the following are just summing the result of each function for 1 up to 100 million):

```
$ ./intrinsics-perf.sh f32
func   new   old   speedup
sin    0.80  2.75  3.44
cos    0.80  2.76  3.45
sqrt   0.56  2.73  4.88
ln     1.01  2.94  2.91
log10  0.97  2.90  2.99
log2   1.01  2.95  2.92
exp    0.90  2.85  3.17
exp2   0.92  2.87  3.12
pow    6.95  8.57  1.23

   geometric mean: 2.97

$ ./intrinsics-perf.sh f64
func   new   old   speedup
sin    12.08  14.06  1.16
cos    12.04  13.67  1.14
sqrt   0.49  2.73  5.57
ln     4.11  5.59  1.36
log10  5.09  6.54  1.28
log2   2.78  5.10  1.83
exp    2.00  3.97  1.99
exp2   1.71  3.71  2.17
pow    5.90  7.51  1.27

   geometric mean: 1.72
```

So about 3x faster on average for f32, and 1.7x for f64. This isn't exactly apples to apples though, since this patch also adds #[inline(always)] to all the function definitions too, which possibly gives a speedup.

(fwiw, GitHub is showing 93c0888 after d9c54f8 (since I cherry-picked the latter from #5697), but git's order is the other way.)
2013-04-20 11:57:50 -07:00
Huon Wilson
d9c54f8387 librustc: use LLVM intrinsics for several floating point operations.
Achieves at least 5x speed up for some functions!

Also, reorganise the delegation code so that the delegated function wrappers
have the #[inline(always)] annotation, and reduce the repetition of
delegate!(..).
2013-04-21 01:40:48 +10:00
Huon Wilson
93c0888b6c librustc: implement and use fixed_stack_segment attribute for intrinsics. 2013-04-21 01:40:48 +10:00
bors
2b09267b76 auto merge of #5973 : huonw/rust/core-iterator-scan-consumers, r=thestinger
@thestinger r?

~~The 2 `_unlimited` functions are marked `unsafe` since they may not terminate.~~

The `state` fields of the `Unfoldr` and `Scan` iterators are public, since being able to access the final state after the iteration has finished seems reasonable/possibly useful.

~~Lastly, I converted the tests to use `.to_vec`, which halves the amount of code for them, but it means that a `.transform(|x| *x)` call is required on each iterator.~~ 

(removed the 2 commits with `to_vec` and `foldl`.)
2013-04-20 04:27:48 -07:00
Huon Wilson
a0c2949e7c libcore: add a ScanIterator, a generalisation of MapIterator to have internal state. 2013-04-20 19:18:52 +10:00
Brian Anderson
a11c032f36 core::rt: Fix a broken uvio test 2013-04-20 02:16:21 -07:00
bors
f2b0ef147a auto merge of #5970 : huonw/rust/core-sys-size_of-val, r=pcwalton
This allows one to write
```rust
let x = function_with_complicated_return_type();
let size = size_of_val(&x);
```
instead of 
```rust
let x = function_with_complicated_return_type();
let size = size_of::<ComplicatedReturnType<Foo, Bar>>();
```
2013-04-20 01:57:48 -07:00
Brian Anderson
e564fc7f6b core::rt: Don't directly create scheduler types in I/O tests
There are some better abstractions for this now
2013-04-20 01:55:10 -07:00
Brian Anderson
1a7561be4d core::rt: Remove redundant copy of run_in_newsched_task 2013-04-20 01:37:59 -07:00
Brian Anderson
eac629bf5c core::rt: Unignore some networking tests
These should work now, I hope
2013-04-20 01:32:08 -07:00
Brian Anderson
d24a3a4b01 core::rt: Use generated port numbers in tests 2013-04-20 01:16:06 -07:00
bors
4ff701b7db auto merge of #5965 : alexcrichton/rust/issue-4364, r=pcwalton
This closes #4364. I came into rust after modes had begun to be phased out, so I'm not exactly sure what they all did. My strategy was basically to turn on the compilation warnings and then when everything compiles and passes all the tests it's all good.

In most cases, I just dropped the mode, but in others I converted things to use `&` pointers when otherwise a move would happen.

This depends on #5963. When running the tests, everything passed except for a few compile-fail tests. These tests leaked memory, causing the task to abort differently. By suppressing the ICE from #5963, no leaks happen and the tests all pass. I would have looked into where the leaks were coming from, but I wasn't sure where or how to debug them (I found `RUSTRT_TRACK_ALLOCATIONS`, but it wasn't all that useful).
2013-04-20 01:00:49 -07:00
Brian Anderson
744ba627f3 core::rt: Add a test mod and put run_in_newsched_task there 2013-04-20 00:33:49 -07:00
bors
ce4f73a243 auto merge of #5945 : graydon/rust/fix-unicode-tables, r=pcwalton
This switches the unicode functions in core to use static character-range tables and a binary search helper rather than open-coded switch statements. It adds about 50k of read only data to the libcore binary but cuts out a similar amount of compiled IR. Would have done it this way in the first place but we didn't have structured statics for a long time.
2013-04-19 23:03:52 -07:00
bors
e67f1c0fd2 auto merge of #5968 : gifnksm/rust/windowed, r=brson
vec::windowed fails if given window size is greater than vector length + 1.

```rust
for vec::windowed(7, &[1,2,3,4,5,6]) |vs| { fail!(); } // => do nothing
for vec::windowed(8, &[1,2,3,4,5,6]) |vs| { fail!(); } // => assertion failure in vec::slice
```
2013-04-19 22:12:52 -07:00
Huon Wilson
5c2e9b29f1 libcore: wrappers for size/align_of to act on values without needing explicit ::<type> annotations 2013-04-20 15:05:36 +10:00
Alex Crichton
98dfeb173f core: clean up tests (mostly unused unsafe blocks) 2013-04-19 23:23:23 -04:00
bors
8b3c09a103 auto merge of #5962 : pcwalton/rust/shootout, r=pcwalton
r? @brson
2013-04-19 19:24:52 -07:00
gifnksm
a1a9326c6d libcore: Fix assertion failure in vec::windowe.
vec::windowed fails if given window size is greater than vector length + 1.
2013-04-20 11:15:25 +09:00
Brian Anderson
6a5c4f68c2 core::rt: Just some poking at the I/O docs 2013-04-19 18:47:31 -07:00
Patrick Walton
dcea717208 librustc: Fix botched merge. rs=merge 2013-04-19 15:57:31 -07:00
Brian Anderson
e47ee779cd wip 2013-04-19 15:18:38 -07:00
Brian Anderson
7270fadfcc core::rt: Rename Closeable to Close, Seekable to Seek, blocking to native 2013-04-19 14:58:21 -07:00
Brian Anderson
e782e1f371 Tidy 2013-04-19 12:05:19 -07:00
Brian Anderson
b57611d10c core::rt: Simplify some scheduler operations 2013-04-19 12:05:19 -07:00
Brian Anderson
eddd817bf0 core::rt: Add another context switching operation to the scheduler
`switch_running_tasks_and_then` does a context switch to another
task then immediatly runs a closure.
2013-04-19 12:05:18 -07:00
Brian Anderson
d261bb32d9 core: More tweaks to the thread-local scheduler interface 2013-04-19 12:05:18 -07:00
Brian Anderson
15ece0c23e core: Wire up spawn to the new scheduler
It will check which scheduler it is running under and create the
correct type of task as appropriate. Most options aren't supported
but basic spawning works.
2013-04-19 12:05:18 -07:00
Brian Anderson
6773b63671 core: Don't use managed boxes in TaskBuilder 2013-04-19 12:05:18 -07:00
Brian Anderson
b96765179e core: Add rt::context for figuring out what runtime services are available
Conflicts:
	src/libcore/rt/sched/mod.rs
2013-04-19 12:05:18 -07:00
Brian Anderson
c44d7a6486 core::rt: Declare large parts of the I/O API 2013-04-19 12:05:18 -07:00
Patrick Walton
c995a62d44 librustc: WIP patch for using the return value. 2013-04-19 12:00:08 -07:00
Patrick Walton
10aa1c3c05 test: Add fannkuch-redux and fasta-redux shootout benchmarks 2013-04-19 11:56:52 -07:00
Patrick Walton
9738c2a45c test: Rewrite nbody and spectralnorm shootout benchmarks 2013-04-19 11:56:52 -07:00
Patrick Walton
4c29b4cb93 librustc: Optimize metadata::decoder::item_name. 2013-04-19 11:53:33 -07:00
Patrick Walton
f903ae9e72 librustc: Implement fast-ffi and use it in various places 2013-04-19 11:53:31 -07:00
bors
10e6869a54 auto merge of #5955 : thestinger/rust/iterator, r=graydon 2013-04-19 09:48:50 -07:00
Daniel Micay
a2e5350284 iterator: add a bit of documentation 2013-04-19 12:42:59 -04:00
Daniel Micay
1d81b7b286 iterator: add a chain adaptor 2013-04-19 11:50:50 -04:00
Huon Wilson
90313b789c libcore: add an UnfoldrIterator like Haskell's unfoldr 2013-04-19 10:37:15 -04:00
Daniel Micay
d7a2ae6c42 re-organize the iterator module a bit 2013-04-19 09:18:22 -04:00
Daniel Micay
ae1c9ebf3c move iterator adaptor tests to iterator module 2013-04-19 09:01:40 -04:00
Huon Wilson
8ae6b33ed0 libcore: clarify documentation for char_at(_reverse) 2013-04-19 22:30:49 +10:00
Daniel Micay
962a753890 takewhile -> take_while, dropwhile -> skip_while 2013-04-19 07:28:51 -04:00
Daniel Micay
0f85cf180a iterator: add skip and take 2013-04-19 07:22:20 -04:00
bors
9618e5b459 auto merge of #5938 : thestinger/rust/iterator, r=pcwalton 2013-04-18 18:51:49 -07:00
Graydon Hoare
5a3d26f271 core: replace unicode match exprs with bsearch in const arrays, minor perf win. 2013-04-18 14:39:40 -07:00
Graydon Hoare
14b7277c4f core: add vec::bsearch. 2013-04-18 14:39:40 -07:00
Brian Anderson
decd3901d5 core::comm: Modernize constructors to use new 2013-04-18 14:07:35 -07:00
Brian Anderson
bc60d84507 core::pipes: Just reordering declarations 2013-04-18 14:07:35 -07:00
Brian Anderson
0617d580e6 core::comm: Remove functions in favor of methods
`send`, etc. are never used. I've left the functions for oneshot pipes
because by-value methods don't work.
2013-04-18 14:07:35 -07:00
Brian Anderson
4e22461cd8 core: Remove a stray #[doc(hidden)] attribute 2013-04-18 14:07:35 -07:00
Brian Anderson
056164ac19 core: Inline the protocol definitions of sendp and oneshot
I want to be able to see what is going on
2013-04-18 14:07:35 -07:00
Brian Anderson
3dce936753 core: Remove #[doc(hidden)] attributes and atomic wrapper functions from pipes
Neither are needed
2013-04-18 14:07:35 -07:00
Brian Anderson
8f2d21dc0d core: Just reordering some code 2013-04-18 14:07:35 -07:00
Brian Anderson
ab08b4fbfd core: Remove pipes::spawn_service, spawn_service_recv
These are only used in test cases; pipes isn't the right place for them;
they are unnecessary.

Conflicts:
	src/libcore/rt/uv/mod.rs
2013-04-18 14:07:35 -07:00
Daniel Micay
a523abd75c add dropwhile and takewhile iterators 2013-04-18 13:22:38 -04:00
bors
8796c9fe2d auto merge of #5935 : bjz/rust/master, r=thestinger 2013-04-18 09:03:55 -07:00
Brendan Zabarauskas
a7f6ec8542 Use assert_eq! instead of assert! and remove extraneous parentheses 2013-04-19 01:37:21 +10:00
bors
e4f35a7326 auto merge of #5933 : huonw/rust/core-read-until-byte, r=thestinger
`read_until` is just doing a bytewise comparison. This means the following program prints `xyå12`, not `xy`, which it should if it was actually checking chars.

```rust
fn main() {
    do io::with_str_reader("xyå12") |r| {
        io::println(r.read_until('å', false));
    }
}
```

This patch makes the type of read_until match what it is actually doing.
2013-04-18 08:09:55 -07:00
bors
24fb719b8c auto merge of #5932 : huonw/rust/core-str-iterator, r=thestinger 2013-04-18 07:12:55 -07:00
Huon Wilson
19cc352302 core: io: the read_until function checks bytes not chars, so type should reflect that. 2013-04-18 23:36:38 +10:00
Brendan Zabarauskas
939a97f5cb Add #[inline(always)] to each operator method 2013-04-18 23:24:24 +10:00
Huon Wilson
c967f2bb1e core: add a str iterator 2013-04-18 22:56:21 +10:00
bors
bd75463839 auto merge of #5928 : huonw/rust/core-task-spawn-supervised-doc, r=thestinger
The doc-comment didn't reflect the [tasks tutorial](http://static.rust-lang.org/doc/tutorial-tasks.html#failure-modes), or how it works in practice.
2013-04-18 04:30:54 -07:00
Brendan Zabarauskas
d2a81b95c3 Implement bitwise operator traits for ints and uints 2013-04-18 20:58:58 +10:00
Huon Wilson
f43fc5fff8 libcore: make spawn_supervised documentation reflect its behaviour. 2013-04-18 20:46:23 +10:00
Huon Wilson
0ff568a3c1 libcore: add an EnumerateIterator, like Python's enumerate. 2013-04-18 20:37:27 +10:00
bors
d32d4d1209 auto merge of #5923 : thestinger/rust/iterator, r=graydon 2013-04-18 01:36:53 -07:00
bors
d4daee453c auto merge of #5918 : catamorphism/rust/Warnings, r=catamorphism 2013-04-17 23:45:57 -07:00
bors
3b48063373 auto merge of #5912 : Dretch/rust/issue-2626, r=graydon
which does currently seem to work on win32 (and linux).

Just mentioning issue #2626 again to make sure github picks it up.
2013-04-17 21:39:56 -07:00
bors
16652c9c17 auto merge of #5909 : brson/rust/rt4, r=graydon
This is just a bunch of minor changes and simplifications to the structure of core::rt. It makes ownership of the ~Scheduler more strict (though it is still mutably aliased sometimes), turns the scheduler cleanup_jobs vector into just a single job, shunts the thread-local scheduler code off to its own file.
2013-04-17 20:42:58 -07:00
Daniel Micay
c98f0cb362 vec: add an external iterator 2013-04-17 21:53:23 -04:00
bors
fdb4ef321e auto merge of #5726 : brson/rust/struct-return, r=brson
r? @nikomatsakis

This doesn't completely fix the x86 ABI for structs, but it does fix some cases. On linux, structs appear to be returned correctly now. On windows, structs are only returned by pointer when they are greater than 8 bytes. That scenario works now.

In the case where the struct is less than 8 bytes our generated code looks peculiar. When returning a pair of u16, C packs both variables into %eax to return them. Our generated code though expects to find one of the pair in %ax and the other in %dx. Similar for u8. I haven't looked into it yet.

There appears to also be struct passing problems on linux, where my `extern-pass-TwoU8s` and `extern-pass-TwoU16s` tests are failing.
2013-04-17 18:45:58 -07:00
Brian Anderson
a5ddc00982 rustc: Use an out pointer to return structs in x86 C ABI. #5347
This Adds a bunch of tests for passing and returning structs
of various sizes to C. It fixes the struct return rules on unix,
and on windows for structs of size > 8 bytes. Struct passing
on unix for structs under a certain size appears to still be broken.
2013-04-17 15:49:19 -07:00
Tim Chevalier
f86bf0ee6e Warning police 2013-04-17 13:42:43 -07:00
gareth
caffe127c7 Fix issue 2626 by un-ignoring the mysterious test_leaks,
which does currently seem to work on win32 (and linux).
2013-04-16 21:23:44 +01:00
Brian Anderson
7bfd0e5035 Merge remote-tracking branch 'brson/sched-cleanup'
Conflicts:
	src/libcore/rt/sched/mod.rs
2013-04-16 11:23:13 -07:00
Huon Wilson
21723d5bdc libcore: vec::windowed iterates, not allocates. 2013-04-16 23:07:46 +10:00
bors
76e77af380 auto merge of #5901 : thestinger/rust/iterator, r=sanxiyn
Can now use them like `x.transform(|i| i + 3).zip(y.filter(|i| i % 2)`.
2013-04-15 21:03:55 -07:00
Huon Wilson
40e3577b08 libcore: missed an import for a test 2013-04-16 12:04:49 +10:00
Brian Anderson
1f94364aef core::rt: Clean up some more hacks 2013-04-15 18:56:39 -07:00
Brian Anderson
ed74ac169e core::rt: Narrow down the unsafety of the thread-local scheduler
Only when borrowing the I/O implementation do we need unsafety
2013-04-15 18:54:02 -07:00
Daniel Micay
f82c96446f iterator: use an IteratorUtil trait 2013-04-15 21:35:41 -04:00
Brian Anderson
68583a25a0 core::rt: Restructure context switches to take ownership of the Scheduler
In order to do a context switch you have to give up ownership of the scheduler,
effectively passing it to the next execution context. This could help avoid
some situations here tasks retain unsafe pointers to schedulers between context
switches, across which they may have changed threads.

There are still a number of uses of unsafe scheduler pointers.
2013-04-15 17:45:34 -07:00
Huon Wilson
d3be98e9f5 libcore,std,syntax,rustc: move tests into mod tests, make them private (no pub mod or pub fn). 2013-04-16 09:57:47 +10:00
Brian Anderson
ebefe07792 core::rt: Make Scheduler::unsafe_local return a fabricated region pointer
Instead of taking a closure. It's unsafe either way. Rename it to unsafe_local_borrow.
2013-04-15 16:00:15 -07:00
Brian Anderson
473b4d19ad core::rt: Rename Scheduler::local to Scheduler::unsafe_local 2013-04-15 15:32:43 -07:00
Brian Anderson
3b8a354c21 core::rt: A little bit of cleanup to thread-local scheduler 2013-04-15 15:25:29 -07:00
Brian Anderson
1f8ebb6a8e core::rt: Move thread-local scheduler to its own module 2013-04-15 15:18:49 -07:00
Brian Anderson
4f1dd1fd21 core::rt: Fix two incorrect uses of the thread-local scheduler
These would not be threadsafe
2013-04-15 15:13:36 -07:00
bors
4beebc427c auto merge of #5797 : alexcrichton/rust/issue-1913, r=catamorphism
Closes #5487, #1913, and #4568

I tracked this by adding all used unsafe blocks/functions to a set on the `tcx` passed around, and then when the lint pass comes around if an unsafe block/function isn't listed in that set, it's unused.

I also removed everything from the compiler that was unused, and up to stage2 is now compiling without any known unused unsafe blocks.

I chose `unused_unsafe` as the name of the lint attribute, but there may be a better name...
2013-04-15 13:00:56 -07:00
bors
3809a04bf7 auto merge of #5778 : jld/rust/reflect-abstract-enum, r=graydon
This takes care of one of the last remnants of assumptions about enum layout.  A type visitor is now passed a function to read a value's discriminant, then accesses fields by being passed a byte offset for each one.  The latter may not be fully general, despite the constraints imposed on representations by borrowed pointers, but works for any representations currently planned and is relatively simple.

Closes #5652.
2013-04-15 09:57:55 -07:00
Brian Anderson
93757d8185 core::rt: Clean up the thread-local scheduler code
Remove the ThreadLocalScheduler type in favor of functions.
Move everything into the sched::local module.
2013-04-14 21:53:37 -07:00
Brian Anderson
a2e5827866 core::rt: All context switches are followed by a cleanup action 2013-04-14 20:49:22 -07:00