[WASM] Optimize varargs without spreads
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user