001    /*
002     * Copyright 2007-2008 Sun Microsystems, Inc.  All Rights Reserved.
003     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004     *
005     * This code is free software; you can redistribute it and/or modify it
006     * under the terms of the GNU General Public License version 2 only, as
007     * published by the Free Software Foundation.  Sun designates this
008     * particular file as subject to the "Classpath" exception as provided
009     * by Sun in the LICENSE file that accompanied this code.
010     *
011     * This code is distributed in the hope that it will be useful, but WITHOUT
012     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014     * version 2 for more details (a copy is included in the LICENSE file that
015     * accompanied this code).
016     *
017     * You should have received a copy of the GNU General Public License version
018     * 2 along with this work; if not, write to the Free Software Foundation,
019     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020     *
021     * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022     * CA 95054 USA or visit www.sun.com if you need additional information or
023     * have any questions.
024     */
025    
026    package com.sun.tools.classfile;
027    
028    import java.util.HashMap;
029    
030    /**
031     * See JVMS3, section 6.
032     *
033     *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
034     *  you write code that depends on this, you do so at your own risk.
035     *  This code and its internal interfaces are subject to change or
036     *  deletion without notice.</b>
037     */
038    public class OpCodes {
039    
040        public static int opcLength(int opc) throws IllegalArgumentException {
041            switch (opc >> 8) {
042                case 0:
043                    return opcLengthsTab[opc];
044                case opc_wide:
045                    switch (opc & 0xFF) {
046                        case opc_aload:
047                        case opc_astore:
048                        case opc_fload:
049                        case opc_fstore:
050                        case opc_iload:
051                        case opc_istore:
052                        case opc_lload:
053                        case opc_lstore:
054                        case opc_dload:
055                        case opc_dstore:
056                        case opc_ret:
057                            return 4;
058                        case opc_iinc:
059                            return 6;
060                        default:
061                            throw new IllegalArgumentException();
062                    }
063                case opc_nonpriv:
064                case opc_priv:
065                    return 2;
066                default:
067                    throw new IllegalArgumentException();
068            }
069        }
070    
071        public static String opcName(int opc) {
072            try {
073                switch (opc >> 8) {
074                    case 0:
075                        return opcNamesTab[opc];
076                    case opc_wide:
077                        {
078                            String mnem = opcNamesTab[opc & 0xFF] + "_w";
079                            if (mnemocodes.get(mnem) == null) {
080                                return null; // non-existent opcode
081                            }
082                            return mnem;
083                        }
084                    case opc_nonpriv:
085                        return opcExtNamesTab[opc & 0xFF];
086                    case opc_priv:
087                        return opcPrivExtNamesTab[opc & 0xFF];
088                    default:
089                        return null;
090                }
091            } catch (ArrayIndexOutOfBoundsException e) {
092                switch (opc) {
093                    case opc_nonpriv:
094                        return "nonpriv";
095                    case opc_priv:
096                        return "priv";
097                    default:
098                        return null;
099                }
100            }
101        }
102    
103        /* Opcodes */
104        public static final int opc_dead                     = -2;
105        public static final int opc_label                    = -1;
106        public static final int opc_nop                      = 0;
107        public static final int opc_aconst_null              = 1;
108        public static final int opc_iconst_m1                = 2;
109        public static final int opc_iconst_0                 = 3;
110        public static final int opc_iconst_1                 = 4;
111        public static final int opc_iconst_2                 = 5;
112        public static final int opc_iconst_3                 = 6;
113        public static final int opc_iconst_4                 = 7;
114        public static final int opc_iconst_5                 = 8;
115        public static final int opc_lconst_0                 = 9;
116        public static final int opc_lconst_1                 = 10;
117        public static final int opc_fconst_0                 = 11;
118        public static final int opc_fconst_1                 = 12;
119        public static final int opc_fconst_2                 = 13;
120        public static final int opc_dconst_0                 = 14;
121        public static final int opc_dconst_1                 = 15;
122        public static final int opc_bipush                   = 16;
123        public static final int opc_sipush                   = 17;
124        public static final int opc_ldc                      = 18;
125        public static final int opc_ldc_w                    = 19;
126        public static final int opc_ldc2_w                   = 20;
127        public static final int opc_iload                    = 21;
128        public static final int opc_lload                    = 22;
129        public static final int opc_fload                    = 23;
130        public static final int opc_dload                    = 24;
131        public static final int opc_aload                    = 25;
132        public static final int opc_iload_0                  = 26;
133        public static final int opc_iload_1                  = 27;
134        public static final int opc_iload_2                  = 28;
135        public static final int opc_iload_3                  = 29;
136        public static final int opc_lload_0                  = 30;
137        public static final int opc_lload_1                  = 31;
138        public static final int opc_lload_2                  = 32;
139        public static final int opc_lload_3                  = 33;
140        public static final int opc_fload_0                  = 34;
141        public static final int opc_fload_1                  = 35;
142        public static final int opc_fload_2                  = 36;
143        public static final int opc_fload_3                  = 37;
144        public static final int opc_dload_0                  = 38;
145        public static final int opc_dload_1                  = 39;
146        public static final int opc_dload_2                  = 40;
147        public static final int opc_dload_3                  = 41;
148        public static final int opc_aload_0                  = 42;
149        public static final int opc_aload_1                  = 43;
150        public static final int opc_aload_2                  = 44;
151        public static final int opc_aload_3                  = 45;
152        public static final int opc_iaload                   = 46;
153        public static final int opc_laload                   = 47;
154        public static final int opc_faload                   = 48;
155        public static final int opc_daload                   = 49;
156        public static final int opc_aaload                   = 50;
157        public static final int opc_baload                   = 51;
158        public static final int opc_caload                   = 52;
159        public static final int opc_saload                   = 53;
160        public static final int opc_istore                   = 54;
161        public static final int opc_lstore                   = 55;
162        public static final int opc_fstore                   = 56;
163        public static final int opc_dstore                   = 57;
164        public static final int opc_astore                   = 58;
165        public static final int opc_istore_0                 = 59;
166        public static final int opc_istore_1                 = 60;
167        public static final int opc_istore_2                 = 61;
168        public static final int opc_istore_3                 = 62;
169        public static final int opc_lstore_0                 = 63;
170        public static final int opc_lstore_1                 = 64;
171        public static final int opc_lstore_2                 = 65;
172        public static final int opc_lstore_3                 = 66;
173        public static final int opc_fstore_0                 = 67;
174        public static final int opc_fstore_1                 = 68;
175        public static final int opc_fstore_2                 = 69;
176        public static final int opc_fstore_3                 = 70;
177        public static final int opc_dstore_0                 = 71;
178        public static final int opc_dstore_1                 = 72;
179        public static final int opc_dstore_2                 = 73;
180        public static final int opc_dstore_3                 = 74;
181        public static final int opc_astore_0                 = 75;
182        public static final int opc_astore_1                 = 76;
183        public static final int opc_astore_2                 = 77;
184        public static final int opc_astore_3                 = 78;
185        public static final int opc_iastore                  = 79;
186        public static final int opc_lastore                  = 80;
187        public static final int opc_fastore                  = 81;
188        public static final int opc_dastore                  = 82;
189        public static final int opc_aastore                  = 83;
190        public static final int opc_bastore                  = 84;
191        public static final int opc_castore                  = 85;
192        public static final int opc_sastore                  = 86;
193        public static final int opc_pop                      = 87;
194        public static final int opc_pop2                     = 88;
195        public static final int opc_dup                      = 89;
196        public static final int opc_dup_x1                   = 90;
197        public static final int opc_dup_x2                   = 91;
198        public static final int opc_dup2                     = 92;
199        public static final int opc_dup2_x1                  = 93;
200        public static final int opc_dup2_x2                  = 94;
201        public static final int opc_swap                     = 95;
202        public static final int opc_iadd                     = 96;
203        public static final int opc_ladd                     = 97;
204        public static final int opc_fadd                     = 98;
205        public static final int opc_dadd                     = 99;
206        public static final int opc_isub                     = 100;
207        public static final int opc_lsub                     = 101;
208        public static final int opc_fsub                     = 102;
209        public static final int opc_dsub                     = 103;
210        public static final int opc_imul                     = 104;
211        public static final int opc_lmul                     = 105;
212        public static final int opc_fmul                     = 106;
213        public static final int opc_dmul                     = 107;
214        public static final int opc_idiv                     = 108;
215        public static final int opc_ldiv                     = 109;
216        public static final int opc_fdiv                     = 110;
217        public static final int opc_ddiv                     = 111;
218        public static final int opc_irem                     = 112;
219        public static final int opc_lrem                     = 113;
220        public static final int opc_frem                     = 114;
221        public static final int opc_drem                     = 115;
222        public static final int opc_ineg                     = 116;
223        public static final int opc_lneg                     = 117;
224        public static final int opc_fneg                     = 118;
225        public static final int opc_dneg                     = 119;
226        public static final int opc_ishl                     = 120;
227        public static final int opc_lshl                     = 121;
228        public static final int opc_ishr                     = 122;
229        public static final int opc_lshr                     = 123;
230        public static final int opc_iushr                    = 124;
231        public static final int opc_lushr                    = 125;
232        public static final int opc_iand                     = 126;
233        public static final int opc_land                     = 127;
234        public static final int opc_ior                      = 128;
235        public static final int opc_lor                      = 129;
236        public static final int opc_ixor                     = 130;
237        public static final int opc_lxor                     = 131;
238        public static final int opc_iinc                     = 132;
239        public static final int opc_i2l                      = 133;
240        public static final int opc_i2f                      = 134;
241        public static final int opc_i2d                      = 135;
242        public static final int opc_l2i                      = 136;
243        public static final int opc_l2f                      = 137;
244        public static final int opc_l2d                      = 138;
245        public static final int opc_f2i                      = 139;
246        public static final int opc_f2l                      = 140;
247        public static final int opc_f2d                      = 141;
248        public static final int opc_d2i                      = 142;
249        public static final int opc_d2l                      = 143;
250        public static final int opc_d2f                      = 144;
251        public static final int opc_i2b                      = 145;
252        public static final int opc_int2byte                 = 145;
253        public static final int opc_i2c                      = 146;
254        public static final int opc_int2char                 = 146;
255        public static final int opc_i2s                      = 147;
256        public static final int opc_int2short                = 147;
257        public static final int opc_lcmp                     = 148;
258        public static final int opc_fcmpl                    = 149;
259        public static final int opc_fcmpg                    = 150;
260        public static final int opc_dcmpl                    = 151;
261        public static final int opc_dcmpg                    = 152;
262        public static final int opc_ifeq                     = 153;
263        public static final int opc_ifne                     = 154;
264        public static final int opc_iflt                     = 155;
265        public static final int opc_ifge                     = 156;
266        public static final int opc_ifgt                     = 157;
267        public static final int opc_ifle                     = 158;
268        public static final int opc_if_icmpeq                = 159;
269        public static final int opc_if_icmpne                = 160;
270        public static final int opc_if_icmplt                = 161;
271        public static final int opc_if_icmpge                = 162;
272        public static final int opc_if_icmpgt                = 163;
273        public static final int opc_if_icmple                = 164;
274        public static final int opc_if_acmpeq                = 165;
275        public static final int opc_if_acmpne                = 166;
276        public static final int opc_goto                     = 167;
277        public static final int opc_jsr                      = 168;
278        public static final int opc_ret                      = 169;
279        public static final int opc_tableswitch              = 170;
280        public static final int opc_lookupswitch             = 171;
281        public static final int opc_ireturn                  = 172;
282        public static final int opc_lreturn                  = 173;
283        public static final int opc_freturn                  = 174;
284        public static final int opc_dreturn                  = 175;
285        public static final int opc_areturn                  = 176;
286        public static final int opc_return                   = 177;
287        public static final int opc_getstatic                = 178;
288        public static final int opc_putstatic                = 179;
289        public static final int opc_getfield                 = 180;
290        public static final int opc_putfield                 = 181;
291        public static final int opc_invokevirtual            = 182;
292        public static final int opc_invokenonvirtual         = 183;
293        public static final int opc_invokespecial            = 183;
294        public static final int opc_invokestatic             = 184;
295        public static final int opc_invokeinterface          = 185;
296    //  public static final int opc_xxxunusedxxx             = 186;
297        public static final int opc_new                      = 187;
298        public static final int opc_newarray                 = 188;
299        public static final int opc_anewarray                = 189;
300        public static final int opc_arraylength              = 190;
301        public static final int opc_athrow                   = 191;
302        public static final int opc_checkcast                = 192;
303        public static final int opc_instanceof               = 193;
304        public static final int opc_monitorenter             = 194;
305        public static final int opc_monitorexit              = 195;
306        public static final int opc_wide                     = 196;
307        public static final int opc_multianewarray           = 197;
308        public static final int opc_ifnull                   = 198;
309        public static final int opc_ifnonnull                = 199;
310        public static final int opc_goto_w                   = 200;
311        public static final int opc_jsr_w                    = 201;
312    
313        /* Pseudo-instructions */
314        public static final int opc_bytecode                 = 203;
315        public static final int opc_try                      = 204;
316        public static final int opc_endtry                   = 205;
317        public static final int opc_catch                    = 206;
318        public static final int opc_var                      = 207;
319        public static final int opc_endvar                   = 208;
320        public static final int opc_localsmap                = 209;
321        public static final int opc_stackmap                 = 210;
322    
323        /* PicoJava prefixes */
324        public static final int opc_nonpriv                  = 254;
325        public static final int opc_priv                     = 255;
326    
327        /* Wide instructions */
328        public static final int opc_iload_w         = (opc_wide << 8 ) | opc_iload;
329        public static final int opc_lload_w         = (opc_wide << 8 ) | opc_lload;
330        public static final int opc_fload_w         = (opc_wide << 8 ) | opc_fload;
331        public static final int opc_dload_w         = (opc_wide << 8 ) | opc_dload;
332        public static final int opc_aload_w         = (opc_wide << 8 ) | opc_aload;
333        public static final int opc_istore_w        = (opc_wide << 8 ) | opc_istore;
334        public static final int opc_lstore_w        = (opc_wide << 8 ) | opc_lstore;
335        public static final int opc_fstore_w        = (opc_wide << 8 ) | opc_fstore;
336        public static final int opc_dstore_w        = (opc_wide << 8 ) | opc_dstore;
337        public static final int opc_astore_w        = (opc_wide << 8 ) | opc_astore;
338        public static final int opc_ret_w           = (opc_wide << 8 ) | opc_ret;
339        public static final int opc_iinc_w          = (opc_wide << 8 ) | opc_iinc;
340    
341        /* Opcode Names */
342        private static final String opcNamesTab[] = {
343            "nop",
344            "aconst_null",
345            "iconst_m1",
346            "iconst_0",
347            "iconst_1",
348            "iconst_2",
349            "iconst_3",
350            "iconst_4",
351            "iconst_5",
352            "lconst_0",
353            "lconst_1",
354            "fconst_0",
355            "fconst_1",
356            "fconst_2",
357            "dconst_0",
358            "dconst_1",
359            "bipush",
360            "sipush",
361            "ldc",
362            "ldc_w",
363            "ldc2_w",
364            "iload",
365            "lload",
366            "fload",
367            "dload",
368            "aload",
369            "iload_0",
370            "iload_1",
371            "iload_2",
372            "iload_3",
373            "lload_0",
374            "lload_1",
375            "lload_2",
376            "lload_3",
377            "fload_0",
378            "fload_1",
379            "fload_2",
380            "fload_3",
381            "dload_0",
382            "dload_1",
383            "dload_2",
384            "dload_3",
385            "aload_0",
386            "aload_1",
387            "aload_2",
388            "aload_3",
389            "iaload",
390            "laload",
391            "faload",
392            "daload",
393            "aaload",
394            "baload",
395            "caload",
396            "saload",
397            "istore",
398            "lstore",
399            "fstore",
400            "dstore",
401            "astore",
402            "istore_0",
403            "istore_1",
404            "istore_2",
405            "istore_3",
406            "lstore_0",
407            "lstore_1",
408            "lstore_2",
409            "lstore_3",
410            "fstore_0",
411            "fstore_1",
412            "fstore_2",
413            "fstore_3",
414            "dstore_0",
415            "dstore_1",
416            "dstore_2",
417            "dstore_3",
418            "astore_0",
419            "astore_1",
420            "astore_2",
421            "astore_3",
422            "iastore",
423            "lastore",
424            "fastore",
425            "dastore",
426            "aastore",
427            "bastore",
428            "castore",
429            "sastore",
430            "pop",
431            "pop2",
432            "dup",
433            "dup_x1",
434            "dup_x2",
435            "dup2",
436            "dup2_x1",
437            "dup2_x2",
438            "swap",
439            "iadd",
440            "ladd",
441            "fadd",
442            "dadd",
443            "isub",
444            "lsub",
445            "fsub",
446            "dsub",
447            "imul",
448            "lmul",
449            "fmul",
450            "dmul",
451            "idiv",
452            "ldiv",
453            "fdiv",
454            "ddiv",
455            "irem",
456            "lrem",
457            "frem",
458            "drem",
459            "ineg",
460            "lneg",
461            "fneg",
462            "dneg",
463            "ishl",
464            "lshl",
465            "ishr",
466            "lshr",
467            "iushr",
468            "lushr",
469            "iand",
470            "land",
471            "ior",
472            "lor",
473            "ixor",
474            "lxor",
475            "iinc",
476            "i2l",
477            "i2f",
478            "i2d",
479            "l2i",
480            "l2f",
481            "l2d",
482            "f2i",
483            "f2l",
484            "f2d",
485            "d2i",
486            "d2l",
487            "d2f",
488            "i2b",
489            "i2c",
490            "i2s",
491            "lcmp",
492            "fcmpl",
493            "fcmpg",
494            "dcmpl",
495            "dcmpg",
496            "ifeq",
497            "ifne",
498            "iflt",
499            "ifge",
500            "ifgt",
501            "ifle",
502            "if_icmpeq",
503            "if_icmpne",
504            "if_icmplt",
505            "if_icmpge",
506            "if_icmpgt",
507            "if_icmple",
508            "if_acmpeq",
509            "if_acmpne",
510            "goto",
511            "jsr",
512            "ret",
513            "tableswitch",
514            "lookupswitch",
515            "ireturn",
516            "lreturn",
517            "freturn",
518            "dreturn",
519            "areturn",
520            "return",
521            "getstatic",
522            "putstatic",
523            "getfield",
524            "putfield",
525            "invokevirtual",
526            "invokespecial",        //      was "invokenonvirtual",
527            "invokestatic",
528            "invokeinterface",
529            "bytecode 186",         //"xxxunusedxxx",
530            "new",
531            "newarray",
532            "anewarray",
533            "arraylength",
534            "athrow",
535            "checkcast",
536            "instanceof",
537            "monitorenter",
538            "monitorexit",
539             null, // "wide",
540            "multianewarray",
541            "ifnull",
542            "ifnonnull",
543            "goto_w",
544            "jsr_w",
545            "bytecode 202",         // "breakpoint",
546            "bytecode",
547            "try",
548            "endtry",
549            "catch",
550            "var",
551            "endvar",
552            "locals_map",
553            "stack_map"
554        };
555    
556        /* Opcode Lengths */
557        private static final int opcLengthsTab[] = {
558            1,
559            1,
560            1,
561            1,
562            1,
563            1,
564            1,
565            1,
566            1,
567            1,
568            1,
569            1,
570            1,
571            1,
572            1,
573            1,
574            2,
575            3,
576            2,
577            3,
578            3,
579            2,
580            2,
581            2,
582            2,
583            2,
584            1,
585            1,
586            1,
587            1,
588            1,
589            1,
590            1,
591            1,
592            1,
593            1,
594            1,
595            1,
596            1,
597            1,
598            1,
599            1,
600            1,
601            1,
602            1,
603            1,
604            1,
605            1,
606            1,
607            1,
608            1,
609            1,
610            1,
611            1,
612            2,
613            2,
614            2,
615            2,
616            2,
617            1,
618            1,
619            1,
620            1,
621            1,
622            1,
623            1,
624            1,
625            1,
626            1,
627            1,
628            1,
629            1,
630            1,
631            1,
632            1,
633            1,
634            1,
635            1,
636            1,
637            1,
638            1,
639            1,
640            1,
641            1,
642            1,
643            1,
644            1,
645            1,
646            1,
647            1,
648            1,
649            1,
650            1,
651            1,
652            1,
653            1,
654            1,
655            1,
656            1,
657            1,
658            1,
659            1,
660            1,
661            1,
662            1,
663            1,
664            1,
665            1,
666            1,
667            1,
668            1,
669            1,
670            1,
671            1,
672            1,
673            1,
674            1,
675            1,
676            1,
677            1,
678            1,
679            1,
680            1,
681            1,
682            1,
683            1,
684            1,
685            1,
686            1,
687            1,
688            1,
689            1,
690            3,
691            1,
692            1,
693            1,
694            1,
695            1,
696            1,
697            1,
698            1,
699            1,
700            1,
701            1,
702            1,
703            1,
704            1,
705            1,
706            1,
707            1,
708            1,
709            1,
710            1,
711            3,
712            3,
713            3,
714            3,
715            3,
716            3,
717            3,
718            3,
719            3,
720            3,
721            3,
722            3,
723            3,
724            3,
725            3,
726            3,
727            2,
728            99,
729            99,
730            1,
731            1,
732            1,
733            1,
734            1,
735            1,
736            3,
737            3,
738            3,
739            3,
740            3,
741            3,
742            3,
743            5,
744            0,
745            3,
746            2,
747            3,
748            1,
749            1,
750            3,
751            3,
752            1,
753            1,
754            0, // wide
755            4,
756            3,
757            3,
758            5,
759            5,
760            1,
761            1, 0, 0, 0, 0, 0 // pseudo
762        };
763    
764        /* Type codes, used in newarray opcode */
765        public static final int T_CLASS                      = 0x00000002;
766        public static final int T_BOOLEAN                    = 0x00000004;
767        public static final int T_CHAR                       = 0x00000005;
768        public static final int T_FLOAT                      = 0x00000006;
769        public static final int T_DOUBLE                     = 0x00000007;
770        public static final int T_BYTE                       = 0x00000008;
771        public static final int T_SHORT                      = 0x00000009;
772        public static final int T_INT                        = 0x0000000a;
773        public static final int T_LONG                       = 0x0000000b;
774    
775        private static HashMap<String,Integer> mnemocodes = new HashMap<String,Integer>(301, 0.5f);
776        private static String opcExtNamesTab[]=new String[128];
777        private static String opcPrivExtNamesTab[]=new String[128];
778    
779        private static void defineNonPriv(int opc, String mnem) {
780            mnemocodes.put(opcExtNamesTab[opc] = mnem, opc_nonpriv * 256 + opc);
781        }
782    
783        private static void definePriv(int opc, String mnem) {
784            mnemocodes.put(opcPrivExtNamesTab[opc] = "priv_" + mnem, opc_priv * 256 + opc);
785        }
786    
787        private static void defineExt(int opc, String mnem) {
788            defineNonPriv(opc, mnem);
789            definePriv(opc, mnem);
790        }
791    
792        static {
793            for (int i = 0; i < opc_wide; i++) {
794                mnemocodes.put(opcNamesTab[i], i);
795            }
796            for (int i = opc_wide + 1; i < opcNamesTab.length; i++) {
797                mnemocodes.put(opcNamesTab[i], i);
798            }
799            mnemocodes.put("invokenonvirtual", opc_invokespecial);
800    
801            mnemocodes.put("iload_w", opc_iload_w);
802            mnemocodes.put("lload_w", opc_lload_w);
803            mnemocodes.put("fload_w", opc_fload_w);
804            mnemocodes.put("dload_w", opc_dload_w);
805            mnemocodes.put("aload_w", opc_aload_w);
806            mnemocodes.put("istore_w", opc_istore_w);
807            mnemocodes.put("lstore_w", opc_lstore_w);
808            mnemocodes.put("fstore_w", opc_fstore_w);
809            mnemocodes.put("dstore_w", opc_dstore_w);
810            mnemocodes.put("astore_w", opc_astore_w);
811            mnemocodes.put("ret_w", opc_ret_w);
812            mnemocodes.put("iinc_w", opc_iinc_w);
813    
814            mnemocodes.put("nonpriv", opc_nonpriv);
815            mnemocodes.put("priv", opc_priv);
816    
817            defineExt(0, "load_ubyte");
818            defineExt(1, "load_byte");
819            defineExt(2, "load_char");
820            defineExt(3, "load_short");
821            defineExt(4, "load_word");
822            defineExt(10, "load_char_oe");
823            defineExt(11, "load_short_oe");
824            defineExt(12, "load_word_oe");
825            defineExt(16, "ncload_ubyte");
826            defineExt(17, "ncload_byte");
827            defineExt(18, "ncload_char");
828            defineExt(19, "ncload_short");
829            defineExt(20, "ncload_word");
830            defineExt(26, "ncload_char_oe");
831            defineExt(27, "ncload_short_oe");
832            defineExt(28, "ncload_word_oe");
833            defineExt(30, "cache_flush");
834            defineExt(32, "store_byte");
835            defineExt(34, "store_short");
836            defineExt(36, "store_word");
837            defineExt(42, "store_short_oe");
838            defineExt(44, "store_word_oe");
839            defineExt(48, "ncstore_byte");
840            defineExt(50, "ncstore_short");
841            defineExt(52, "ncstore_word");
842            defineExt(58, "ncstore_short_oe");
843            defineExt(60, "ncstore_word_oe");
844            defineExt(62, "zero_line");
845            defineNonPriv(5, "ret_from_sub");
846            defineNonPriv(63, "enter_sync_method");
847            definePriv(5, "ret_from_trap");
848            definePriv(6, "read_dcache_tag");
849            definePriv(7, "read_dcache_data");
850            definePriv(14, "read_icache_tag");
851            definePriv(15, "read_icache_data");
852            definePriv(22, "powerdown");
853            definePriv(23, "read_scache_data");
854            definePriv(31, "cache_index_flush");
855            definePriv(38, "write_dcache_tag");
856            definePriv(39, "write_dcache_data");
857            definePriv(46, "write_icache_tag");
858            definePriv(47, "write_icache_data");
859            definePriv(54, "reset");
860            definePriv(55, "write_scache_data");
861            for (int i = 0; i < 32; i++) {
862                definePriv(i + 64, "read_reg_" + i);
863            }
864            for (int i = 0; i < 32; i++) {
865                definePriv(i + 96, "write_reg_" + i);
866            }
867        }
868    }