List of usage examples for org.objectweb.asm Opcodes IADD
int IADD
To view the source code for org.objectweb.asm Opcodes IADD.
Click Source Link
From source file:jpcsp.Allegrex.compiler.CompilerContext.java
License:Open Source License
@Override public void memWrite8(int registerIndex, int offset) { if (!memWritePrepared) { if (useMMIO()) { loadMMIO();/*from w ww. ja v a 2s . c o m*/ } else if (!RuntimeContext.hasMemoryInt()) { loadMemory(); } else { loadMemoryInt(); } mv.visitInsn(Opcodes.SWAP); loadRegister(registerIndex); if (offset != 0) { loadImm(offset); mv.visitInsn(Opcodes.IADD); } if (RuntimeContext.hasMemoryInt()) { if (checkMemoryAccess()) { loadImm(codeInstruction.getAddress()); mv.visitMethodInsn(Opcodes.INVOKESTATIC, runtimeContextInternalName, "checkMemoryWrite8", "(II)I"); } } mv.visitInsn(Opcodes.SWAP); } if (useMMIO() || !RuntimeContext.hasMemoryInt()) { mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, memoryInternalName, "write8", "(IB)V"); } else { // tmp2 = value & 0xFF; // tmp1 = (address & 3) << 3; // memoryInt[address >> 2] = (memoryInt[address >> 2] & ((0xFF << tmp1) ^ 0xFFFFFFFF)) | (tmp2 << tmp1); loadImm(0xFF); mv.visitInsn(Opcodes.IAND); storeTmp2(); mv.visitInsn(Opcodes.DUP); loadImm(3); mv.visitInsn(Opcodes.IAND); loadImm(3); mv.visitInsn(Opcodes.ISHL); storeTmp1(); if (checkMemoryAccess()) { loadImm(2); mv.visitInsn(Opcodes.ISHR); } else { loadImm(3); mv.visitInsn(Opcodes.ISHL); loadImm(5); mv.visitInsn(Opcodes.IUSHR); } mv.visitInsn(Opcodes.DUP2); mv.visitInsn(Opcodes.IALOAD); loadImm(0xFF); loadTmp1(); mv.visitInsn(Opcodes.ISHL); loadImm(-1); mv.visitInsn(Opcodes.IXOR); mv.visitInsn(Opcodes.IAND); loadTmp2(); loadTmp1(); mv.visitInsn(Opcodes.ISHL); mv.visitInsn(Opcodes.IOR); mv.visitInsn(Opcodes.IASTORE); } memWritePrepared = false; }
From source file:jpcsp.Allegrex.compiler.CompilerContext.java
License:Open Source License
@Override public void memWriteZero8(int registerIndex, int offset) { if (useMMIO()) { loadMMIO();//from w ww .j a v a 2 s. c o m } else if (!RuntimeContext.hasMemoryInt()) { loadMemory(); } else { loadMemoryInt(); } loadRegister(registerIndex); if (offset != 0) { loadImm(offset); mv.visitInsn(Opcodes.IADD); } if (RuntimeContext.hasMemoryInt()) { if (checkMemoryAccess()) { loadImm(codeInstruction.getAddress()); mv.visitMethodInsn(Opcodes.INVOKESTATIC, runtimeContextInternalName, "checkMemoryWrite8", "(II)I"); } } if (useMMIO() || !RuntimeContext.hasMemoryInt()) { loadImm(0); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, memoryInternalName, "write8", "(IB)V"); } else { // tmp1 = (address & 3) << 3; // memoryInt[address >> 2] = (memoryInt[address >> 2] & ((0xFF << tmp1) ^ 0xFFFFFFFF)); mv.visitInsn(Opcodes.DUP); loadImm(3); mv.visitInsn(Opcodes.IAND); loadImm(3); mv.visitInsn(Opcodes.ISHL); storeTmp1(); if (checkMemoryAccess()) { loadImm(2); mv.visitInsn(Opcodes.ISHR); } else { loadImm(3); mv.visitInsn(Opcodes.ISHL); loadImm(5); mv.visitInsn(Opcodes.IUSHR); } mv.visitInsn(Opcodes.DUP2); mv.visitInsn(Opcodes.IALOAD); loadImm(0xFF); loadTmp1(); mv.visitInsn(Opcodes.ISHL); loadImm(-1); mv.visitInsn(Opcodes.IXOR); mv.visitInsn(Opcodes.IAND); mv.visitInsn(Opcodes.IASTORE); } }
From source file:jpcsp.Allegrex.compiler.CompilerContext.java
License:Open Source License
@Override public boolean compileVFPULoad(int registerIndex, int offset, int vt, int count) { if (!RuntimeContext.hasMemoryInt()) { // Can only generate an optimized code sequence for memoryInt return false; }/*from w w w .java 2 s .c o m*/ if ((vt & 32) != 0) { // Optimization possible only for column access return false; } // Build parameters for // System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) // i.e. // System.arraycopy(RuntimeContext.memoryInt, // RuntimeContext.checkMemoryRead32(rs + simm14, pc) >>> 2, // RuntimeContext.vprInt, // vprIndex, // countSequence * 4); loadMemoryInt(); loadRegister(registerIndex); if (offset != 0) { loadImm(offset); mv.visitInsn(Opcodes.IADD); } if (checkMemoryAccess()) { loadImm(getCodeInstruction().getAddress()); mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(RuntimeContext.class), "checkMemoryRead32", "(II)I"); loadImm(2); mv.visitInsn(Opcodes.IUSHR); } else { loadImm(3); mv.visitInsn(Opcodes.ISHL); loadImm(5); mv.visitInsn(Opcodes.IUSHR); } loadVprInt(); int vprIndex = VfpuState.getVprIndex((vt >> 2) & 7, vt & 3, (vt & 64) >> 6); loadImm(vprIndex); loadImm(count); mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(System.class), "arraycopy", arraycopyDescriptor); // Set the VPR float values for (int i = 0; i < count; i++) { loadVprFloat(); loadImm(vprIndex + i); loadVprInt(); loadImm(vprIndex + i); mv.visitInsn(Opcodes.IALOAD); convertVIntToFloat(); mv.visitInsn(Opcodes.FASTORE); } return true; }
From source file:jpcsp.Allegrex.compiler.CompilerContext.java
License:Open Source License
@Override public boolean compileVFPUStore(int registerIndex, int offset, int vt, int count) { if (!RuntimeContext.hasMemoryInt()) { // Can only generate an optimized code sequence for memoryInt return false; }/*from www .ja v a 2 s .c o m*/ if ((vt & 32) != 0) { // Optimization possible only for column access return false; } // Build parameters for // System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) // i.e. // System.arraycopy(RuntimeContext.vprInt, // vprIndex, // RuntimeContext.memoryInt, // RuntimeContext.checkMemoryWrite32(rs + simm14, pc) >>> 2, // countSequence * 4); loadVprInt(); int vprIndex = VfpuState.getVprIndex((vt >> 2) & 7, vt & 3, (vt & 64) >> 6); loadImm(vprIndex); loadMemoryInt(); loadRegister(registerIndex); if (offset != 0) { loadImm(offset); mv.visitInsn(Opcodes.IADD); } if (checkMemoryAccess()) { loadImm(getCodeInstruction().getAddress()); mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(RuntimeContext.class), "checkMemoryWrite32", "(II)I"); loadImm(2); mv.visitInsn(Opcodes.IUSHR); } else { loadImm(3); mv.visitInsn(Opcodes.ISHL); loadImm(5); mv.visitInsn(Opcodes.IUSHR); } loadImm(count); mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(System.class), "arraycopy", arraycopyDescriptor); return true; }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeQuery(final TagGroup tag, BytecodeContext bc) throws BytecodeException { final GeneratorAdapter adapter = bc.getAdapter(); tag.setNumberIterator(adapter.newLocal(NUMBER_ITERATOR)); boolean isOutput = tag.getType() == TagGroup.TAG_OUTPUT; ParseBodyVisitor pbv = isOutput ? new ParseBodyVisitor() : null; if (isOutput) pbv.visitBegin(bc);//from ww w . j a v a 2 s . c o m // Query query=pc.getQuery(@query); tag.setQuery(adapter.newLocal(Types.QUERY)); adapter.loadArg(0); Expression val = tag.getAttribute("query").getValue(); val.writeOut(bc, Expression.MODE_REF); if (val instanceof LitString) adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_QUERY_STRING); else adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_QUERY_OBJ); adapter.storeLocal(tag.getQuery()); tag.setPID(adapter.newLocal(Types.INT_VALUE)); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.storeLocal(tag.getPID()); // int startAt=query.getCurrentrow(); final int startAt = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GET_CURRENTROW_1); adapter.storeLocal(startAt); // if(query.getRecordcount()>0) { DecisionIntVisitor div = new DecisionIntVisitor(); div.visitBegin(); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(Types.QUERY, GET_RECORDCOUNT); div.visitGT(); adapter.push(0); div.visitEnd(bc); Label ifRecCount = new Label(); adapter.ifZCmp(Opcodes.IFEQ, ifRecCount); // startrow int from = adapter.newLocal(Types.INT_VALUE); Attribute attrStartRow = tag.getAttribute("startrow"); if (attrStartRow != null) { // NumberRange.range(@startrow,1) //attrStartRow.getValue().writeOut(bc, Expression.MODE_VALUE); CastInt.toExprInt(attrStartRow.getValue()).writeOut(bc, Expression.MODE_VALUE); //adapter.visitInsn(Opcodes.D2I); adapter.push(1); adapter.invokeStatic(Types.NUMBER_RANGE, RANGE); //adapter.visitInsn(Opcodes.D2I); } else { adapter.push(1); } adapter.storeLocal(from); // numberIterator adapter.loadLocal(from); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(Types.QUERY, GET_RECORDCOUNT); //adapter.visitInsn(Opcodes.I2D); Attribute attrMaxRow = tag.getAttribute("maxrows"); Attribute attrEndRow = tag.getAttribute("endrow"); if (attrMaxRow != null) { CastInt.toExprInt(attrMaxRow.getValue()).writeOut(bc, Expression.MODE_VALUE); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_MAX); } else if (attrEndRow != null) { CastInt.toExprInt(attrEndRow.getValue()).writeOut(bc, Expression.MODE_VALUE); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_END); } else { adapter.invokeStatic(NUMBER_ITERATOR, LOAD_2); } adapter.storeLocal(tag.getNumberIterator()); // Group Attribute attrGroup = tag.getAttribute("group"); Attribute attrGroupCS = tag.getAttribute("groupcasesensitive"); tag.setGroup(adapter.newLocal(Types.STRING)); final int groupCaseSensitive = adapter.newLocal(Types.BOOLEAN_VALUE); if (attrGroup != null) { attrGroup.getValue().writeOut(bc, Expression.MODE_REF); adapter.storeLocal(tag.getGroup()); if (attrGroupCS != null) attrGroupCS.getValue().writeOut(bc, Expression.MODE_VALUE); else adapter.push(false); adapter.storeLocal(groupCaseSensitive); } // pc.us().addQuery(query); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, US); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(UNDEFINED, ADD_QUERY); // current final int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(from); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(current); // Try TryFinallyVisitor tfv = new TryFinallyVisitor(new OnFinally() { public void _writeOut(BytecodeContext bc) { // query.reset(); // query.go(startAt); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(startAt); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); adapter.pop(); // pc.us().removeQuery(); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, US); adapter.invokeInterface(UNDEFINED, REMOVE_QUERY); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); } }, null); tfv.visitTryBegin(bc); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadLocal(tag.getPID()); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); if (attrGroup != null) { // NumberIterator oldNi=numberIterator; int oldNi = adapter.newLocal(NUMBER_ITERATOR); adapter.loadLocal(tag.getNumberIterator()); adapter.storeLocal(oldNi); // numberIterator=NumberIterator.load(ni,query,group,grp_case); adapter.loadArg(0); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getGroup()); adapter.loadLocal(groupCaseSensitive); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_5); adapter.storeLocal(tag.getNumberIterator()); // current=oldNi.current(); adapter.loadLocal(oldNi); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); tag.getBody().writeOut(bc); //tmp(adapter,current); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); // numberIterator=oldNi; adapter.loadLocal(oldNi); adapter.storeLocal(tag.getNumberIterator()); } else { // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); tag.getBody().writeOut(bc); } // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); tfv.visitTryEnd(bc); adapter.visitLabel(ifRecCount); if (isOutput) pbv.visitEnd(bc); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeGroup(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); boolean isOutput = tag.getType() == TagGroup.TAG_OUTPUT; ParseBodyVisitor pbv = isOutput ? new ParseBodyVisitor() : null; if (isOutput) pbv.visitBegin(bc);/*from w ww.j a v a 2 s . com*/ // Group Attribute attrGroup = tag.getAttribute("group"); tag.setGroup(adapter.newLocal(Types.STRING)); attrGroup.getValue().writeOut(bc, Expression.MODE_REF); adapter.storeLocal(tag.getGroup()); // Group Case Sensitve Attribute attrGroupCS = tag.getAttribute("groupcasesensitive"); int groupCaseSensitive = adapter.newLocal(Types.BOOLEAN_VALUE); if (attrGroupCS != null) attrGroupCS.getValue().writeOut(bc, Expression.MODE_VALUE); else adapter.push(true); adapter.storeLocal(groupCaseSensitive); TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery()); //queryImpl = parent.getQueryImpl(); // current int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // NumberIterator oldNi=numberIterator; int oldNi = adapter.newLocal(NUMBER_ITERATOR); adapter.loadLocal(tag.getNumberIterator()); adapter.storeLocal(oldNi); // numberIterator=NumberIterator.load(ni,query,group,grp_case); adapter.loadArg(0); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getGroup()); adapter.loadLocal(groupCaseSensitive); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_5); adapter.storeLocal(tag.getNumberIterator()); // current=oldNi.current(); adapter.loadLocal(oldNi); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); //tmp(adapter,current); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); // numberIterator=oldNi; adapter.loadLocal(oldNi); adapter.storeLocal(tag.getNumberIterator()); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT); */ wv.visitAfterBody(bc, tag.getEnd()); //query.go(ni.current(),pc.getId()) resetCurrentrow(adapter, tag, current); // ni.first(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, FIRST); adapter.pop(); if (isOutput) pbv.visitEnd(bc); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeInnerGroup(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery());// ww w. j a v a 2 s.co m //queryImpl = parent.getQueryImpl(); int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // inner current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); /*OLD adapter.invokeInterface(Types.QUERY, TagLoop.GO_1); */ NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); resetCurrentrow(adapter, tag, current); // ni.first(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, FIRST); adapter.pop(); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeInnerQuery(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); //if(tr ue)return ; TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery());/*w ww . ja va 2 s.c om*/ tag.setPID(parent.getPID()); //queryImpl = parent.getQueryImpl(); //int currentOuter=ni.current(); int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadLocal(tag.getPID()); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); // ni.setCurrent(currentOuter); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(current); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); adapter.pop(); //adapter.pop(); }
From source file:net.sourceforge.cobertura.instrument.pass3.FastArrayCodeProvider.java
License:GNU General Public License
public void generateCodeThatIncrementsCoberturaCounterFromInternalVariable(MethodVisitor nextMethodVisitor, int lastJumpIdVariableIndex, String className) { /*cobertura_counters[value('lastJumpIdVariableIndex')]++;*/ /*cobertura_counters.*/ nextMethodVisitor.visitFieldInsn(Opcodes.GETSTATIC, className, COBERTURA_COUNTERS_FIELD_NAME, COBERTURA_COUNTERS_FIELD_TYPE); /*index:*//* ww w . j av a2s . c o m*/ nextMethodVisitor.visitVarInsn(Opcodes.ILOAD, lastJumpIdVariableIndex); nextMethodVisitor.visitInsn(Opcodes.DUP2); nextMethodVisitor.visitInsn(Opcodes.IALOAD); nextMethodVisitor.visitLdcInsn(1); nextMethodVisitor.visitInsn(Opcodes.IADD); nextMethodVisitor.visitInsn(Opcodes.IASTORE); }
From source file:net.sourceforge.cobertura.instrument.pass3.FastArrayCodeProvider.java
License:GNU General Public License
public void generateCodeThatIncrementsCoberturaCounter(MethodVisitor nextMethodVisitor, Integer counterId, String className) {/* w ww . jav a 2 s . c o m*/ /*cobertura_counters[value('lastJumpIdVariableIndex')]++;*/ /*cobertura_counters.*/ nextMethodVisitor.visitFieldInsn(Opcodes.GETSTATIC, className, COBERTURA_COUNTERS_FIELD_NAME, COBERTURA_COUNTERS_FIELD_TYPE); /*index:*/ nextMethodVisitor.visitLdcInsn((int) counterId); nextMethodVisitor.visitInsn(Opcodes.DUP2); nextMethodVisitor.visitInsn(Opcodes.IALOAD); nextMethodVisitor.visitLdcInsn(1); nextMethodVisitor.visitInsn(Opcodes.IADD); nextMethodVisitor.visitInsn(Opcodes.IASTORE); }