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

public interface UnOpGen<T extends JitUnOp> extends OpGen<T>
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 Type
    Method
    Description
    default void
    generateRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, org.objectweb.asm.MethodVisitor rv)
    Emit bytecode into the run method.
    generateUnOpRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType uType, org.objectweb.asm.MethodVisitor rv)
    Emit code for the unary operator

    Methods 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 operator

      At 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 generator
      op - the operator
      block - the block containing the operator
      uType - the actual type of the operand
      rv - 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 the run method.

      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), and TypeConversions appropriately.

      This default implementation emits code to load the operand, invokes gen-unop, and finally emits code to write the destination operand.

      Specified by:
      generateRunCode in interface OpGen<T extends JitUnOp>
      Parameters:
      gen - the code generator
      op - the p-code op (use-def node) to translate
      block - the basic block containing the p-code op
      rv - the visitor for the run method.