vm: implement new JMP* and CALL* opcodes

In compiler JMP*_L opcodes are always used, as this requires less effort.
This commit is contained in:
Evgenii Stratonikov 2020-04-23 11:56:36 +03:00
parent fba185cd99
commit d6624a92ca
10 changed files with 328 additions and 141 deletions

View file

@ -38,12 +38,28 @@ func _() {
_ = x[PUSH14-30]
_ = x[PUSH15-31]
_ = x[PUSH16-32]
_ = x[NOP-33]
_ = x[JMP-34]
_ = x[JMPL-35]
_ = x[JMPIF-36]
_ = x[JMPIFL-37]
_ = x[JMPIFNOT-38]
_ = x[JMPIFNOTL-39]
_ = x[JMPEQ-40]
_ = x[JMPEQL-41]
_ = x[JMPNE-42]
_ = x[JMPNEL-43]
_ = x[JMPGT-44]
_ = x[JMPGTL-45]
_ = x[JMPGE-46]
_ = x[JMPGEL-47]
_ = x[JMPLT-48]
_ = x[JMPLTL-49]
_ = x[JMPLE-50]
_ = x[JMPLEL-51]
_ = x[CALL-52]
_ = x[CALLL-53]
_ = x[OLDPUSH1-81]
_ = x[NOP-97]
_ = x[JMP-98]
_ = x[JMPIF-99]
_ = x[JMPIFNOT-100]
_ = x[CALL-101]
_ = x[RET-102]
_ = x[APPCALL-103]
_ = x[SYSCALL-104]
@ -125,7 +141,7 @@ func _() {
_ = x[THROWIFNOT-241]
}
const _Opcode_name = "PUSHINT8PUSHINT16PUSHINT32PUSHINT64PUSHINT128PUSHINT256PUSHNULLPUSHDATA1PUSHDATA2PUSHDATA4PUSHM1PUSH0PUSH1PUSH2PUSH3PUSH4PUSH5PUSH6PUSH7PUSH8PUSH9PUSH10PUSH11PUSH12PUSH13PUSH14PUSH15PUSH16OLDPUSH1NOPJMPJMPIFJMPIFNOTCALLRETAPPCALLSYSCALLTAILCALLDUPFROMALTSTACKTOALTSTACKFROMALTSTACKXDROPISNULLXSWAPXTUCKDEPTHDROPDUPNIPOVERPICKROLLROTSWAPTUCKCATSUBSTRLEFTRIGHTSIZEINVERTANDORXOREQUALINCDECSIGNNEGATEABSNOTNZADDSUBMULDIVMODSHLSHRBOOLANDBOOLORNUMEQUALNUMNOTEQUALLTGTLTEGTEMINMAXWITHINSHA1SHA256HASH160HASH256CHECKSIGVERIFYCHECKMULTISIGARRAYSIZEPACKUNPACKPICKITEMSETITEMNEWARRAYNEWSTRUCTNEWMAPAPPENDREVERSEREMOVEHASKEYKEYSVALUESTHROWTHROWIFNOT"
const _Opcode_name = "PUSHINT8PUSHINT16PUSHINT32PUSHINT64PUSHINT128PUSHINT256PUSHNULLPUSHDATA1PUSHDATA2PUSHDATA4PUSHM1PUSH0PUSH1PUSH2PUSH3PUSH4PUSH5PUSH6PUSH7PUSH8PUSH9PUSH10PUSH11PUSH12PUSH13PUSH14PUSH15PUSH16NOPJMPJMP_LJMPIFJMPIF_LJMPIFNOTJMPIFNOT_LJMPEQJMPEQ_LJMPNEJMPNE_LJMPGTJMPGT_LJMPGEJMPGE_LJMPLTJMPLT_LJMPLEJMPLE_LCALLCALL_LOLDPUSH1RETAPPCALLSYSCALLTAILCALLDUPFROMALTSTACKTOALTSTACKFROMALTSTACKXDROPISNULLXSWAPXTUCKDEPTHDROPDUPNIPOVERPICKROLLROTSWAPTUCKCATSUBSTRLEFTRIGHTSIZEINVERTANDORXOREQUALINCDECSIGNNEGATEABSNOTNZADDSUBMULDIVMODSHLSHRBOOLANDBOOLORNUMEQUALNUMNOTEQUALLTGTLTEGTEMINMAXWITHINSHA1SHA256HASH160HASH256CHECKSIGVERIFYCHECKMULTISIGARRAYSIZEPACKUNPACKPICKITEMSETITEMNEWARRAYNEWSTRUCTNEWMAPAPPENDREVERSEREMOVEHASKEYKEYSVALUESTHROWTHROWIFNOT"
var _Opcode_map = map[Opcode]string{
0: _Opcode_name[0:8],
@ -156,91 +172,107 @@ var _Opcode_map = map[Opcode]string{
30: _Opcode_name[170:176],
31: _Opcode_name[176:182],
32: _Opcode_name[182:188],
81: _Opcode_name[188:196],
97: _Opcode_name[196:199],
98: _Opcode_name[199:202],
99: _Opcode_name[202:207],
100: _Opcode_name[207:215],
101: _Opcode_name[215:219],
102: _Opcode_name[219:222],
103: _Opcode_name[222:229],
104: _Opcode_name[229:236],
105: _Opcode_name[236:244],
106: _Opcode_name[244:259],
107: _Opcode_name[259:269],
108: _Opcode_name[269:281],
109: _Opcode_name[281:286],
112: _Opcode_name[286:292],
114: _Opcode_name[292:297],
115: _Opcode_name[297:302],
116: _Opcode_name[302:307],
117: _Opcode_name[307:311],
118: _Opcode_name[311:314],
119: _Opcode_name[314:317],
120: _Opcode_name[317:321],
121: _Opcode_name[321:325],
122: _Opcode_name[325:329],
123: _Opcode_name[329:332],
124: _Opcode_name[332:336],
125: _Opcode_name[336:340],
126: _Opcode_name[340:343],
127: _Opcode_name[343:349],
128: _Opcode_name[349:353],
129: _Opcode_name[353:358],
130: _Opcode_name[358:362],
131: _Opcode_name[362:368],
132: _Opcode_name[368:371],
133: _Opcode_name[371:373],
134: _Opcode_name[373:376],
135: _Opcode_name[376:381],
139: _Opcode_name[381:384],
140: _Opcode_name[384:387],
141: _Opcode_name[387:391],
143: _Opcode_name[391:397],
144: _Opcode_name[397:400],
145: _Opcode_name[400:403],
146: _Opcode_name[403:405],
147: _Opcode_name[405:408],
148: _Opcode_name[408:411],
149: _Opcode_name[411:414],
150: _Opcode_name[414:417],
151: _Opcode_name[417:420],
152: _Opcode_name[420:423],
153: _Opcode_name[423:426],
154: _Opcode_name[426:433],
155: _Opcode_name[433:439],
156: _Opcode_name[439:447],
158: _Opcode_name[447:458],
159: _Opcode_name[458:460],
160: _Opcode_name[460:462],
161: _Opcode_name[462:465],
162: _Opcode_name[465:468],
163: _Opcode_name[468:471],
164: _Opcode_name[471:474],
165: _Opcode_name[474:480],
167: _Opcode_name[480:484],
168: _Opcode_name[484:490],
169: _Opcode_name[490:497],
170: _Opcode_name[497:504],
172: _Opcode_name[504:512],
173: _Opcode_name[512:518],
174: _Opcode_name[518:531],
192: _Opcode_name[531:540],
193: _Opcode_name[540:544],
194: _Opcode_name[544:550],
195: _Opcode_name[550:558],
196: _Opcode_name[558:565],
197: _Opcode_name[565:573],
198: _Opcode_name[573:582],
199: _Opcode_name[582:588],
200: _Opcode_name[588:594],
201: _Opcode_name[594:601],
202: _Opcode_name[601:607],
203: _Opcode_name[607:613],
204: _Opcode_name[613:617],
205: _Opcode_name[617:623],
240: _Opcode_name[623:628],
241: _Opcode_name[628:638],
33: _Opcode_name[188:191],
34: _Opcode_name[191:194],
35: _Opcode_name[194:199],
36: _Opcode_name[199:204],
37: _Opcode_name[204:211],
38: _Opcode_name[211:219],
39: _Opcode_name[219:229],
40: _Opcode_name[229:234],
41: _Opcode_name[234:241],
42: _Opcode_name[241:246],
43: _Opcode_name[246:253],
44: _Opcode_name[253:258],
45: _Opcode_name[258:265],
46: _Opcode_name[265:270],
47: _Opcode_name[270:277],
48: _Opcode_name[277:282],
49: _Opcode_name[282:289],
50: _Opcode_name[289:294],
51: _Opcode_name[294:301],
52: _Opcode_name[301:305],
53: _Opcode_name[305:311],
81: _Opcode_name[311:319],
102: _Opcode_name[319:322],
103: _Opcode_name[322:329],
104: _Opcode_name[329:336],
105: _Opcode_name[336:344],
106: _Opcode_name[344:359],
107: _Opcode_name[359:369],
108: _Opcode_name[369:381],
109: _Opcode_name[381:386],
112: _Opcode_name[386:392],
114: _Opcode_name[392:397],
115: _Opcode_name[397:402],
116: _Opcode_name[402:407],
117: _Opcode_name[407:411],
118: _Opcode_name[411:414],
119: _Opcode_name[414:417],
120: _Opcode_name[417:421],
121: _Opcode_name[421:425],
122: _Opcode_name[425:429],
123: _Opcode_name[429:432],
124: _Opcode_name[432:436],
125: _Opcode_name[436:440],
126: _Opcode_name[440:443],
127: _Opcode_name[443:449],
128: _Opcode_name[449:453],
129: _Opcode_name[453:458],
130: _Opcode_name[458:462],
131: _Opcode_name[462:468],
132: _Opcode_name[468:471],
133: _Opcode_name[471:473],
134: _Opcode_name[473:476],
135: _Opcode_name[476:481],
139: _Opcode_name[481:484],
140: _Opcode_name[484:487],
141: _Opcode_name[487:491],
143: _Opcode_name[491:497],
144: _Opcode_name[497:500],
145: _Opcode_name[500:503],
146: _Opcode_name[503:505],
147: _Opcode_name[505:508],
148: _Opcode_name[508:511],
149: _Opcode_name[511:514],
150: _Opcode_name[514:517],
151: _Opcode_name[517:520],
152: _Opcode_name[520:523],
153: _Opcode_name[523:526],
154: _Opcode_name[526:533],
155: _Opcode_name[533:539],
156: _Opcode_name[539:547],
158: _Opcode_name[547:558],
159: _Opcode_name[558:560],
160: _Opcode_name[560:562],
161: _Opcode_name[562:565],
162: _Opcode_name[565:568],
163: _Opcode_name[568:571],
164: _Opcode_name[571:574],
165: _Opcode_name[574:580],
167: _Opcode_name[580:584],
168: _Opcode_name[584:590],
169: _Opcode_name[590:597],
170: _Opcode_name[597:604],
172: _Opcode_name[604:612],
173: _Opcode_name[612:618],
174: _Opcode_name[618:631],
192: _Opcode_name[631:640],
193: _Opcode_name[640:644],
194: _Opcode_name[644:650],
195: _Opcode_name[650:658],
196: _Opcode_name[658:665],
197: _Opcode_name[665:673],
198: _Opcode_name[673:682],
199: _Opcode_name[682:688],
200: _Opcode_name[688:694],
201: _Opcode_name[694:701],
202: _Opcode_name[701:707],
203: _Opcode_name[707:713],
204: _Opcode_name[713:717],
205: _Opcode_name[717:723],
240: _Opcode_name[723:728],
241: _Opcode_name[728:738],
}
func (i Opcode) String() string {