summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r--llvm/lib/MC/WasmObjectWriter.cpp44
1 files changed, 24 insertions, 20 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index e61b1254735..20ace61825b 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -109,6 +109,10 @@ private:
void writeHeader(const MCAssembler &Asm);
+ void writeValueType(wasm::ValType Ty) {
+ encodeSLEB128(int32_t(Ty), getStream());
+ }
+
void recordRelocation(MCAssembler &Asm, const MCAsmLayout &Layout,
const MCFragment *Fragment, const MCFixup &Fixup,
MCValue Target, bool &IsPCRel,
@@ -140,7 +144,7 @@ void WasmObjectWriter::startSection(SectionBookkeeping &Section,
assert((Name != nullptr) == (SectionId == wasm::WASM_SEC_CUSTOM) &&
"Only custom sections can have names");
- write8(SectionId);
+ encodeULEB128(SectionId, getStream());
Section.SizeOffset = getStream().tell();
@@ -290,10 +294,10 @@ struct WasmFunctionType {
enum { Plain, Empty, Tombstone } State;
// The return types of the function.
- SmallVector<unsigned, 1> Returns;
+ SmallVector<wasm::ValType, 1> Returns;
// The parameter types of the function.
- SmallVector<unsigned, 4> Params;
+ SmallVector<wasm::ValType, 4> Params;
WasmFunctionType() : State(Plain) {}
@@ -317,10 +321,10 @@ struct WasmFunctionTypeDenseMapInfo {
}
static unsigned getHashValue(const WasmFunctionType &FuncTy) {
uintptr_t Value = FuncTy.State;
- for (unsigned Ret : FuncTy.Returns)
- Value += DenseMapInfo<unsigned>::getHashValue(Ret);
- for (unsigned Param : FuncTy.Params)
- Value += DenseMapInfo<unsigned>::getHashValue(Param);
+ for (wasm::ValType Ret : FuncTy.Returns)
+ Value += DenseMapInfo<int32_t>::getHashValue(int32_t(Ret));
+ for (wasm::ValType Param : FuncTy.Params)
+ Value += DenseMapInfo<int32_t>::getHashValue(int32_t(Param));
return Value;
}
static bool isEqual(const WasmFunctionType &LHS,
@@ -756,13 +760,13 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
encodeULEB128(FunctionTypes.size(), getStream());
for (WasmFunctionType &FuncTy : FunctionTypes) {
- write8(wasm::WASM_TYPE_FUNC);
+ encodeSLEB128(wasm::WASM_TYPE_FUNC, getStream());
encodeULEB128(FuncTy.Params.size(), getStream());
- for (unsigned Ty : FuncTy.Params)
- write8(Ty);
+ for (wasm::ValType Ty : FuncTy.Params)
+ writeValueType(Ty);
encodeULEB128(FuncTy.Returns.size(), getStream());
- for (unsigned Ty : FuncTy.Returns)
- write8(Ty);
+ for (wasm::ValType Ty : FuncTy.Returns)
+ writeValueType(Ty);
}
endSection(Section);
@@ -782,15 +786,15 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
encodeULEB128(FieldName.size(), getStream());
writeBytes(FieldName);
- write8(Import.Kind);
+ encodeULEB128(Import.Kind, getStream());
switch (Import.Kind) {
case wasm::WASM_EXTERNAL_FUNCTION:
encodeULEB128(Import.Type, getStream());
break;
case wasm::WASM_EXTERNAL_GLOBAL:
- write8(Import.Type);
- write8(0); // mutability
+ encodeSLEB128(Import.Type, getStream());
+ encodeULEB128(0, getStream()); // mutability
break;
default:
llvm_unreachable("unsupported import kind");
@@ -820,7 +824,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
// The number of tables, fixed to 1 for now.
encodeULEB128(1, getStream());
- write8(wasm::WASM_TYPE_ANYFUNC);
+ encodeSLEB128(wasm::WASM_TYPE_ANYFUNC, getStream());
encodeULEB128(0, getStream()); // flags
encodeULEB128(TableElems.size(), getStream()); // initial
@@ -846,7 +850,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
encodeULEB128(Globals.size(), getStream());
for (const WasmGlobal &Global : Globals) {
- write8(Global.Type);
+ encodeSLEB128(Global.Type, getStream());
write8(Global.IsMutable);
write8(wasm::WASM_OPCODE_I32_CONST);
@@ -866,7 +870,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
encodeULEB128(Export.FieldName.size(), getStream());
writeBytes(Export.FieldName);
- write8(Export.Kind);
+ encodeSLEB128(Export.Kind, getStream());
encodeULEB128(Export.Index, getStream());
}
@@ -1007,7 +1011,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
if (!CodeRelocations.empty()) {
startSection(Section, wasm::WASM_SEC_CUSTOM, "reloc.CODE");
- write8(wasm::WASM_SEC_CODE);
+ encodeULEB128(wasm::WASM_SEC_CODE, getStream());
encodeULEB128(CodeRelocations.size(), getStream());
@@ -1020,7 +1024,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
if (!DataRelocations.empty()) {
startSection(Section, wasm::WASM_SEC_CUSTOM, "reloc.DATA");
- write8(wasm::WASM_SEC_DATA);
+ encodeULEB128(wasm::WASM_SEC_DATA, getStream());
encodeULEB128(DataRelocations.size(), getStream());
OpenPOWER on IntegriCloud