Package ghidra.pcode.emu.jit.gen.op
Interface BitwiseBinOpGen<T extends JitBinOp>
- Type Parameters:
T
- the class of p-code op node in the use-def graph
- All Known Implementing Classes:
BoolAndOpGen
,BoolOrOpGen
,BoolXorOpGen
,IntAndOpGen
,IntOrOpGen
,IntXorOpGen
An extension for bitwise binary 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 JitType
afterLeft
(JitCodeGenerator gen, T op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code between reading the left and right operandsdefault JitType
generateBinOpRunCode
(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code for the binary operatordefault void
generateMpIntBinOp
(JitCodeGenerator gen, JitType.MpIntJitType type, org.objectweb.asm.MethodVisitor mv) WIP: The implementation for multi-precision ints.int
The JVM opcode to implement this operator with int operands on the stack.int
The JVM opcode to implement this operator with long operands on the stack.Methods inherited from interface ghidra.pcode.emu.jit.gen.op.BinOpGen
generateRunCode
Methods inherited from interface ghidra.pcode.emu.jit.gen.op.OpGen
generateInitCode
-
Method Details
-
intOpcode
int intOpcode()The JVM opcode to implement this operator with int operands on the stack.- Returns:
- the opcode
-
longOpcode
int longOpcode()The JVM opcode to implement this operator with long operands on the stack.- Returns:
- the opcode
-
generateMpIntBinOp
default void generateMpIntBinOp(JitCodeGenerator gen, JitType.MpIntJitType type, org.objectweb.asm.MethodVisitor mv) WIP: The implementation for multi-precision ints.- Parameters:
gen
- the code generatortype
- the type of each operand, including the reusltmv
- the visitor for therun
method
-
afterLeft
default JitType afterLeft(JitCodeGenerator gen, T op, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Description copied from interface:BinOpGen
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.
-
generateBinOpRunCode
default 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.
This implementation reduces the need to just the JVM opcode. We simply ensure both operands have the same size and JVM type, select and emit the correct opcode, and return the type of the result.
- Specified by:
generateBinOpRunCode
in interfaceBinOpGen<T extends JitBinOp>
- 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
-