Skip to content

Commit a36c455

Browse files
authored
Add i64x2.extend_low/high_* SIMD instructions to C/JS API (#3778)
Adds C/JS APIs for the SIMD instructions * ExtendLowSVecI32x4ToVecI64x2 * ExtendHighSVecI32x4ToVecI64x2 * ExtendLowUVecI32x4ToVecI64x2 * ExtendHighUVecI32x4ToVecI64x2
1 parent 2f2d5a8 commit a36c455

File tree

7 files changed

+100
-0
lines changed

7 files changed

+100
-0
lines changed

src/binaryen-c.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,18 @@ BinaryenOp BinaryenExtendLowUVecI16x8ToVecI32x4(void) {
698698
BinaryenOp BinaryenExtendHighUVecI16x8ToVecI32x4(void) {
699699
return ExtendHighUVecI16x8ToVecI32x4;
700700
}
701+
BinaryenOp BinaryenExtendLowSVecI32x4ToVecI64x2(void) {
702+
return ExtendLowSVecI32x4ToVecI64x2;
703+
}
704+
BinaryenOp BinaryenExtendHighSVecI32x4ToVecI64x2(void) {
705+
return ExtendHighSVecI32x4ToVecI64x2;
706+
}
707+
BinaryenOp BinaryenExtendLowUVecI32x4ToVecI64x2(void) {
708+
return ExtendLowUVecI32x4ToVecI64x2;
709+
}
710+
BinaryenOp BinaryenExtendHighUVecI32x4ToVecI64x2(void) {
711+
return ExtendHighUVecI32x4ToVecI64x2;
712+
}
701713
BinaryenOp BinaryenSwizzleVec8x16(void) { return SwizzleVec8x16; }
702714
BinaryenOp BinaryenRefIsNull(void) { return RefIsNull; }
703715
BinaryenOp BinaryenRefIsFunc(void) { return RefIsFunc; }

src/binaryen-c.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,10 @@ BINARYEN_API BinaryenOp BinaryenExtendLowSVecI16x8ToVecI32x4(void);
557557
BINARYEN_API BinaryenOp BinaryenExtendHighSVecI16x8ToVecI32x4(void);
558558
BINARYEN_API BinaryenOp BinaryenExtendLowUVecI16x8ToVecI32x4(void);
559559
BINARYEN_API BinaryenOp BinaryenExtendHighUVecI16x8ToVecI32x4(void);
560+
BINARYEN_API BinaryenOp BinaryenExtendLowSVecI32x4ToVecI64x2(void);
561+
BINARYEN_API BinaryenOp BinaryenExtendHighSVecI32x4ToVecI64x2(void);
562+
BINARYEN_API BinaryenOp BinaryenExtendLowUVecI32x4ToVecI64x2(void);
563+
BINARYEN_API BinaryenOp BinaryenExtendHighUVecI32x4ToVecI64x2(void);
560564
BINARYEN_API BinaryenOp BinaryenSwizzleVec8x16(void);
561565
BINARYEN_API BinaryenOp BinaryenRefIsNull(void);
562566
BINARYEN_API BinaryenOp BinaryenRefIsFunc(void);

src/js/binaryen.js-post.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,10 @@ function initializeConstants() {
485485
'ExtendHighSVecI16x8ToVecI32x4',
486486
'ExtendLowUVecI16x8ToVecI32x4',
487487
'ExtendHighUVecI16x8ToVecI32x4',
488+
'ExtendLowSVecI32x4ToVecI64x2',
489+
'ExtendHighSVecI32x4ToVecI64x2',
490+
'ExtendLowUVecI32x4ToVecI64x2',
491+
'ExtendHighUVecI32x4ToVecI64x2',
488492
'SwizzleVec8x16',
489493
'RefIsNull',
490494
'RefIsFunc',
@@ -1896,6 +1900,18 @@ function wrapModule(module, self = {}) {
18961900
'mul'(left, right) {
18971901
return Module['_BinaryenBinary'](module, Module['MulVecI64x2'], left, right);
18981902
},
1903+
'extend_low_i32x4_s'(value) {
1904+
return Module['_BinaryenUnary'](module, Module['ExtendLowSVecI32x4ToVecI64x2'], value);
1905+
},
1906+
'extend_high_i32x4_s'(value) {
1907+
return Module['_BinaryenUnary'](module, Module['ExtendHighSVecI32x4ToVecI64x2'], value);
1908+
},
1909+
'extend_low_i32x4_u'(value) {
1910+
return Module['_BinaryenUnary'](module, Module['ExtendLowUVecI32x4ToVecI64x2'], value);
1911+
},
1912+
'extend_high_i32x4_u'(value) {
1913+
return Module['_BinaryenUnary'](module, Module['ExtendHighUVecI32x4ToVecI64x2'], value);
1914+
},
18991915
};
19001916

19011917
self['f32x4'] = {

test/binaryen.js/kitchen-sink.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,10 @@ function test_core() {
301301
module.i32x4.extend_high_i16x8_s(module.v128.const(v128_bytes)),
302302
module.i32x4.extend_low_i16x8_u(module.v128.const(v128_bytes)),
303303
module.i32x4.extend_high_i16x8_u(module.v128.const(v128_bytes)),
304+
module.i64x2.extend_low_i32x4_s(module.v128.const(v128_bytes)),
305+
module.i64x2.extend_high_i32x4_s(module.v128.const(v128_bytes)),
306+
module.i64x2.extend_low_i32x4_u(module.v128.const(v128_bytes)),
307+
module.i64x2.extend_high_i32x4_u(module.v128.const(v128_bytes)),
304308
// Binary
305309
module.i32.add(module.i32.const(-10), module.i32.const(-11)),
306310
module.f64.sub(module.f64.const(-9005.841), module.f64.const(-9007.333)),

test/binaryen.js/kitchen-sink.js.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,26 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
581581
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
582582
)
583583
)
584+
(drop
585+
(i64x2.extend_low_i32x4_s
586+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
587+
)
588+
)
589+
(drop
590+
(i64x2.extend_high_i32x4_s
591+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
592+
)
593+
)
594+
(drop
595+
(i64x2.extend_low_i32x4_u
596+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
597+
)
598+
)
599+
(drop
600+
(i64x2.extend_high_i32x4_u
601+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
602+
)
603+
)
584604
(drop
585605
(i32.add
586606
(i32.const -10)
@@ -2435,6 +2455,26 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
24352455
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
24362456
)
24372457
)
2458+
(drop
2459+
(i64x2.extend_low_i32x4_s
2460+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
2461+
)
2462+
)
2463+
(drop
2464+
(i64x2.extend_high_i32x4_s
2465+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
2466+
)
2467+
)
2468+
(drop
2469+
(i64x2.extend_low_i32x4_u
2470+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
2471+
)
2472+
)
2473+
(drop
2474+
(i64x2.extend_high_i32x4_u
2475+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
2476+
)
2477+
)
24382478
(drop
24392479
(i32.add
24402480
(i32.const -10)

test/example/c-api-kitchen-sink.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,10 @@ void test_core() {
439439
makeUnary(module, BinaryenExtendHighSVecI16x8ToVecI32x4(), v128),
440440
makeUnary(module, BinaryenExtendLowUVecI16x8ToVecI32x4(), v128),
441441
makeUnary(module, BinaryenExtendHighUVecI16x8ToVecI32x4(), v128),
442+
makeUnary(module, BinaryenExtendLowSVecI32x4ToVecI64x2(), v128),
443+
makeUnary(module, BinaryenExtendHighSVecI32x4ToVecI64x2(), v128),
444+
makeUnary(module, BinaryenExtendLowUVecI32x4ToVecI64x2(), v128),
445+
makeUnary(module, BinaryenExtendHighUVecI32x4ToVecI64x2(), v128),
442446
// Binary
443447
makeBinary(module, BinaryenAddInt32(), i32),
444448
makeBinary(module, BinaryenSubFloat64(), f64),

test/example/c-api-kitchen-sink.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,26 @@ BinaryenFeatureAll: 8191
491491
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
492492
)
493493
)
494+
(drop
495+
(i64x2.extend_low_i32x4_s
496+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
497+
)
498+
)
499+
(drop
500+
(i64x2.extend_high_i32x4_s
501+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
502+
)
503+
)
504+
(drop
505+
(i64x2.extend_low_i32x4_u
506+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
507+
)
508+
)
509+
(drop
510+
(i64x2.extend_high_i32x4_u
511+
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
512+
)
513+
)
494514
(drop
495515
(i32.add
496516
(i32.const -10)

0 commit comments

Comments
 (0)