VM_Barriers.compileModifyCheck(asm, 4);
  protected final void emit_resolved_putfield(VM_FieldReference fieldRef) {    int fieldOffset = fieldRef.peekResolvedField().getOffset();    if (VM_Interface.NEEDS_WRITE_BARRIER && !fieldRef.getFieldContentsType().isPrimitiveType()) {      VM_Barriers.compilePutfieldBarrierImm(asm, fieldOffset);      asm.emitADD_Reg_Imm(SP, WORDSIZE*2);          // complete popping the value and reference    } else {      if (fieldRef.getSize() == 4) { // field is one word	asm.emitMOV_Reg_RegDisp(T0, SP, 0);           // T0 is the value to be stored	asm.emitMOV_Reg_RegDisp(S0, SP, 4);           // S0 is the object reference	asm.emitMOV_RegDisp_Reg(S0, fieldOffset, T0); // [S0+fieldOffset] <- T0	asm.emitADD_Reg_Imm(SP, WORDSIZE*2);          // complete popping the value and reference      } else { // field is two words (double or long)	if (VM.VerifyAssertions) VM._assert(fieldRef.getSize() == 8);	// TODO!! use 8-byte move if possible	asm.emitMOV_Reg_RegDisp(T0, SP, 0);                    // T0 is low part of the value to be stored	asm.emitMOV_Reg_RegDisp(T1, SP, 4);                    // T1 is high part of the value to be stored	asm.emitMOV_Reg_RegDisp(S0, SP, 8);                    // S0 is the object reference	asm.emitMOV_RegDisp_Reg(S0, fieldOffset, T0);          // store low part	asm.emitMOV_RegDisp_Reg(S0, fieldOffset+WORDSIZE, T1); // store high part	asm.emitADD_Reg_Imm(SP, WORDSIZE*3);                   // complete popping the values and reference      }    }  }