a9c82215e6c1cd9682746b2e328c29e9be5abf7b
[hs-java.git] / JVM / Builder / Instructions.hs
1 -- | This module exports shortcuts for some of JVM instructions (which are defined in JVM.Assembler).
2 module JVM.Builder.Instructions where
3
4 import Data.Word
5 import qualified Data.ByteString.Lazy as B
6
7 import JVM.ClassFile
8 import JVM.Assembler
9 import JVM.Builder.Monad
10
11 nop ::  Generate ()
12 nop = i0 NOP
13 aconst_null ::  Generate ()
14 aconst_null = i0 ACONST_NULL
15 iconst_m1 ::  Generate ()
16 iconst_m1 = i0 ICONST_M1
17 iconst_0 ::  Generate ()
18 iconst_0 = i0 ICONST_0
19 iconst_1 ::  Generate ()
20 iconst_1 = i0 ICONST_1
21 iconst_2 ::  Generate ()
22 iconst_2 = i0 ICONST_2
23 iconst_3 ::  Generate ()
24 iconst_3 = i0 ICONST_3
25 iconst_4 ::  Generate ()
26 iconst_4 = i0 ICONST_4
27 iconst_5 ::  Generate ()
28 iconst_5 = i0 ICONST_5
29 lconst_0 ::  Generate ()
30 lconst_0 = i0 LCONST_0
31 lconst_1 ::  Generate ()
32 lconst_1 = i0 LCONST_1
33 fconst_0 ::  Generate ()
34 fconst_0 = i0 FCONST_0
35 fconst_1 ::  Generate ()
36 fconst_1 = i0 FCONST_1
37 fconst_2 ::  Generate ()
38 fconst_2 = i0 FCONST_2
39 dconst_0 ::  Generate ()
40 dconst_0 = i0 DCONST_0
41 dconst_1 ::  Generate ()
42 dconst_1 = i0 DCONST_1
43
44 bipush ::  Word8 -> Generate ()
45 bipush x = i0 (BIPUSH x)
46 sipush ::  Word16 -> Generate ()
47 sipush x = i0 (SIPUSH x)
48 ldc1 ::  Constant Resolved -> Generate ()
49 ldc1 x = i8 LDC1 x
50 ldc2 ::  Constant Resolved -> Generate ()
51 ldc2 x = i1 LDC2 x
52 ldc2w ::  Constant Resolved -> Generate ()
53 ldc2w x = i1 LDC2W x
54 iload ::  Constant Resolved -> Generate ()
55 iload x = i8 ILOAD x
56 lload ::  Constant Resolved -> Generate ()
57 lload x = i8 LLOAD x
58 fload ::  Constant Resolved -> Generate ()
59 fload x = i8 FLOAD x
60 dload ::  Constant Resolved -> Generate ()
61 dload x = i8 DLOAD x
62 aload ::  Constant Resolved -> Generate ()
63 aload x = i8 ALOAD x
64
65 iload_ ::  IMM -> Generate ()
66 iload_ x = i0 (ILOAD_ x)
67 lload_ ::  IMM -> Generate ()
68 lload_ x = i0 (LLOAD_ x)
69 fload_ ::  IMM -> Generate ()
70 fload_ x = i0 (FLOAD_ x)
71 dload_ ::  IMM -> Generate ()
72 dload_ x = i0 (DLOAD_ x)
73 aload_ ::  IMM -> Generate ()
74 aload_ x = i0 (ALOAD_ x)
75
76 iaload ::  Generate ()
77 iaload = i0 IALOAD
78 laload ::  Generate ()
79 laload = i0 LALOAD
80 faload ::  Generate ()
81 faload = i0 FALOAD
82 daload ::  Generate ()
83 daload = i0 DALOAD
84 aaload ::  Generate ()
85 aaload = i0 AALOAD
86 caload ::  Generate ()
87 caload = i0 CALOAD
88 saload ::  Generate ()
89 saload = i0 SALOAD
90
91 istore ::  Constant Resolved -> Generate ()
92 istore x = i8 ISTORE x
93 lstore ::  Constant Resolved -> Generate ()
94 lstore x = i8 LSTORE x
95 fstore ::  Constant Resolved -> Generate ()
96 fstore x = i8 FSTORE x
97 dstore ::  Constant Resolved -> Generate ()
98 dstore x = i8 DSTORE x
99 astore ::  Constant Resolved -> Generate ()
100 astore x = i8 ASTORE x
101
102 istore_ ::  Word8 -> Generate ()
103 istore_ x = i0 (ISTORE x)
104 lstore_ ::  Word8 -> Generate ()
105 lstore_ x = i0 (LSTORE x)
106 fstore_ ::  Word8 -> Generate ()
107 fstore_ x = i0 (FSTORE x)
108 dstore_ ::  Word8 -> Generate ()
109 dstore_ x = i0 (DSTORE x)
110 astore_ ::  Word8 -> Generate ()
111 astore_ x = i0 (ASTORE x)
112
113 iastore ::  Generate ()
114 iastore = i0 IASTORE
115 lastore ::  Generate ()
116 lastore = i0 LASTORE
117 fastore ::  Generate ()
118 fastore = i0 FASTORE
119 dastore ::  Generate ()
120 dastore = i0 DASTORE
121 aastore ::  Generate ()
122 aastore = i0 AASTORE
123 bastore ::  Generate ()
124 bastore = i0 BASTORE
125 castore ::  Generate ()
126 castore = i0 CASTORE
127 sastore ::  Generate ()
128 sastore = i0 SASTORE
129
130 pop ::  Generate ()
131 pop     = i0 POP    
132 pop2 ::  Generate ()
133 pop2    = i0 POP2   
134 dup ::  Generate ()
135 dup     = i0 DUP    
136 dup_x1 ::  Generate ()
137 dup_x1  = i0 DUP_X1 
138 dup_x2 ::  Generate ()
139 dup_x2  = i0 DUP_X2 
140 dup2 ::  Generate ()
141 dup2    = i0 DUP2   
142 dup2_x1 ::  Generate ()
143 dup2_x1 = i0 DUP2_X1
144 dup2_x2 ::  Generate ()
145 dup2_x2 = i0 DUP2_X2
146 swap ::  Generate ()
147 swap    = i0 SWAP   
148 iadd ::  Generate ()
149 iadd    = i0 IADD   
150 ladd ::  Generate ()
151 ladd    = i0 LADD   
152 fadd ::  Generate ()
153 fadd    = i0 FADD   
154 dadd ::  Generate ()
155 dadd    = i0 DADD   
156 isub ::  Generate ()
157 isub    = i0 ISUB   
158 lsub ::  Generate ()
159 lsub    = i0 LSUB   
160 fsub ::  Generate ()
161 fsub    = i0 FSUB   
162 dsub ::  Generate ()
163 dsub    = i0 DSUB   
164 imul ::  Generate ()
165 imul    = i0 IMUL   
166 lmul ::  Generate ()
167 lmul    = i0 LMUL   
168 fmul ::  Generate ()
169 fmul    = i0 FMUL   
170 dmul ::  Generate ()
171 dmul    = i0 DMUL   
172 idiv ::  Generate ()
173 idiv    = i0 IDIV   
174 ldiv ::  Generate ()
175 ldiv    = i0 LDIV   
176 fdiv ::  Generate ()
177 fdiv    = i0 FDIV   
178 ddiv ::  Generate ()
179 ddiv    = i0 DDIV   
180 irem ::  Generate ()
181 irem    = i0 IREM   
182 lrem ::  Generate ()
183 lrem    = i0 LREM   
184 frem ::  Generate ()
185 frem    = i0 FREM   
186 drem ::  Generate ()
187 drem    = i0 DREM   
188 ineg ::  Generate ()
189 ineg    = i0 INEG   
190 lneg ::  Generate ()
191 lneg    = i0 LNEG   
192 fneg ::  Generate ()
193 fneg    = i0 FNEG   
194 dneg ::  Generate ()
195 dneg    = i0 DNEG   
196 ishl ::  Generate ()
197 ishl    = i0 ISHL   
198 lshl ::  Generate ()
199 lshl    = i0 LSHL   
200 ishr ::  Generate ()
201 ishr    = i0 ISHR   
202 lshr ::  Generate ()
203 lshr    = i0 LSHR   
204 iushr ::  Generate ()
205 iushr   = i0 IUSHR  
206 lushr ::  Generate ()
207 lushr   = i0 LUSHR  
208 iand ::  Generate ()
209 iand    = i0 IAND   
210 land ::  Generate ()
211 land    = i0 LAND   
212 ior ::  Generate ()
213 ior     = i0 IOR    
214 lor ::  Generate ()
215 lor     = i0 LOR    
216 ixor ::  Generate ()
217 ixor    = i0 IXOR   
218 lxor ::  Generate ()
219 lxor    = i0 LXOR   
220
221 iinc ::  Word8 -> Word8 -> Generate ()
222 iinc x y = i0 (IINC x y)
223
224 i2l ::  Generate ()
225 i2l  = i0 I2L 
226 i2f ::  Generate ()
227 i2f  = i0 I2F 
228 i2d ::  Generate ()
229 i2d  = i0 I2D 
230 l2i ::  Generate ()
231 l2i  = i0 L2I 
232 l2f ::  Generate ()
233 l2f  = i0 L2F 
234 l2d ::  Generate ()
235 l2d  = i0 L2D 
236 f2i ::  Generate ()
237 f2i  = i0 F2I 
238 f2l ::  Generate ()
239 f2l  = i0 F2L 
240 f2d ::  Generate ()
241 f2d  = i0 F2D 
242 d2i ::  Generate ()
243 d2i  = i0 D2I 
244 d2l ::  Generate ()
245 d2l  = i0 D2L 
246 d2f ::  Generate ()
247 d2f  = i0 D2F 
248 i2b ::  Generate ()
249 i2b  = i0 I2B 
250 i2c ::  Generate ()
251 i2c  = i0 I2C 
252 i2s ::  Generate ()
253 i2s  = i0 I2S 
254 lcmp ::  Generate ()
255 lcmp = i0 LCMP
256
257 new ::  B.ByteString -> Generate ()
258 new cls =
259   i1 NEW (CClass cls)
260
261 newArray ::  ArrayType -> Generate ()
262 newArray t =
263   i0 (NEWARRAY $ atype2byte t)
264
265 allocNewArray ::  B.ByteString -> Generate ()
266 allocNewArray cls =
267   i1 ANEWARRAY (CClass cls)
268
269 invokeVirtual ::  B.ByteString -> NameType Method -> Generate ()
270 invokeVirtual cls sig =
271   i1 INVOKEVIRTUAL (CMethod cls sig)
272
273 invokeStatic ::  B.ByteString -> NameType Method -> Generate ()
274 invokeStatic cls sig =
275   i1 INVOKESTATIC (CMethod cls sig)
276
277 invokeSpecial ::  B.ByteString -> NameType Method -> Generate ()
278 invokeSpecial cls sig =
279   i1 INVOKESPECIAL (CMethod cls sig)
280
281 getStaticField ::  B.ByteString -> NameType Field -> Generate ()
282 getStaticField cls sig =
283   i1 GETSTATIC (CField cls sig)
284
285 loadString ::  B.ByteString -> Generate ()
286 loadString str =
287   i8 LDC1 (CString str)
288
289 allocArray ::  B.ByteString -> Generate ()
290 allocArray cls =
291   i1 ANEWARRAY (CClass cls)
292