Skip to content

Commit 917e345

Browse files
committed
---
yaml --- r: 1891 b: refs/heads/master c: 1cb3ce8 h: refs/heads/master i: 1889: 87bcbf5 1887: bb906bf v: v3
1 parent bd1b77a commit 917e345

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 81695a19f876d6f5d75f18c05b2ae9c40a3221b3
2+
refs/heads/master: 1cb3ce89dd6bd33201871e914f35aef262c287eb

trunk/src/test/bench/shootout/nbody.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// based on:
33
// http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java
44

5+
native "llvm" mod llvm {
6+
fn sqrt(float n) -> float = "sqrt.f64";
7+
}
8+
59
fn main() {
610

711
let vec[int] inputs = vec(
@@ -26,11 +30,6 @@ fn main() {
2630
}
2731
}
2832

29-
// making a native call to sqrt
30-
native "rust" mod rustrt {
31-
fn squareroot(&float input, &mutable float output);
32-
}
33-
3433
// Body.props is a record of floats, so
3534
// vec[Body.props] is a vector of records of floats
3635

@@ -79,11 +78,7 @@ mod NBodySystem {
7978

8079
i = 0;
8180
while (i < 5) {
82-
83-
bodies.(i).x += dt * bodies.(i).vx;
84-
bodies.(i).y += dt * bodies.(i).vy;
85-
bodies.(i).z += dt * bodies.(i).vz;
86-
81+
move(bodies.(i), dt);
8782
i += 1;
8883
}
8984
}
@@ -95,8 +90,7 @@ mod NBodySystem {
9590

9691
let float dSquared = dx * dx + dy * dy + dz * dz;
9792

98-
let float distance;
99-
rustrt.squareroot(dSquared, distance);
93+
let float distance = llvm.sqrt(dSquared);
10094
let float mag = dt / (dSquared * distance);
10195

10296
bi.vx -= dx * bj.mass * mag;
@@ -108,6 +102,12 @@ mod NBodySystem {
108102
bj.vz += dz * bi.mass * mag;
109103
}
110104

105+
fn move(&Body.props b, float dt) {
106+
b.x += dt * b.vx;
107+
b.y += dt * b.vy;
108+
b.z += dt * b.vz;
109+
}
110+
111111
fn energy(vec[Body.props] bodies) -> float {
112112
let float dx;
113113
let float dy;
@@ -128,7 +128,7 @@ mod NBodySystem {
128128
dy = bodies.(i).y - bodies.(j).y;
129129
dz = bodies.(i).z - bodies.(j).z;
130130

131-
rustrt.squareroot(dx*dx + dy*dy + dz*dz, distance);
131+
distance = llvm.sqrt(dx*dx + dy*dy + dz*dz);
132132
e -= (bodies.(i).mass * bodies.(j).mass) / distance;
133133

134134
j += 1;

0 commit comments

Comments
 (0)