标签:加载 option dex ase slots 技术分享 指令集 public div
一、字节码与指令集
https://blog.csdn.net/hudashi/article/details/7062675
二、指令与指令解码
所有代码:https://github.com/zxh0/jvmgo-book
本章不会把指令文件全部列出,请观看源码
1、Instruction接口
在jvmgo\instructions\base文件夹下创建instruction.go文件
1 package base 2 3 import "jvmgo/ch05/rtda" 4 5 type Instruction interface { 6 FetchOperands(reader *BytecodeReader) 7 Execute(frame *rtda.Frame) 8 } 9 10 type NoOperandsInstruction struct { 11 // empty 12 } 13 14 func (self *NoOperandsInstruction) FetchOperands(reader *BytecodeReader) { 15 // nothing to do 16 } 17 18 type BranchInstruction struct { 19 Offset int 20 } 21 22 func (self *BranchInstruction) FetchOperands(reader *BytecodeReader) { 23 self.Offset = int(reader.ReadInt16()) 24 } 25 26 type Index8Instruction struct { 27 Index uint 28 } 29 30 func (self *Index8Instruction) FetchOperands(reader *BytecodeReader) { 31 self.Index = uint(reader.ReadUint8()) 32 } 33 34 type Index16Instruction struct { 35 Index uint 36 } 37 38 func (self *Index16Instruction) FetchOperands(reader *BytecodeReader) { 39 self.Index = uint(reader.ReadUint16()) 40 }
FetchOperands()方法从字节码中提取操作数,Execute()方法执行指令逻辑,在instruction.go文件中定义了NoOperandsInstruction结构,空操作。
BranchInstruction表示跳转指令,Offset存放跳转偏移量。Index8Instruction表示对局部变量表中索引的存储和加载,Index表示局部变量表索引。Index16Instruction表示对常量池的索引的存取操作。
2、BytecodeReader
在jvmgo\instauctions/base文件夹下创建bytecode_reader.go文件
1 package base 2 3 type BytecodeReader struct { 4 code []byte // bytecodes 5 pc int 6 } 7 8 func (self *BytecodeReader) Reset(code []byte, pc int) { 9 self.code = code 10 self.pc = pc 11 } 12 13 func (self *BytecodeReader) PC() int { 14 return self.pc 15 } 16 17 func (self *BytecodeReader) ReadInt8() int8 { 18 return int8(self.ReadUint8()) 19 } 20 func (self *BytecodeReader) ReadUint8() uint8 { 21 i := self.code[self.pc] 22 self.pc++ 23 return i 24 } 25 26 func (self *BytecodeReader) ReadInt16() int16 { 27 return int16(self.ReadUint16()) 28 } 29 func (self *BytecodeReader) ReadUint16() uint16 { 30 byte1 := uint16(self.ReadUint8()) 31 byte2 := uint16(self.ReadUint8()) 32 return (byte1 << 8) | byte2 33 } 34 35 func (self *BytecodeReader) ReadInt32() int32 { 36 byte1 := int32(self.ReadUint8()) 37 byte2 := int32(self.ReadUint8()) 38 byte3 := int32(self.ReadUint8()) 39 byte4 := int32(self.ReadUint8()) 40 return (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4 41 } 42 43 // used by lookupswitch and tableswitch 44 func (self *BytecodeReader) ReadInt32s(n int32) []int32 { 45 ints := make([]int32, n) 46 for i := range ints { 47 ints[i] = self.ReadInt32() 48 } 49 return ints 50 } 51 52 // used by lookupswitch and tableswitch 53 func (self *BytecodeReader) SkipPadding() { 54 for self.pc%4 != 0 { 55 self.ReadUint8() 56 } 57 }
code存放字节码,pc记录读取到那个字节,并实现一系列Read函数。
三、常量指令
1、nop指令
nop指令是一条什么都不做的指令,在jvmgo\instructions\constants文件夹下创建nop.go
1 package constants 2 3 import "jvmgo/instructions/base" 4 import "jvmgo/rtda" 5 6 // Do nothing 7 type NOP struct{ base.NoOperandsInstruction } 8 9 func (self *NOP) Execute(frame *rtda.Frame) { 10 // really do nothing 11 }
2、const系列指令
创建const.go文件
1 package constants 2 3 import "jvmgo/instructions/base" 4 import "jvmgo/rtda" 5 6 // Push null 7 type ACONST_NULL struct{ base.NoOperandsInstruction } 8 9 func (self *ACONST_NULL) Execute(frame *rtda.Frame) { 10 frame.OperandStack().PushRef(nil) 11 } 12 13 // Push double 14 type DCONST_0 struct{ base.NoOperandsInstruction } 15 16 func (self *DCONST_0) Execute(frame *rtda.Frame) { 17 frame.OperandStack().PushDouble(0.0) 18 } 19 20 type DCONST_1 struct{ base.NoOperandsInstruction } 21 22 func (self *DCONST_1) Execute(frame *rtda.Frame) { 23 frame.OperandStack().PushDouble(1.0) 24 } 25 26 // Push float 27 type FCONST_0 struct{ base.NoOperandsInstruction } 28 29 func (self *FCONST_0) Execute(frame *rtda.Frame) { 30 frame.OperandStack().PushFloat(0.0) 31 } 32 33 type FCONST_1 struct{ base.NoOperandsInstruction } 34 35 func (self *FCONST_1) Execute(frame *rtda.Frame) { 36 frame.OperandStack().PushFloat(1.0) 37 } 38 39 type FCONST_2 struct{ base.NoOperandsInstruction } 40 41 func (self *FCONST_2) Execute(frame *rtda.Frame) { 42 frame.OperandStack().PushFloat(2.0) 43 } 44 45 // Push int constant 46 type ICONST_M1 struct{ base.NoOperandsInstruction } 47 48 func (self *ICONST_M1) Execute(frame *rtda.Frame) { 49 frame.OperandStack().PushInt(-1) 50 } 51 52 type ICONST_0 struct{ base.NoOperandsInstruction } 53 54 func (self *ICONST_0) Execute(frame *rtda.Frame) { 55 frame.OperandStack().PushInt(0) 56 } 57 58 type ICONST_1 struct{ base.NoOperandsInstruction } 59 60 func (self *ICONST_1) Execute(frame *rtda.Frame) { 61 frame.OperandStack().PushInt(1) 62 } 63 64 type ICONST_2 struct{ base.NoOperandsInstruction } 65 66 func (self *ICONST_2) Execute(frame *rtda.Frame) { 67 frame.OperandStack().PushInt(2) 68 } 69 70 type ICONST_3 struct{ base.NoOperandsInstruction } 71 72 func (self *ICONST_3) Execute(frame *rtda.Frame) { 73 frame.OperandStack().PushInt(3) 74 } 75 76 type ICONST_4 struct{ base.NoOperandsInstruction } 77 78 func (self *ICONST_4) Execute(frame *rtda.Frame) { 79 frame.OperandStack().PushInt(4) 80 } 81 82 type ICONST_5 struct{ base.NoOperandsInstruction } 83 84 func (self *ICONST_5) Execute(frame *rtda.Frame) { 85 frame.OperandStack().PushInt(5) 86 } 87 88 // Push long constant 89 type LCONST_0 struct{ base.NoOperandsInstruction } 90 91 func (self *LCONST_0) Execute(frame *rtda.Frame) { 92 frame.OperandStack().PushLong(0) 93 } 94 95 type LCONST_1 struct{ base.NoOperandsInstruction } 96 97 func (self *LCONST_1) Execute(frame *rtda.Frame) { 98 frame.OperandStack().PushLong(1) 99 }
3、bipush和sipush
创建ipush.go文件
1 package constants 2 3 import "jvmgo/ch05/instructions/base" 4 import "jvmgo/ch05/rtda" 5 6 // Push byte 7 type BIPUSH struct { 8 val int8 9 } 10 11 func (self *BIPUSH) FetchOperands(reader *base.BytecodeReader) { 12 self.val = reader.ReadInt8() 13 } 14 func (self *BIPUSH) Execute(frame *rtda.Frame) { 15 i := int32(self.val) 16 frame.OperandStack().PushInt(i) 17 } 18 19 // Push short 20 type SIPUSH struct { 21 val int16 22 } 23 24 func (self *SIPUSH) FetchOperands(reader *base.BytecodeReader) { 25 self.val = reader.ReadInt16() 26 } 27 func (self *SIPUSH) Execute(frame *rtda.Frame) { 28 i := int32(self.val) 29 frame.OperandStack().PushInt(i) 30 }
四、加载指令
加载指令是从局部变量表获取变量,然后推入操作数栈顶。
创建jvmgo\instructions\loads文件夹,定义iload.go文件
1 package loads 2 3 import "jvmgo/instructions/base" 4 import "jvmgo/rtda" 5 6 // Load int from local variable 7 type ILOAD struct{ base.Index8Instruction } 8 9 func (self *ILOAD) Execute(frame *rtda.Frame) { 10 _iload(frame, self.Index) 11 } 12 13 type ILOAD_0 struct{ base.NoOperandsInstruction } 14 15 func (self *ILOAD_0) Execute(frame *rtda.Frame) { 16 _iload(frame, 0) 17 } 18 19 type ILOAD_1 struct{ base.NoOperandsInstruction } 20 21 func (self *ILOAD_1) Execute(frame *rtda.Frame) { 22 _iload(frame, 1) 23 } 24 25 type ILOAD_2 struct{ base.NoOperandsInstruction } 26 27 func (self *ILOAD_2) Execute(frame *rtda.Frame) { 28 _iload(frame, 2) 29 } 30 31 type ILOAD_3 struct{ base.NoOperandsInstruction } 32 33 func (self *ILOAD_3) Execute(frame *rtda.Frame) { 34 _iload(frame, 3) 35 } 36 37 func _iload(frame *rtda.Frame, index uint) { 38 val := frame.LocalVars().GetInt(index) 39 frame.OperandStack().PushInt(val) 40 }
同理可以定义类似的aload.go、dload.go、fload.go、lload.go文件
五、存储指令
存储指令和加载指令相反,把变量从操作数栈顶弹出,然后存入局部变量表。也可分作六类
在jvmgo\instructions\stores文件夹下创建lstore.go文件
1 package stores 2 3 import "jvmgo/instructions/base" 4 import "jvmgo/rtda" 5 6 // Store long into local variable 7 type LSTORE struct{ base.Index8Instruction } 8 9 func (self *LSTORE) Execute(frame *rtda.Frame) { 10 _lstore(frame, uint(self.Index)) 11 } 12 13 type LSTORE_0 struct{ base.NoOperandsInstruction } 14 15 func (self *LSTORE_0) Execute(frame *rtda.Frame) { 16 _lstore(frame, 0) 17 } 18 19 type LSTORE_1 struct{ base.NoOperandsInstruction } 20 21 func (self *LSTORE_1) Execute(frame *rtda.Frame) { 22 _lstore(frame, 1) 23 } 24 25 type LSTORE_2 struct{ base.NoOperandsInstruction } 26 27 func (self *LSTORE_2) Execute(frame *rtda.Frame) { 28 _lstore(frame, 2) 29 } 30 31 type LSTORE_3 struct{ base.NoOperandsInstruction } 32 33 func (self *LSTORE_3) Execute(frame *rtda.Frame) { 34 _lstore(frame, 3) 35 } 36 37 func _lstore(frame *rtda.Frame, index uint) { 38 val := frame.OperandStack().PopLong() 39 frame.LocalVars().SetLong(index, val) 40 }
六、栈指令
为了使用栈指令需要给jvmgo\stda\operand_stack.go文件增加两个函数
1 func (self *OperandStack) PushSlot(slot Slot) { 2 self.slots[self.size] = slot 3 self.size++ 4 } 5 func (self *OperandStack) PopSlot() Slot { 6 self.size-- 7 return self.slots[self.size] 8 }
pop和pop2指令将栈顶元素弹出,pop2为两个字节,dup指令复制栈顶元素,swap交换栈顶的两个变量。
七、数学指令
1、算术指令
包括加、减、乘、除、求余、取反指令
2、位移指令
在jvmgo\instructions\math下创建sh.go文件包括六条位移指令
1 package math 2 3 import "jvmgo/instructions/base" 4 import "jvmgo/rtda" 5 6 // Shift left int 7 type ISHL struct{ base.NoOperandsInstruction } 8 9 func (self *ISHL) Execute(frame *rtda.Frame) { 10 stack := frame.OperandStack() 11 v2 := stack.PopInt() 12 v1 := stack.PopInt() 13 s := uint32(v2) & 0x1f 14 result := v1 << s 15 stack.PushInt(result) 16 } 17 18 // Arithmetic shift right int 19 type ISHR struct{ base.NoOperandsInstruction } 20 21 func (self *ISHR) Execute(frame *rtda.Frame) { 22 stack := frame.OperandStack() 23 v2 := stack.PopInt() 24 v1 := stack.PopInt() 25 s := uint32(v2) & 0x1f 26 result := v1 >> s 27 stack.PushInt(result) 28 } 29 30 // Logical shift right int 31 type IUSHR struct{ base.NoOperandsInstruction } 32 33 func (self *IUSHR) Execute(frame *rtda.Frame) { 34 stack := frame.OperandStack() 35 v2 := stack.PopInt() 36 v1 := stack.PopInt() 37 s := uint32(v2) & 0x1f 38 result := int32(uint32(v1) >> s) 39 stack.PushInt(result) 40 } 41 42 // Shift left long 43 type LSHL struct{ base.NoOperandsInstruction } 44 45 func (self *LSHL) Execute(frame *rtda.Frame) { 46 stack := frame.OperandStack() 47 v2 := stack.PopInt() 48 v1 := stack.PopLong() 49 s := uint32(v2) & 0x3f 50 result := v1 << s 51 stack.PushLong(result) 52 } 53 54 // Arithmetic shift right long 55 type LSHR struct{ base.NoOperandsInstruction } 56 57 func (self *LSHR) Execute(frame *rtda.Frame) { 58 stack := frame.OperandStack() 59 v2 := stack.PopInt() 60 v1 := stack.PopLong() 61 s := uint32(v2) & 0x3f 62 result := v1 >> s 63 stack.PushLong(result) 64 } 65 66 // Logical shift right long 67 type LUSHR struct{ base.NoOperandsInstruction } 68 69 func (self *LUSHR) Execute(frame *rtda.Frame) { 70 stack := frame.OperandStack() 71 v2 := stack.PopInt() 72 v1 := stack.PopLong() 73 s := uint32(v2) & 0x3f 74 result := int64(uint64(v1) >> s) 75 stack.PushLong(result) 76 }
3、布尔指令
有位与、位或、按位异或三种指令
八、类型转换指令
创建jvmgo\instructions\conversions文件夹
x2y,把x类型转换成y类型,使用go语言带有的类型转换
九、比较指令
创建jvmgo\instructions\comparisons文件夹
十、控制指令
创建jvmgo\instructions\control文件夹
十一、扩展指令
创建jvmgo\instructions\extended文件夹
十二、解释器
在jvmgo文件夹下创建interpreter.go文件
1 package main 2 3 import "fmt" 4 import "jvmgo/classfile" 5 import "jvmgo/instructions" 6 import "jvmgo/instructions/base" 7 import "jvmgo/rtda" 8 9 func interpret(methodInfo *classfile.MemberInfo) { 10 codeAttr := methodInfo.CodeAttribute() 11 maxLocals := codeAttr.MaxLocals() 12 maxStack := codeAttr.MaxStack() 13 bytecode := codeAttr.Code() 14 15 thread := rtda.NewThread() 16 frame := thread.NewFrame(maxLocals, maxStack) 17 thread.PushFrame(frame) 18 19 defer catchErr(frame) 20 loop(thread, bytecode) 21 } 22 23 func catchErr(frame *rtda.Frame) { 24 if r := recover(); r != nil { 25 fmt.Printf("LocalVars:%v\n", frame.LocalVars()) 26 fmt.Printf("OperandStack:%v\n", frame.OperandStack()) 27 panic(r) 28 } 29 } 30 31 func loop(thread *rtda.Thread, bytecode []byte) { 32 frame := thread.PopFrame() 33 reader := &base.BytecodeReader{} 34 35 for { 36 pc := frame.NextPC() 37 thread.SetPC(pc) 38 39 // decode 40 reader.Reset(bytecode, pc) 41 opcode := reader.ReadUint8() 42 inst := instructions.NewInstruction(opcode) 43 inst.FetchOperands(reader) 44 frame.SetNextPC(reader.PC()) 45 46 // execute 47 fmt.Printf("pc:%2d inst:%T %v\n", pc, inst, inst) 48 inst.Execute(frame) 49 } 50 }
并在jvmgo\rtda\thread.go新建Thread结构体的NewFrame()函数
func (self *Thread) NewFrame(maxLocals, maxStack uint) *Frame {
return newFrame(self, maxLocals, maxStack)
}
rtda\Frame.go也有改变
// stack frame type Frame struct { lower *Frame // stack is implemented as linked list localVars LocalVars operandStack *OperandStack thread *Thread nextPC int // the next instruction after the call // todo } func NewFrame(thread *Thread,maxLocals, maxStack uint) *Frame { return &Frame{ thread: thread localVars: newLocalVars(maxLocals), operandStack: newOperandStack(maxStack), } }
十三、测试
更改main.go里面的startJVM()函数
func startJVM(cmd *Cmd) { cp := classpath.Parse(cmd.XjreOption, cmd.cpOption) className := strings.Replace(cmd.class, ".", "/", -1) cf := loadClass(className, cp) mainMethod := getMainMethod(cf) if mainMethod != nil { interpret(mainMethod) } else { fmt.Printf("Main method not found in class %s\n", cmd.class) } } func loadClass(className string, cp *classpath.Classpath) *classfile.ClassFile { classData, _, err := cp.ReadClass(className) if err != nil { panic(err) } cf, err := classfile.Parse(classData) if err != nil { panic(err) } return cf } func getMainMethod(cf *classfile.ClassFile) *classfile.MemberInfo { for _, m := range cf.Methods() { if m.Name() == "main" && m.Descriptor() == "([Ljava/lang/String;)V" { return m } } return nil }
通过命令行进行编译,之后通过执行GaussTest程序测试
GaussTest.java
public class GaussTest { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println(sum); } }
测试结果
PS D:\Program_Files\go\bin> .\jvmgo.exe GaussTest pc: 0 inst:*constants.ICONST_0 &{{}} pc: 1 inst:*stores.ISTORE_1 &{{}} pc: 2 inst:*constants.ICONST_1 &{{}} pc: 3 inst:*stores.ISTORE_2 &{{}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} pc:10 inst:*loads.ILOAD_1 &{{}} pc:11 inst:*loads.ILOAD_2 &{{}} pc:12 inst:*math.IADD &{{}} pc:13 inst:*stores.ISTORE_1 &{{}} pc:14 inst:*math.IINC &{2 1} pc:17 inst:*control.GOTO &{{-13}} pc: 4 inst:*loads.ILOAD_2 &{{}} pc: 5 inst:*constants.BIPUSH &{100} pc: 7 inst:*comparisons.IF_ICMPGT &{{13}} LocalVars:[{0 <nil>} {5050 <nil>} {101 <nil>}] OperandStack:&{0 [{101 <nil>} {100 <nil>}]} panic: Unsupported opcode: 0xb2! [recovered] panic: Unsupported opcode: 0xb2! goroutine 1 [running]: main.catchErr(0xc04244a3c0) D:/Program_Files/go/src/jvmgo/interpreter.go:27 +0x173 panic(0x4ef5a0, 0xc04203c730) D:/APP/GO/src/runtime/panic.go:502 +0x237 jvmgo/instructions.NewInstruction(0xc0420095b2, 0xc04244a3c0, 0xc0425e7dd0) D:/Program_Files/go/src/jvmgo/instructions/factory.go:577 +0x1a3c main.loop(0xc04203c720, 0xc0425c896e, 0x1c, 0x25a) D:/Program_Files/go/src/jvmgo/interpreter.go:42 +0x1c3 main.interpret(0xc04244a380) D:/Program_Files/go/src/jvmgo/interpreter.go:20 +0x1f2 main.startJVM(0xc042080000) D:/Program_Files/go/src/jvmgo/main.go:27 +0xf9 main.main() D:/Program_Files/go/src/jvmgo/main.go:17 +0x5d
标签:加载 option dex ase slots 技术分享 指令集 public div
原文地址:https://www.cnblogs.com/pingxin/p/p00084.html