From 9b4a6fcc2d1bc23fbb3fc49648d65f2b2f2cede4 Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Wed, 29 Mar 2023 10:47:49 -0700 Subject: [PATCH] Implement MINT_SHL_AND_ --- src/mono/mono/mini/interp/jiterpreter.c | 2 ++ .../runtime/jiterpreter-trace-generator.ts | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/mono/mono/mini/interp/jiterpreter.c b/src/mono/mono/mini/interp/jiterpreter.c index ca88b7607966b0..c6cae4b81e0385 100644 --- a/src/mono/mono/mini/interp/jiterpreter.c +++ b/src/mono/mono/mini/interp/jiterpreter.c @@ -707,6 +707,8 @@ jiterp_should_abort_trace (InterpInst *ins, gboolean *inside_branch_block) case MINT_CTZ_I8: case MINT_POPCNT_I8: case MINT_LOG2_I8: + case MINT_SHL_AND_I4: + case MINT_SHL_AND_I8: return TRACE_CONTINUE; case MINT_BR: diff --git a/src/mono/wasm/runtime/jiterpreter-trace-generator.ts b/src/mono/wasm/runtime/jiterpreter-trace-generator.ts index 1f59a6ca37322a..4d81b77572e284 100644 --- a/src/mono/wasm/runtime/jiterpreter-trace-generator.ts +++ b/src/mono/wasm/runtime/jiterpreter-trace-generator.ts @@ -1097,6 +1097,27 @@ export function generate_wasm_body ( break; } + case MintOpcode.MINT_SHL_AND_I4: + case MintOpcode.MINT_SHL_AND_I8: { + const isI32 = (opcode === MintOpcode.MINT_SHL_AND_I4), + loadOp = isI32 ? WasmOpcode.i32_load : WasmOpcode.i64_load, + storeOp = isI32 ? WasmOpcode.i32_store : WasmOpcode.i64_store; + + builder.local("pLocals"); + + append_ldloc(builder, getArgU16(ip, 2), loadOp); + append_ldloc(builder, getArgU16(ip, 3), loadOp); + if (isI32) + builder.i32_const(31); + else + builder.i52_const(63); + builder.appendU8(isI32 ? WasmOpcode.i32_and : WasmOpcode.i64_and); + builder.appendU8(isI32 ? WasmOpcode.i32_shl : WasmOpcode.i64_shl); + + append_stloc_tail(builder, getArgU16(ip, 1), storeOp); + break; + } + case MintOpcode.MINT_FMA: case MintOpcode.MINT_FMAF: { const isF32 = (opcode === MintOpcode.MINT_FMAF),