Interface BinOpGen<T extends JitBinOp>
- 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 Subinterfaces:
BitwiseBinOpGen<T>
,CompareFloatOpGen<T>
,CompareIntBinOpGen<T>
,ShiftIntBinOpGen<T>
- All Known Implementing Classes:
BoolAndOpGen
,BoolOrOpGen
,BoolXorOpGen
,FloatAddOpGen
,FloatDivOpGen
,FloatEqualOpGen
,FloatLessEqualOpGen
,FloatLessOpGen
,FloatMultOpGen
,FloatNotEqualOpGen
,FloatSubOpGen
,IntAddOpGen
,IntAndOpGen
,IntCarryOpGen
,IntDivOpGen
,IntEqualOpGen
,IntLeftOpGen
,IntLessEqualOpGen
,IntLessOpGen
,IntMultOpGen
,IntNotEqualOpGen
,IntOrOpGen
,IntRemOpGen
,IntRightOpGen
,IntSBorrowOpGen
,IntSCarryOpGen
,IntSDivOpGen
,IntSLessEqualOpGen
,IntSLessOpGen
,IntSRemOpGen
,IntSRightOpGen
,IntSubOpGen
,IntXorOpGen
-
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 JitType
afterLeft
(JitCodeGenerator gen, T op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code between reading the left and right operandsgenerateBinOpRunCode
(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code for the binary operatordefault void
generateRunCode
(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, org.objectweb.asm.MethodVisitor rv) Emit bytecode into therun
method.Methods inherited from interface ghidra.pcode.emu.jit.gen.op.OpGen
generateInitCode
-
Method Details
-
afterLeft
default JitType afterLeft(JitCodeGenerator gen, T op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code between reading the left and right operandsThis 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.
- Parameters:
gen
- the code generatorop
- the operatorlType
- the actual type of the left operandrType
- the actual type of the right operandrv
- the method visitor- Returns:
- the new actual type of the left operand
-
generateBinOpRunCode
JitType generateBinOpRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code for the binary operatorAt 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.
- Parameters:
gen
- the code generatorop
- the operatorblock
- the block containing the operatorlType
- the actual type of the left operandrType
- the actual type of the right 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 left operand, invokes the
after-left
hook point, emits code to load the right operand, invokesgenerate-binop
, and finally emits code to write the destination operand.- Specified by:
generateRunCode
in interfaceOpGen<T extends JitBinOp>
- 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.
-