Package ghidra.pcode.emu.jit.gen.op
Interface UnOpGen<T extends JitUnOp>
- Type Parameters:
T- the class of p-code op node in the use-def graph
- All Superinterfaces:
org.objectweb.asm.Opcodes,OpGen<T>
- All Known Implementing Classes:
BoolNegateOpGen,CopyOpGen,FloatAbsOpGen,FloatCeilOpGen,FloatFloat2FloatOpGen,FloatFloorOpGen,FloatInt2FloatOpGen,FloatNaNOpGen,FloatNegOpGen,FloatRoundOpGen,FloatSqrtOpGen,FloatTruncOpGen,Int2CompOpGen,IntNegateOpGen,IntSExtOpGen,IntZExtOpGen,LzCountOpGen,PopCountOpGen
An extension that provides conveniences and common implementations for unary p-code operators
-
Field Summary
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V9 -
Method Summary
Modifier and TypeMethodDescriptiondefault voidgenerateRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, org.objectweb.asm.MethodVisitor rv) Emit bytecode into therunmethod.generateUnOpRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType uType, org.objectweb.asm.MethodVisitor rv) Emit code for the unary operatorMethods inherited from interface ghidra.pcode.emu.jit.gen.op.OpGen
generateInitCode
-
Method Details
-
generateUnOpRunCode
JitType generateUnOpRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType uType, org.objectweb.asm.MethodVisitor rv) Emit code for the unary operatorAt this point the operand is on the stack. After this returns, code to write the result from the stack into the destination operand will be emitted.
- Parameters:
gen- the code generatorop- the operatorblock- the block containing the operatoruType- the actual type of the operandrv- the method visitor- Returns:
- the actual type of the result
-
generateRunCode
default void generateRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, org.objectweb.asm.MethodVisitor rv) Emit bytecode into therunmethod.This method must emit the code needed to load any input operands, convert them to the appropriate type, perform the actual operation, and then if applicable, store the output operand. The implementations should delegate to
JitCodeGenerator.generateValReadCode(JitVal, JitTypeBehavior),JitCodeGenerator.generateVarWriteCode(JitVar, JitType), andTypeConversionsappropriately.This default implementation emits code to load the operand, invokes
gen-unop, and finally emits code to write the destination operand.- Specified by:
generateRunCodein interfaceOpGen<T extends JitUnOp>- Parameters:
gen- the code generatorop- the p-code op (use-def node) to translateblock- the basic block containing the p-code oprv- the visitor for therunmethod.
-