Signed-off-by: Tomek Grabiec <[email protected]>
---
include/vm/types.h | 2 ++
vm/types.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/include/vm/types.h b/include/vm/types.h
index 1455439..54d2c60 100644
--- a/include/vm/types.h
+++ b/include/vm/types.h
@@ -19,5 +19,7 @@ extern enum vm_type str_to_type(char *);
extern enum vm_type get_method_return_type(char *);
int count_arguments(const char *);
+enum vm_type bytecode_type_to_vmtype(int);
+int get_vmtype_size(enum vm_type);
#endif
diff --git a/vm/types.c b/vm/types.c
index 1ff23bd..b21e7a9 100644
--- a/vm/types.c
+++ b/vm/types.c
@@ -1,4 +1,6 @@
#include <vm/types.h>
+#include <vm/die.h>
+#include <vm/vm.h>
/* See Table 4.2 in Section 4.3.2 ("Field Descriptors") of the JVM
specification. */
@@ -132,3 +134,40 @@ int count_arguments(const char *type)
return args;
}
+
+static enum vm_type bytecode_type_to_vmtype_map[] = {
+ [T_BOOLEAN] = J_BOOLEAN,
+ [T_CHAR] = J_CHAR,
+ [T_FLOAT] = J_FLOAT,
+ [T_DOUBLE] = J_DOUBLE,
+ [T_BYTE] = J_BYTE,
+ [T_SHORT] = J_SHORT,
+ [T_INT] = J_INT,
+ [T_LONG] = J_LONG,
+};
+
+enum vm_type bytecode_type_to_vmtype(int type)
+{
+ return bytecode_type_to_vmtype_map[type];
+}
+
+int get_vmtype_size(enum vm_type type)
+{
+ /* Currently we can load/store only multiples of machine word
+ at once. */
+ switch (type) {
+ case J_BOOLEAN:
+ case J_BYTE:
+ case J_CHAR:
+ case J_SHORT:
+ case J_FLOAT:
+ case J_INT:
+ case J_REFERENCE:
+ return sizeof(unsigned long);
+ case J_DOUBLE:
+ case J_LONG:
+ return 8;
+ default:
+ error("type has no size");
+ }
+}
--
1.6.0.6
------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel