JNAsm implementation in progress.
[jnode:svn-mirror.git] / builder / src / builder / org / jnode / jnasm / assembler / InstructionUtils.java
1 /**
2  * $Id$  
3  */
4 package org.jnode.jnasm.assembler;
5
6 import java.util.Map;
7 import java.util.Set;
8 import java.util.Iterator;
9 import java.util.HashMap;
10 import java.util.Collections;
11 import java.lang.reflect.Field;
12
13 /**
14  * @author Levente S\u00e1ntha
15  */
16 public class InstructionUtils {
17     private static final String INSTRUCTION_ID_SUFFIX = "_ISN";
18
19     public static String[] getMnemonicArray(Map map) {
20         Set entries = map.entrySet();
21         String[] mnemonics = new String[entries.size()];
22         for (Iterator it = entries.iterator(); it.hasNext();) {
23             Map.Entry entry = (Map.Entry) it.next();
24             mnemonics[((Integer) entry.getValue()).intValue()] = (String) entry.getKey();
25         }
26         return mnemonics;
27     }
28
29     public static Map getInstructionMap(Class clazz) {
30         Map map = new HashMap();
31         try {
32             Field[] fields = clazz.getDeclaredFields();
33             for (int i = fields.length; i-- > 0;) {
34                 Field f = fields[i];
35                 String fn = f.getName();
36                 if (fn.endsWith(INSTRUCTION_ID_SUFFIX)) {
37                     String mnemo = fn.substring(0, fn.length() - INSTRUCTION_ID_SUFFIX.length());
38                     if (mnemo != null || !"".equals(mnemo)) {
39                         map.put(mnemo.toLowerCase(), new Integer(f.getInt(null)));
40                     }
41                 }
42             }
43         } catch (IllegalAccessException iae) {
44             iae.printStackTrace();
45             System.exit(-1);
46         }
47         return Collections.unmodifiableMap(map);
48     }
49 }