Enum Class IntSBorrowOpGen

java.lang.Object
java.lang.Enum<IntSBorrowOpGen>
ghidra.pcode.emu.jit.gen.op.IntSBorrowOpGen
All Implemented Interfaces:
BinOpGen<JitIntSBorrowOp>, IntBinOpGen<JitIntSBorrowOp>, OpGen<JitIntSBorrowOp>, Serializable, Comparable<IntSBorrowOpGen>, Constable, org.objectweb.asm.Opcodes

public enum IntSBorrowOpGen extends Enum<IntSBorrowOpGen> implements IntBinOpGen<JitIntSBorrowOp>
The generator for a int_sborrow.

This uses the binary operator generator and emits Opcodes.INVOKESTATIC on JitCompiledPassage.sBorrowIntRaw(int, int) or JitCompiledPassage.sBorrowLongRaw(long, long) depending on the type. We must then emit a shift and mask to extract the correct bit.

  • Nested Class Summary

    Nested classes/interfaces inherited from class java.lang.Enum

    Enum.EnumDesc<E extends Enum<E>>

    Nested classes/interfaces inherited from interface ghidra.pcode.emu.jit.gen.op.BinOpGen

    BinOpGen.TakeOut
  • Enum Constant Summary

    Enum Constants
    Enum Constant
    Description
    The generator singleton
  • 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
    afterLeft(JitCodeGenerator gen, JitIntSBorrowOp op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv)
    Emit code between reading the left and right operands
    generateBinOpRunCode(JitCodeGenerator gen, JitIntSBorrowOp op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv)
    Emit code for the binary operator
    boolean
    Whether this operator is signed
    Returns the enum constant of this class with the specified name.
    Returns an array containing the constants of this enum class, in the order they are declared.

    Methods inherited from class java.lang.Object

    getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface ghidra.pcode.emu.jit.gen.op.BinOpGen

    ext, generateRunCode, rExt

    Methods inherited from interface ghidra.pcode.emu.jit.gen.op.OpGen

    generateInitCode
  • Enum Constant Details

  • Method Details

    • values

      public static IntSBorrowOpGen[] values()
      Returns an array containing the constants of this enum class, in the order they are declared.
      Returns:
      an array containing the constants of this enum class, in the order they are declared
    • valueOf

      public static IntSBorrowOpGen valueOf(String name)
      Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)
      Parameters:
      name - the name of the enum constant to be returned.
      Returns:
      the enum constant with the specified name
      Throws:
      IllegalArgumentException - if this enum class has no constant with the specified name
      NullPointerException - if the argument is null
    • isSigned

      public boolean isSigned()
      Description copied from interface: BinOpGen
      Whether this operator is signed

      In many cases, the operator itself is not affected by the signedness of the operands; however, if size adjustments to the operands are needed, this can determine how those operands are extended.

      Specified by:
      isSigned in interface BinOpGen<JitIntSBorrowOp>
      Returns:
      true for signed, false if not
    • afterLeft

      public JitType afterLeft(JitCodeGenerator gen, JitIntSBorrowOp op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv)
      Description copied from interface: BinOpGen
      Emit code between reading the left and right operands

      This is invoked immediately after emitting code to push the left operand onto the stack, giving the implementation an opportunity to perform any manipulations of that operand necessary to set up the operation, before code to push the right operand is emitted.

      Specified by:
      afterLeft in interface BinOpGen<JitIntSBorrowOp>
      Parameters:
      gen - the code generator
      op - the operator
      lType - the actual type of the left operand
      rType - the actual type of the right operand
      rv - the method visitor
      Returns:
      the new actual type of the left operand
    • generateBinOpRunCode

      public JitType generateBinOpRunCode(JitCodeGenerator gen, JitIntSBorrowOp op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv)
      Description copied from interface: BinOpGen
      Emit code for the binary operator

      At this point both operands are on the stack. After this returns, code to write the result from the stack into the destination operand will be emitted.

      Specified by:
      generateBinOpRunCode in interface BinOpGen<JitIntSBorrowOp>
      Parameters:
      gen - the code generator
      op - the operator
      block - the block containing the operator
      lType - the actual type of the left operand
      rType - the actual type of the right operand
      rv - the method visitor
      Returns:
      the actual type of the result