/** @see org.jnode.vm.x86.compiler.l1a.Item#clone() */ protected Item clone(EmitterContext ec) { final WordItem res; final X86Assembler os = ec.getStream(); switch (getKind()) { case Kind.GPR: res = L1AHelper.requestWordRegister(ec, getType(), false); final GPR r = res.getRegister(); os.writeMOV(gpr.getSize(), r, gpr); break; case Kind.LOCAL: res = (WordItem) factory.createLocal(getType(), getOffsetToFP(ec)); break; case Kind.CONSTANT: res = cloneConstant(ec); break; case Kind.FPUSTACK: // TODO notImplemented(); res = null; break; case Kind.STACK: os.writePUSH(X86Register.ESP, 0); res = (WordItem) factory.createStack(getType()); if (VirtualStack.checkOperandStack) { final ItemStack operandStack = ec.getVStack().operandStack; operandStack.pop(this); operandStack.push(this); operandStack.push(res); } break; default: throw new IllegalArgumentException("Invalid item kind"); } return res; }