Skip to content

Commit 1dbf09c

Browse files
committed
Merge remote-tracking branch 'yan-fork/main' into emscripten-22847
2 parents b7210dc + 22f971c commit 1dbf09c

25 files changed

+68
-51
lines changed

.circleci/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ jobs:
544544
test_targets: "
545545
lto2.test_dylink_syslibs_all
546546
lto2.test_float_builtins
547+
lto2.test_avx_nontrapping
547548
lto0.test_exceptions_allowed_uncaught
548549
lto0.test_longjmp_standalone_standalone
549550
lto0.test_embind_i64_val

src/runtime_pthread.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ var workerID = 0;
1717
if (ENVIRONMENT_IS_PTHREAD) {
1818
#if !MINIMAL_RUNTIME
1919
var wasmPromiseResolve;
20-
var wasmPromiseReject;
2120
#endif
22-
var receivedWasmModule;
2321

2422
#if ENVIRONMENT_MAY_BE_NODE
2523
// Node.js support
@@ -66,7 +64,7 @@ if (ENVIRONMENT_IS_PTHREAD) {
6664

6765
#if !MINIMAL_RUNTIME
6866
Module['instantiateWasm'] = (info, receiveInstance) => {
69-
return new Promise((resolve, reject) => {
67+
return new Promise((resolve) => {
7068
wasmPromiseResolve = (module) => {
7169
// Instantiate from the module posted from the main thread.
7270
// We can just use sync instantiation in the worker.
@@ -81,7 +79,6 @@ if (ENVIRONMENT_IS_PTHREAD) {
8179
#endif
8280
resolve();
8381
};
84-
wasmPromiseReject = reject;
8582
});
8683
}
8784
#endif

system/include/compat/emmintrin.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,10 @@ _mm_cvtpd_epi32(__m128d __a)
383383
int m[2];
384384
for(int i = 0; i < 2; ++i)
385385
{
386-
int x = lrint(__a[i]);
387-
if (x != 0 || fabs(__a[i]) < 2.0)
388-
m[i] = (int)x;
386+
double e = __a[i];
387+
int x = lrint(e);
388+
if ((x != 0 || fabs(e) < 2.0) && !isnan(e) && e <= INT_MAX && e >= INT_MIN)
389+
m[i] = x;
389390
else
390391
m[i] = (int)0x80000000;
391392
}
@@ -396,9 +397,10 @@ static __inline__ int __attribute__((__always_inline__, __nodebug__))
396397
_mm_cvtsd_si32(__m128d __a)
397398
{
398399
// TODO: OPTIMIZE!
399-
int x = lrint(__a[0]);
400-
if (x != 0 || fabs(__a[0]) < 2.0)
401-
return (int)x;
400+
double e = __a[0];
401+
int x = lrint(e);
402+
if ((x != 0 || fabs(e) < 2.0) && !isnan(e) && e <= INT_MAX && e >= INT_MIN)
403+
return x;
402404
else
403405
return (int)0x80000000;
404406
}
@@ -1008,7 +1010,7 @@ _mm_cvtsd_si64(__m128d __a)
10081010
// TODO: optimize
10091011
if (isnan(__a[0]) || isinf(__a[0])) return 0x8000000000000000LL;
10101012
long long x = llrint(__a[0]);
1011-
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabsf(__a[0]) < 2.f))
1013+
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabs(__a[0]) < 2.f))
10121014
return x;
10131015
else
10141016
return 0x8000000000000000LL;
@@ -1018,10 +1020,10 @@ static __inline__ long long __attribute__((__always_inline__, __nodebug__))
10181020
_mm_cvttsd_si64(__m128d __a)
10191021
{
10201022
// TODO: optimize
1021-
float e = __a[0];
1023+
double e = __a[0];
10221024
if (isnan(e) || isinf(e) || e > LLONG_MAX || e < LLONG_MIN) return 0x8000000000000000LL;
10231025
long long x = llrint(e);
1024-
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabsf(e) < 2.f))
1026+
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabs(e) < 2.f))
10251027
// Use the trapping instruction here since we have explicit bounds checks
10261028
// above
10271029
return __builtin_wasm_trunc_s_i64_f32(e);
@@ -1045,8 +1047,9 @@ _mm_cvtps_epi32(__m128 __a)
10451047
} u;
10461048
for(int i = 0; i < 4; ++i)
10471049
{
1048-
int x = lrint(__a[i]);
1049-
if (x != 0 || fabs(__a[i]) < 2.0)
1050+
double e = __a[i];
1051+
int x = lrint(e);
1052+
if ((x != 0 || fabs(e) < 2.0) && !isnan(e) && e <= INT_MAX && e >= INT_MIN)
10501053
u.x[i] = x;
10511054
else
10521055
u.x[i] = (int)0x80000000;

system/include/compat/xmmintrin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ static __inline__ long long __attribute__((__always_inline__, __nodebug__, DIAGN
628628
_mm_cvtss_si64(__m128 __a)
629629
{
630630
if (isnan(((__f32x4)__a)[0]) || isinf(((__f32x4)__a)[0])) return 0x8000000000000000LL;
631-
long long x = llrint(((__f32x4)__a)[0]);
631+
long long x = llrintf(((__f32x4)__a)[0]);
632632
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabsf(((__f32x4)__a)[0]) < 2.f))
633633
return x;
634634
else
@@ -640,7 +640,7 @@ _mm_cvttss_si64(__m128 __a)
640640
{
641641
float e = ((__f32x4)__a)[0];
642642
if (isnan(e) || isinf(e) || e > LLONG_MAX || e < LLONG_MIN) return 0x8000000000000000LL;
643-
long long x = llrint(e);
643+
long long x = llrintf(e);
644644
if (x != 0xFFFFFFFF00000000ULL && (x != 0 || fabsf(e) < 2.f))
645645
return (long long)e;
646646
else

test/code_size/embind_val_wasm.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"a.html.gz": 380,
44
"a.js": 6849,
55
"a.js.gz": 2947,
6-
"a.wasm": 9561,
7-
"a.wasm.gz": 4903,
8-
"total": 16962,
9-
"total_gz": 8230
6+
"a.wasm": 9564,
7+
"a.wasm.gz": 4908,
8+
"total": 16965,
9+
"total_gz": 8235
1010
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"a.html": 12690,
3-
"a.html.gz": 6907,
4-
"total": 12690,
5-
"total_gz": 6907
2+
"a.html": 12694,
3+
"a.html.gz": 6913,
4+
"total": 12694,
5+
"total_gz": 6913
66
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"a.html": 17258,
3-
"a.html.gz": 7500,
4-
"total": 17258,
5-
"total_gz": 7500
2+
"a.html": 17270,
3+
"a.html.gz": 7507,
4+
"total": 17270,
5+
"total_gz": 7507
66
}

test/core/test_int53.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ void writeI53ToI64_int64(int64_t *heapAddress, int64_t num) {
2121
#endif
2222
}
2323

24+
void writeI53ToI64_uint64(uint64_t *heapAddress, uint64_t num) {
25+
#ifdef GENERATE_ANSWERS
26+
*heapAddress = num;
27+
#else
28+
EM_ASM(writeI53ToI64($0, $1), heapAddress, (double)num);
29+
#endif
30+
}
31+
2432
void writeI53ToI64_double(int64_t *heapAddress, double num) {
2533
#ifdef GENERATE_ANSWERS
2634
if (num > 0 || num <= -9223372036854775808.0 /* underflow, garbage in-garbage out situation: just produce a value that matches current JS impl*/)
@@ -119,6 +127,14 @@ int64_t readI53FromU64_toInt64(uint64_t *heapAddress) {
119127
#endif
120128
}
121129

130+
uint64_t readI53FromU64_toUInt64(uint64_t *heapAddress) {
131+
#ifdef GENERATE_ANSWERS
132+
return (uint64_t)*heapAddress;
133+
#else
134+
return (uint64_t)EM_ASM_DOUBLE(return readI53FromU64($0), heapAddress);
135+
#endif
136+
}
137+
122138
double readI53FromU64(uint64_t *heapAddress) {
123139
#ifdef GENERATE_ANSWERS
124140
return (double)*heapAddress;
@@ -137,13 +153,13 @@ int64_t convertI32PairToI53(int32_t lo, int32_t hi) {
137153
#endif
138154
}
139155

140-
int64_t convertU32PairToI53(uint32_t lo, uint32_t hi) {
156+
uint64_t convertU32PairToI53(uint32_t lo, uint32_t hi) {
141157
#ifdef GENERATE_ANSWERS
142158
uint64_t val = (uint32_t)lo;
143159
val |= ((uint64_t)(uint32_t)hi) << 32;
144160
return val;
145161
#else
146-
return (int64_t)EM_ASM_DOUBLE(return convertU32PairToI53($0, $1), lo, hi);
162+
return (uint64_t)EM_ASM_DOUBLE(return convertU32PairToI53($0, $1), lo, hi);
147163
#endif
148164
}
149165

@@ -154,7 +170,7 @@ int64_t testconvertI32PairToI53(int64_t val) {
154170
return convertI32PairToI53(lo, hi);
155171
}
156172

157-
int64_t testconvertU32PairToI53(uint64_t val) {
173+
uint64_t testconvertU32PairToI53(uint64_t val) {
158174
uint32_t lo = (uint32_t)val;
159175
uint32_t hi = val >> 32;
160176
return convertU32PairToI53(lo, hi);
@@ -174,8 +190,8 @@ int64_t testReadWriteI64AsI53(int64_t num) {
174190

175191
uint64_t testReadWriteU64AsI53(uint64_t num) {
176192
uint64_t addr = 0;
177-
writeI53ToI64_int64((int64_t*)&addr, num);
178-
return readI53FromU64_toInt64(&addr);
193+
writeI53ToI64_uint64((uint64_t*)&addr, num);
194+
return readI53FromU64_toUInt64(&addr);
179195
}
180196

181197
int main() {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
129303
1+
129306
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
128749
1+
128752

0 commit comments

Comments
 (0)