[WASM] Add array copy intrinsic

This commit is contained in:
Igor Yakovlev
2022-06-29 18:51:31 +02:00
committed by teamcity
parent 8306b1bd71
commit 0ea7e8b70a
17 changed files with 218 additions and 203 deletions
@@ -157,6 +157,7 @@ class WasmSymbols(
val refIsNull = getInternalFunction("wasm_ref_is_null")
val refTest = getInternalFunction("wasm_ref_test")
val refCast = getInternalFunction("wasm_ref_cast")
val wasmArrayCopy = getInternalFunction("wasm_array_copy")
val intToLong = getInternalFunction("wasm_i64_extend_i32_s")
@@ -48,7 +48,8 @@ internal class WasmUsefulDeclarationProcessor(
context.wasmSymbols.wasmInterfaceId,
context.wasmSymbols.refCast,
context.wasmSymbols.refTest,
context.wasmSymbols.boxIntrinsic -> {
context.wasmSymbols.boxIntrinsic,
context.wasmSymbols.wasmArrayCopy -> {
call.getTypeArgument(0)?.enqueueRuntimeClassOrAny(from, "intrinsic ${call.symbol.owner.name}")
true
}
@@ -475,6 +475,13 @@ class BodyGenerator(
body.buildConstI32Symbol(WasmSymbol(context.scratchMemSizeInBytes))
}
wasmSymbols.wasmArrayCopy -> {
val immediate = WasmImmediate.GcType(
context.referenceGcType(call.getTypeArgument(0)!!.getRuntimeClass(irBuiltIns).symbol)
)
body.buildInstr(WasmOp.ARRAY_COPY, immediate, immediate)
}
else -> {
return false
}