OpenCores
URL https://opencores.org/ocsvn/the_wizardry_project/the_wizardry_project/trunk

Subversion Repositories the_wizardry_project

[/] [the_wizardry_project/] [trunk/] [Wizardry/] [VHDL/] [Wizardry Top Level/] [Address Generation/] [JOP/] [jtbl.vhd] - Blame information for rev 22

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 22 mcwaccent
--
2
--      jtbl.vhd
3
--
4
--      jump table for java bc to jvm address
5
--
6
--              DONT edit this file!
7
--              generated by Jopa.java
8
--
9
 
10
library ieee;
11
use ieee.std_logic_1164.all;
12
use ieee.std_logic_arith.all;
13
use ieee.std_logic_unsigned.all;
14
 
15
entity jtbl is
16
port (
17
        bcode   : in std_logic_vector(7 downto 0);
18
        int_pend        : in  std_logic;
19
        exc_pend        : in  std_logic;
20
        q               : out std_logic_vector(10 downto 0)
21
);
22
end jtbl;
23
 
24
--
25
--      unregistered rdbcode
26
--      unregistered dout
27
--
28
architecture rtl of jtbl is
29
 
30
        signal  addr    : std_logic_vector(10 downto 0);
31
 
32
begin
33
 
34
process(bcode) begin
35
 
36
        case bcode is
37
 
38
                when "00000000" => addr <= "00001111010";       --      007a    nop
39
                when "00000010" => addr <= "00001111011";       --      007b    iconst_m1
40
                when "00000001" => addr <= "00001111100";       --      007c    aconst_null
41
                when "00000011" => addr <= "00001111100";       --      007c    iconst_0
42
                when "00000100" => addr <= "00001111101";       --      007d    iconst_1
43
                when "00000101" => addr <= "00001111110";       --      007e    iconst_2
44
                when "00000110" => addr <= "00001111111";       --      007f    iconst_3
45
                when "00000111" => addr <= "00010000000";       --      0080    iconst_4
46
                when "00001000" => addr <= "00010000001";       --      0081    iconst_5
47
                when "00010000" => addr <= "00010000010";       --      0082    bipush
48
                when "00010001" => addr <= "00010000100";       --      0084    sipush
49
                when "00010010" => addr <= "00010000111";       --      0087    ldc
50
                when "00010011" => addr <= "00010001110";       --      008e    ldc_w
51
                when "00011001" => addr <= "00010010110";       --      0096    aload
52
                when "00010111" => addr <= "00010010110";       --      0096    fload
53
                when "00010101" => addr <= "00010010110";       --      0096    iload
54
                when "00101010" => addr <= "00010011000";       --      0098    aload_0
55
                when "00100010" => addr <= "00010011000";       --      0098    fload_0
56
                when "00011010" => addr <= "00010011000";       --      0098    iload_0
57
                when "00101011" => addr <= "00010011001";       --      0099    aload_1
58
                when "00100011" => addr <= "00010011001";       --      0099    fload_1
59
                when "00011011" => addr <= "00010011001";       --      0099    iload_1
60
                when "00101100" => addr <= "00010011010";       --      009a    aload_2
61
                when "00100100" => addr <= "00010011010";       --      009a    fload_2
62
                when "00011100" => addr <= "00010011010";       --      009a    iload_2
63
                when "00101101" => addr <= "00010011011";       --      009b    aload_3
64
                when "00100101" => addr <= "00010011011";       --      009b    fload_3
65
                when "00011101" => addr <= "00010011011";       --      009b    iload_3
66
                when "00111010" => addr <= "00010011100";       --      009c    astore
67
                when "00111000" => addr <= "00010011100";       --      009c    fstore
68
                when "00110110" => addr <= "00010011100";       --      009c    istore
69
                when "01001011" => addr <= "00010011110";       --      009e    astore_0
70
                when "01000011" => addr <= "00010011110";       --      009e    fstore_0
71
                when "00111011" => addr <= "00010011110";       --      009e    istore_0
72
                when "01001100" => addr <= "00010011111";       --      009f    astore_1
73
                when "01000100" => addr <= "00010011111";       --      009f    fstore_1
74
                when "00111100" => addr <= "00010011111";       --      009f    istore_1
75
                when "01001101" => addr <= "00010100000";       --      00a0    astore_2
76
                when "01000101" => addr <= "00010100000";       --      00a0    fstore_2
77
                when "00111101" => addr <= "00010100000";       --      00a0    istore_2
78
                when "01001110" => addr <= "00010100001";       --      00a1    astore_3
79
                when "01000110" => addr <= "00010100001";       --      00a1    fstore_3
80
                when "00111110" => addr <= "00010100001";       --      00a1    istore_3
81
                when "01010111" => addr <= "00010100010";       --      00a2    pop
82
                when "01011000" => addr <= "00010100011";       --      00a3    pop2
83
                when "01011001" => addr <= "00010100101";       --      00a5    dup
84
                when "01011010" => addr <= "00010100110";       --      00a6    dup_x1
