Skip to content

Commit 2456e11

Browse files
committed
[WebAssembly] Add SIMD intrinsics using unsigned integers
For each SIMD intrinsic function that takes or returns a scalar signed integer value, ensure there is a corresponding intrinsic that returns or an unsigned value. This is a convenience for users who use -Wsign-conversion so they don't have to insert explicit casts, especially when the intrinsic arguments are integer literals that fit into the unsigned integer type but not the signed type. Differential Revision: https://reviews.llvm.org/D108412
1 parent 2a47a84 commit 2456e11

File tree

2 files changed

+398
-18
lines changed

2 files changed

+398
-18
lines changed

clang/lib/Headers/wasm_simd128.h

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,24 +276,52 @@ wasm_i8x16_make(int8_t __c0, int8_t __c1, int8_t __c2, int8_t __c3, int8_t __c4,
276276
__c12, __c13, __c14, __c15};
277277
}
278278

279+
static __inline__ v128_t __DEFAULT_FN_ATTRS
280+
wasm_u8x16_make(uint8_t __c0, uint8_t __c1, uint8_t __c2, uint8_t __c3,
281+
uint8_t __c4, uint8_t __c5, uint8_t __c6, uint8_t __c7,
282+
uint8_t __c8, uint8_t __c9, uint8_t __c10, uint8_t __c11,
283+
uint8_t __c12, uint8_t __c13, uint8_t __c14, uint8_t __c15) {
284+
return (v128_t)(__u8x16){__c0, __c1, __c2, __c3, __c4, __c5,
285+
__c6, __c7, __c8, __c9, __c10, __c11,
286+
__c12, __c13, __c14, __c15};
287+
}
288+
279289
static __inline__ v128_t __DEFAULT_FN_ATTRS
280290
wasm_i16x8_make(int16_t __c0, int16_t __c1, int16_t __c2, int16_t __c3,
281291
int16_t __c4, int16_t __c5, int16_t __c6, int16_t __c7) {
282292
return (v128_t)(__i16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7};
283293
}
284294

295+
static __inline__ v128_t __DEFAULT_FN_ATTRS
296+
wasm_u16x8_make(uint16_t __c0, uint16_t __c1, uint16_t __c2, uint16_t __c3,
297+
uint16_t __c4, uint16_t __c5, uint16_t __c6, uint16_t __c7) {
298+
return (v128_t)(__u16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7};
299+
}
300+
285301
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_make(int32_t __c0,
286302
int32_t __c1,
287303
int32_t __c2,
288304
int32_t __c3) {
289305
return (v128_t)(__i32x4){__c0, __c1, __c2, __c3};
290306
}
291307

308+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_make(uint32_t __c0,
309+
uint32_t __c1,
310+
uint32_t __c2,
311+
uint32_t __c3) {
312+
return (v128_t)(__u32x4){__c0, __c1, __c2, __c3};
313+
}
314+
292315
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_make(int64_t __c0,
293316
int64_t __c1) {
294317
return (v128_t)(__i64x2){__c0, __c1};
295318
}
296319

320+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_make(uint64_t __c0,
321+
uint64_t __c1) {
322+
return (v128_t)(__u64x2){__c0, __c1};
323+
}
324+
297325
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_make(float __c0,
298326
float __c1,
299327
float __c2,
@@ -324,6 +352,24 @@ wasm_i8x16_const(int8_t __c0, int8_t __c1, int8_t __c2, int8_t __c3,
324352
__c12, __c13, __c14, __c15};
325353
}
326354

355+
static __inline__ v128_t __DEFAULT_FN_ATTRS
356+
wasm_u8x16_const(uint8_t __c0, uint8_t __c1, uint8_t __c2, uint8_t __c3,
357+
uint8_t __c4, uint8_t __c5, uint8_t __c6, uint8_t __c7,
358+
uint8_t __c8, uint8_t __c9, uint8_t __c10, uint8_t __c11,
359+
uint8_t __c12, uint8_t __c13, uint8_t __c14, uint8_t __c15)
360+
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2)
361+
__REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4)
362+
__REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6)
363+
__REQUIRE_CONSTANT(__c7) __REQUIRE_CONSTANT(__c8)
364+
__REQUIRE_CONSTANT(__c9) __REQUIRE_CONSTANT(__c10)
365+
__REQUIRE_CONSTANT(__c11) __REQUIRE_CONSTANT(__c12)
366+
__REQUIRE_CONSTANT(__c13) __REQUIRE_CONSTANT(__c14)
367+
__REQUIRE_CONSTANT(__c15) {
368+
return (v128_t)(__u8x16){__c0, __c1, __c2, __c3, __c4, __c5,
369+
__c6, __c7, __c8, __c9, __c10, __c11,
370+
__c12, __c13, __c14, __c15};
371+
}
372+
327373
static __inline__ v128_t __DEFAULT_FN_ATTRS
328374
wasm_i16x8_const(int16_t __c0, int16_t __c1, int16_t __c2, int16_t __c3,
329375
int16_t __c4, int16_t __c5, int16_t __c6, int16_t __c7)
@@ -334,19 +380,42 @@ wasm_i16x8_const(int16_t __c0, int16_t __c1, int16_t __c2, int16_t __c3,
334380
return (v128_t)(__i16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7};
335381
}
336382

