Skip to content

Commit 6248783

Browse files
committed
Add llvm.minnum.f(32|64) and llvm.maxnum.f(32|64) intrinsics
This fixes #5976. I’m using #4353 as a model.
1 parent 147a569 commit 6248783

File tree

5 files changed

+28
-0
lines changed

5 files changed

+28
-0
lines changed

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,4 +318,5 @@ a license to everyone to use it as detailed in LICENSE.)
318318
* Dannii Willis <[email protected]>
319319
* Erik Dubbelboer <[email protected]>
320320
* Sergey Tsatsulin <[email protected]>
321+
321322

src/library.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,6 +1582,10 @@ LibraryManager.library = {
15821582
llvm_floor_f64: 'Math_floor',
15831583
llvm_round_f32: 'Math_round',
15841584
llvm_round_f64: 'Math_round',
1585+
llvm_minnum_f32: 'Math_min',
1586+
llvm_minnum_f64: 'Math_min',
1587+
llvm_maxnum_f32: 'Math_max',
1588+
llvm_maxnum_f64: 'Math_max',
15851589

15861590
llvm_exp2_f32: function(x) {
15871591
return Math.pow(2, x);

src/preamble.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1735,6 +1735,7 @@ var Math_imul = Math.imul;
17351735
var Math_fround = Math.fround;
17361736
var Math_round = Math.round;
17371737
var Math_min = Math.min;
1738+
var Math_max = Math.max;
17381739
var Math_clz32 = Math.clz32;
17391740
var Math_trunc = Math.trunc;
17401741

tests/core/test_llvm_intrinsics.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ extern double llvm_copysign_f64(double x, double y);
3737

3838
extern double llvm_round_f64(double x);
3939
extern double llvm_round_f32(double x);
40+
extern float llvm_minnum_f32(float x, float y);
41+
extern double llvm_minnum_f64(double x, double y);
42+
extern float llvm_maxnum_f32(float x, float y);
43+
extern double llvm_maxnum_f64(double x, double y);
4044
}
4145

4246
int main(void) {
@@ -136,6 +140,16 @@ int main(void) {
136140
printf("llvm_round_f32 %.1f\n", llvm_round_f32(-20.5));
137141
printf("llvm_round_f32 %.1f\n", llvm_round_f32(-20.51));
138142

143+
printf("llvm_minnum_f32 %.1f\n", llvm_minnum_f32(5.7, 10.2));
144+
printf("llvm_minnum_f32 %.1f\n", llvm_minnum_f32(8.5, 2.3));
145+
printf("llvm_minnum_f64 %.1f\n", llvm_minnum_f64(5.7, 10.2));
146+
printf("llvm_minnum_f64 %.1f\n", llvm_minnum_f64(8.5, 2.3));
147+
148+
printf("llvm_maxnum_f32 %.1f\n", llvm_maxnum_f32(5.7, 10.2));
149+
printf("llvm_maxnum_f32 %.1f\n", llvm_maxnum_f32(8.5, 2.3));
150+
printf("llvm_maxnum_f64 %.1f\n", llvm_maxnum_f64(5.7, 10.2));
151+
printf("llvm_maxnum_f64 %.1f\n", llvm_maxnum_f64(8.5, 2.3));
152+
139153
printf("llvm_copysign_f32 %.1f\n", llvm_copysign_f32(-1.2, 3.4));
140154
printf("llvm_copysign_f32 %.1f\n", llvm_copysign_f32(5.6, -7.8));
141155
printf("llvm_copysign_f32 %.1f\n", llvm_copysign_f32(-1.3, -2.4));

tests/core/test_llvm_intrinsics.out

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ llvm_round_f32 21.0
6969
llvm_round_f32 42.0
7070
llvm_round_f32 -20.0
7171
llvm_round_f32 -21.0
72+
llvm_minnum_f32 5.7
73+
llvm_minnum_f32 2.3
74+
llvm_minnum_f64 5.7
75+
llvm_minnum_f64 2.3
76+
llvm_maxnum_f32 10.2
77+
llvm_maxnum_f32 8.5
78+
llvm_maxnum_f64 10.2
79+
llvm_maxnum_f64 8.5
7280
llvm_copysign_f32 1.2
7381
llvm_copysign_f32 -5.6
7482
llvm_copysign_f32 -1.3

0 commit comments

Comments
 (0)