85
                when "01011011" => addr <= "00010101011";       --      00ab    dup_x2
86
                when "01011100" => addr <= "00010110010";       --      00b2    dup2
87
                when "01011101" => addr <= "00010111000";       --      00b8    dup2_x1
88
                when "01011110" => addr <= "00011000000";       --      00c0    dup2_x2
89
                when "01011111" => addr <= "00011001010";       --      00ca    swap
90
                when "01100000" => addr <= "00011001110";       --      00ce    iadd
91
                when "01100100" => addr <= "00011001111";       --      00cf    isub
92
                when "01110100" => addr <= "00011010000";       --      00d0    ineg
93
                when "01111110" => addr <= "00011010100";       --      00d4    iand
94
                when "10000000" => addr <= "00011010101";       --      00d5    ior
95
                when "10000010" => addr <= "00011010110";       --      00d6    ixor
96
                when "01111000" => addr <= "00011010111";       --      00d7    ishl
97
                when "01111010" => addr <= "00011011000";       --      00d8    ishr
98
                when "01111100" => addr <= "00011011001";       --      00d9    iushr
99
                when "01101000" => addr <= "00011011010";       --      00da    imul
100
                when "10000100" => addr <= "00011100110";       --      00e6    iinc
101
                when "10010010" => addr <= "00011101110";       --      00ee    i2c
102
                when "11000110" => addr <= "00011110000";       --      00f0    ifnull
103
                when "11000111" => addr <= "00011110000";       --      00f0    ifnonnull
104
                when "10011001" => addr <= "00011110000";       --      00f0    ifeq
105
                when "10011010" => addr <= "00011110000";       --      00f0    ifne
106
                when "10011011" => addr <= "00011110000";       --      00f0    iflt
107
                when "10011100" => addr <= "00011110000";       --      00f0    ifge
108
                when "10011101" => addr <= "00011110000";       --      00f0    ifgt
109
                when "10011110" => addr <= "00011110000";       --      00f0    ifle
110
                when "10100101" => addr <= "00011110100";       --      00f4    if_acmpeq
111
                when "10100110" => addr <= "00011110100";       --      00f4    if_acmpne
112
                when "10011111" => addr <= "00011110100";       --      00f4    if_icmpeq
113
                when "10100000" => addr <= "00011110100";       --      00f4    if_icmpne
114
                when "10100001" => addr <= "00011110100";       --      00f4    if_icmplt
115
                when "10100010" => addr <= "00011110100";       --      00f4    if_icmpge
116
                when "10100011" => addr <= "00011110100";       --      00f4    if_icmpgt
117
                when "10100100" => addr <= "00011110100";       --      00f4    if_icmple
118
                when "10100111" => addr <= "00011111000";       --      00f8    goto
119
                when "11100000" => addr <= "00011111100";       --      00fc    getstatic_ref
120
                when "10110010" => addr <= "00011111100";       --      00fc    getstatic
121
                when "10110011" => addr <= "00100000011";       --      0103    putstatic
122
                when "11100010" => addr <= "00100001011";       --      010b    getfield_ref
123
                when "10110100" => addr <= "00100001011";       --      010b    getfield
124
                when "11101001" => addr <= "00100001110";       --      010e    jopsys_getfield
125
                when "10110101" => addr <= "00100010011";       --      0113    putfield
126
                when "11101010" => addr <= "00100010111";       --      0117    jopsys_putfield
127
                when "10111100" => addr <= "00100011100";       --      011c    newarray
128
                when "10111110" => addr <= "00100110011";       --      0133    arraylength
129
                when "01010100" => addr <= "00100111001";       --      0139    bastore
130
                when "01010101" => addr <= "00100111001";       --      0139    castore
131
                when "01010001" => addr <= "00100111001";       --      0139    fastore
132
                when "01001111" => addr <= "00100111001";       --      0139    iastore
133
                when "01010110" => addr <= "00100111001";       --      0139    sastore
134
                when "00110010" => addr <= "00100111111";       --      013f    aaload
135
                when "00110011" => addr <= "00100111111";       --      013f    baload
136
                when "00110100" => addr <= "00100111111";       --      013f    caload
137
                when "00110000" => addr <= "00100111111";       --      013f    faload
138
                when "00101110" => addr <= "00100111111";       --      013f    iaload
139
                when "00110101" => addr <= "00100111111";       --      013f    saload
140
                when "11000010" => addr <= "00101000100";       --      0144    monitorenter
141
                when "11000011" => addr <= "00101010110";       --      0156    monitorexit
142
                when "10110111" => addr <= "00101101010";       --      016a    invokespecial
143
                when "10111000" => addr <= "00101101010";       --      016a    invokestatic
144
                when "11011110" => addr <= "00101110010";       --      0172    jopsys_invoke
145
                when "10111001" => addr <= "00101110110";       --      0176    invokeinterface
146
                when "11101100" => addr <= "00110101000";       --      01a8    invokesuper
147
                when "10110110" => addr <= "00111010111";       --      01d7    invokevirtual
