[WASM] Optimize varargs without spreads

This commit is contained in:
Igor Yakovlev
2022-10-26 18:44:15 +02:00
committed by teamcity
parent 913ce9d817
commit 346b2f162c
19 changed files with 211 additions and 37 deletions
@@ -29,7 +29,7 @@ class WasmModule(
val startFunction: WasmFunction? = null,
val data: List<WasmData> = emptyList(),
val dataCount: Boolean = false,
val dataCount: Boolean = true,
)
sealed class WasmNamedModuleField {
@@ -73,7 +73,10 @@ sealed class WasmImmediate {
constructor(value: WasmMemory) : this(WasmSymbol(value))
}
class DataIdx(val value: Int) : WasmImmediate()
class DataIdx(val value: WasmSymbol<Int>) : WasmImmediate() {
constructor(value: Int) : this(WasmSymbol(value))
}
class TableIdx(val value: WasmSymbolReadOnly<Int>) : WasmImmediate() {
constructor(value: Int) : this(WasmSymbol(value))
}
@@ -356,6 +359,7 @@ enum class WasmOp(
ARRAY_LEN("array.len", 0xFB_17, listOf(STRUCT_TYPE_IDX)),
ARRAY_COPY("array.copy", 0xFB_18, listOf(STRUCT_TYPE_IDX, STRUCT_TYPE_IDX)),
ARRAY_NEW_DATA("array.new_data", 0xFB_1D, listOf(STRUCT_TYPE_IDX, DATA_IDX)),
ARRAY_NEW_FIXED("array.new_fixed", 0xFB_1A, listOf(STRUCT_TYPE_IDX, CONST_I32)),
I31_NEW("i31.new", 0xFB_20),
I31_GET_S("i31.get_s", 0xFB_21),
@@ -32,7 +32,7 @@ class WasmBinaryToIR(val b: MyByteReader) {
var startFunction: WasmFunction? = null
val elements: MutableList<WasmElement> = mutableListOf()
val data: MutableList<WasmData> = mutableListOf()
var dataCount: Boolean = false
var dataCount: Boolean = true
val tags: MutableList<WasmTag> = mutableListOf()
private fun <T> byIdx(l1: List<T>, l2: List<T>, index: Int): T {
@@ -114,10 +114,6 @@ class WasmIrToBinary(outputStream: OutputStream, val module: WasmModule, val mod
data.forEach { appendData(it) }
}
appendSection(12u) {
b.writeVarUInt32(data.size)
}
//text section (should be placed after data)
if (emitNameSection) {
appendTextSection(definedFunctions)
@@ -217,7 +213,7 @@ class WasmIrToBinary(outputStream: OutputStream, val module: WasmModule, val mod
is WasmImmediate.GlobalIdx -> appendModuleFieldReference(x.value.owner)
is WasmImmediate.TypeIdx -> appendModuleFieldReference(x.value.owner)
is WasmImmediate.MemoryIdx -> appendModuleFieldReference(x.value.owner)
is WasmImmediate.DataIdx -> b.writeVarUInt32(x.value)
is WasmImmediate.DataIdx -> b.writeVarUInt32(x.value.owner)
is WasmImmediate.TableIdx -> b.writeVarUInt32(x.value.owner)
is WasmImmediate.LabelIdx -> b.writeVarUInt32(x.value)
is WasmImmediate.TagIdx -> b.writeVarUInt32(x.value)