- 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);
-
- 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->clazz)) {
- patcher_add_patch_ref(jd, PATCHER_initialize_class,
- fi->clazz, 0);
- }
- }
-
- M_DSEG_LOAD(REG_ITMP3, disp);
- switch (fieldtype) {
- case TYPE_INT:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
-#endif
- case TYPE_ADR:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP1);
- M_ILD_INTERN(d, REG_ITMP3, 0);
- break;
- case TYPE_LNG:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_DBL:
-#endif
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP12_PACKED);
- M_LLD_INTERN(d, REG_ITMP3, 0);
- break;
-#if !defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_FLD_INTERN(d, REG_ITMP3, 0);
- break;
- case TYPE_DBL:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_DLD_INTERN(d, REG_ITMP3, 0);
- break;
-#endif
- default:
- assert(0);
- }
- 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, NULL);
-
- 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->clazz)) {
- patcher_add_patch_ref(jd, PATCHER_initialize_class,
- fi->clazz, 0);
- }
- }
-
- M_DSEG_LOAD(REG_ITMP3, disp);
- switch (fieldtype) {
- case TYPE_INT:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
-#endif
- case TYPE_ADR:
- s1 = emit_load_s1(jd, iptr, REG_ITMP1);
- M_IST_INTERN(s1, REG_ITMP3, 0);
- break;
- case TYPE_LNG:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_DBL:
-#endif
- s1 = emit_load_s1(jd, iptr, REG_ITMP12_PACKED);
- M_LST_INTERN(s1, REG_ITMP3, 0);
- break;
-#if !defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
- s1 = emit_load_s1(jd, iptr, REG_FTMP1);
- M_FST_INTERN(s1, REG_ITMP3, 0);
- break;
- case TYPE_DBL:
- s1 = emit_load_s1(jd, iptr, REG_FTMP1);
- M_DST_INTERN(s1, REG_ITMP3, 0);
- break;
-#endif
- default:
- assert(0);
- }
- break;
-