Package ghidra.pcode.emu.jit.gen.op
Interface ShiftIntBinOpGen<T extends JitIntBinOp>
- Type Parameters:
T- the class of p-code op node in the use-def graph
- All Superinterfaces:
BinOpGen<T>,IntBinOpGen<T>,org.objectweb.asm.Opcodes,OpGen<T>
- All Known Implementing Classes:
IntLeftOpGen,IntRightOpGen,IntSRightOpGen
An extension for integer shift operators
This is just going to invoke one of the JitCompiledPassage.intLeft(int, int),
JitCompiledPassage.intRight(int, int), JitCompiledPassage.intSRight(int, int),
etc. methods, depending on the operand types.
-
Nested Class Summary
Nested classes/interfaces inherited from interface ghidra.pcode.emu.jit.gen.op.BinOpGen
BinOpGen.TakeOut -
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 JitTypegenerateBinOpRunCode(JitCodeGenerator gen, T op, JitControlFlowModel.JitBlock block, JitType lType, JitType rType, org.objectweb.asm.MethodVisitor rv) Emit code for the binary operatordefault JitType.MpIntJitTypegenerateShiftMpMp(JitAllocationModel am, int leftLegCount, int rightLegCount, JitType.MpIntJitType outType, org.objectweb.asm.MethodVisitor mv) default JitType.MpIntJitTypegenerateShiftMpPrimitive(JitAllocationModel am, int legCount, JitType.SimpleJitType rType, JitType.MpIntJitType outType, String mdesc, org.objectweb.asm.MethodVisitor mv) default JitType.SimpleJitTypegenerateShiftPrimitiveMp(JitAllocationModel am, JitType.SimpleJitType lType, int legCount, String mdesc, org.objectweb.asm.MethodVisitor mv) The name of the static method inJitCompiledPassageto invokedefault TypeConversions.ExtrExt()When loading the right operand, the kind of extension to applyMethods inherited from interface ghidra.pcode.emu.jit.gen.op.BinOpGen
afterLeft, ext, generateRunCode, isSignedMethods inherited from interface ghidra.pcode.emu.jit.gen.op.OpGen
generateInitCode
-
Method Details
-
rExt
When loading the right operand, the kind of extension to applyThe shift amount is always treated unsigned.
- Specified by:
rExtin interfaceBinOpGen<T extends JitIntBinOp>- Returns:
- the extension kind
-
methodName
String methodName()The name of the static method inJitCompiledPassageto invoke- Returns:
- the name
-
generateShiftMpPrimitive
default JitType.MpIntJitType generateShiftMpPrimitive(JitAllocationModel am, int legCount, JitType.SimpleJitType rType, JitType.MpIntJitType outType, String mdesc, org.objectweb.asm.MethodVisitor mv) -
generateShiftPrimitiveMp
default JitType.SimpleJitType generateShiftPrimitiveMp(JitAllocationModel am, JitType.SimpleJitType lType, int legCount, String mdesc, org.objectweb.asm.MethodVisitor mv) -
generateShiftMpMp
default JitType.MpIntJitType generateShiftMpMp(JitAllocationModel am, int leftLegCount, int rightLegCount, JitType.MpIntJitType outType, org.objectweb.asm.MethodVisitor mv) -
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 reduces the implementation to just the name of the method to invoke. This will select the JVM signature of the method based on the p-code operand types.
- Specified by:
generateBinOpRunCodein interfaceBinOpGen<T extends JitIntBinOp>- 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
-