Package ghidra.pcode.emu.jit.gen.op

# Enum Class IntNegateOpGen

java.lang.Object
java.lang.Enum<IntNegateOpGen>
ghidra.pcode.emu.jit.gen.op.IntNegateOpGen

All Implemented Interfaces:
  `IntUnOpGen<JitIntNegateOp>`, `OpGen<JitIntNegateOp>`, `UnOpGen<JitIntNegateOp>`, `Serializable`, `Comparable<IntNegateOpGen>`, `Constable`, `org.objectweb.asm.Opcodes`

public enum IntNegateOpGen extends Enum<IntNegateOpGen> implements IntUnOpGen<JitIntNegateOp>
The generator for a `int_negate`.

There is no bitwise "not" operator in the JVM. We borrow the pattern we see output by the Java compiler for `int negate(n) {return ~n;}`. It XORs the input with a register of 1s. This uses the unary operator generator and emits the equivalent code.

- ## Nested Class Summary

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

  `Enum.EnumDesc<E extends Enum<E>>`

- ## Enum Constant Summary

  Enum Constants
  Enum Constant
  Description
  `GEN`
  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
  `JitType`
  `generateUnOpRunCode(JitCodeGenerator gen, JitIntNegateOp op, JitControlFlowModel.JitBlock block, JitType uType, org.objectweb.asm.MethodVisitor rv)`
  Emit code for the unary operator
  `boolean`
  `isSigned()`
  Whether this operator is signed
  `static IntNegateOpGen`
  `valueOf(String name)`
  Returns the enum constant of this class with the specified name.
  `static IntNegateOpGen[]`
  `values()`
  Returns an array containing the constants of this enum class, in the order they are declared.

  ### Methods inherited from class java.lang.Enum

  `clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf`

  ### Methods inherited from class java.lang.Object

  `getClass, notify, notifyAll, wait, wait, wait`

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

  `generateInitCode`

  ### Methods inherited from interface ghidra.pcode.emu.jit.gen.op.UnOpGen

  `ext, generateRunCode`

- ## Enum Constant Details

  - ### GEN

    public static final IntNegateOpGen GEN
    The generator singleton

- ## Method Details

  - ### values

    public static IntNegateOpGen[] 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 IntNegateOpGen 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: `UnOpGen`
    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 `UnOpGen<JitIntNegateOp>`
    Returns:
      true for signed, false if not

  - ### generateUnOpRunCode

    public JitType generateUnOpRunCode(JitCodeGenerator gen, JitIntNegateOp op, JitControlFlowModel.JitBlock block, JitType uType, org.objectweb.asm.MethodVisitor rv)
    Description copied from interface: `UnOpGen`
    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.

    Specified by:
      `generateUnOpRunCode` in interface `UnOpGen<JitIntNegateOp>`
    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