Changed the makefile system to autoconf/automake.
[cacao.git] / jit / jitdef.h
1 /******************************* ncomp/compdef.h *******************************
2
3         Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
4
5         See file COPYRIGHT for information on usage and disclaimer of warranties
6
7         defines all the constants and data structures of the compiler 
8         
9         Authors: Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
10                   
11         Last Change: 1998/11/03
12
13 *******************************************************************************/
14
15 #ifndef __jitdef__
16 #define __jitdef__
17
18 /**************************** resolve typedef-cycles **************************/
19
20 typedef struct stackelement stackelement;
21 typedef stackelement *stackptr;
22 typedef struct basicblock basicblock;
23 typedef struct instruction instruction;
24 typedef struct subroutineinfo subroutineinfo;
25 typedef struct varinfo varinfo;
26 typedef struct branchref branchref;
27 typedef struct jumpref jumpref;
28 typedef varinfo *varinfoptr;
29
30
31 /************************** stack element structure ***************************/
32
33 /*                    slot types                                              */
34
35 #define TYPE_INT   0            /* the stack slot types must numbered in the  */
36 #define TYPE_LNG   1            /* same order as the ICMD_Ixxx to ICMD_Axxx   */
37 #define TYPE_FLT   2            /* instructions (LOAD and STORE)              */
38 #define TYPE_DBL   3            /* integer, long, float, double, address      */
39 #define TYPE_ADR   4
40
41 #define IS_INT_LNG_TYPE(a)      (!((a)&TYPE_FLT))
42 #define IS_FLT_DBL_TYPE(a)      ((a)&TYPE_FLT)
43 #define IS_2_WORD_TYPE(a)       ((a)&TYPE_LNG)
44
45
46 /*                    flags                                                   */
47
48 #define SAVEDVAR   1            /* variable has to survive method invocations */
49 #define INMEMORY   2            /* variable stored in memory                  */
50
51 /*                    variable types                                          */
52
53 #define UNDEFVAR   0            /* stack slot will become temp during regalloc*/
54 #define TEMPVAR    1            /* stack slot is temp register                */
55 #define STACKVAR   2            /* stack slot is numbered stack slot          */
56 #define LOCALVAR   3            /* stack slot is local variable               */
57 #define ARGVAR     4            /* stack slot is argument variable            */
58
59 struct stackelement {
60         stackptr prev;              /* pointer to next element towards bottom     */
61         int type;                   /* data type of stack element                 */
62         int flags;                  /* flags (SAVED, INMEMORY)                    */
63         int varkind;                /* kind of variable or register               */
64         int varnum;                 /* number of variable                         */
65         int regoff;                 /* register number or memory offset           */
66         };
67
68
69 /**************************** instruction structure ***************************/
70
71 struct instruction {
72         stackptr dst;               /* stack index of destination operand stack   */
73         u2  opc;                    /* opcode of intermediate code command        */
74         s4  op1;                    /* first operand, usually variable number     */
75
76         union {
77                 s4 i;                   /* integer operand    */
78                 s8 l;                   /* long operand       */
79                 float f;                /* float operand      */
80                 double d;               /* double operand     */
81                 void *a;                /* address operand    */
82                 } val;                  /* immediate constant */
83         };
84
85
86 /**************************** basic block structure ***************************/
87  
88 /*                    flags                                                   */
89
90 #define BBDELETED  -2
91 #define BBUNDEF    -1
92 #define BBREACHED  0
93 #define BBFINISHED 1
94
95 #define BBTYPE_STD 0            /* standard basic block type                  */
96 #define BBTYPE_EXH 1            /* exception handler basic block type         */
97 #define BBTYPE_SBR 2            /* subroutine basic block type                */
98
99 struct basicblock { 
100         int          flags;         /* used during stack analysis, init with -1   */
101         int          type;          /* basic block type (std, xhandler, subroutine*/
102         instruction *iinstr;        /* pointer to intermediate code instructions  */
103         int          icount;        /* number of intermediate code instructions   */
104         int          mpc;           /* machine code pc at start of block          */
105         stackptr     instack;       /* stack at begin of basic block              */
106         stackptr     outstack;      /* stack at end of basic block                */
107         int          indepth;       /* stack depth at begin of basic block        */
108         int          outdepth;      /* stack depth end of basic block             */
109         int          pre_count;     /* count of predecessor basic blocks          */
110         branchref   *branchrefs;    /* list of branches to be patched             */
111         };
112
113
114 /************************* pseudo variable structure **************************/
115
116 struct varinfo {
117         int type;                   /* basic type of variable                     */
118         int flags;                  /* flags (SAVED, INMEMORY)                    */
119         int regoff;                 /* register number or memory offset           */
120         };
121
122 typedef varinfo varinfo5[5];
123
124
125 /***************** forward references in branch instructions ******************/
126
127 struct branchref {
128         s4 branchpos;               /* patching position in code segment          */
129         branchref *next;            /* next element in branchref list             */
130         };
131
132
133 /******************** forward references in tables  ***************************/
134
135 struct jumpref {
136         s4 tablepos;                /* patching position in data segment          */
137         basicblock *target;         /* target basic block                         */
138         jumpref *next;              /* next element in jumpref list               */
139         };
140
141
142 /********** JavaVM operation codes (sorted) and instruction lengths ***********/
143
144 static int stackreq[256];
145
146 static int jcommandsize[256] = {
147
148 #define JAVA_NOP               0
149 #define ICMD_NOP               0
150         1,
151 #define JAVA_ACONST_NULL       1
152 #define ICMD_ACONST            1        /* val.a = constant                   */
153         1,
154 #define JAVA_ICONST_M1         2
155 #define ICMD_NULLCHECKPOP      2
156         1,
157 #define JAVA_ICONST_0          3
158 #define ICMD_ICONST            3        /* val.i = constant                   */
159         1,
160 #define JAVA_ICONST_1          4
161 #define ICMD_IREM0X10001       4
162         1,
163 #define JAVA_ICONST_2          5
164 #define ICMD_IDIVPOW2          5        /* val.i = constant                   */
165         1,
166 #define JAVA_ICONST_3          6
167 #define ICMD_LDIVPOW2          6        /* val.l = constant                   */
168         1,
169 #define JAVA_ICONST_4          7
170         1,
171 #define JAVA_ICONST_5          8
172 #define ICMD_LREM0X10001       8
173         1,
174 #define JAVA_LCONST_0          9
175 #define ICMD_LCONST            9        /* val.l = constant                   */
176         1,
177 #define JAVA_LCONST_1         10
178 #define ICMD_LCMPCONST        10        /* val.l = constant                   */
179         1,
180 #define JAVA_FCONST_0         11
181 #define ICMD_FCONST           11        /* val.f = constant                   */
182         1,
183 #define JAVA_FCONST_1         12
184         1,
185 #define JAVA_FCONST_2         13
186 #define ICMD_ELSE_ICONST      13
187         1,
188 #define JAVA_DCONST_0         14
189 #define ICMD_DCONST           14        /* val.d = constant                   */
190         1,
191 #define JAVA_DCONST_1         15
192 #define ICMD_IFEQ_ICONST      15
193         1,
194 #define JAVA_BIPUSH           16
195 #define ICMD_IFNE_ICONST      16
196         2,
197 #define JAVA_SIPUSH           17
198 #define ICMD_IFLT_ICONST      17
199         3,
200 #define JAVA_LDC1             18
201 #define ICMD_IFGE_ICONST      18
202         2,
203 #define JAVA_LDC2             19
204 #define ICMD_IFGT_ICONST      19
205         3,
206 #define JAVA_LDC2W            20
207 #define ICMD_IFLE_ICONST      20
208         3,
209                                         /* order of LOAD instructions must be */
210                                         /* equal to order of TYPE_XXX defines */
211 #define JAVA_ILOAD            21
212 #define ICMD_ILOAD            21        /* op1 = local variable               */
213         2,                      
214 #define JAVA_LLOAD            22
215 #define ICMD_LLOAD            22        /* op1 = local variable               */
216         2,
217 #define JAVA_FLOAD            23
218 #define ICMD_FLOAD            23        /* op1 = local variable               */
219         2,
220 #define JAVA_DLOAD            24
221 #define ICMD_DLOAD            24        /* op1 = local variable               */
222         2,
223 #define JAVA_ALOAD            25
224 #define ICMD_ALOAD            25        /* op1 = local variable               */
225         2,
226 #define JAVA_ILOAD_0          26
227 #define ICMD_IADDCONST        26        /* val.i = constant                   */
228         1,
229 #define JAVA_ILOAD_1          27
230 #define ICMD_ISUBCONST        27        /* val.i = constant                   */
231         1,
232 #define JAVA_ILOAD_2          28
233 #define ICMD_IMULCONST        28        /* val.i = constant                   */
234         1,
235 #define JAVA_ILOAD_3          29
236 #define ICMD_IANDCONST        29        /* val.i = constant                   */
237         1,
238 #define JAVA_LLOAD_0          30
239 #define ICMD_IORCONST         30        /* val.i = constant                   */
240         1,
241 #define JAVA_LLOAD_1          31
242 #define ICMD_IXORCONST        31        /* val.i = constant                   */
243         1,
244 #define JAVA_LLOAD_2          32
245 #define ICMD_ISHLCONST        32        /* val.i = constant                   */
246         1,
247 #define JAVA_LLOAD_3          33
248 #define ICMD_ISHRCONST        33        /* val.i = constant                   */
249         1,
250 #define JAVA_FLOAD_0          34
251 #define ICMD_IUSHRCONST       34        /* val.i = constant                   */
252         1,
253 #define JAVA_FLOAD_1          35
254 #define ICMD_IREMPOW2         35        /* val.i = constant                   */
255         1,
256 #define JAVA_FLOAD_2          36
257 #define ICMD_LADDCONST        36        /* val.l = constant                   */
258         1,
259 #define JAVA_FLOAD_3          37
260 #define ICMD_LSUBCONST        37        /* val.l = constant                   */
261         1,
262 #define JAVA_DLOAD_0          38
263 #define ICMD_LMULCONST        38        /* val.l = constant                   */
264         1,
265 #define JAVA_DLOAD_1          39
266 #define ICMD_LANDCONST        39        /* val.l = constant                   */
267         1,
268 #define JAVA_DLOAD_2          40
269 #define ICMD_LORCONST         40        /* val.l = constant                   */
270         1,
271 #define JAVA_DLOAD_3          41
272 #define ICMD_LXORCONST        41        /* val.l = constant                   */
273         1,
274 #define JAVA_ALOAD_0          42
275 #define ICMD_LSHLCONST        42        /* val.l = constant                   */
276         1,
277 #define JAVA_ALOAD_1          43
278 #define ICMD_LSHRCONST        43        /* val.l = constant                   */
279         1,
280 #define JAVA_ALOAD_2          44
281 #define ICMD_LUSHRCONST       44        /* val.l = constant                   */
282         1,
283 #define JAVA_ALOAD_3          45
284 #define ICMD_LREMPOW2         45        /* val.l = constant                   */
285         1,
286 #define JAVA_IALOAD           46
287 #define ICMD_IALOAD           46
288         1,
289 #define JAVA_LALOAD           47
290 #define ICMD_LALOAD           47
291         1,
292 #define JAVA_FALOAD           48
293 #define ICMD_FALOAD           48
294         1,
295 #define JAVA_DALOAD           49
296 #define ICMD_DALOAD           49
297         1,
298 #define JAVA_AALOAD           50
299 #define ICMD_AALOAD           50
300         1,
301 #define JAVA_BALOAD           51
302 #define ICMD_BALOAD           51
303         1,
304 #define JAVA_CALOAD           52
305 #define ICMD_CALOAD           52
306         1,
307 #define JAVA_SALOAD           53
308 #define ICMD_SALOAD           53
309         1,
310                                         /* order of STORE instructions must be*/
311                                         /* equal to order of TYPE_XXX defines */
312 #define JAVA_ISTORE           54
313 #define ICMD_ISTORE           54        /* op1 = local variable               */
314         2,
315 #define JAVA_LSTORE           55
316 #define ICMD_LSTORE           55        /* op1 = local variable               */
317         2,
318 #define JAVA_FSTORE           56
319 #define ICMD_FSTORE           56        /* op1 = local variable               */
320         2,
321 #define JAVA_DSTORE           57
322 #define ICMD_DSTORE           57        /* op1 = local variable               */
323         2,
324 #define JAVA_ASTORE           58
325 #define ICMD_ASTORE           58        /* op1 = local variable               */
326         2,
327 #define JAVA_ISTORE_0         59
328 #define ICMD_IF_LEQ           59        /* op1 = target JavaVM pc, val.l      */
329         1,
330 #define JAVA_ISTORE_1         60
331 #define ICMD_IF_LNE           60        /* op1 = target JavaVM pc, val.l      */
332         1,
333 #define JAVA_ISTORE_2         61
334 #define ICMD_IF_LLT           61        /* op1 = target JavaVM pc, val.l      */
335         1,
336 #define JAVA_ISTORE_3         62
337 #define ICMD_IF_LGE           62        /* op1 = target JavaVM pc, val.l      */
338         1,
339 #define JAVA_LSTORE_0         63
340 #define ICMD_IF_LGT           63        /* op1 = target JavaVM pc, val.l      */
341         1,
342 #define JAVA_LSTORE_1         64
343 #define ICMD_IF_LLE           64        /* op1 = target JavaVM pc, val.l      */
344         1,
345 #define JAVA_LSTORE_2         65
346 #define ICMD_IF_LCMPEQ        65        /* op1 = target JavaVM pc             */
347         1,
348 #define JAVA_LSTORE_3         66
349 #define ICMD_IF_LCMPNE        66        /* op1 = target JavaVM pc             */
350         1,
351 #define JAVA_FSTORE_0         67
352 #define ICMD_IF_LCMPLT        67        /* op1 = target JavaVM pc             */
353         1,
354 #define JAVA_FSTORE_1         68
355 #define ICMD_IF_LCMPGE        68        /* op1 = target JavaVM pc             */
356         1,
357 #define JAVA_FSTORE_2         69
358 #define ICMD_IF_LCMPGT        69        /* op1 = target JavaVM pc             */
359         1,
360 #define JAVA_FSTORE_3         70
361 #define ICMD_IF_LCMPLE        70        /* op1 = target JavaVM pc             */
362         1,
363 #define JAVA_DSTORE_0         71
364         1,
365 #define JAVA_DSTORE_1         72
366         1,
367 #define JAVA_DSTORE_2         73
368         1,
369 #define JAVA_DSTORE_3         74
370         1,
371 #define JAVA_ASTORE_0         75
372         1,
373 #define JAVA_ASTORE_1         76
374         1,
375 #define JAVA_ASTORE_2         77
376         1,
377 #define JAVA_ASTORE_3         78
378         1,
379 #define JAVA_IASTORE          79
380 #define ICMD_IASTORE          79
381         1,
382 #define JAVA_LASTORE          80
383 #define ICMD_LASTORE          80
384         1,
385 #define JAVA_FASTORE          81
386 #define ICMD_FASTORE          81
387         1,
388 #define JAVA_DASTORE          82
389 #define ICMD_DASTORE          82
390         1,
391 #define JAVA_AASTORE          83
392 #define ICMD_AASTORE          83
393         1,
394 #define JAVA_BASTORE          84
395 #define ICMD_BASTORE          84
396         1,
397 #define JAVA_CASTORE          85
398 #define ICMD_CASTORE          85
399         1,
400 #define JAVA_SASTORE          86
401 #define ICMD_SASTORE          86
402         1,
403 #define JAVA_POP              87
404 #define ICMD_POP              87
405         1,
406 #define JAVA_POP2             88
407 #define ICMD_POP2             88
408         1,
409 #define JAVA_DUP              89
410 #define ICMD_DUP              89
411         1,
412 #define JAVA_DUP_X1           90
413 #define ICMD_DUP_X1           90
414         1,
415 #define JAVA_DUP_X2           91
416 #define ICMD_DUP_X2           91
417         1,
418 #define JAVA_DUP2             92
419 #define ICMD_DUP2             92
420         1,
421 #define JAVA_DUP2_X1          93
422 #define ICMD_DUP2_X1          93
423         1,
424 #define JAVA_DUP2_X2          94
425 #define ICMD_DUP2_X2          94
426         1,
427 #define JAVA_SWAP             95
428 #define ICMD_SWAP             95
429         1,
430 #define JAVA_IADD             96
431 #define ICMD_IADD             96
432         1,
433 #define JAVA_LADD             97
434 #define ICMD_LADD             97
435         1,
436 #define JAVA_FADD             98
437 #define ICMD_FADD             98
438         1,
439 #define JAVA_DADD             99
440 #define ICMD_DADD             99
441         1,
442 #define JAVA_ISUB             100
443 #define ICMD_ISUB             100
444         1,
445 #define JAVA_LSUB             101
446 #define ICMD_LSUB             101
447         1,
448 #define JAVA_FSUB             102
449 #define ICMD_FSUB             102
450         1,
451 #define JAVA_DSUB             103
452 #define ICMD_DSUB             103
453         1,
454 #define JAVA_IMUL             104
455 #define ICMD_IMUL             104
456         1,
457 #define JAVA_LMUL             105
458 #define ICMD_LMUL             105
459         1,
460 #define JAVA_FMUL             106
461 #define ICMD_FMUL             106
462         1,
463 #define JAVA_DMUL             107
464 #define ICMD_DMUL             107
465         1,
466 #define JAVA_IDIV             108
467 #define ICMD_IDIV             108
468         1,
469 #define JAVA_LDIV             109
470 #define ICMD_LDIV             109
471         1,
472 #define JAVA_FDIV             110
473 #define ICMD_FDIV             110
474         1,
475 #define JAVA_DDIV             111
476 #define ICMD_DDIV             111
477         1,
478 #define JAVA_IREM             112
479 #define ICMD_IREM             112
480         1,
481 #define JAVA_LREM             113
482 #define ICMD_LREM             113
483         1,
484 #define JAVA_FREM             114
485 #define ICMD_FREM             114
486         1,
487 #define JAVA_DREM             115
488 #define ICMD_DREM             115
489         1,
490 #define JAVA_INEG             116
491 #define ICMD_INEG             116
492         1,
493 #define JAVA_LNEG             117
494 #define ICMD_LNEG             117
495         1,
496 #define JAVA_FNEG             118
497 #define ICMD_FNEG             118
498         1,
499 #define JAVA_DNEG             119
500 #define ICMD_DNEG             119
501         1,
502 #define JAVA_ISHL             120
503 #define ICMD_ISHL             120
504         1,
505 #define JAVA_LSHL             121
506 #define ICMD_LSHL             121
507         1,
508 #define JAVA_ISHR             122
509 #define ICMD_ISHR             122
510         1,
511 #define JAVA_LSHR             123
512 #define ICMD_LSHR             123
513         1,
514 #define JAVA_IUSHR            124
515 #define ICMD_IUSHR            124
516         1,
517 #define JAVA_LUSHR            125
518 #define ICMD_LUSHR            125
519         1,
520 #define JAVA_IAND             126
521 #define ICMD_IAND             126
522         1,
523 #define JAVA_LAND             127
524 #define ICMD_LAND             127
525         1,
526 #define JAVA_IOR              128
527 #define ICMD_IOR              128
528         1,
529 #define JAVA_LOR              129
530 #define ICMD_LOR              129
531         1,
532 #define JAVA_IXOR             130
533 #define ICMD_IXOR             130
534         1,
535 #define JAVA_LXOR             131
536 #define ICMD_LXOR             131
537         1,
538 #define JAVA_IINC             132
539 #define ICMD_IINC             132   /* op1 = local variable, val.i = constant */
540         3,
541 #define JAVA_I2L              133
542 #define ICMD_I2L              133
543         1,
544 #define JAVA_I2F              134
545 #define ICMD_I2F              134
546         1,
547 #define JAVA_I2D              135
548 #define ICMD_I2D              135
549         1,
550 #define JAVA_L2I              136
551 #define ICMD_L2I              136
552         1,
553 #define JAVA_L2F              137
554 #define ICMD_L2F              137
555         1,
556 #define JAVA_L2D              138
557 #define ICMD_L2D              138
558         1,
559 #define JAVA_F2I              139
560 #define ICMD_F2I              139
561         1,
562 #define JAVA_F2L              140
563 #define ICMD_F2L              140
564         1,
565 #define JAVA_F2D              141
566 #define ICMD_F2D              141
567         1,
568 #define JAVA_D2I              142
569 #define ICMD_D2I              142
570         1,
571 #define JAVA_D2L              143
572 #define ICMD_D2L              143
573         1,
574 #define JAVA_D2F              144
575 #define ICMD_D2F              144
576         1,
577 #define JAVA_INT2BYTE         145
578 #define ICMD_INT2BYTE         145
579         1,
580 #define JAVA_INT2CHAR         146
581 #define ICMD_INT2CHAR         146
582         1,
583 #define JAVA_INT2SHORT        147
584 #define ICMD_INT2SHORT        147
585         1,
586 #define JAVA_LCMP             148
587 #define ICMD_LCMP             148
588         1,
589 #define JAVA_FCMPL            149
590 #define ICMD_FCMPL            149
591         1,
592 #define JAVA_FCMPG            150
593 #define ICMD_FCMPG            150
594         1,
595 #define JAVA_DCMPL            151
596 #define ICMD_DCMPL            151
597         1,
598 #define JAVA_DCMPG            152
599 #define ICMD_DCMPG            152
600         1,
601 #define JAVA_IFEQ             153
602 #define ICMD_IFEQ             153       /* op1 = target JavaVM pc, val.i      */
603         3,
604 #define JAVA_IFNE             154
605 #define ICMD_IFNE             154       /* op1 = target JavaVM pc, val.i      */
606         3,
607 #define JAVA_IFLT             155
608 #define ICMD_IFLT             155       /* op1 = target JavaVM pc, val.i      */
609         3,
610 #define JAVA_IFGE             156
611 #define ICMD_IFGE             156       /* op1 = target JavaVM pc, val.i      */
612         3,
613 #define JAVA_IFGT             157
614 #define ICMD_IFGT             157       /* op1 = target JavaVM pc, val.i      */
615         3,
616 #define JAVA_IFLE             158
617 #define ICMD_IFLE             158       /* op1 = target JavaVM pc, val.i      */
618         3,
619 #define JAVA_IF_ICMPEQ        159
620 #define ICMD_IF_ICMPEQ        159       /* op1 = target JavaVM pc             */
621         3,
622 #define JAVA_IF_ICMPNE        160
623 #define ICMD_IF_ICMPNE        160       /* op1 = target JavaVM pc             */
624         3,
625 #define JAVA_IF_ICMPLT        161
626 #define ICMD_IF_ICMPLT        161       /* op1 = target JavaVM pc             */
627         3,
628 #define JAVA_IF_ICMPGE        162
629 #define ICMD_IF_ICMPGE        162       /* op1 = target JavaVM pc             */
630         3,
631 #define JAVA_IF_ICMPGT        163
632 #define ICMD_IF_ICMPGT        163       /* op1 = target JavaVM pc             */
633         3,
634 #define JAVA_IF_ICMPLE        164
635 #define ICMD_IF_ICMPLE        164       /* op1 = target JavaVM pc             */
636         3,
637 #define JAVA_IF_ACMPEQ        165
638 #define ICMD_IF_ACMPEQ        165       /* op1 = target JavaVM pc             */
639         3,
640 #define JAVA_IF_ACMPNE        166
641 #define ICMD_IF_ACMPNE        166       /* op1 = target JavaVM pc             */
642         3,
643 #define JAVA_GOTO             167
644 #define ICMD_GOTO             167       /* op1 = target JavaVM pc             */
645         3,
646 #define JAVA_JSR              168
647 #define ICMD_JSR              168       /* op1 = target JavaVM pc             */
648         3,
649 #define JAVA_RET              169
650 #define ICMD_RET              169       /* op1 = local variable               */
651         2,
652 #define JAVA_TABLESWITCH      170
653 #define ICMD_TABLESWITCH      170       /* val.a = pointer to s4 table        */
654         0,                              /* length must be computed            */
655 #define JAVA_LOOKUPSWITCH     171
656 #define ICMD_LOOKUPSWITCH     171       /* val.a = pointer to s4 table        */
657         0,                              /* length must be computed            */
658 #define JAVA_IRETURN          172
659 #define ICMD_IRETURN          172
660         1,
661 #define JAVA_LRETURN          173
662 #define ICMD_LRETURN          173
663         1,
664 #define JAVA_FRETURN          174
665 #define ICMD_FRETURN          174
666         1,
667 #define JAVA_DRETURN          175
668 #define ICMD_DRETURN          175
669         1,
670 #define JAVA_ARETURN          176
671 #define ICMD_ARETURN          176
672         1,
673 #define JAVA_RETURN           177
674 #define ICMD_RETURN           177
675         1,
676 #define JAVA_GETSTATIC        178
677 #define ICMD_GETSTATIC        178       /* op1 = type, val.a = field address  */
678         3,
679 #define JAVA_PUTSTATIC        179
680 #define ICMD_PUTSTATIC        179       /* op1 = type, val.a = field address  */
681         3,
682 #define JAVA_GETFIELD         180
683 #define ICMD_GETFIELD         180       /* op1 = type, val.i = field offset   */
684         3,
685 #define JAVA_PUTFIELD         181
686 #define ICMD_PUTFIELD         181       /* op1 = type, val.i = field offset   */
687         3,
688 #define JAVA_INVOKEVIRTUAL    182
689 #define ICMD_INVOKEVIRTUAL    182       /* val.a = method info pointer        */
690         3,
691 #define JAVA_INVOKESPECIAL    183
692 #define ICMD_INVOKESPECIAL    183       /* val.a = method info pointer        */
693         3,
694 #define JAVA_INVOKESTATIC     184
695 #define ICMD_INVOKESTATIC     184       /* val.a = method info pointer        */
696         3,
697 #define JAVA_INVOKEINTERFACE  185
698 #define ICMD_INVOKEINTERFACE  185       /* val.a = method info pointer        */
699         5,
700 #define ICMD_CHECKASIZE       186       /*                                    */
701         1, /* unused */
702 #define JAVA_NEW              187
703 #define ICMD_NEW              187       /* op1 = 1, val.a = class pointer     */
704         3,
705 #define JAVA_NEWARRAY         188
706 #define ICMD_NEWARRAY         188       /* op1 = basic type                   */
707         2,
708 #define JAVA_ANEWARRAY        189
709 #define ICMD_ANEWARRAY        189       /* op1 = 0, val.a = array pointer     */
710         3,                              /* op1 = 1, val.a = class pointer     */
711 #define JAVA_ARRAYLENGTH      190
712 #define ICMD_ARRAYLENGTH      190
713         1,
714 #define JAVA_ATHROW           191
715 #define ICMD_ATHROW           191
716         1,
717 #define JAVA_CHECKCAST        192
718 #define ICMD_CHECKCAST        192       /* op1 = 0, val.a = array pointer     */
719         3,                              /* op1 = 1, val.a = class pointer     */
720 #define JAVA_INSTANCEOF       193
721 #define ICMD_INSTANCEOF       193       /* op1 = 0, val.a = array pointer     */
722         3,                              /* op1 = 1, val.a = class pointer     */
723 #define JAVA_MONITORENTER     194
724 #define ICMD_MONITORENTER     194
725         1,
726 #define JAVA_MONITOREXIT      195
727 #define ICMD_MONITOREXIT      195
728         1,
729 #define JAVA_WIDE             196
730         0,       /* length must be computed */
731 #define JAVA_MULTIANEWARRAY   197
732 #define ICMD_MULTIANEWARRAY   197       /* op1 = dimension, val.a = array     */
733         4,                              /* pointer                            */
734 #define JAVA_IFNULL           198
735 #define ICMD_IFNULL           198       /* op1 = target JavaVM pc             */
736         3,
737 #define JAVA_IFNONNULL        199
738 #define ICMD_IFNONNULL        199       /* op1 = target JavaVM pc             */
739         3,
740 #define JAVA_GOTO_W           200
741         5,
742 #define JAVA_JSR_W            201
743         5,
744 #define JAVA_BREAKPOINT       202
745         1,
746
747             1,1,1,1,1,1,1,1,            /* unused */
748         1,1,1,1,1,1,1,1,1,1,
749         1,1,1,1,1,1,1,1,1,1,
750         1,1,1,1,1,1,1,1,1,1,
751         1,1,1,1,1,1,1,1,1,1,
752         1,1,1,1,1
753     };
754
755 #define ICMD_BUILTIN3         253       /* internal opcode */
756 #define ICMD_BUILTIN2         254       /* internal opcode */
757 #define ICMD_BUILTIN1         255       /* internal opcode */
758
759
760 /******************* description of JavaVM instructions ***********************/
761
762 typedef struct {
763         u1 opcode;
764         u1 type_s1;
765         u1 type_s2;
766         u1 type_d;      
767         functionptr builtin;
768         bool supported;
769         bool isfloat;
770 } stdopdescriptor;
771
772 static stdopdescriptor *stdopdescriptors[256];
773
774 static stdopdescriptor stdopdescriptortable[] = {
775         { JAVA_IADD,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
776         { JAVA_ISUB,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
777         { JAVA_IMUL,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
778         { JAVA_ISHL,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
779         { JAVA_ISHR,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
780         { JAVA_IUSHR,  TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
781         { JAVA_IAND,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
782         { JAVA_IOR,    TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
783         { JAVA_IXOR,   TYPE_INT, TYPE_INT, TYPE_INT, NULL, true, false },
784         { JAVA_INEG,   TYPE_INT, TYPE_VOID,TYPE_INT, NULL, true, false },
785
786         { JAVA_LADD,   TYPE_LONG, TYPE_LONG, TYPE_LONG, 
787                (functionptr) builtin_ladd , SUPPORT_LONG && SUPPORT_LONG_ADD, false },
788         { JAVA_LSUB,   TYPE_LONG, TYPE_LONG, TYPE_LONG,
789                (functionptr) builtin_lsub , SUPPORT_LONG && SUPPORT_LONG_ADD, false },
790         { JAVA_LMUL,   TYPE_LONG, TYPE_LONG, TYPE_LONG,
791                (functionptr) builtin_lmul , SUPPORT_LONG && SUPPORT_LONG_MULDIV, false },
792         { JAVA_LSHL,   TYPE_LONG, TYPE_INT,  TYPE_LONG,
793                (functionptr) builtin_lshl , SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
794         { JAVA_LSHR,   TYPE_LONG, TYPE_INT,  TYPE_LONG,
795                (functionptr) builtin_lshr, SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
796         { JAVA_LUSHR,  TYPE_LONG, TYPE_INT,  TYPE_LONG,
797                (functionptr) builtin_lushr, SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
798         { JAVA_LAND,   TYPE_LONG, TYPE_LONG, TYPE_LONG,
799                (functionptr) builtin_land, SUPPORT_LONG && SUPPORT_LONG_LOG, false },
800         { JAVA_LOR,    TYPE_LONG, TYPE_LONG, TYPE_LONG,
801                (functionptr) builtin_lor , SUPPORT_LONG && SUPPORT_LONG_LOG, false },
802         { JAVA_LXOR,   TYPE_LONG, TYPE_LONG, TYPE_LONG,
803                (functionptr) builtin_lxor, SUPPORT_LONG && SUPPORT_LONG_LOG, false },
804         { JAVA_LNEG,   TYPE_LONG, TYPE_VOID, TYPE_LONG,
805                (functionptr) builtin_lneg, SUPPORT_LONG && SUPPORT_LONG_ADD, false },
806         { JAVA_LCMP,   TYPE_LONG, TYPE_LONG, TYPE_INT,
807                (functionptr) builtin_lcmp, SUPPORT_LONG && SUPPORT_LONG_CMP, false },
808
809         { JAVA_FADD,   TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, 
810                (functionptr) builtin_fadd, SUPPORT_FLOAT, true },
811         { JAVA_FSUB,   TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, 
812                (functionptr) builtin_fsub, SUPPORT_FLOAT, true },
813         { JAVA_FMUL,   TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, 
814                (functionptr) builtin_fmul, SUPPORT_FLOAT, true },
815         { JAVA_FDIV,   TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, 
816                (functionptr) builtin_fdiv, SUPPORT_FLOAT, true },
817         { JAVA_FREM,   TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, 
818                (functionptr) builtin_frem, SUPPORT_FLOAT, true },
819         { JAVA_FNEG,   TYPE_FLOAT, TYPE_VOID,  TYPE_FLOAT, 
820                (functionptr) builtin_fneg, SUPPORT_FLOAT, true },
821         { JAVA_FCMPL,  TYPE_FLOAT, TYPE_FLOAT, TYPE_INT,   
822                (functionptr) builtin_fcmpl, SUPPORT_FLOAT, true },
823         { JAVA_FCMPG,  TYPE_FLOAT, TYPE_FLOAT, TYPE_INT,   
824                (functionptr) builtin_fcmpg, SUPPORT_FLOAT, true },
825
826         { JAVA_DADD,   TYPE_DOUBLE, TYPE_DOUBLE, TYPE_DOUBLE, 
827                (functionptr) builtin_dadd, SUPPORT_DOUBLE, true },
828         { JAVA_DSUB,   TYPE_DOUBLE, TYPE_DOUBLE, TYPE_DOUBLE, 
829                (functionptr) builtin_dsub, SUPPORT_DOUBLE, true },
830         { JAVA_DMUL,   TYPE_DOUBLE, TYPE_DOUBLE, TYPE_DOUBLE, 
831                (functionptr) builtin_dmul, SUPPORT_DOUBLE, true },
832         { JAVA_DDIV,   TYPE_DOUBLE, TYPE_DOUBLE, TYPE_DOUBLE, 
833                (functionptr) builtin_ddiv, SUPPORT_DOUBLE, true },
834         { JAVA_DREM,   TYPE_DOUBLE, TYPE_DOUBLE, TYPE_DOUBLE, 
835                (functionptr) builtin_drem, SUPPORT_DOUBLE, true },
836         { JAVA_DNEG,   TYPE_DOUBLE, TYPE_VOID,  TYPE_DOUBLE, 
837                (functionptr) builtin_dneg, SUPPORT_DOUBLE, true },
838         { JAVA_DCMPL,  TYPE_DOUBLE, TYPE_DOUBLE, TYPE_INT, 
839                (functionptr) builtin_dcmpl, SUPPORT_DOUBLE, true },
840         { JAVA_DCMPG,  TYPE_DOUBLE, TYPE_DOUBLE, TYPE_INT, 
841                (functionptr) builtin_dcmpg, SUPPORT_DOUBLE, true },
842
843         { JAVA_INT2BYTE, TYPE_INT, TYPE_VOID, TYPE_INT, NULL, true,false },
844         { JAVA_INT2CHAR, TYPE_INT, TYPE_VOID, TYPE_INT, NULL, true,false },
845         { JAVA_INT2SHORT, TYPE_INT, TYPE_VOID, TYPE_INT, NULL, true,false },
846         { JAVA_I2L,    TYPE_INT,  TYPE_VOID, TYPE_LONG,   
847            (functionptr) builtin_i2l, SUPPORT_LONG && SUPPORT_LONG_ICVT, false },
848         { JAVA_I2F,    TYPE_INT,  TYPE_VOID, TYPE_FLOAT,  
849                (functionptr) builtin_i2f, SUPPORT_FLOAT, true },
850         { JAVA_I2D,    TYPE_INT,  TYPE_VOID, TYPE_DOUBLE, 
851                (functionptr) builtin_i2d, SUPPORT_DOUBLE, true },
852         { JAVA_L2I,    TYPE_LONG, TYPE_VOID, TYPE_INT,    
853                (functionptr) builtin_l2i, SUPPORT_LONG && SUPPORT_LONG_ICVT, false },
854         { JAVA_L2F,    TYPE_LONG, TYPE_VOID, TYPE_FLOAT,  
855                (functionptr) builtin_l2f, SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_LONG_FCVT, true },
856         { JAVA_L2D,    TYPE_LONG, TYPE_VOID, TYPE_DOUBLE, 
857                (functionptr) builtin_l2d, SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_LONG_FCVT, true },
858         { JAVA_F2I,    TYPE_FLOAT, TYPE_VOID, TYPE_INT,   
859                (functionptr) builtin_f2i, SUPPORT_FLOAT, true },
860         { JAVA_F2L,    TYPE_FLOAT, TYPE_VOID, TYPE_LONG,   
861                (functionptr) builtin_f2l, SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_LONG_FCVT, true },
862         { JAVA_F2D,    TYPE_FLOAT, TYPE_VOID, TYPE_DOUBLE, 
863                (functionptr) builtin_f2d, SUPPORT_FLOAT && SUPPORT_DOUBLE, true },
864         { JAVA_D2I,    TYPE_DOUBLE, TYPE_VOID, TYPE_INT,   
865                (functionptr) builtin_d2i, SUPPORT_DOUBLE, true },
866         { JAVA_D2L,    TYPE_DOUBLE, TYPE_VOID, TYPE_LONG,   
867                (functionptr) builtin_d2l, SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_LONG_FCVT, true },
868         { JAVA_D2F,    TYPE_DOUBLE, TYPE_VOID, TYPE_FLOAT, 
869                (functionptr) builtin_d2f, SUPPORT_DOUBLE && SUPPORT_FLOAT, true },
870         
871 };
872
873 static char *icmd_names[256] = {
874         "NOP          ", /*               0 */
875         "ACONST       ", /*               1 */
876         "NULLCHECKPOP ", /* ICONST_M1     2 */
877         "ICONST       ", /*               3 */
878         "IREM0X10001  ", /* ICONST_1      4 */
879         "IDIVPOW2     ", /* ICONST_2      5 */
880         "LDIVPOW2     ", /* ICONST_3      6 */
881         "UNDEF__7     ", /* ICONST_4      7 */
882         "LREM0X10001  ", /* ICONST_5      8 */
883         "LCONST       ", /*               9 */
884         "LCMPCONST    ", /* LCONST_1     10 */
885         "FCONST       ", /*              11 */
886         "UNDEF_12     ", /* FCONST_1     12 */
887         "ELSE_ICONST  ", /* FCONST_2     13 */
888         "DCONST       ", /*              14 */
889         "IFEQ_ICONST  ", /* DCONST_1     15 */
890         "IFNE_ICONST  ", /* BIPUSH       16 */
891         "IFLT_ICONST  ", /* SIPUSH       17 */
892         "IFGE_ICONST  ", /* LDC1         18 */
893         "IFGT_ICONST  ", /* LDC2         19 */
894         "IFLE_ICONST  ", /* LDC2W        20 */
895         "ILOAD        ", /*              21 */
896         "LLOAD        ", /*              22 */
897         "FLOAD        ", /*              23 */
898         "DLOAD        ", /*              24 */
899         "ALOAD        ", /*              25 */
900         "IADDCONST    ", /* ILOAD_0      26 */
901         "ISUBCONST    ", /* ILOAD_1      27 */
902         "IMULCONST    ", /* ILOAD_2      28 */
903         "IANDCONST    ", /* ILOAD_3      29 */
904         "IORCONST     ", /* LLOAD_0      30 */
905         "IXORCONST    ", /* LLOAD_1      31 */
906         "ISHLCONST    ", /* LLOAD_2      32 */
907         "ISHRCONST    ", /* LLOAD_3      33 */
908         "IUSHRCONST   ", /* FLOAD_0      34 */
909         "IREMPOW2     ", /* FLOAD_1      35 */
910         "LADDCONST    ", /* FLOAD_2      36 */
911         "LSUBCONST    ", /* FLOAD_3      37 */
912         "LMULCONST    ", /* DLOAD_0      38 */
913         "LANDCONST    ", /* DLOAD_1      39 */
914         "LORCONST     ", /* DLOAD_2      40 */
915         "LXORCONST    ", /* DLOAD_3      41 */
916         "LSHLCONST    ", /* ALOAD_0      42 */
917         "LSHRCONST    ", /* ALOAD_1      43 */
918         "LUSHRCONST   ", /* ALOAD_2      44 */
919         "LREMPOW2     ", /* ALOAD_3      45 */
920         "IALOAD       ", /*              46 */
921         "LALOAD       ", /*              47 */
922         "FALOAD       ", /*              48 */
923         "DALOAD       ", /*              49 */
924         "AALOAD       ", /*              50 */
925         "BALOAD       ", /*              51 */
926         "CALOAD       ", /*              52 */
927         "SALOAD       ", /*              53 */
928         "ISTORE       ", /*              54 */
929         "LSTORE       ", /*              55 */
930         "FSTORE       ", /*              56 */
931         "DSTORE       ", /*              57 */
932         "ASTORE       ", /*              58 */
933         "IF_LEQ       ", /* ISTORE_0     59 */
934         "IF_LNE       ", /* ISTORE_1     60 */
935         "IF_LLT       ", /* ISTORE_2     61 */
936         "IF_LGE       ", /* ISTORE_3     62 */
937         "IF_LGT       ", /* LSTORE_0     63 */
938         "IF_LLE       ", /* LSTORE_1     64 */
939         "IF_LCMPEQ    ", /* LSTORE_2     65 */
940         "IF_LCMPNE    ", /* LSTORE_3     66 */
941         "IF_LCMPLT    ", /* FSTORE_0     67 */
942         "IF_LCMPGE    ", /* FSTORE_1     68 */
943         "IF_LCMPGT    ", /* FSTORE_2     69 */
944         "IF_LCMPLE    ", /* FSTORE_3     70 */
945         "UNDEF_71     ", /* DSTORE_0     71 */
946         "UNDEF_72     ", /* DSTORE_1     72 */
947         "UNDEF_73     ", /* DSTORE_2     73 */
948         "UNDEF_74     ", /* DSTORE_3     74 */
949         "UNDEF_75     ", /* ASTORE_0     75 */
950         "UNDEF_76     ", /* ASTORE_1     76 */
951         "UNDEF_77     ", /* ASTORE_2     77 */
952         "UNDEF_78     ", /* ASTORE_3     78 */
953         "IASTORE      ", /*              79 */
954         "LASTORE      ", /*              80 */
955         "FASTORE      ", /*              81 */
956         "DASTORE      ", /*              82 */
957         "AASTORE      ", /*              83 */
958         "BASTORE      ", /*              84 */
959         "CASTORE      ", /*              85 */
960         "SASTORE      ", /*              86 */
961         "POP          ", /*              87 */
962         "POP2         ", /*              88 */
963         "DUP          ", /*              89 */
964         "DUP_X1       ", /*              90 */
965         "DUP_X2       ", /*              91 */
966         "DUP2         ", /*              92 */
967         "DUP2_X1      ", /*              93 */
968         "DUP2_X2      ", /*              94 */
969         "SWAP         ", /*              95 */
970         "IADD         ", /*              96 */
971         "LADD         ", /*              97 */
972         "FADD         ", /*              98 */
973         "DADD         ", /*              99 */
974         "ISUB         ", /*             100 */
975         "LSUB         ", /*             101 */
976         "FSUB         ", /*             102 */
977         "DSUB         ", /*             103 */
978         "IMUL         ", /*             104 */
979         "LMUL         ", /*             105 */
980         "FMUL         ", /*             106 */
981         "DMUL         ", /*             107 */
982         "IDIV         ", /*             108 */
983         "LDIV         ", /*             109 */
984         "FDIV         ", /*             110 */
985         "DDIV         ", /*             111 */
986         "IREM         ", /*             112 */
987         "LREM         ", /*             113 */
988         "FREM         ", /*             114 */
989         "DREM         ", /*             115 */
990         "INEG         ", /*             116 */
991         "LNEG         ", /*             117 */
992         "FNEG         ", /*             118 */
993         "DNEG         ", /*             119 */
994         "ISHL         ", /*             120 */
995         "LSHL         ", /*             121 */
996         "ISHR         ", /*             122 */
997         "LSHR         ", /*             123 */
998         "IUSHR        ", /*             124 */
999         "LUSHR        ", /*             125 */
1000         "IAND         ", /*             126 */
1001         "LAND         ", /*             127 */
1002         "IOR          ", /*             128 */
1003         "LOR          ", /*             129 */
1004         "IXOR         ", /*             130 */
1005         "LXOR         ", /*             131 */
1006         "IINC         ", /*             132 */
1007         "I2L          ", /*             133 */
1008         "I2F          ", /*             134 */
1009         "I2D          ", /*             135 */
1010         "L2I          ", /*             136 */
1011         "L2F          ", /*             137 */
1012         "L2D          ", /*             138 */
1013         "F2I          ", /*             139 */
1014         "F2L          ", /*             140 */
1015         "F2D          ", /*             141 */
1016         "D2I          ", /*             142 */
1017         "D2L          ", /*             143 */
1018         "D2F          ", /*             144 */
1019         "INT2BYTE     ", /*             145 */
1020         "INT2CHAR     ", /*             146 */
1021         "INT2SHORT    ", /*             147 */
1022         "LCMP         ", /*             148 */
1023         "FCMPL        ", /*             149 */
1024         "FCMPG        ", /*             150 */
1025         "DCMPL        ", /*             151 */
1026         "DCMPG        ", /*             152 */
1027         "IFEQ         ", /*             153 */
1028         "IFNE         ", /*             154 */
1029         "IFLT         ", /*             155 */
1030         "IFGE         ", /*             156 */
1031         "IFGT         ", /*             157 */
1032         "IFLE         ", /*             158 */
1033         "IF_ICMPEQ    ", /*             159 */
1034         "IF_ICMPNE    ", /*             160 */
1035         "IF_ICMPLT    ", /*             161 */
1036         "IF_ICMPGE    ", /*             162 */
1037         "IF_ICMPGT    ", /*             163 */
1038         "IF_ICMPLE    ", /*             164 */
1039         "IF_ACMPEQ    ", /*             165 */
1040         "IF_ACMPNE    ", /*             166 */
1041         "GOTO         ", /*             167 */
1042         "JSR          ", /*             168 */
1043         "RET          ", /*             169 */
1044         "TABLESWITCH  ", /*             170 */
1045         "LOOKUPSWITCH ", /*             171 */
1046         "IRETURN      ", /*             172 */
1047         "LRETURN      ", /*             173 */
1048         "FRETURN      ", /*             174 */
1049         "DRETURN      ", /*             175 */
1050         "ARETURN      ", /*             176 */
1051         "RETURN       ", /*             177 */
1052         "GETSTATIC    ", /*             178 */
1053         "PUTSTATIC    ", /*             179 */
1054         "GETFIELD     ", /*             180 */
1055         "PUTFIELD     ", /*             181 */
1056         "INVOKEVIRTUAL", /*             182 */
1057         "INVOKESPECIAL", /*             183 */
1058         "INVOKESTATIC ", /*             184 */
1059         "INVOKEINTERFACE",/*            185 */
1060         "CHECKASIZE   ", /* UNDEF186    186 */
1061         "NEW          ", /*             187 */
1062         "NEWARRAY     ", /*             188 */
1063         "ANEWARRAY    ", /*             189 */
1064         "ARRAYLENGTH  ", /*             190 */
1065         "ATHROW       ", /*             191 */
1066         "CHECKCAST    ", /*             192 */
1067         "INSTANCEOF   ", /*             193 */
1068         "MONITORENTER ", /*             194 */
1069         "MONITOREXIT  ", /*             195 */
1070         "UNDEF196     ", /* WIDE        196 */
1071         "MULTIANEWARRAY",/*             197 */
1072         "IFNULL       ", /*             198 */
1073         "IFNONNULL    ", /*             199 */
1074         "UNDEF200     ", /* GOTO_W      200 */
1075         "UNDEF201     ", /* JSR_W       201 */
1076         "UNDEF202     ", /* BREAKPOINT  202 */
1077
1078                               "UNDEF203","UNDEF204","UNDEF205",
1079         "UNDEF206","UNDEF207","UNDEF208","UNDEF209","UNDEF210",
1080         "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
1081         "UNDEF216","UNDEF217","UNDEF218","UNDEF219","UNDEF220",
1082         "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
1083         "UNDEF226","UNDEF227","UNDEF228","UNDEF229","UNDEF230",
1084         "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
1085         "UNDEF236","UNDEF237","UNDEF238","UNDEF239","UNDEF240",
1086         "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
1087         "UNDEF246","UNDEF247","UNDEF248","UNDEF249","UNDEF250",
1088         "UNDEF251","UNDEF252",
1089
1090         "BUILTIN3     ", /*             253 */
1091         "BUILTIN2     ", /*             254 */
1092         "BUILTIN1     "  /*             255 */
1093     };
1094
1095
1096
1097 /***************************** register types *********************************/
1098
1099 #define REG_RES   0         /* reserved register for OS or code generator     */
1100 #define REG_RET   1         /* return value register                          */
1101 #define REG_EXC   2         /* exception value register                       */
1102 #define REG_SAV   3         /* (callee) saved register                        */
1103 #define REG_TMP   4         /* scratch temporary register (caller saved)      */
1104 #define REG_ARG   5         /* argument register (caller saved)               */
1105
1106 #define REG_END   -1        /* last entry in tables                           */
1107  
1108 #define PARAMMODE_NUMBERED  0 
1109 #define PARAMMODE_STUFFED   1
1110
1111 /***************************** register info block ****************************/
1112
1113 extern int nregdescint[];   /* description of integer registers               */
1114 extern int nregdescfloat[]; /* description of floating point registers        */
1115
1116 extern int nreg_parammode;
1117
1118 void asm_handle_exception();
1119 void asm_handle_nat_exception();
1120
1121 static void disassinstr (int c, int pos);       /* disassemble an instruction */
1122 static void disassemble (int *code, int len);   /* disassemble a code block   */
1123
1124 #endif