Skip to content

Commit dd06ae0

Browse files
committed
add some llvm math funcs for rust #4543
1 parent 2cbaa7d commit dd06ae0

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/library.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,6 +1462,21 @@ LibraryManager.library = {
14621462
llvm_floor_f32: 'Math_floor',
14631463
llvm_floor_f64: 'Math_floor',
14641464

1465+
llvm_exp2_f32: function(x) {
1466+
return Math.pow(2, x);
1467+
},
1468+
llvm_exp2_f64: 'llvm_exp2_f32',
1469+
1470+
llvm_log2_f32: function(x) {
1471+
return Math.log(x) / Math.LN2; // TODO: Math.log2, when browser support is there
1472+
},
1473+
llvm_log2_f64: 'llvm_log2_f32',
1474+
1475+
llvm_log10_f32: function(x) {
1476+
return Math.log(x) / Math.LN10; // TODO: Math.log10, when browser support is there
1477+
},
1478+
llvm_log10_f64: 'llvm_log10_f32',
1479+
14651480
llvm_copysign_f32: function(x, y) {
14661481
return y < 0 || (y === 0 && 1/y < 0) ? -Math_abs(x) : Math_abs(x);
14671482
},

tests/core/test_llvm_intrinsics.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ extern float llvm_floor_f32(float x);
1919
extern double llvm_floor_f64(double x);
2020
extern float llvm_sin_f32(float x);
2121
extern double llvm_sin_f64(double x);
22+
extern float llvm_exp2_f32(float x);
23+
extern double llvm_exp2_f64(double x);
24+
extern float llvm_log2_f32(float x);
25+
extern double llvm_log2_f64(double x);
26+
extern float llvm_log10_f32(float x);
27+
extern double llvm_log10_f64(double x);
2228
}
2329

2430
int main(void) {
@@ -67,5 +73,14 @@ int main(void) {
6773
printf("%.1f\n", llvm_sin_f32(90.0f * 3.14/180));
6874
printf("%.1f\n", llvm_sin_f64(270.0 * 3.14/180));
6975

76+
printf("exp2_f32 %.1f\n", llvm_exp2_f32(3));
77+
printf("exp2_f64 %.1f\n", llvm_exp2_f64(4.5));
78+
printf("log2_f32 %.1f\n", llvm_log2_f32(16));
79+
printf("log2_f64 %.1f\n", llvm_log2_f64(20));
80+
printf("log10_f32 %.1f\n", llvm_log10_f32(1000));
81+
printf("log10_f64 %.1f\n", llvm_log10_f64(2000));
82+
83+
printf("ok.\n");
84+
7085
return 0;
7186
}

tests/core/test_llvm_intrinsics.out

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,10 @@ llvm_expect_i32:
2626
-9
2727
1.0
2828
-1.0
29+
exp2_f32 8.0
30+
exp2_f64 22.6
31+
log2_f32 4.0
32+
log2_f64 4.3
33+
log10_f32 3.0
34+
log10_f64 3.3
35+
ok.

0 commit comments

Comments
 (0)