aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/WasmObjectWriter.cpp
diff options
context:
space:
mode:
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");