148
                when "10110000" => addr <= "01000111001";       --      0239    areturn
149
                when "10101110" => addr <= "01000111001";       --      0239    freturn
150
                when "10101100" => addr <= "01000111001";       --      0239    ireturn
151
                when "10101111" => addr <= "01001010000";       --      0250    dreturn
152
                when "10101101" => addr <= "01001010000";       --      0250    lreturn
153
                when "10110001" => addr <= "01001101001";       --      0269    return
154
                when "00010100" => addr <= "01010010010";       --      0292    ldc2_w
155
                when "00001001" => addr <= "01010100011";       --      02a3    lconst_0
156
                when "00001010" => addr <= "01010100101";       --      02a5    lconst_1
157
                when "10001000" => addr <= "01010100111";       --      02a7    l2i
158
                when "00100110" => addr <= "01010101010";       --      02aa    dload_0
159
                when "00011110" => addr <= "01010101010";       --      02aa    lload_0
160
                when "00100111" => addr <= "01010101100";       --      02ac    dload_1
161
                when "00011111" => addr <= "01010101100";       --      02ac    lload_1
162
                when "00101000" => addr <= "01010101110";       --      02ae    dload_2
163
                when "00100000" => addr <= "01010101110";       --      02ae    lload_2
164
                when "00101001" => addr <= "01010110000";       --      02b0    dload_3
165
                when "00100001" => addr <= "01010110000";       --      02b0    lload_3
166
                when "00011000" => addr <= "01010111011";       --      02bb    dload
167
                when "00010110" => addr <= "01010111011";       --      02bb    lload
168
                when "01000111" => addr <= "01011000110";       --      02c6    dstore_0
169
                when "00111111" => addr <= "01011000110";       --      02c6    lstore_0
170
                when "01001000" => addr <= "01011001000";       --      02c8    dstore_1
171
                when "01000000" => addr <= "01011001000";       --      02c8    lstore_1
172
                when "01001001" => addr <= "01011001010";       --      02ca    dstore_2
173
                when "01000001" => addr <= "01011001010";       --      02ca    lstore_2
174
                when "01001010" => addr <= "01011001100";       --      02cc    dstore_3
175
                when "01000010" => addr <= "01011001100";       --      02cc    lstore_3
176
                when "00111001" => addr <= "01011010111";       --      02d7    dstore
177
                when "00110111" => addr <= "01011010111";       --      02d7    lstore
178
                when "11100100" => addr <= "01011100010";       --      02e2    getstatic_long
179
                when "11100101" => addr <= "01011110010";       --      02f2    putstatic_long
180
                when "11100110" => addr <= "01100000011";       --      0303    getfield_long
181
                when "11100111" => addr <= "01100011101";       --      031d    putfield_long
182
                when "01010000" => addr <= "01100111010";       --      033a    lastore
183
                when "00101111" => addr <= "01101101010";       --      036a    laload
184
                when "10111011" => addr <= "01110111110";       --      03be    new
185
                when "10111101" => addr <= "01110111110";       --      03be    anewarray
186
                when "11000000" => addr <= "01110111110";       --      03be    checkcast
187
                when "11000001" => addr <= "01110111110";       --      03be    instanceof
188
                when "11100011" => addr <= "01111011011";       --      03db    putfield_ref
189
                when "11100001" => addr <= "01111011011";       --      03db    putstatic_ref
190
                when "11010001" => addr <= "01111110011";       --      03f3    jopsys_rd
191
                when "11010011" => addr <= "01111110011";       --      03f3    jopsys_rdmem
192
                when "11010010" => addr <= "01111110111";       --      03f7    jopsys_wr
193
                when "11010100" => addr <= "01111110111";       --      03f7    jopsys_wrmem
194
                when "11010101" => addr <= "01111111100";       --      03fc    jopsys_rdint
195
                when "11010110" => addr <= "01111111111";       --      03ff    jopsys_wrint
196
                when "11010111" => addr <= "10000000010";       --      0402    jopsys_getsp
197
                when "11011000" => addr <= "10000000101";       --      0405    jopsys_setsp
198
                when "11011001" => addr <= "10000001001";       --      0409    jopsys_getvp
199
                when "11011010" => addr <= "10000001010";       --      040a    jopsys_setvp
200
                when "11011011" => addr <= "10000001100";       --      040c    jopsys_int2ext
201
                when "11011100" => addr <= "10000100111";       --      0427    jopsys_ext2int
202
                when "11101000" => addr <= "10001000011";       --      0443    jopsys_memcpy
203
                when "11011101" => addr <= "10001001000";       --      0448    jopsys_nop
204
 
205
                when others => addr <= "01110101011";           --      03ab    sys_noim
206
        end case;
207
end process;
208
 
209
process(int_pend, exc_pend, addr) begin
210
 
211
        q <= addr;
212
        if exc_pend='1' then
213
                q <= "01110011111";             --      039f    sys_exc
214
        elsif int_pend='1' then
215
                q <= "01110010101";             --      0395    sys_int
216
        end if;
217
end process;
218
 
219
end rtl;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.