(vm/global.h): Likewise.
(field_load): Allocate value memory only for static and final fields.
* src/vmcore/field.h (fieldinfo): Made value a pointer.
* src/vmcore/loader.c (load_class_from_classbuffer): Allocate
fieldinfo's on the C heap.
* src/native/jni.c: fieldinfo->value is now a pointer.
* src/native/vm/sun_misc_Unsafe.c: Likewise.
* src/native/vm/gnu/java_lang_reflect_Field.c: Likewise.
* src/vm/jit/alpha/codegen.c,
src/vm/jit/alpha/patcher.c,
src/vm/jit/arm/codegen.c,
src/vm/jit/arm/patcher.c,
src/vm/jit/i386/codegen.c,
src/vm/jit/i386/patcher.c,
src/vm/jit/m68k/codegen.c,
src/vm/jit/m68k/patcher.c,
src/vm/jit/mips/codegen.c,
src/vm/jit/mips/patcher.c,
src/vm/jit/powerpc/codegen.c,
src/vm/jit/powerpc/patcher.c,
src/vm/jit/powerpc64/codegen.c,
src/vm/jit/powerpc64/patcher.c,
src/vm/jit/s390/codegen.c,
src/vm/jit/s390/patcher.c,
src/vm/jit/sparc64/codegen.c,
src/vm/jit/sparc64/patcher.c,
src/vm/jit/x86_64/codegen.c,
src/vm/jit/x86_64/patcher.c: Likewise.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: jni.c 8221 2007-07-22 19:31:41Z twisti $
+ $Id: jni.c 8268 2007-08-07 13:24:43Z twisti $
*/
/* accessing instance fields macros *******************************************/
#define SET_FIELD(o,type,f,value) \
- *((type *) ((ptrint) (o) + (ptrint) ((fieldinfo *) (f))->offset)) = (type) (value)
+ *((type *) (((intptr_t) (o)) + ((intptr_t) ((fieldinfo *) (f))->offset))) = (type) (value)
#define GET_FIELD(o,type,f) \
- *((type *) ((ptrint) (o) + (ptrint) ((fieldinfo *) (f))->offset))
+ *((type *) (((intptr_t) (o)) + ((intptr_t) ((fieldinfo *) (f))->offset)))
/* some forward declarations **************************************************/
if (!initialize_class(c))
return NULL;
- return _Jv_JNI_NewLocalRef(env, f->value.a);
+ return _Jv_JNI_NewLocalRef(env, f->value->a);
}
if (!initialize_class(c))
return false;
- return f->value.i;
+ return f->value->i;
}
if (!initialize_class(c))
return 0;
- return f->value.i;
+ return f->value->i;
}
if (!initialize_class(c))
return 0;
- return f->value.i;
+ return f->value->i;
}
if (!initialize_class(c))
return 0;
- return f->value.i;
+ return f->value->i;
}
if (!initialize_class(c))
return 0;
- return f->value.i;
+ return f->value->i;
}
if (!initialize_class(c))
return 0;
- return f->value.l;
+ return f->value->l;
}
if (!initialize_class(c))
return 0.0;
- return f->value.f;
+ return f->value->f;
}
if (!initialize_class(c))
return 0.0;
- return f->value.d;
+ return f->value->d;
}
if (!initialize_class(c))
return;
- f->value.a = value;
+ f->value->a = value;
}
if (!initialize_class(c))
return;
- f->value.i = value;
+ f->value->i = value;
}
if (!initialize_class(c))
return;
- f->value.i = value;
+ f->value->i = value;
}
if (!initialize_class(c))
return;
- f->value.i = value;
+ f->value->i = value;
}
if (!initialize_class(c))
return;
- f->value.i = value;
+ f->value->i = value;
}
if (!initialize_class(c))
return;
- f->value.i = value;
+ f->value->i = value;
}
if (!initialize_class(c))
return;
- f->value.l = value;
+ f->value->l = value;
}
if (!initialize_class(c))
return;
- f->value.f = value;
+ f->value->f = value;
}
if (!initialize_class(c))
return;
- f->value.d = value;
+ f->value->d = value;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: java_lang_reflect_Field.c 8262 2007-08-06 12:44:01Z panzi $
+ $Id: java_lang_reflect_Field.c 8268 2007-08-07 13:24:43Z twisti $
*/
if (!initialize_class(c))
return NULL;
- /* return value address */
+ /* return value pointer */
- return &(f->value);
+ return f->value;
} else {
/* obj is required for not-static fields */
}
if (builtin_instanceof((java_objectheader *) o, c))
- return (void *) ((intptr_t) o + f->offset);
+ return (void *) (((intptr_t) o) + f->offset);
}
/* exception path */
c = (classinfo *) field->clazz;
f = &(c->fields[field->slot]);
- return (int64_t) (intptr_t) &(f->value);
+ return (int64_t) (intptr_t) f->value;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8211 2007-07-18 19:52:23Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class, fi->class,
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class, fi->class,
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class, fi->class,
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 8186 2007-07-05 23:48:16Z michi $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
/* patch the field value's address */
- *((ptrint *) datap) = (ptrint) &(fi->value);
+ *((intptr_t *) datap) = (intptr_t) fi->value;
return true;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8211 2007-07-18 19:52:23Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
basicblock *bptr;
instruction *iptr;
exception_entry *ex;
- s4 fieldtype;
- s4 varindex;
s4 spilledregs_num;
s4 savedregs_num;
unresolved_method *um;
builtintable_entry *bte;
methoddesc *md;
+ fieldinfo *fi;
+ unresolved_field *uf;
+ int fieldtype;
+ int varindex;
/* get required compiler data */
case ICMD_GETSTATIC: /* ... ==> ..., value */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
-
- disp = dseg_add_unique_address(cd, NULL);
+ disp = dseg_add_unique_address(cd, NULL);
patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
M_NOP;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
patcher_add_patch_ref(jd, PATCHER_initialize_class,
if (opt_showdisassemble)
M_NOP;
}
-
- disp = dseg_add_address(cd, &(fi->value));
}
M_DSEG_LOAD(REG_ITMP3, disp);
case ICMD_PUTSTATIC: /* ..., value ==> ... */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
-
- disp = dseg_add_unique_address(cd, NULL);
+ disp = dseg_add_unique_address(cd, NULL);
patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
M_NOP;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
patcher_add_patch_ref(jd, PATCHER_initialize_class,
if (opt_showdisassemble)
M_NOP;
}
-
- disp = dseg_add_address(cd, &(fi->value));
}
M_DSEG_LOAD(REG_ITMP3, disp);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = fi->offset;
}
#endif
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
+ /* XXX REMOVE ME */
+ uf = iptr->sx.s23.s3.uf;
patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
if (opt_showdisassemble)
M_NOP;
-
- disp = 0;
}
switch (fieldtype) {
emit_nullpointer_check(cd, iptr, s1);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = fi->offset;
}
}
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
+ /* XXX REMOVE ME */
+ uf = iptr->sx.s23.s3.uf;
patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
if (opt_showdisassemble)
M_NOP;
-
- disp = 0;
}
switch (fieldtype) {
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 8160 2007-06-28 01:52:19Z michi $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
- *((ptrint *) datap) = (ptrint) &(fi->value);
+ *((intptr_t *) datap) = (intptr_t) fi->value;
return true;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8211 2007-07-18 19:52:23Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include <stdio.h>
#include "vm/types.h"
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = (ptrint) &(fi->value);
+ disp = (intptr_t) fi->value;
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_addpatchref(cd, PATCHER_clinit, fi->class, 0);
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = (ptrint) &(fi->value);
+ disp = (intptr_t) fi->value;
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_addpatchref(cd, PATCHER_clinit, fi->class, 0);
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = (ptrint) &(fi->value);
+ disp = (intptr_t) fi->value;
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_addpatchref(cd, PATCHER_clinit, fi->class, 0);
emit_nullpointer_check(cd, iptr, s1);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
codegen_addpatchref(cd, PATCHER_getfield,
iptr->sx.s23.s3.uf, 0);
-
- disp = 0;
-
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = fi->offset;
+ disp = fi->offset;
}
switch (fieldtype) {
/* must be done here because of code patching */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
}
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
- codegen_addpatchref(cd, PATCHER_putfield, uf, 0);
-
+ /* XXX */
+ uf = iptr->sx.s23.s3.uf;
disp = 0;
+ codegen_addpatchref(cd, PATCHER_putfield, uf, 0);
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ /* XXX */
+ fi = iptr->sx.s23.s3.fmiref->p.field;
disp = fi->offset;
}
emit_nullpointer_check(cd, iptr, s1);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
codegen_addpatchref(cd, PATCHER_putfieldconst,
uf, 0);
-
- disp = 0;
-
}
- else
- {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ else {
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = fi->offset;
+ disp = fi->offset;
}
-
switch (fieldtype) {
case TYPE_INT:
case TYPE_ADR:
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 8143 2007-06-26 15:47:43Z twisti $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
+
+#include <stdint.h>
+
#include "vm/types.h"
#include "vm/jit/i386/codegen.h"
/* patch the field value's address */
- *((ptrint *) (ra + 1)) = (ptrint) &(fi->value);
+ *((intptr_t *) (ra + 1)) = (intptr_t) fi->value;
return true;
}
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "md-abi.h"
#include "md-os.h"
/* MEMORY *************************************************************/
- case ICMD_GETSTATIC:
- if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
+
+ case ICMD_GETSTATIC: /* ... ==> ..., value */
+
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
- codegen_addpatchref(cd, PATCHER_get_putstatic, uf, 0);
- } else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
+ disp = 0;
+ codegen_addpatchref(cd, PATCHER_get_putstatic, uf, 0);
+ }
+ else {
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
+ disp = (intptr_t) fi->value;
+
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
- codegen_addpatchref(cd, PATCHER_initialize_class, fi->class, 0);
+ codegen_addpatchref(cd, PATCHER_initialize_class, fi->class,
+ 0);
}
-
- disp = (ptrint) &(fi->value);
}
+
M_AMOV_IMM(disp, REG_ATMP1);
switch (fieldtype) {
#if defined(ENABLE_SOFTFLOAT)
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
codegen_addpatchref(cd, PATCHER_get_putstatic, uf, 0);
- } else {
+ }
+ else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = &(fi->value);
+ disp = (intptr_t) fi->value;
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
- codegen_addpatchref(cd, PATCHER_initialize_class, fi->class, 0);
+ codegen_addpatchref(cd, PATCHER_initialize_class, fi->class,
+ 0);
}
M_AMOV_IMM(disp, REG_ATMP1);
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
if (opt_shownops) disp += PATCHER_CALL_SIZE;
assert(*((uint16_t*)(disp)) == 0x247c);
- *((ptrint *) (disp+2)) = (ptrint) &(fi->value);
+ *((intptr_t *) (disp+2)) = (intptr_t) fi->value;
/* synchronize inst cache */
md_icacheflush(disp+2, SIZEOF_VOID_P);
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8264 2007-08-06 16:02:28Z twisti $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class,
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class,
break;
case ICMD_PUTSTATICCONST: /* ... ==> ... */
- /* val = value (in current instruction) */
- /* following NOP) */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
uf = iptr->sx.s23.s3.uf;
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class,
emit_nullpointer_check(cd, iptr, s1);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- unresolved_field *uf = iptr->sx.s23.s3.uf;
-
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
disp = 0;
patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = fi->offset;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 8264 2007-08-06 16:02:28Z twisti $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
- *((ptrint *) datap) = (ptrint) &(fi->value);
+ *((intptr_t *) datap) = (intptr_t) fi->value;
/* synchronize data cache */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8216 2007-07-19 13:51:21Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class,
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
patcher_add_patch_ref(jd, PATCHER_initialize_class,
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 8216 2007-07-19 13:51:21Z michi $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
- *((ptrint *) datap) = (ptrint) &(fi->value);
+ *((intptr_t *) datap) = (intptr_t) fi->value;
/* synchronize data cache */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8211 2007-07-18 19:52:23Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include <stdio.h>
#include <signal.h>
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
codegen_addpatchref(cd, PATCHER_clinit, fi->class, disp);
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
codegen_addpatchref(cd, PATCHER_clinit, fi->class, disp);
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 7909 2007-05-15 10:32:16Z tbfg $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
- *((ptrint *) (pv + disp)) = (ptrint) &(fi->value);
+ *((intptr_t *) (pv + disp)) = (intptr_t) fi->value;
/* synchronize data cache */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8251 2007-08-01 15:26:59Z pm $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include <stdio.h>
-
#include "native/jni.h"
#include "native/native.h"
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
PROFILE_CYCLE_STOP;
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
PROFILE_CYCLE_STOP;
Changes: Peter Molnar
- $Id: patcher.c 8251 2007-08-01 15:26:59Z pm $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "mm/memory.h"
#include "native/native.h"
/* patch the field value's address */
- *((ptrint *) datap) = (ptrint) &(fi->value);
+ *((intptr_t *) datap) = (intptr_t) fi->value;
return true;
}
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include <stdio.h>
#include "vm/types.h"
case ICMD_GETSTATIC: /* ... ==> ..., value */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- uf = iptr->sx.s23.s3.uf;
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
disp = dseg_add_unique_address(cd, uf);
codegen_add_patch_ref(cd, PATCHER_get_putstatic, uf, disp);
}
else {
- fi = iptr->sx.s23.s3.fmiref->p.field;
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_add_patch_ref(cd, PATCHER_clinit, fi->class, disp);
case ICMD_PUTSTATIC: /* ..., value ==> ... */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- uf = iptr->sx.s23.s3.uf;
+ uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
disp = dseg_add_unique_address(cd, uf);
codegen_add_patch_ref(cd, PATCHER_get_putstatic, uf, disp);
}
else {
- fi = iptr->sx.s23.s3.fmiref->p.field;
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_add_patch_ref(cd, PATCHER_clinit, fi->class, disp);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
uf = iptr->sx.s23.s3.uf;
fieldtype = uf->fieldref->parseddesc.fd->type;
- disp = dseg_add_unique_address(cd, uf);
+ disp = dseg_add_unique_address(cd, uf);
codegen_add_patch_ref(cd, PATCHER_get_putstatic, uf, disp);
}
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_add_patch_ref(cd, PATCHER_clinit, fi->class, disp);
#include "config.h"
#include <assert.h>
+#include <stdint.h>
#include "vm/types.h"
/* patch the field value's address */
- *((ptrint *) (pv + disp)) = (ptrint) &(fi->value);
+ *((intptr_t *) (pv + disp)) = (intptr_t) fi->value;
/* synchronize data cache */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 8211 2007-07-18 19:52:23Z michi $
+ $Id: codegen.c 8268 2007-08-07 13:24:43Z twisti $
*/
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
disp = disp + -((cd->mcodeptr + 7) - cd->mcodebase);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
disp = disp + -((cd->mcodeptr + 7) - cd->mcodebase);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
- disp = dseg_add_address(cd, &(fi->value));
+ disp = dseg_add_address(cd, fi->value);
disp = disp + -((cd->mcodeptr + 7) - cd->mcodebase);
if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: patcher.c 7596 2007-03-28 21:05:53Z twisti $
+ $Id: patcher.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "config.h"
+
+#include <stdint.h>
+
#include "vm/types.h"
#include "vm/jit/x86_64/codegen.h"
/* patch the field value's address */
- *((ptrint *) (ra + 7 + disp)) = (ptrint) &(fi->value);
+ *((intptr_t *) (ra + 7 + disp)) = (intptr_t) fi->value;
return true;
}
byte = *(ra + 3);
if (byte == 0x24)
- *((u4 *) (ra + 4)) = (u4) (fi->offset);
+ *((int32_t *) (ra + 4)) = fi->offset;
else
- *((u4 *) (ra + 3)) = (u4) (fi->offset);
+ *((int32_t *) (ra + 3)) = fi->offset;
}
else {
/* check for special case: %rsp or %r12 as base register */
byte = *(ra + 5);
if (byte == 0x24)
- *((u4 *) (ra + 6)) = (u4) (fi->offset);
+ *((int32_t *) (ra + 6)) = fi->offset;
else
- *((u4 *) (ra + 5)) = (u4) (fi->offset);
+ *((int32_t *) (ra + 5)) = fi->offset;
}
return true;
/* handle special case when the base register is %r12 */
if (*(ra + 2) == 0x84) {
- *((u4 *) (ra + 4)) = (u4) (fi->offset);
- *((u4 *) (ra + 12 + 4)) = (u4) (fi->offset + 4);
+ *((uint32_t *) (ra + 4)) = fi->offset;
+ *((uint32_t *) (ra + 12 + 4)) = fi->offset + 4;
}
else {
- *((u4 *) (ra + 3)) = (u4) (fi->offset);
- *((u4 *) (ra + 11 + 3)) = (u4) (fi->offset + 4);
+ *((uint32_t *) (ra + 3)) = fi->offset;
+ *((uint32_t *) (ra + 11 + 3)) = fi->offset + 4;
}
}
else {
/* handle special case when the base register is %r12 */
if (*(ra + 2) == 0x84)
- *((u4 *) (ra + 4)) = (u4) (fi->offset);
+ *((uint32_t *) (ra + 4)) = fi->offset;
else
- *((u4 *) (ra + 3)) = (u4) (fi->offset);
+ *((uint32_t *) (ra + 3)) = fi->offset;
}
return true;
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: field.c 8249 2007-07-31 12:59:03Z panzi $
+ $Id: field.c 8268 2007-08-07 13:24:43Z twisti $
*/
#include "vm/types.h"
+#include "mm/memory.h"
+
#include "vm/exceptions.h"
+#include "vm/global.h"
#include "vm/stringlocal.h"
#include "vm/vm.h"
{
classinfo *c;
u4 attrnum, i;
- u4 jtype;
u4 pindex = field_load_NOVALUE; /* constantvalue_index */
utf *u;
+ /* Get class. */
+
c = cb->class;
+ f->class = c;
+
+ /* Get access flags. */
+
if (!suck_check_classbuffer_size(cb, 2 + 2 + 2))
return false;
f->flags = suck_u2(cb);
+ /* Get name. */
+
if (!(u = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
return false;
f->name = u;
+ /* Get descriptor. */
+
if (!(u = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8)))
return false;
/* data type */
- jtype = descriptor_to_basic_type(f->descriptor);
+ f->type = descriptor_to_basic_type(f->descriptor);
- f->class = c;
- f->type = jtype;
- f->offset = 0; /* offset from start of object */
+ /* For static-fields allocate memory for the value and set the
+ value to 0. */
- switch (f->type) {
- case TYPE_INT:
- f->value.i = 0;
- break;
+ if (f->flags & ACC_STATIC) {
+ switch (f->type) {
+ case TYPE_INT:
+ case TYPE_LNG:
+ case TYPE_FLT:
+ case TYPE_DBL:
+ f->value = NEW(imm_union);
+ break;
- case TYPE_FLT:
- f->value.f = 0.0;
- break;
+ case TYPE_ADR:
+#if defined(ENABLE_GC_CACAO)
+ f->value = NEW(imm_union);
+#else
+ f->value = GCNEW_UNCOLLECTABLE(imm_union, 1);
+#endif
+ break;
- case TYPE_DBL:
- f->value.d = 0.0;
- break;
+ default:
+ vm_abort("field_load: invalid field type %d", f->type);
+ }
- case TYPE_ADR:
- f->value.a = NULL;
- if (!(f->flags & ACC_STATIC))
- c->flags |= ACC_CLASS_HAS_POINTERS;
- break;
+ /* Set the field to zero, for float and double fields set the
+ correct 0.0 value. */
- case TYPE_LNG:
-#if U8_AVAILABLE
- f->value.l = 0;
-#else
- f->value.l.low = 0;
- f->value.l.high = 0;
-#endif
- break;
+ switch (f->type) {
+ case TYPE_INT:
+ case TYPE_LNG:
+ case TYPE_ADR:
+ f->value->l = 0;
+ break;
+
+ case TYPE_FLT:
+ f->value->f = 0.0;
+ break;
+
+ case TYPE_DBL:
+ f->value->d = 0.0;
+ break;
+ }
+ }
+ else {
+ /* For instance-fields set the offset to 0. */
+
+ f->offset = 0;
+
+ /* For final fields, which are not static, we need a value
+ structure. */
+
+ if (f->flags & ACC_FINAL) {
+ f->value = NEW(imm_union);
+ /* XXX hack */
+ f->value->l = 0;
+ }
+
+ switch (f->type) {
+ case TYPE_ADR:
+ c->flags |= ACC_CLASS_HAS_POINTERS;
+ break;
+ }
}
/* read attributes */
+
if (!suck_check_classbuffer_size(cb, 2))
return false;
attrnum = suck_u2(cb);
+
for (i = 0; i < attrnum; i++) {
if (!suck_check_classbuffer_size(cb, 2))
return false;
/* initialize field with value from constantpool */
- switch (jtype) {
+ switch (f->type) {
case TYPE_INT: {
constant_integer *ci;
if (!(ci = class_getconstant(c, pindex, CONSTANT_Integer)))
return false;
- f->value.i = ci->value;
+ f->value->i = ci->value;
}
break;
if (!(cl = class_getconstant(c, pindex, CONSTANT_Long)))
return false;
- f->value.l = cl->value;
+ f->value->l = cl->value;
}
break;
if (!(cf = class_getconstant(c, pindex, CONSTANT_Float)))
return false;
- f->value.f = cf->value;
+ f->value->f = cf->value;
}
break;
if (!(cd = class_getconstant(c, pindex, CONSTANT_Double)))
return false;
- f->value.d = cd->value;
+ f->value->d = cd->value;
}
break;
if (!(u = class_getconstant(c, pindex, CONSTANT_String)))
return false;
- /* create javastring from compressed utf8-string */
- f->value.a = literalstring_new(u);
+ /* Create Java-string from compressed UTF8-string. */
+
+ f->value->a = literalstring_new(u);
break;
default:
- vm_abort("field_load: invalid field type %d", jtype);
+ vm_abort("field_load: invalid field type %d", f->type);
}
}
#if defined(ENABLE_JAVASE)
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: field.h 8249 2007-07-31 12:59:03Z panzi $
+ $Id: field.h 8268 2007-08-07 13:24:43Z twisti $
*/
utf *signature; /* Signature attribute string */
typedesc *parseddesc;/* parsed descriptor */
- s4 offset; /* offset from start of object (instance variables) */
-
- imm_union value; /* storage for static values (class variables) */
+ int32_t offset; /* offset from start of object (instance variables) */
+ imm_union *value; /* storage for static values (class variables) */
};
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: loader.c 8249 2007-07-31 12:59:03Z panzi $
+ $Id: loader.c 8268 2007-08-07 13:24:43Z twisti $
*/
RT_TIMING_GET_TIME(time_setup);
/* load fields */
+
if (!suck_check_classbuffer_size(cb, 2))
goto return_exception;
c->fieldscount = suck_u2(cb);
-#if defined(ENABLE_GC_CACAO)
- c->fields = MNEW(fieldinfo, c->fieldscount);
+ c->fields = MNEW(fieldinfo, c->fieldscount);
+
MZERO(c->fields, fieldinfo, c->fieldscount);
-#else
- c->fields = GCNEW_UNCOLLECTABLE(fieldinfo, c->fieldscount);
-#endif
for (i = 0; i < c->fieldscount; i++) {
if (!field_load(cb, &(c->fields[i]), descpool))
RT_TIMING_GET_TIME(time_fields);
/* load methods */
+
if (!suck_check_classbuffer_size(cb, 2))
goto return_exception;
c->methodscount = suck_u2(cb);
- c->methods = MNEW(methodinfo, c->methodscount);
+ c->methods = MNEW(methodinfo, c->methodscount);
MZERO(c->methods, methodinfo, c->methodscount);