From 07c54750eb626ea7434341e439f6cee75efbf4b5 Mon Sep 17 00:00:00 2001 From: Daniel Wirtz Date: Tue, 21 Nov 2017 00:19:12 +0100 Subject: Add atomic load/store to binaryen-c/.js (#1298) --- src/binaryen-c.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/binaryen-c.cpp') diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index f4084eb82..9b46f0aba 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -732,6 +732,26 @@ BinaryenExpressionRef BinaryenUnreachable(BinaryenModuleRef module) { return static_cast(ret); } +BinaryenExpressionRef BinaryenAtomicLoad(BinaryenModuleRef module, uint32_t bytes, uint32_t offset, BinaryenType type, BinaryenExpressionRef ptr) { + auto* ret = Builder(*((Module*)module)).makeAtomicLoad(bytes, offset, (Expression*)ptr, WasmType(type)); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicLoad(the_module, " << bytes << ", " << offset << ", " << type << ", expressions[" << expressions[ptr] << "]);\n"; + } + + return static_cast(ret); +} +BinaryenExpressionRef BinaryenAtomicStore(BinaryenModuleRef module, uint32_t bytes, uint32_t offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type) { + auto* ret = Builder(*((Module*)module)).makeAtomicStore(bytes, offset, (Expression*)ptr, (Expression*)value, WasmType(type)); + + if (tracing) { + auto id = noteExpression(ret); + std::cout << " expressions[" << id << "] = BinaryenAtomicStore(the_module, " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[value] << "], " << type << ");\n"; + } + + return static_cast(ret); +} BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type) { auto* ret = Builder(*((Module*)module)).makeAtomicRMW(AtomicRMWOp(op), bytes, offset, (Expression*)ptr, (Expression*)value, WasmType(type)); @@ -1102,7 +1122,9 @@ int BinaryenModuleValidate(BinaryenModuleRef module) { } Module* wasm = (Module*)module; - return WasmValidator().validate(*wasm) ? 1 : 0; + // TODO add feature selection support to C API + FeatureSet features = Feature::Atomics; + return WasmValidator().validate(*wasm, features) ? 1 : 0; } void BinaryenModuleOptimize(BinaryenModuleRef module) { -- cgit v1.2.3