index ed4a19ad1f3cd5ccae3c0e9645ded564faf9c355..fa34f1dfd8190149b12569aca64b7bc29b767d64 100644 (file)
void
jvm_generate_ldst_prepare(gen_proc_t * p, gen_var_t * v)
{
- char * full_name = v -> full_name;
- char * desc = v -> type -> desc;
-
+ char * desc;
+ char * full_name;
switch(v -> storage)
{
case JVM_STORAGE_REGISTER:
break;
case JVM_STORAGE_STATIC:
+ full_name = v -> full_name;
+ desc = v -> type -> desc;
jvm_generate(p, 0, 1, "getstatic %s [%s", full_name, desc);
jvm_generate(p, 0, 1, "iconst_0");
break;
case JVM_STORAGE_FIELD:
+ full_name = v -> full_name;
+ desc = v -> type -> desc;
jvm_generate(p, 1, 1, "getfield %s [%s", full_name, desc);
jvm_generate(p, 0, 1, "iconst_0");
break;
jvm_generate_and_init_local_var(gen_proc_t * p, gen_var_t * v, gen_type_t * t)
{
v -> storage = JVM_STORAGE_REGISTER;
- v -> reg = jvm_alloc_register_untyped(p -> rf, t -> wide);
+ v -> reg = jvm_alloc_register_untyped(p -> rf, t -> wide);
v -> type = t;
}
void
-jvm_generate_and_init_named_local_var(gen_proc_t * p, gen_var_t * v, char * name, gen_type_t * t)
+jvm_init_named_local_var(gen_proc_t * p, gen_var_t * v, gen_type_t * t)
{
- jvm_generate_and_init_local_var(p, v, t);
- jvm_generate(p, 0, 0, ".var %i is %s %s from start to end", v -> reg, name, t -> desc);
+ v -> storage = JVM_STORAGE_REGISTER;
+ v -> reg = jvm_alloc_register_untyped(p -> rf, t -> wide);
+ v -> type = t;
+}
+
+void
+jvm_init_param(gen_proc_t * p, gen_var_t * v, gen_type_t * t)
+{
+ v -> storage = JVM_STORAGE_LOCAL;
+ v -> reg = jvm_alloc_register_untyped(p -> rf, t -> wide);
+ v -> type = t;
}
void
-jvm_generate_and_init_var_param(gen_proc_t * p, gen_var_t * v, char * name, gen_type_t * t)
+jvm_init_var_param(gen_proc_t * p, gen_var_t * v, gen_type_t * t)
{
v -> storage = JVM_STORAGE_VARPTR;
- v -> reg = jvm_alloc_register_untyped(p -> rf, true);
+ v -> reg = jvm_alloc_register_untyped(p -> rf, true);
v -> type = t;
- jvm_generate(p, 0, 0, ".var %i is %s [%s from start to end", v -> reg, name, t -> desc);
- jvm_generate(p, 0, 0, ".var %i is __%s_offset I from start to end", v -> reg + 1, name);
}
void
}
void
-jvm_generate_param_initialization(gen_proc_t * p, gen_var_t * v)
+jvm_generate_named_local_var_initialization(gen_proc_t * p, gen_var_t * v, char * name)
{
- assert(v -> storage == JVM_STORAGE_REGISTER);
+ jvm_generate(p, 0, 0, ".var %i is %s %s from start to end", v -> reg, name, v -> type -> desc);
+}
+void
+jvm_generate_param_initialization(gen_proc_t * p, gen_var_t * v, char * name)
+{
int old_reg = v -> reg;
bool wide = v -> type -> wide;
int cell_size = v -> type -> cell_size;
char prefix = v -> type -> prefix;
char * desc = v -> type -> desc;
- v -> storage = JVM_STORAGE_LOCAL;
+ jvm_generate(p, 0, 0, ".var %i is %s %s from start to end", old_reg, name, desc);
v -> reg = jvm_alloc_register_untyped(p -> rf, wide);
jvm_generate(p, 0, 1, "iconst_1");
jvm_generate(p, 0, cell_size, "%cload %i", prefix, old_reg);
jvm_generate(p, 1 + 1 + cell_size, 0, "%castore", prefix);
}
+
+void
+jvm_generate_var_param_initialization(gen_proc_t * p, gen_var_t * v, char * name)
+{
+ jvm_generate(p, 0, 0, ".var %i is %s [%s from start to end", v -> reg, name, v -> type -> desc);
+ jvm_generate(p, 0, 0, ".var %i is __%s_offset I from start to end", v -> reg + 1, name);
+}