383+
static __inline__ v128_t __DEFAULT_FN_ATTRS
384+
wasm_u16x8_const(uint16_t __c0, uint16_t __c1, uint16_t __c2, uint16_t __c3,
385+
uint16_t __c4, uint16_t __c5, uint16_t __c6, uint16_t __c7)
386+
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2)
387+
__REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4)
388+
__REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6)
389+
__REQUIRE_CONSTANT(__c7) {
390+
return (v128_t)(__u16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7};
391+
}
392+
337393
static __inline__ v128_t __DEFAULT_FN_ATTRS
338394
wasm_i32x4_const(int32_t __c0, int32_t __c1, int32_t __c2, int32_t __c3)
339395
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2)
340396
__REQUIRE_CONSTANT(__c3) {
341397
return (v128_t)(__i32x4){__c0, __c1, __c2, __c3};
342398
}
343399

400+
static __inline__ v128_t __DEFAULT_FN_ATTRS
401+
wasm_u32x4_const(uint32_t __c0, uint32_t __c1, uint32_t __c2, uint32_t __c3)
402+
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2)
403+
__REQUIRE_CONSTANT(__c3) {
404+
return (v128_t)(__u32x4){__c0, __c1, __c2, __c3};
405+
}
406+
344407
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_const(int64_t __c0,
345408
int64_t __c1)
346409
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) {
347410
return (v128_t)(__i64x2){__c0, __c1};
348411
}
349412

413+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_const(uint64_t __c0,
414+
uint64_t __c1)
415+
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) {
416+
return (v128_t)(__u64x2){__c0, __c1};
417+
}
418+
350419
static __inline__ v128_t __DEFAULT_FN_ATTRS
351420
wasm_f32x4_const(float __c0, float __c1, float __c2, float __c3)
352421
__REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2)
@@ -366,21 +435,42 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_const_splat(int8_t __c)
366435
__c, __c, __c, __c, __c, __c, __c, __c};
367436
}
368437

438+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_const_splat(uint8_t __c)
439+
__REQUIRE_CONSTANT(__c) {
440+
return (v128_t)(__u8x16){__c, __c, __c, __c, __c, __c, __c, __c,
441+
__c, __c, __c, __c, __c, __c, __c, __c};
442+
}
443+
369444
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_const_splat(int16_t __c)
370445
__REQUIRE_CONSTANT(__c) {
371446
return (v128_t)(__i16x8){__c, __c, __c, __c, __c, __c, __c, __c};
372447
}
373448

449+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_const_splat(uint16_t __c)
450+
__REQUIRE_CONSTANT(__c) {
451+
return (v128_t)(__u16x8){__c, __c, __c, __c, __c, __c, __c, __c};
452+
}
453+
374454
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_const_splat(int32_t __c)
375455
__REQUIRE_CONSTANT(__c) {
376456
return (v128_t)(__i32x4){__c, __c, __c, __c};
377457
}
378458

459+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_const_splat(uint32_t __c)
460+
__REQUIRE_CONSTANT(__c) {
461+
return (v128_t)(__u32x4){__c, __c, __c, __c};
462+
}
463+
379464
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_const_splat(int64_t __c)
380465
__REQUIRE_CONSTANT(__c) {
381466
return (v128_t)(__i64x2){__c, __c};
382467
}
383468

469+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_const_splat(uint64_t __c)
470+
__REQUIRE_CONSTANT(__c) {
471+
return (v128_t)(__u64x2){__c, __c};
472+
}
473+
384474
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_const_splat(float __c)
385475
__REQUIRE_CONSTANT(__c) {
386476
return (v128_t)(__f32x4){__c, __c, __c, __c};
@@ -396,6 +486,11 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_splat(int8_t __a) {
396486
__a, __a, __a, __a, __a, __a, __a, __a};
397487
}
398488

