-
- case ICMD_GETSTATIC: /* ... ==> ..., value */
-
- if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- uf = iptr->sx.s23.s3.uf;
- fieldtype = uf->fieldref->parseddesc.fd->type;
- disp = dseg_add_unique_address(cd, NULL);
-
-/* PROFILE_CYCLE_STOP; */
-
- patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
-
-/* PROFILE_CYCLE_START; */
- }
- else {
- 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)) {
- PROFILE_CYCLE_STOP;
-
- patcher_add_patch_ref(jd, PATCHER_initialize_class, fi->class, 0);
-
- PROFILE_CYCLE_START;
- }
- }
-
- M_ALD_DSEG(REG_ITMP1, disp);
-
- switch (fieldtype) {
- case TYPE_INT:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP2);
- M_ILD(d, REG_ITMP1, 0);
- break;
- case TYPE_LNG:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP23_PACKED);
- M_LLD(d, REG_ITMP1, 0);
- break;
- case TYPE_ADR:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP2);
- M_ALD(d, REG_ITMP1, 0);
- break;
- case TYPE_FLT:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_FLD(d, REG_ITMP1, 0);
- break;
- case TYPE_DBL:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_DLD(d, REG_ITMP1, 0);
- break;
- }
-
- emit_store_dst(jd, iptr, d);
-
- break;
-
- case ICMD_PUTSTATIC: /* ..., value ==> ... */
-
- if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
- uf = iptr->sx.s23.s3.uf;
- fieldtype = uf->fieldref->parseddesc.fd->type;
- disp = dseg_add_unique_address(cd, uf);
-
- patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
- }
- else {
- 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)) {
- PROFILE_CYCLE_STOP;
- patcher_add_patch_ref(jd, PATCHER_initialize_class, fi->class, disp);
- PROFILE_CYCLE_START;
- }
- }
-
- M_ALD_DSEG(REG_ITMP1, disp);
- switch (fieldtype) {
- case TYPE_INT:
- s1 = emit_load_s1(jd, iptr, REG_ITMP2);
- M_IST(s1, REG_ITMP1, 0);
- break;
- case TYPE_LNG:
- s1 = emit_load_s1(jd, iptr, REG_ITMP23_PACKED);
- M_LST(s1, REG_ITMP1, 0);
- break;
- case TYPE_ADR:
- s1 = emit_load_s1(jd, iptr, REG_ITMP2);
- M_AST(s1, REG_ITMP1, 0);
- break;
- case TYPE_FLT:
- s1 = emit_load_s1(jd, iptr, REG_FTMP2);
- M_FST(s1, REG_ITMP1, 0);
- break;
- case TYPE_DBL:
- s1 = emit_load_s1(jd, iptr, REG_FTMP2);
- M_DST(s1, REG_ITMP1, 0);
- break;
- }
- break;
-