From d4f4d9b7c691a1ce8c887745b35080f5b2e0424a Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sun, 29 Mar 2020 21:33:30 +0200 Subject: [PATCH] Reuse the temp variable of a DUP operation for further DUP operations --- .../module/WasmDupInstruction.java | 93 ------------------- 1 file changed, 93 deletions(-) delete mode 100644 src/de/inetsoftware/jwebassembly/module/WasmDupInstruction.java diff --git a/src/de/inetsoftware/jwebassembly/module/WasmDupInstruction.java b/src/de/inetsoftware/jwebassembly/module/WasmDupInstruction.java deleted file mode 100644 index 80b1927..0000000 --- a/src/de/inetsoftware/jwebassembly/module/WasmDupInstruction.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2019 Volker Berlin (i-net software) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -*/ -package de.inetsoftware.jwebassembly.module; - -import java.io.IOException; - -import javax.annotation.Nonnull; - -import de.inetsoftware.jwebassembly.wasm.AnyType; -import de.inetsoftware.jwebassembly.wasm.VariableOperator; - -/** - * WasmInstruction that emulate the Java dup instruction which duplicate the value on the stack. - * - * @author Volker Berlin - * - */ -class WasmDupInstruction extends WasmInstruction { - - private int idx; - - private AnyType type; - - private LocaleVariableManager localVariables; - - /** - * Create an instance of a dup instruction - * - * @param idx - * the memory/slot idx of the temp variable - * @param type - * the type of the duplicate value - * @param localVariables - * the manager for local variables - * @param javaCodePos - * the code position/offset in the Java method - * @param lineNumber - * the line number in the Java source code - */ - WasmDupInstruction( int idx, AnyType type, LocaleVariableManager localVariables, int javaCodePos, int lineNumber ) { - super( javaCodePos, lineNumber ); - this.idx = idx; - this.type = type; - this.localVariables = localVariables; - } - - /** - * {@inheritDoc} - */ - @Override - Type getType() { - return Type.Dup; - } - - /** - * {@inheritDoc} - */ - public void writeTo( @Nonnull ModuleWriter writer ) throws IOException { - // save it in a temporary variable and load it 2 times; - int index = localVariables.get( idx, getCodePosition() ); - writer.writeLocal( VariableOperator.tee, index ); - writer.writeLocal( VariableOperator.get, index ); - } - - /** - * {@inheritDoc} - */ - AnyType getPushValueType() { - return type; - } - - /** - * {@inheritDoc} - */ - @Override - int getPopCount() { - return 0; - } -}