489+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_splat(uint8_t __a) {
490+
return (v128_t)(__u8x16){__a, __a, __a, __a, __a, __a, __a, __a,
491+
__a, __a, __a, __a, __a, __a, __a, __a};
492+
}
493+
399494
static __inline__ int8_t __DEFAULT_FN_ATTRS wasm_i8x16_extract_lane(v128_t __a,
400495
int __i)
401496
__REQUIRE_CONSTANT(__i) {
@@ -417,10 +512,23 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_replace_lane(v128_t __a,
417512
return (v128_t)__v;
418513
}
419514

515+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_replace_lane(v128_t __a,
516+
int __i,
517+
uint8_t __b)
518+
__REQUIRE_CONSTANT(__i) {
519+
__u8x16 __v = (__u8x16)__a;
520+
__v[__i] = __b;
521+
return (v128_t)__v;
522+
}
523+
420524
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_splat(int16_t __a) {
421525
return (v128_t)(__i16x8){__a, __a, __a, __a, __a, __a, __a, __a};
422526
}
423527

528+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_splat(uint16_t __a) {
529+
return (v128_t)(__u16x8){__a, __a, __a, __a, __a, __a, __a, __a};
530+
}
531+
424532
static __inline__ int16_t __DEFAULT_FN_ATTRS wasm_i16x8_extract_lane(v128_t __a,
425533
int __i)
426534
__REQUIRE_CONSTANT(__i) {
@@ -441,16 +549,32 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_replace_lane(v128_t __a,
441549
return (v128_t)__v;
442550
}
443551

552+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_replace_lane(
553+
v128_t __a, int __i, uint16_t __b) __REQUIRE_CONSTANT(__i) {
554+
__u16x8 __v = (__u16x8)__a;
555+
__v[__i] = __b;
556+
return (v128_t)__v;
557+
}
558+
444559
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_splat(int32_t __a) {
445560
return (v128_t)(__i32x4){__a, __a, __a, __a};
446561
}
447562

563+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_splat(uint32_t __a) {
564+
return (v128_t)(__u32x4){__a, __a, __a, __a};
565+
}
566+
448567
static __inline__ int32_t __DEFAULT_FN_ATTRS wasm_i32x4_extract_lane(v128_t __a,
449568
int __i)
450569
__REQUIRE_CONSTANT(__i) {
451570
return ((__i32x4)__a)[__i];
452571
}
453572

573+
static __inline__ uint32_t __DEFAULT_FN_ATTRS
574+
wasm_u32x4_extract_lane(v128_t __a, int __i) __REQUIRE_CONSTANT(__i) {
575+
return ((__u32x4)__a)[__i];
576+
}
577+
454578
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_replace_lane(v128_t __a,
455579
int __i,
456580
int32_t __b)
@@ -460,16 +584,32 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_replace_lane(v128_t __a,
460584
return (v128_t)__v;
461585
}
462586

587+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_replace_lane(
588+
v128_t __a, int __i, uint32_t __b) __REQUIRE_CONSTANT(__i) {
589+
__u32x4 __v = (__u32x4)__a;
590+
__v[__i] = __b;
591+
return (v128_t)__v;
592+
}
593+
463594
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_splat(int64_t __a) {
464595
return (v128_t)(__i64x2){__a, __a};
465596
}
466597

598+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_splat(uint64_t __a) {
599+
return (v128_t)(__u64x2){__a, __a};
600+
}
601+
467602
static __inline__ int64_t __DEFAULT_FN_ATTRS wasm_i64x2_extract_lane(v128_t __a,
468603
int __i)
469604
__REQUIRE_CONSTANT(__i) {
470605
return ((__i64x2)__a)[__i];
471606
}
472607

608+
static __inline__ uint64_t __DEFAULT_FN_ATTRS
609+
wasm_u64x2_extract_lane(v128_t __a, int __i) __REQUIRE_CONSTANT(__i) {
610+
return ((__u64x2)__a)[__i];
611+
}
612+
473613
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_replace_lane(v128_t __a,
474614
int __i,
475615
int64_t __b)
@@ -479,6 +619,13 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_replace_lane(v128_t __a,
479619
return (v128_t)__v;
480620
}
481621

622+
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_replace_lane(
623+
v128_t __a, int __i, uint64_t __b) __REQUIRE_CONSTANT(__i) {
624+
__u64x2 __v = (__u64x2)__a;
625+
__v[__i] = __b;
626+
return (v128_t)__v;
627+
}
628+
482629
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_splat(float __a) {
483630
return (v128_t)(__f32x4){__a, __a, __a, __a};
484631
}

0 commit comments

Comments
 (0)