-
- 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, uf);
-
-/* 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->clazz)) {
- PROFILE_CYCLE_STOP;
-
- patcher_add_patch_ref(jd, PATCHER_initialize_class,
- fi->clazz, 0);
-
- PROFILE_CYCLE_START;
- }
- }
-
- /* This approach is much faster than moving the field
- address inline into a register. */
-
- M_ALD(REG_ITMP1, RIP, 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:
- case TYPE_ADR:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP2);
- M_LLD(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);
-
-/* 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->clazz)) {
- PROFILE_CYCLE_STOP;
-
- patcher_add_patch_ref(jd, PATCHER_initialize_class,
- fi->clazz, 0);
-
- PROFILE_CYCLE_START;
- }
- }
-
- /* This approach is much faster than moving the field
- address inline into a register. */
-
- M_ALD(REG_ITMP1, RIP, disp);
-
- switch (fieldtype) {
- case TYPE_INT:
- s1 = emit_load_s1(jd, iptr, REG_ITMP2);
- M_IST(s1, REG_ITMP1, 0);
- break;
- case TYPE_LNG:
- case TYPE_ADR:
- s1 = emit_load_s1(jd, iptr, REG_ITMP2);
- M_LST(s1, REG_ITMP1, 0);
- break;
- case TYPE_FLT:
- s1 = emit_load_s1(jd, iptr, REG_FTMP1);
- M_FST(s1, REG_ITMP1, 0);
- break;
- case TYPE_DBL:
- s1 = emit_load_s1(jd, iptr, REG_FTMP1);
- M_DST(s1, REG_ITMP1, 0);
- break;
- }
- break;
-