Skip to content

Commit c99ac5b

Browse files
Binary api
1 parent 60966ed commit c99ac5b

2 files changed

Lines changed: 196 additions & 0 deletions

File tree

src/binaryen-c.cpp

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,10 @@ BinaryenOp BinaryenLtFloat64(void) { return LtFloat64; }
690690
BinaryenOp BinaryenLeFloat64(void) { return LeFloat64; }
691691
BinaryenOp BinaryenGtFloat64(void) { return GtFloat64; }
692692
BinaryenOp BinaryenGeFloat64(void) { return GeFloat64; }
693+
BinaryenOp BinaryenAddInt128(void) { return AddInt128; }
694+
BinaryenOp BinaryenSubInt128(void) { return SubInt128; }
695+
BinaryenOp BinaryenMulWideSInt64(void) { return MulWideSInt64; }
696+
BinaryenOp BinaryenMulWideUInt64(void) { return MulWideUInt64; }
693697
BinaryenOp BinaryenAtomicRMWAdd(void) { return RMWAdd; }
694698
BinaryenOp BinaryenAtomicRMWSub(void) { return RMWSub; }
695699
BinaryenOp BinaryenAtomicRMWAnd(void) { return RMWAnd; }
@@ -1315,6 +1319,27 @@ BinaryenExpressionRef BinaryenBinary(BinaryenModuleRef module,
13151319
Builder(*(Module*)module)
13161320
.makeBinary(BinaryOp(op), (Expression*)left, (Expression*)right));
13171321
}
1322+
BinaryenExpressionRef BinaryenWideIntAddSub(BinaryenModuleRef module,
1323+
BinaryenOp op,
1324+
BinaryenExpressionRef leftLow,
1325+
BinaryenExpressionRef leftHigh,
1326+
BinaryenExpressionRef rightLow,
1327+
BinaryenExpressionRef rightHigh) {
1328+
return static_cast<Expression*>(Builder(*(Module*)module)
1329+
.makeWideIntAddSub(WideIntAddSubOp(op),
1330+
(Expression*)leftLow,
1331+
(Expression*)leftHigh,
1332+
(Expression*)rightLow,
1333+
(Expression*)rightHigh));
1334+
}
1335+
BinaryenExpressionRef BinaryenWideIntMul(BinaryenModuleRef module,
1336+
BinaryenOp op,
1337+
BinaryenExpressionRef left,
1338+
BinaryenExpressionRef right) {
1339+
return static_cast<Expression*>(
1340+
Builder(*(Module*)module)
1341+
.makeWideIntMul(WideIntMulOp(op), (Expression*)left, (Expression*)right));
1342+
}
13181343
BinaryenExpressionRef BinaryenSelect(BinaryenModuleRef module,
13191344
BinaryenExpressionRef condition,
13201345
BinaryenExpressionRef ifTrue,
@@ -2946,6 +2971,105 @@ void BinaryenBinarySetRight(BinaryenExpressionRef expr,
29462971
assert(rightExpr);
29472972
static_cast<Binary*>(expression)->right = (Expression*)rightExpr;
29482973
}
2974+
// WideIntAddSub
2975+
BinaryenOp BinaryenWideIntAddSubGetOp(BinaryenExpressionRef expr) {
2976+
auto* expression = (Expression*)expr;
2977+
assert(expression->is<WideIntAddSub>());
2978+
return static_cast<WideIntAddSub*>(expression)->op;
2979+
}
2980+
void BinaryenWideIntAddSubSetOp(BinaryenExpressionRef expr, BinaryenOp op) {
2981+
auto* expression = (Expression*)expr;
2982+
assert(expression->is<WideIntAddSub>());
2983+
static_cast<WideIntAddSub*>(expression)->op = WideIntAddSubOp(op);
2984+
}
2985+
BinaryenExpressionRef
2986+
BinaryenWideIntAddSubGetLeftLow(BinaryenExpressionRef expr) {
2987+
auto* expression = (Expression*)expr;
2988+
assert(expression->is<WideIntAddSub>());
2989+
return static_cast<WideIntAddSub*>(expression)->leftLow;
2990+
}
2991+
void BinaryenWideIntAddSubSetLeftLow(BinaryenExpressionRef expr,
2992+
BinaryenExpressionRef leftLowExpr) {
2993+
auto* expression = (Expression*)expr;
2994+
assert(expression->is<WideIntAddSub>());
2995+
assert(leftLowExpr);
2996+
static_cast<WideIntAddSub*>(expression)->leftLow = (Expression*)leftLowExpr;
2997+
}
2998+
BinaryenExpressionRef
2999+
BinaryenWideIntAddSubGetLeftHigh(BinaryenExpressionRef expr) {
3000+
auto* expression = (Expression*)expr;
3001+
assert(expression->is<WideIntAddSub>());
3002+
return static_cast<WideIntAddSub*>(expression)->leftHigh;
3003+
}
3004+
void BinaryenWideIntAddSubSetLeftHigh(BinaryenExpressionRef expr,
3005+
BinaryenExpressionRef leftHighExpr) {
3006+
auto* expression = (Expression*)expr;
3007+
assert(expression->is<WideIntAddSub>());
3008+
assert(leftHighExpr);
3009+
static_cast<WideIntAddSub*>(expression)->leftHigh = (Expression*)leftHighExpr;
3010+
}
3011+
BinaryenExpressionRef
3012+
BinaryenWideIntAddSubGetRightLow(BinaryenExpressionRef expr) {
3013+
auto* expression = (Expression*)expr;
3014+
assert(expression->is<WideIntAddSub>());
3015+
return static_cast<WideIntAddSub*>(expression)->rightLow;
3016+
}
3017+
void BinaryenWideIntAddSubSetRightLow(BinaryenExpressionRef expr,
3018+
BinaryenExpressionRef rightLowExpr) {
3019+
auto* expression = (Expression*)expr;
3020+
assert(expression->is<WideIntAddSub>());
3021+
assert(rightLowExpr);
3022+
static_cast<WideIntAddSub*>(expression)->rightLow = (Expression*)rightLowExpr;
3023+
}
3024+
BinaryenExpressionRef
3025+
BinaryenWideIntAddSubGetRightHigh(BinaryenExpressionRef expr) {
3026+
auto* expression = (Expression*)expr;
3027+
assert(expression->is<WideIntAddSub>());
3028+
return static_cast<WideIntAddSub*>(expression)->rightHigh;
3029+
}
3030+
void BinaryenWideIntAddSubSetRightHigh(BinaryenExpressionRef expr,
3031+
BinaryenExpressionRef rightHighExpr) {
3032+
auto* expression = (Expression*)expr;
3033+
assert(expression->is<WideIntAddSub>());
3034+
assert(rightHighExpr);
3035+
static_cast<WideIntAddSub*>(expression)->rightHigh =
3036+
(Expression*)rightHighExpr;
3037+
}
3038+
// WideIntMul
3039+
BinaryenOp BinaryenWideIntMulGetOp(BinaryenExpressionRef expr) {
3040+
auto* expression = (Expression*)expr;
3041+
assert(expression->is<WideIntMul>());
3042+
return static_cast<WideIntMul*>(expression)->op;
3043+
}
3044+
void BinaryenWideIntMulSetOp(BinaryenExpressionRef expr, BinaryenOp op) {
3045+
auto* expression = (Expression*)expr;
3046+
assert(expression->is<WideIntMul>());
3047+
static_cast<WideIntMul*>(expression)->op = WideIntMulOp(op);
3048+
}
3049+
BinaryenExpressionRef BinaryenWideIntMulGetLeft(BinaryenExpressionRef expr) {
3050+
auto* expression = (Expression*)expr;
3051+
assert(expression->is<WideIntMul>());
3052+
return static_cast<WideIntMul*>(expression)->left;
3053+
}
3054+
void BinaryenWideIntMulSetLeft(BinaryenExpressionRef expr,
3055+
BinaryenExpressionRef leftExpr) {
3056+
auto* expression = (Expression*)expr;
3057+
assert(expression->is<WideIntMul>());
3058+
assert(leftExpr);
3059+
static_cast<WideIntMul*>(expression)->left = (Expression*)leftExpr;
3060+
}
3061+
BinaryenExpressionRef BinaryenWideIntMulGetRight(BinaryenExpressionRef expr) {
3062+
auto* expression = (Expression*)expr;
3063+
assert(expression->is<WideIntMul>());
3064+
return static_cast<WideIntMul*>(expression)->right;
3065+
}
3066+
void BinaryenWideIntMulSetRight(BinaryenExpressionRef expr,
3067+
BinaryenExpressionRef rightExpr) {
3068+
auto* expression = (Expression*)expr;
3069+
assert(expression->is<WideIntMul>());
3070+
assert(rightExpr);
3071+
static_cast<WideIntMul*>(expression)->right = (Expression*)rightExpr;
3072+
}
29493073
// Select
29503074
BinaryenExpressionRef BinaryenSelectGetIfTrue(BinaryenExpressionRef expr) {
29513075
auto* expression = (Expression*)expr;

src/binaryen-c.h

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,10 @@ BINARYEN_API BinaryenOp BinaryenLtFloat64(void);
431431
BINARYEN_API BinaryenOp BinaryenLeFloat64(void);
432432
BINARYEN_API BinaryenOp BinaryenGtFloat64(void);
433433
BINARYEN_API BinaryenOp BinaryenGeFloat64(void);
434+
BINARYEN_API BinaryenOp BinaryenAddInt128(void);
435+
BINARYEN_API BinaryenOp BinaryenSubInt128(void);
436+
BINARYEN_API BinaryenOp BinaryenMulWideSInt64(void);
437+
BINARYEN_API BinaryenOp BinaryenMulWideUInt64(void);
434438
BINARYEN_API BinaryenOp BinaryenAtomicRMWAdd(void);
435439
BINARYEN_API BinaryenOp BinaryenAtomicRMWSub(void);
436440
BINARYEN_API BinaryenOp BinaryenAtomicRMWAnd(void);
@@ -841,6 +845,18 @@ BINARYEN_API BinaryenExpressionRef BinaryenBinary(BinaryenModuleRef module,
841845
BinaryenExpressionRef left,
842846
BinaryenExpressionRef right);
843847
BINARYEN_API BinaryenExpressionRef
848+
BinaryenWideIntAddSub(BinaryenModuleRef module,
849+
BinaryenOp op,
850+
BinaryenExpressionRef leftLow,
851+
BinaryenExpressionRef leftHigh,
852+
BinaryenExpressionRef rightLow,
853+
BinaryenExpressionRef rightHigh);
854+
BINARYEN_API BinaryenExpressionRef
855+
BinaryenWideIntMul(BinaryenModuleRef module,
856+
BinaryenOp op,
857+
BinaryenExpressionRef left,
858+
BinaryenExpressionRef right);
859+
BINARYEN_API BinaryenExpressionRef
844860
BinaryenSelect(BinaryenModuleRef module,
845861
BinaryenExpressionRef condition,
846862
BinaryenExpressionRef ifTrue,
@@ -1704,6 +1720,62 @@ BinaryenBinaryGetRight(BinaryenExpressionRef expr);
17041720
BINARYEN_API void BinaryenBinarySetRight(BinaryenExpressionRef expr,
17051721
BinaryenExpressionRef rightExpr);
17061722

1723+
// WideIntAddSub
1724+
1725+
// Gets the operation being performed by a wide int add/sub expression.
1726+
BINARYEN_API BinaryenOp BinaryenWideIntAddSubGetOp(BinaryenExpressionRef expr);
1727+
// Sets the operation being performed by a wide int add/sub expression.
1728+
BINARYEN_API void BinaryenWideIntAddSubSetOp(BinaryenExpressionRef expr,
1729+
BinaryenOp op);
1730+
// Gets the left low expression of a wide int add/sub expression.
1731+
BINARYEN_API BinaryenExpressionRef
1732+
BinaryenWideIntAddSubGetLeftLow(BinaryenExpressionRef expr);
1733+
// Sets the left low expression of a wide int add/sub expression.
1734+
BINARYEN_API void
1735+
BinaryenWideIntAddSubSetLeftLow(BinaryenExpressionRef expr,
1736+
BinaryenExpressionRef leftLowExpr);
1737+
// Gets the left high expression of a wide int add/sub expression.
1738+
BINARYEN_API BinaryenExpressionRef
1739+
BinaryenWideIntAddSubGetLeftHigh(BinaryenExpressionRef expr);
1740+
// Sets the left high expression of a wide int add/sub expression.
1741+
BINARYEN_API void
1742+
BinaryenWideIntAddSubSetLeftHigh(BinaryenExpressionRef expr,
1743+
BinaryenExpressionRef leftHighExpr);
1744+
// Gets the right low expression of a wide int add/sub expression.
1745+
BINARYEN_API BinaryenExpressionRef
1746+
BinaryenWideIntAddSubGetRightLow(BinaryenExpressionRef expr);
1747+
// Sets the right low expression of a wide int add/sub expression.
1748+
BINARYEN_API void
1749+
BinaryenWideIntAddSubSetRightLow(BinaryenExpressionRef expr,
1750+
BinaryenExpressionRef rightLowExpr);
1751+
// Gets the right high expression of a wide int add/sub expression.
1752+
BINARYEN_API BinaryenExpressionRef
1753+
BinaryenWideIntAddSubGetRightHigh(BinaryenExpressionRef expr);
1754+
// Sets the right high expression of a wide int add/sub expression.
1755+
BINARYEN_API void
1756+
BinaryenWideIntAddSubSetRightHigh(BinaryenExpressionRef expr,
1757+
BinaryenExpressionRef rightHighExpr);
1758+
1759+
// WideIntMul
1760+
1761+
// Gets the operation being performed by a wide int mul expression.
1762+
BINARYEN_API BinaryenOp BinaryenWideIntMulGetOp(BinaryenExpressionRef expr);
1763+
// Sets the operation being performed by a wide int mul expression.
1764+
BINARYEN_API void BinaryenWideIntMulSetOp(BinaryenExpressionRef expr,
1765+
BinaryenOp op);
1766+
// Gets the left expression of a wide int mul expression.
1767+
BINARYEN_API BinaryenExpressionRef
1768+
BinaryenWideIntMulGetLeft(BinaryenExpressionRef expr);
1769+
// Sets the left expression of a wide int mul expression.
1770+
BINARYEN_API void BinaryenWideIntMulSetLeft(BinaryenExpressionRef expr,
1771+
BinaryenExpressionRef leftExpr);
1772+
// Gets the right expression of a wide int mul expression.
1773+
BINARYEN_API BinaryenExpressionRef
1774+
BinaryenWideIntMulGetRight(BinaryenExpressionRef expr);
1775+
// Sets the right expression of a wide int mul expression.
1776+
BINARYEN_API void BinaryenWideIntMulSetRight(BinaryenExpressionRef expr,
1777+
BinaryenExpressionRef rightExpr);
1778+
17071779
// Select
17081780

17091781
// Gets the expression becoming selected by a `select` expression if the

0 commit comments

Comments
 (0)