projects
/
cacao.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merged revisions 8245-8298 via svnmerge from
[cacao.git]
/
src
/
vm
/
jit
/
arm
/
codegen.c
diff --git
a/src/vm/jit/arm/codegen.c
b/src/vm/jit/arm/codegen.c
index 9b9125a87d3e9567a798492904c8dcfe9bbc5187..3c4130da18703dad7b4d8e9a5376b8bec76b7cb2 100644
(file)
--- a/
src/vm/jit/arm/codegen.c
+++ b/
src/vm/jit/arm/codegen.c
@@
-22,7
+22,7
@@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: codegen.c 82
45 2007-07-31 09:55:04
Z michi $
+ $Id: codegen.c 82
99 2007-08-13 08:41:18
Z michi $
*/
*/
@@
-41,6
+41,7
@@
#include "mm/memory.h"
#include "mm/memory.h"
+#include "native/localref.h"
#include "native/native.h"
#include "threads/lock-common.h"
#include "native/native.h"
#include "threads/lock-common.h"
@@
-89,8
+90,6
@@
bool codegen_emit(jitdata *jd)
basicblock *bptr;
instruction *iptr;
exception_entry *ex;
basicblock *bptr;
instruction *iptr;
exception_entry *ex;
- s4 fieldtype;
- s4 varindex;
s4 spilledregs_num;
s4 savedregs_num;
s4 spilledregs_num;
s4 savedregs_num;
@@
-101,6
+100,10
@@
bool codegen_emit(jitdata *jd)
unresolved_method *um;
builtintable_entry *bte;
methoddesc *md;
unresolved_method *um;
builtintable_entry *bte;
methoddesc *md;
+ fieldinfo *fi;
+ unresolved_field *uf;
+ int fieldtype;
+ int varindex;
/* get required compiler data */
/* get required compiler data */
@@
-1374,11
+1377,9
@@
bool codegen_emit(jitdata *jd)
case ICMD_GETSTATIC: /* ... ==> ..., value */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
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;
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);
patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
@@
-1386,9
+1387,9
@@
bool codegen_emit(jitdata *jd)
M_NOP;
}
else {
M_NOP;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
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 (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
patcher_add_patch_ref(jd, PATCHER_initialize_class,
@@
-1397,8
+1398,6
@@
bool codegen_emit(jitdata *jd)
if (opt_showdisassemble)
M_NOP;
}
if (opt_showdisassemble)
M_NOP;
}
-
- disp = dseg_add_address(cd, &(fi->value));
}
M_DSEG_LOAD(REG_ITMP3, disp);
}
M_DSEG_LOAD(REG_ITMP3, disp);
@@
-1437,11
+1436,9
@@
bool codegen_emit(jitdata *jd)
case ICMD_PUTSTATIC: /* ..., value ==> ... */
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
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;
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);
patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
@@
-1449,9
+1446,9
@@
bool codegen_emit(jitdata *jd)
M_NOP;
}
else {
M_NOP;
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
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 (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
patcher_add_patch_ref(jd, PATCHER_initialize_class,
@@
-1460,8
+1457,6
@@
bool codegen_emit(jitdata *jd)
if (opt_showdisassemble)
M_NOP;
}
if (opt_showdisassemble)
M_NOP;
}
-
- disp = dseg_add_address(cd, &(fi->value));
}
M_DSEG_LOAD(REG_ITMP3, disp);
}
M_DSEG_LOAD(REG_ITMP3, disp);
@@
-1503,13
+1498,12
@@
bool codegen_emit(jitdata *jd)
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
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;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
}
else {
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = fi->offset;
}
fieldtype = fi->type;
disp = fi->offset;
}
@@
-1521,14
+1515,13
@@
bool codegen_emit(jitdata *jd)
#endif
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
#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;
patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
if (opt_showdisassemble)
M_NOP;
-
- disp = 0;
}
switch (fieldtype) {
}
switch (fieldtype) {
@@
-1569,13
+1562,12
@@
bool codegen_emit(jitdata *jd)
emit_nullpointer_check(cd, iptr, s1);
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
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;
fieldtype = uf->fieldref->parseddesc.fd->type;
+ disp = 0;
}
else {
}
else {
- fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
+ fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = fi->offset;
}
fieldtype = fi->type;
disp = fi->offset;
}
@@
-1611,14
+1603,13
@@
bool codegen_emit(jitdata *jd)
}
if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
}
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;
patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
if (opt_showdisassemble)
M_NOP;
-
- disp = 0;
}
switch (fieldtype) {
}
switch (fieldtype) {
@@
-2334,7
+2325,7
@@
bool codegen_emit(jitdata *jd)
/* implicit null-pointer check */
M_LDR_INTERN(REG_METHODPTR, REG_A0,
/* implicit null-pointer check */
M_LDR_INTERN(REG_METHODPTR, REG_A0,
- OFFSET(java_object
header
, vftbl));
+ OFFSET(java_object
_t
, vftbl));
M_LDR_INTERN(REG_PV, REG_METHODPTR, s1);
/* generate the actual call */
M_LDR_INTERN(REG_PV, REG_METHODPTR, s1);
/* generate the actual call */
@@
-2363,7
+2354,7
@@
bool codegen_emit(jitdata *jd)
/* implicit null-pointer check */
M_LDR_INTERN(REG_METHODPTR, REG_A0,
/* implicit null-pointer check */
M_LDR_INTERN(REG_METHODPTR, REG_A0,
- OFFSET(java_object
header
, vftbl));
+ OFFSET(java_object
_t
, vftbl));
M_LDR_INTERN(REG_METHODPTR, REG_METHODPTR, s1);
M_LDR_INTERN(REG_PV, REG_METHODPTR, s2);
M_LDR_INTERN(REG_METHODPTR, REG_METHODPTR, s1);
M_LDR_INTERN(REG_PV, REG_METHODPTR, s2);
@@
-2488,7
+2479,7
@@
bool codegen_emit(jitdata *jd)
emit_label_beq(cd, BRANCH_LABEL_3);
}
emit_label_beq(cd, BRANCH_LABEL_3);
}
- M_LDR_INTERN(REG_ITMP2, s1, OFFSET(java_object
header
, vftbl));
+ M_LDR_INTERN(REG_ITMP2, s1, OFFSET(java_object
_t
, vftbl));
M_LDR_INTERN(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, interfacetablelength));
/* we put unresolved or non-immediate superindices onto dseg */
M_LDR_INTERN(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, interfacetablelength));
/* we put unresolved or non-immediate superindices onto dseg */
@@
-2507,7
+2498,7
@@
bool codegen_emit(jitdata *jd)
things differently here! */
if ((super == NULL) || !IS_IMM(superindex)) {
things differently here! */
if ((super == NULL) || !IS_IMM(superindex)) {
- M_LDR_INTERN(REG_ITMP3, s1, OFFSET(java_object
header
, vftbl));
+ M_LDR_INTERN(REG_ITMP3, s1, OFFSET(java_object
_t
, vftbl));
/* this assumes something */
assert(OFFSET(vftbl_t, interfacetable[0]) == 0);
/* this assumes something */
assert(OFFSET(vftbl_t, interfacetable[0]) == 0);
@@
-2557,7
+2548,7
@@
bool codegen_emit(jitdata *jd)
emit_label_beq(cd, BRANCH_LABEL_5);
}
emit_label_beq(cd, BRANCH_LABEL_5);
}
- M_LDR_INTERN(REG_ITMP2, s1, OFFSET(java_object
header
, vftbl));
+ M_LDR_INTERN(REG_ITMP2, s1, OFFSET(java_object
_t
, vftbl));
M_DSEG_LOAD(REG_ITMP3, disp);
CODEGEN_CRITICAL_SECTION_START;
M_DSEG_LOAD(REG_ITMP3, disp);
CODEGEN_CRITICAL_SECTION_START;
@@
-2694,7
+2685,7
@@
bool codegen_emit(jitdata *jd)
emit_label_beq(cd, BRANCH_LABEL_3);
}
emit_label_beq(cd, BRANCH_LABEL_3);
}
- M_LDR_INTERN(REG_ITMP1, s1, OFFSET(java_object
header
, vftbl));
+ M_LDR_INTERN(REG_ITMP1, s1, OFFSET(java_object
_t
, vftbl));
M_LDR_INTERN(REG_ITMP3,
REG_ITMP1, OFFSET(vftbl_t, interfacetablelength));
M_LDR_INTERN(REG_ITMP3,
REG_ITMP1, OFFSET(vftbl_t, interfacetablelength));
@@
-2768,7
+2759,7
@@
bool codegen_emit(jitdata *jd)
emit_label_beq(cd, BRANCH_LABEL_5);
}
emit_label_beq(cd, BRANCH_LABEL_5);
}
- M_LDR_INTERN(REG_ITMP1, s1, OFFSET(java_object
header
, vftbl));
+ M_LDR_INTERN(REG_ITMP1, s1, OFFSET(java_object
_t
, vftbl));
M_DSEG_LOAD(REG_ITMP2, disp);
CODEGEN_CRITICAL_SECTION_START;
M_DSEG_LOAD(REG_ITMP2, disp);
CODEGEN_CRITICAL_SECTION_START;