双值和长值的Java字节码交换?

Mig*_*boa 3 java jvm java-bytecode-asm

我正在开发一个带有 ASM 的 Java 检测引擎,有一种情况是评估堆栈在顶部有一个特定的,我想在现有之前插入一个ref(这是getstatic的结果)。即考虑只有一个的堆栈: ,然后在getstatic 之后我希望堆栈变成这样:。value ->ref, value ->

要执行此行为,我必须插入以下字节码:getsaticswap。使用 ASM 我会做类似的事情(考虑mv类型MethodVisitor):

mv.visitFieldInsn(Opcodes.GETSTATIC, ...);
mv.visitInsn(Opcodes.SWAP);
Run Code Online (Sandbox Code Playgroud)

问题是交换字节码不支持longdouble值。所以上面的代码适用于单个单词类型,但它不适用于longdouble类型。

是否有任何简单的解决方案可以解决longdouble类型的问题并且不需要辅助本地值?