Merge remote-tracking branch 'origin/master' into HEAD
This commit is contained in:
commit
abc9132938
|
@ -69,13 +69,13 @@ features = ["c"]
|
||||||
|
|
||||||
### Porting Reminders
|
### Porting Reminders
|
||||||
|
|
||||||
1. [Rust][4] and [C][5] have slightly different operator precedence. C evaluates comparisons (`== !=`) before bitwise operations (`& | ^`), while Rust evaluates the other way.
|
1. [Rust][5a] and [C][5b] have slightly different operator precedence. C evaluates comparisons (`== !=`) before bitwise operations (`& | ^`), while Rust evaluates the other way.
|
||||||
2. C assumes wrapping operations everywhere. Rust panics on overflow when in debug mode. Consider using the [Wrapping][6] type or the explicit [wrapping_*][7] functions where applicable.
|
2. C assumes wrapping operations everywhere. Rust panics on overflow when in debug mode. Consider using the [Wrapping][6] type or the explicit [wrapping_*][7] functions where applicable.
|
||||||
3. Note [C implicit casts][8], especially integer promotion. Rust is much more explicit about casting, so be sure that any cast which affects the output is ported to the Rust implementation.
|
3. Note [C implicit casts][8], especially integer promotion. Rust is much more explicit about casting, so be sure that any cast which affects the output is ported to the Rust implementation.
|
||||||
4. Rust has [many functions][9] for integer or floating point manipulation in the standard library. Consider using one of these functions rather than porting a new one.
|
4. Rust has [many functions][9] for integer or floating point manipulation in the standard library. Consider using one of these functions rather than porting a new one.
|
||||||
|
|
||||||
[4]: https://doc.rust-lang.org/reference.html#operator-precedence
|
[5a]: https://doc.rust-lang.org/reference/expressions.html#expression-precedence
|
||||||
[5]: http://en.cppreference.com/w/c/language/operator_precedence
|
[5b]: http://en.cppreference.com/w/c/language/operator_precedence
|
||||||
[6]: https://doc.rust-lang.org/core/num/struct.Wrapping.html
|
[6]: https://doc.rust-lang.org/core/num/struct.Wrapping.html
|
||||||
[7]: https://doc.rust-lang.org/std/primitive.i32.html#method.wrapping_add
|
[7]: https://doc.rust-lang.org/std/primitive.i32.html#method.wrapping_add
|
||||||
[8]: http://en.cppreference.com/w/cpp/language/implicit_conversion
|
[8]: http://en.cppreference.com/w/cpp/language/implicit_conversion
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
intrinsics! {
|
intrinsics! {
|
||||||
// Implementation from gcc
|
// Implementation from gcc
|
||||||
// https://raw.githubusercontent.com/gcc-mirror/gcc/master/libgcc/config/epiphany/mulsi3.c
|
// https://raw.githubusercontent.com/gcc-mirror/gcc/master/libgcc/config/epiphany/mulsi3.c
|
||||||
pub extern "C" fn __mulsi3(mut a: u32, mut b: u32) -> u32 {
|
pub extern "C" fn __mulsi3(a: u32, b: u32) -> u32 {
|
||||||
|
let (mut a, mut b) = (a, b);
|
||||||
let mut r: usize = 0;
|
let mut r: usize = 0;
|
||||||
|
|
||||||
while a > 0 {
|
while a > 0 {
|
||||||
|
|
Loading…
Reference in New Issue