aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/WasmObjectWriter.cpp
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2022-03-09 18:11:44 -0800
committerSam Clegg <sbc@chromium.org>2022-03-14 08:55:47 -0700
commit9504ab32b76646116585cae4298f700cf46721ab (patch)
treef61eb0df890fe36ce4458f6599ac12e24d0713f5 /llvm/lib/MC/WasmObjectWriter.cpp
parent8361c5da30588d3d4a48eae648f53be1feb5cfad (diff)
downloadllvm-9504ab32b76646116585cae4298f700cf46721ab.zip
llvm-9504ab32b76646116585cae4298f700cf46721ab.tar.gz
llvm-9504ab32b76646116585cae4298f700cf46721ab.tar.bz2
[WebAssembly] Second phase of implemented extended const proposal
This change continues to lay the ground work for supporting extended const expressions in the linker. The included test covers object file reading and writing and the YAML representation. Differential Revision: https://reviews.llvm.org/D121349
Diffstat (limited to 'llvm/lib/MC/WasmObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/WasmObjectWriter.cpp53
1 files changed, 29 insertions, 24 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index 27023f1..f891f94 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -931,25 +931,29 @@ void WasmObjectWriter::writeGlobalSection(ArrayRef<wasm::WasmGlobal> Globals) {
for (const wasm::WasmGlobal &Global : Globals) {
encodeULEB128(Global.Type.Type, W->OS);
W->OS << char(Global.Type.Mutable);
- W->OS << char(Global.InitExpr.Opcode);
- switch (Global.Type.Type) {
- case wasm::WASM_TYPE_I32:
- encodeSLEB128(0, W->OS);
- break;
- case wasm::WASM_TYPE_I64:
- encodeSLEB128(0, W->OS);
- break;
- case wasm::WASM_TYPE_F32:
- writeI32(0);
- break;
- case wasm::WASM_TYPE_F64:
- writeI64(0);
- break;
- case wasm::WASM_TYPE_EXTERNREF:
- writeValueType(wasm::ValType::EXTERNREF);
- break;
- default:
- llvm_unreachable("unexpected type");
+ if (Global.InitExpr.Extended) {
+ llvm_unreachable("extected init expressions not supported");
+ } else {
+ W->OS << char(Global.InitExpr.Inst.Opcode);
+ switch (Global.Type.Type) {
+ case wasm::WASM_TYPE_I32:
+ encodeSLEB128(0, W->OS);
+ break;
+ case wasm::WASM_TYPE_I64:
+ encodeSLEB128(0, W->OS);
+ break;
+ case wasm::WASM_TYPE_F32:
+ writeI32(0);
+ break;
+ case wasm::WASM_TYPE_F64:
+ writeI64(0);
+ break;
+ case wasm::WASM_TYPE_EXTERNREF:
+ writeValueType(wasm::ValType::EXTERNREF);
+ break;
+ default:
+ llvm_unreachable("unexpected type");
+ }
}
W->OS << char(wasm::WASM_OPCODE_END);
}
@@ -1658,21 +1662,22 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
wasm::WasmGlobal Global;
Global.Type = WS.getGlobalType();
Global.Index = NumGlobalImports + Globals.size();
+ Global.InitExpr.Extended = false;
switch (Global.Type.Type) {
case wasm::WASM_TYPE_I32:
- Global.InitExpr.Opcode = wasm::WASM_OPCODE_I32_CONST;
+ Global.InitExpr.Inst.Opcode = wasm::WASM_OPCODE_I32_CONST;
break;
case wasm::WASM_TYPE_I64:
- Global.InitExpr.Opcode = wasm::WASM_OPCODE_I64_CONST;
+ Global.InitExpr.Inst.Opcode = wasm::WASM_OPCODE_I64_CONST;
break;
case wasm::WASM_TYPE_F32:
- Global.InitExpr.Opcode = wasm::WASM_OPCODE_F32_CONST;
+ Global.InitExpr.Inst.Opcode = wasm::WASM_OPCODE_F32_CONST;
break;
case wasm::WASM_TYPE_F64:
- Global.InitExpr.Opcode = wasm::WASM_OPCODE_F64_CONST;
+ Global.InitExpr.Inst.Opcode = wasm::WASM_OPCODE_F64_CONST;
break;
case wasm::WASM_TYPE_EXTERNREF:
- Global.InitExpr.Opcode = wasm::WASM_OPCODE_REF_NULL;
+ Global.InitExpr.Inst.Opcode = wasm::WASM_OPCODE_REF_NULL;
break;
default:
llvm_unreachable("unexpected type");