/* This file is a part of TRAJA(Tokai Research Approarch for JavaVM Architecture) project. Copyright 1997, 1998 Shimizu-Lab., School of Engineering, Tokai University. 1117 Kitakaname, Hiratsuka, Kanagawa, 259-1292, Japan email: nshimizu@et.u-tokai.ac.jp URL: http://shimizu-lab.et.u-tokai.ac.jp/ Though these files are RTL hardware source code, the copying policy just follow the GPL 2.0(see COPYING file). If you have any comment or improvement for these files, feel free to contact to me. */ /***********************************************/ /* */ /* MODULE OPL VERSION 1.0 BETA */ /* (OPcode to Length Translator for Javachip) */ /* ^^ ^ */ /* Prog. M.AOYAGI 1997 */ /* */ /***********************************************/ module opl{ instrin do; input in<8>; output out<32>; sel l1a,l1b,l1c,l1d,l1e,l1f,l1g,l1h,l1i; sel l1j,l1k,l1l,l1m,l1n,l1o,l1p,l1q,l1r; sel l2a,l2b,l2c; sel l3a,l3b,l3c,l3d; sel l4,l5; sel l99; /* length=0? */ %d dnop (in==0b00000000) /* opcode=0 */ %d daconst_null (in==0b00000001) /* opcode=1 */ %d diconst_m1 (in==0b00000010) /* opcode=2 */ %d diconst_0 (in==0b00000011) /* opcode=3 */ %d diconst_1 (in==0b00000100) /* opcode=4 */ %d diconst_2 (in==0b00000101) /* opcode=5 */ %d diconst_3 (in==0b00000110) /* opcode=6 */ %d diconst_4 (in==0b00000111) /* opcode=7 */ %d diconst_5 (in==0b00001000) /* opcode=8 */ %d dlconst_0 (in==0b00001001) /* opcode=9 */ %d dlconst_1 (in==0b00001010) /* opcode= 10 */ %d dfconst_0 (in==0b00001011) /* opcode= 11 */ %d dfconst_1 (in==0b00001100) /* opcode= 12 */ %d dfconst_2 (in==0b00001101) /* opcode= 13 */ %d ddconst_0 (in==0b00001110) /* opcode= 14 */ %d ddconst_1 (in==0b00001111) /* opcode= 15 */ %d dbipush (in==0b00010000) /* opcode= 16 */ %d dsipush (in==0b00010001) /* opcode= 17 */ %d dldc1 (in==0b00010010) /* opcode= 18 */ %d dldc2 (in==0b00010011) /* opcode= 19 */ %d dldc2w (in==0b00010100) /* opcode= 20 */ %d diload (in==0b00010101) /* opcode= 21 */ %d dlload (in==0b00010110) /* opcode= 22 */ %d dfload (in==0b00010111) /* opcode= 23 */ %d ddload (in==0b00011000) /* opcode= 24 */ %d daload (in==0b00011001) /* opcode= 25 */ %d diload_0 (in==0b00011010) /* opcode= 26 */ %d diload_1 (in==0b00011011) /* opcode= 27 */ %d diload_2 (in==0b00011100) /* opcode= 28 */ %d diload_3 (in==0b00011101) /* opcode= 29 */ %d dlload_0 (in==0b00011110) /* opcode= 30 */ %d dlload_1 (in==0b00011111) /* opcode= 31 */ %d dlload_2 (in==0b00100000) /* opcode= 32 */ %d dlload_3 (in==0b00100001) /* opcode= 33 */ %d dfload_0 (in==0b00100010) /* opcode= 34 */ %d dfload_1 (in==0b00100011) /* opcode= 35 */ %d dfload_2 (in==0b00100100) /* opcode= 36 */ %d dfload_3 (in==0b00100101) /* opcode= 37 */ %d ddload_0 (in==0b00100110) /* opcode= 38 */ %d ddload_1 (in==0b00100111) /* opcode= 39 */ %d ddload_2 (in==0b00101000) /* opcode= 40 */ %d ddload_3 (in==0b00101001) /* opcode= 41 */ %d daload_0 (in==0b00101010) /* opcode= 42 */ %d daload_1 (in==0b00101011) /* opcode= 43 */ %d daload_2 (in==0b00101100) /* opcode= 44 */ %d daload_3 (in==0b00101101) /* opcode= 45 */ %d diaload (in==0b00101110) /* opcode= 46 */ %d dlaload (in==0b00101111) /* opcode= 47 */ %d dfaload (in==0b00110000) /* opcode= 48 */ %d ddaload (in==0b00110001) /* opcode= 49 */ %d daaload (in==0b00110010) /* opcode= 50 */ %d dbaload (in==0b00110011) /* opcode= 51 */ %d dcaload (in==0b00110100) /* opcode= 52 */ %d dsaload (in==0b00110101) /* opcode= 53 */ %d distore (in==0b00110110) /* opcode= 54 */ %d dlstore (in==0b00110111) /* opcode= 55 */ %d dfstore (in==0b00111000) /* opcode= 56 */ %d ddstore (in==0b00111001) /* opcode= 57 */ %d dastore (in==0b00111010) /* opcode= 58 */ %d distore_0 (in==0b00111011) /* opcode= 59 */ %d distore_1 (in==0b00111100) /* opcode= 60 */ %d distore_2 (in==0b00111101) /* opcode= 61 */ %d distore_3 (in==0b00111110) /* opcode= 62 */ %d dlstore_0 (in==0b00111111) /* opcode= 63 */ %d dlstore_1 (in==0b01000000) /* opcode= 64 */ %d dlstore_2 (in==0b01000001) /* opcode= 65 */ %d dlstore_3 (in==0b01000010) /* opcode= 66 */ %d dfstore_0 (in==0b01000011) /* opcode= 67 */ %d dfstore_1 (in==0b01000100) /* opcode= 68 */ %d dfstore_2 (in==0b01000101) /* opcode= 69 */ %d dfstore_3 (in==0b01000110) /* opcode= 70 */ %d ddstore_0 (in==0b01000111) /* opcode= 71 */ %d ddstore_1 (in==0b01001000) /* opcode= 72 */ %d ddstore_2 (in==0b01001001) /* opcode= 73 */ %d ddstore_3 (in==0b01001010) /* opcode= 74 */ %d dastore_0 (in==0b01001011) /* opcode= 75 */ %d dastore_1 (in==0b01001100) /* opcode= 76 */ %d dastore_2 (in==0b01001101) /* opcode= 77 */ %d dastore_3 (in==0b01001110) /* opcode= 78 */ %d diastore (in==0b01001111) /* opcode= 79 */ %d dlastore (in==0b01010000) /* opcode= 80 */ %d dfastore (in==0b01010001) /* opcode= 81 */ %d ddastore (in==0b01010010) /* opcode= 82 */ %d daastore (in==0b01010011) /* opcode= 83 */ %d dbastore (in==0b01010100) /* opcode= 84 */ %d dcastore (in==0b01010101) /* opcode= 85 */ %d dsastore (in==0b01010110) /* opcode= 86 */ %d dpop (in==0b01010111) /* opcode= 87 */ %d dpop2 (in==0b01011000) /* opcode= 88 */ %d ddup (in==0b01011001) /* opcode= 89 */ %d ddup_x1 (in==0b01011010) /* opcode= 90 */ %d ddup_x2 (in==0b01011011) /* opcode= 91 */ %d ddup2 (in==0b01011100) /* opcode= 92 */ %d ddup2_x1 (in==0b01011101) /* opcode= 93 */ %d ddup2_x2 (in==0b01011110) /* opcode= 94 */ %d dswap (in==0b01011111) /* opcode= 95 */ %d diadd (in==0b01100000) /* opcode=96 */ %d dladd (in==0b01100001) /* opcode=97 */ %d dfadd (in==0b01100010) /* opcode=98 */ %d ddadd (in==0b01100011) /* opcode=99 */ %d disub (in==0b01100100) /* opcode=100 */ %d dlsub (in==0b01100101) /* opcode=101 */ %d dfsub (in==0b01100110) /* opcode=102 */ %d ddsub (in==0b01100111) /* opcode=103 */ %d dimul (in==0b01101000) /* opcode=104 */ %d dlmul (in==0b01101001) /* opcode=105 */ %d dfmul (in==0b01101010) /* opcode=106 */ %d ddmul (in==0b01101011) /* opcode=107 */ %d didiv (in==0b01101100) /* opcode=108 */ %d dldiv (in==0b01101101) /* opcode=109 */ %d dfdiv (in==0b01101110) /* opcode=110 */ %d dddiv (in==0b01101111) /* opcode=111 */ %d direm (in==0b01110000) /* opcode=112 */ %d dlrem (in==0b01110001) /* opcode=113 */ %d dfrem (in==0b01110010) /* opcode=114 */ %d ddrem (in==0b01110011) /* opcode=115 */ %d dineg (in==0b01110100) /* opcode=116 */ %d dlneg (in==0b01110101) /* opcode=117 */ %d dfneg (in==0b01110110) /* opcode=118 */ %d ddneg (in==0b01110111) /* opcode=119 */ %d dishl (in==0b01111000) /* opcode=120 */ %d dlshl (in==0b01111001) /* opcode=121 */ %d dishr (in==0b01111010) /* opcode=122 */ %d dlshr (in==0b01111011) /* opcode=123 */ %d diushr (in==0b01111100) /* opcode=124 */ %d dlushr (in==0b01111101) /* opcode=125 */ %d diand (in==0b01111110) /* opcode=126 */ %d dland (in==0b01111111) /* opcode=127 */ %d dior (in==0b10000000) /* opcode=128 */ %d dlor (in==0b10000001) /* opcode=129 */ %d dixor (in==0b10000010) /* opcode=130 */ %d dlxor (in==0b10000011) /* opcode=131 */ %d diinc (in==0b10000100) /* opcode=132 */ %d di2l (in==0b10000101) /* opcode=133 */ %d di2f (in==0b10000110) /* opcode=134 */ %d di2d (in==0b10000111) /* opcode=135 */ %d dl2i (in==0b10001000) /* opcode=136 */ %d dl2f (in==0b10001001) /* opcode=137 */ %d dl2d (in==0b10001010) /* opcode=138 */ %d df2i (in==0b10001011) /* opcode=139 */ %d df2l (in==0b10001100) /* opcode=140 */ %d df2d (in==0b10001101) /* opcode=141 */ %d dd2i (in==0b10001110) /* opcode=142 */ %d dd2l (in==0b10001111) /* opcode=143 */ %d dd2f (in==0b10010000) /* opcode=144 */ %d dint2byte (in==0b10010001) /* opcode=145 */ %d dint2char (in==0b10010010) /* opcode=146 */ %d dint2short (in==0b10010011) /* opcode=147 */ %d dlcmp (in==0b10010100) /* opcode=148 */ %d dfcmpl (in==0b10010101) /* opcode=149 */ %d dfcmpg (in==0b10010110) /* opcode=150 */ %d ddcmpl (in==0b10010111) /* opcode=151 */ %d ddcmpg (in==0b10011000) /* opcode=152 */ %d difeq (in==0b10011001) /** opcode=153 **/ %d difne (in==0b10011010) /** opcode=154 **/ %d diflt (in==0b10011011) /** opcode=155 **/ %d difge (in==0b10011100) /** opcode=156 **/ %d difgt (in==0b10011101) /** opcode=157 **/ %d difle (in==0b10011110) /** opcode=158 **/ %d dif_icmpeq (in==0b10011111) /** opcode=159 **/ %d dif_icmpne (in==0b10100000) /** opcode=160 **/ %d dif_icmplt (in==0b10100001) /** opcode=161 **/ %d dif_icmpge (in==0b10100010) /** opcode=162 **/ %d dif_icmpgt (in==0b10100011) /** opcode=163 **/ %d dif_icmple (in==0b10100100) /** opcode=164 **/ %d dif_acmpeq (in==0b10100101) /** opcode=165 **/ %d dif_acmpne (in==0b10100110) /** opcode=166 **/ %d dgoto (in==0b10100111) /** opcode=167 **/ %d djsr (in==0b10101000) /** opcode=168 **/ %d dret (in==0b10101001) /** opcode=169 **/ %d dtableswitch (in==0b10101010) /** opcode=170 **/ %d dlookupswitch (in==0b10101011) /** opcode=171 **/ %d direturn (in==0b10101100) /** opcode=172 **/ %d dlreturn (in==0b10101101) /** opcode=173 **/ %d dfreturn (in==0b10101110) /** opcode=174 **/ %d ddreturn (in==0b10101111) /** opcode=175 **/ %d dareturn (in==0b10110000) /** opcode=176 **/ %d dreturn (in==0b10110001) /** opcode=177 **/ %d dgetstatic (in==0b10110010) /** opcode=178 **/ %d dputstatic (in==0b10110011) /** opcode=179 **/ %d dgetfield (in==0b10110100) /** opcode=180 **/ %d dputfield (in==0b10110101) /** opcode=181 **/ %d dinvokevirtual (in==0b10110110) /** opcode=182 **/ %d dinvokenonvirtual (in==0b10110111) /** opcode=183 **/ %d dinvokestatic (in==0b10111000) /** opcode=184 **/ %d dinvokeinterface (in==0b10111001) /** opcode=185 **/ /* OPCODE 186 is not allocated */ %d dnew (in==0b10111011) /** opcode=187 **/ %d dnewarray (in==0b10111100) /** opcode=188 **/ %d danewarray (in==0b10111101) /** opcode=189 **/ %d darraylength (in==0b10111110) /** opcode=190 **/ %d dathrow (in==0b10111111) /** opcode=191 **/ %d dcheckcast (in==0b11000000) /** opcode=192 **/ %d dinstanceof (in==0b11000001) /** opcode=193 **/ %d dmonitorenter (in==0b11000010) /** opcode=194 **/ %d dmonitorexit (in==0b11000011) /** opcode=195 **/ %d dwide (in==0b11000100) /** opcode=196 **/ %d dmultianewarray (in==0b11000101) /** opcode=197 **/ %d difnull (in==0b11000110) /* opcode=198 */ %d difnonnull (in==0b11000111) /* opcode=199 */ %d dgoto_w (in==0b11001000) /** opcode=200 **/ %d djsr_w (in==0b11001001) /** opcode=201 **/ %d dbreakpoint (in==0b11001010) /** opcode=202 **/ %d dret_w (in==0b11010001) /** opcode=209 **/ %d doriginal (in==0b11111111) /** opcode=255 **/ instruct do par { /* Length=1 */ l1a=(daconst_null | diconst_m1 | diconst_0 | diconst_1 | diconst_2 | diconst_3 | diconst_4 | diconst_5); l1b=(dlconst_0 | dlconst_1 | dfconst_0 | dfconst_1 | dfconst_2 | ddconst_0 | ddconst_1); l1c=(diload_0 | diload_1 | diload_2 | diload_3 | dlload_0 | dlload_1 | dlload_2 | dlload_3); l1d=(dfload_0 | dfload_1 | dfload_2 | dfload_3 | ddload_0 | ddload_1 | ddload_2 | ddload_3 | daload_0 | daload_1 | daload_2 | daload_3); l1e=(distore_0 | distore_1 | distore_2 | distore_3 | dlstore_0 | dlstore_1 | dlstore_2 | dlstore_3); l1f=(dfstore_0 | dfstore_1 | dfstore_2 | dfstore_3 | ddstore_0 | ddstore_1 | ddstore_2 | ddstore_3 | dastore_0 | dastore_1 | dastore_2 | dastore_3); l1g=(darraylength | diaload | dlaload | dfaload | ddaload | daaload | dbaload | dcaload | dsaload); l1h=(diastore | dlastore | dfastore | ddastore | daastore | dbastore | dcastore | dsastore); l1i=(dnop | dpop | dpop2 | ddup | ddup2 | ddup_x1 | ddup2_x1 | ddup2_x2 | dswap); l1j=(diadd | dladd | dfadd | ddadd | disub | dlsub | dfsub | ddsub | dimul); l1k=(dlmul | dfmul | ddmul | didiv | dldiv | dfdiv | dddiv | direm | dlrem | dfrem | ddrem); l1l=(dineg | dlneg | dfneg | ddneg); l1m=(dishl | dishr | diushr | dlshl | dlshr | dlushr | diand | dland | dior | dlor | dixor | dlxor); l1n=(di2l | di2f | di2d | dl2i | dl2f | dl2d | df2i | df2l | df2d); l1o=(dd2i | dd2l | dd2f | dint2byte | dint2char | dint2short); l1p=(dlcmp | dfcmpg | dfcmpl | ddcmpg | ddcmpl ); l1q=(direturn | dlreturn | dfreturn | ddreturn | dareturn | dreturn | dbreakpoint | dathrow); l1r=(dmonitorenter | dmonitorexit); /* Length=2 */ l2a=(dbipush | dldc1 | diload | dlload | dfload | ddload | daload); l2b=(distore | dlstore | dfstore | ddstore | dastore); l2c=(dwide | dnewarray | dret | doriginal); /* Length=3 */ l3a=(dsipush | dldc2 | dldc2w | diinc | danewarray | difeq | difnull | diflt | difle | difne | difnonnull | difgt | difge); l3b=(dif_icmpeq | dif_icmpne | dif_icmplt | dif_icmpgt | dif_icmple | dif_icmpge); l3c=(dif_acmpeq | dif_acmpne | dgoto | djsr | dret_w | dputfield | dgetfield | dputstatic | dgetstatic); l3d=(dinvokevirtual | dinvokenonvirtual | dinvokestatic | dnew | dcheckcast | dinstanceof); /* Length=4 */ l4=(dmultianewarray); /* Length=5 */ l5=(dgoto_w | djsr_w | dinvokeinterface); /* Length=? */ l99=(dtableswitch | dlookupswitch); /** Output Instruction Length **/ any { l1a : out=32#0b001; l1b : out=32#0b001; l1c : out=32#0b001; l1d : out=32#0b001; l1e : out=32#0b001; l1f : out=32#0b001; l1g : out=32#0b001; l1h : out=32#0b001; l1i : out=32#0b001; l1j : out=32#0b001; l1k : out=32#0b001; l1l : out=32#0b001; l1m : out=32#0b001; l1n : out=32#0b001; l1o : out=32#0b001; l1p : out=32#0b001; l1q : out=32#0b001; l1r : out=32#0b001; l2a : out=32#0b010; l2b : out=32#0b010; l2c : out=32#0b010; l3a : out=32#0b011; l3b : out=32#0b011; l3c : out=32#0b011; l3d : out=32#0b011; l4 : out=32#0b0100; l5 : out=32#0b0101; l99 : out=32#0b000; else : out=32#0b000; } } }