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 void
generateRunCode
(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, org.objectweb.asm.MethodVisitor rv) Emit bytecode into therun
method.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 therun
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)
, andTypeConversions
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 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 therun
method.
-