int xfer = mips_stack_argsize (tdep);
int xfer = mips_stack_argsize (gdbarch);
mips_o32_return_value (struct gdbarch *gdbarch, struct type *type,		       struct regcache *regcache,		       void *readbuf, const void *writebuf){  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);  if (TYPE_CODE (type) == TYPE_CODE_STRUCT      || TYPE_CODE (type) == TYPE_CODE_UNION      || TYPE_CODE (type) == TYPE_CODE_ARRAY)    return RETURN_VALUE_STRUCT_CONVENTION;  else if (TYPE_CODE (type) == TYPE_CODE_FLT	   && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)    {      /* A single-precision floating-point value.  It fits in the         least significant part of FP0.  */      if (mips_debug)	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");      mips_xfer_register (regcache,			  NUM_REGS + mips_regnum (current_gdbarch)->fp0,			  TYPE_LENGTH (type),			  TARGET_BYTE_ORDER, readbuf, writebuf, 0);      return RETURN_VALUE_REGISTER_CONVENTION;    }  else if (TYPE_CODE (type) == TYPE_CODE_FLT	   && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)    {      /* A double-precision floating-point value.  The most         significant part goes in FP1, and the least significant in         FP0.  */      if (mips_debug)	fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");      switch (TARGET_BYTE_ORDER)	{	case BFD_ENDIAN_LITTLE:	  mips_xfer_register (regcache,			      NUM_REGS + mips_regnum (current_gdbarch)->fp0 +			      0, 4, TARGET_BYTE_ORDER, readbuf, writebuf, 0);	  mips_xfer_register (regcache,			      NUM_REGS + mips_regnum (current_gdbarch)->fp0 +			      1, 4, TARGET_BYTE_ORDER, readbuf, writebuf, 4);	  break;	case BFD_ENDIAN_BIG:	  mips_xfer_register (regcache,			      NUM_REGS + mips_regnum (current_gdbarch)->fp0 +			      1, 4, TARGET_BYTE_ORDER, readbuf, writebuf, 0);	  mips_xfer_register (regcache,			      NUM_REGS + mips_regnum (current_gdbarch)->fp0 +			      0, 4, TARGET_BYTE_ORDER, readbuf, writebuf, 4);	  break;	default:	  internal_error (__FILE__, __LINE__, "bad switch");	}      return RETURN_VALUE_REGISTER_CONVENTION;    }#if 0  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT	   && TYPE_NFIELDS (type) <= 2	   && TYPE_NFIELDS (type) >= 1	   && ((TYPE_NFIELDS (type) == 1		&& (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))		    == TYPE_CODE_FLT))	       || (TYPE_NFIELDS (type) == 2		   && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))		       == TYPE_CODE_FLT)		   && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1))		       == TYPE_CODE_FLT)))	   && tdep->mips_fpu_type != MIPS_FPU_NONE)    {      /* A struct that contains one or two floats.  Each value is part         in the least significant part of their floating point         register..  */      bfd_byte reg[MAX_REGISTER_SIZE];      int regnum;      int field;      for (field = 0, regnum = mips_regnum (current_gdbarch)->fp0;	   field < TYPE_NFIELDS (type); field++, regnum += 2)	{	  int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])			/ TARGET_CHAR_BIT);	  if (mips_debug)	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",				offset);	  mips_xfer_register (regcache, NUM_REGS + regnum,			      TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),			      TARGET_BYTE_ORDER, readbuf, writebuf, offset);	}      return RETURN_VALUE_REGISTER_CONVENTION;    }#endif#if 0  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT	   || TYPE_CODE (type) == TYPE_CODE_UNION)    {      /* A structure or union.  Extract the left justified value,         regardless of the byte order.  I.e. DO NOT USE         mips_xfer_lower.  */      int offset;      int regnum;      for (offset = 0, regnum = V0_REGNUM;	   offset < TYPE_LENGTH (type);	   offset += register_size (current_gdbarch, regnum), regnum++)	{	  int xfer = register_size (current_gdbarch, regnum);	  if (offset + xfer > TYPE_LENGTH (type))	    xfer = TYPE_LENGTH (type) - offset;	  if (mips_debug)	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",				offset, xfer, regnum);	  mips_xfer_register (regcache, NUM_REGS + regnum, xfer,			      BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);	}      return RETURN_VALUE_REGISTER_CONVENTION;    }#endif  else    {      /* A scalar extract each part but least-significant-byte         justified.  o32 thinks registers are 4 byte, regardless of         the ISA.  mips_stack_argsize controls this.  */      int offset;      int regnum;      for (offset = 0, regnum = V0_REGNUM;	   offset < TYPE_LENGTH (type);	   offset += mips_stack_argsize (tdep), regnum++)	{	  int xfer = mips_stack_argsize (tdep);	  if (offset + xfer > TYPE_LENGTH (type))	    xfer = TYPE_LENGTH (type) - offset;	  if (mips_debug)	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",				offset, xfer, regnum);	  mips_xfer_register (regcache, NUM_REGS + regnum, xfer,			      TARGET_BYTE_ORDER, readbuf, writebuf, offset);	}      return RETURN_VALUE_REGISTER_CONVENTION;    }}