*** /tmp/,RCSt1Ky0BeN	Mon Jan 27 16:05:12 1992
--- mit/server/ddx/cfb/cfbblt.c		Mon Jan 27 16:05:12 1992
***************
*** 18,24 ****
  Author: Keith Packard
  
  */
! /* $XConsortium: cfbblt.c,v 1.7 91/05/06 15:13:21 rws Exp $ */
  
  #include	"X.h"
  #include	"Xmd.h"
--- 18,24 ----
  Author: Keith Packard
  
  */
! /* $XConsortium: cfbblt.c,v 1.8 91/12/11 21:57:39 eswu Exp $ */
  
  #include	"X.h"
  #include	"Xmd.h"
***************
*** 40,45 ****
--- 40,50 ----
  #endif
  #endif
  
+ #if defined(FAST_MEMCPY) && (MROP == Mcopy) && (PPW == 4)
+ #define DO_MEMCPY
+ #endif
+ 
+ 
  MROP_NAME(cfbDoBitblt)(pSrc, pDst, alu, prgnDst, pptSrc, planemask)
      DrawablePtr	    pSrc, pDst;
      int		    alu;
***************
*** 226,231 ****
--- 231,253 ----
  	{
  	    maskbits(pbox->x1, w, startmask, endmask, nlMiddle);
  	}
+ 
+ #ifdef DO_MEMCPY
+ 	/* If the src and dst scanline don't overlap, do forward case.  */
+ 
+ 	if ((xdir == 1) || (pptSrc->y != pbox->y1)
+ 		|| (pptSrc->x + w <= pbox->x1))
+ 	{
+ 	    char *psrc = (char *) psrcLine + pptSrc->x;
+ 	    char *pdst = (char *) pdstLine + pbox->x1;
+ 	    while (h--)
+ 	    {
+ 	    	memcpy(pdst, psrc, w);
+ 		pdst += widthDst << 2;
+ 		psrc += widthSrc << 2;
+ 	    }
+ 	}
+ #else /* ! DO_MEMCPY */
  	if (xdir == 1)
  	{
  	    xoffSrc = pptSrc->x & PIM;
***************
*** 406,411 ****
--- 428,434 ----
  	    }
  #endif /* DO_UNALIGNED_BITBLT */
  	}
+ #endif /* ! DO_MEMCPY */
  	else	/* xdir == -1 */
  	{
  	    xoffSrc = (pptSrc->x + w - 1) & PIM;
*** /tmp/,RCSt1K00C58	Mon Jan 27 16:11:15 1992
--- mit/server/include/servermd.h	Mon Jan 27 16:11:15 1992
***************
*** 23,29 ****
  ******************************************************************/
  #ifndef SERVERMD_H
  #define SERVERMD_H 1
! /* $XConsortium: servermd.h,v 1.60 91/06/30 11:29:35 rws Exp $ */
  
  /*
   * Machine dependent values:
--- 23,29 ----
  ******************************************************************/
  #ifndef SERVERMD_H
  #define SERVERMD_H 1
! /* $XConsortium: servermd.h,v 1.61 91/11/09 16:32:37 keith Exp $ */
  
  /*
   * Machine dependent values:
***************
*** 149,154 ****
--- 149,160 ----
  #define GLYPHPADBYTES           4
  #define GETLEFTBITS_ALIGNMENT   1
  
+ #define LARGE_INSTRUCTION_CACHE
+ #define FAST_CONSTANT_OFFSET_MODE
+ #define PLENTIFUL_REGISTERS
+ #define AVOID_MEMORY_READ
+ 
+ #define FAST_MEMCPY
  #endif /* AIXV3 */
  
  #if defined(ibm032) || defined (ibm)
***************
*** 200,206 ****
  
  #endif /* macII */
  
! #ifdef mips
  
  #ifdef MIPSEL
  # define IMAGE_BYTE_ORDER	LSBFirst        /* Values for the PMAX only */
--- 206,212 ----
  
  #endif /* macII */
  
! #if defined(mips) && !defined(sgi)
  
  #ifdef MIPSEL
  # define IMAGE_BYTE_ORDER	LSBFirst        /* Values for the PMAX only */
***************
*** 260,265 ****
--- 266,285 ----
  #define AVOID_MEMORY_READ
  
  #endif /* SYSV386 */
+ 
+ #ifdef sgi
+ 
+ #define IMAGE_BYTE_ORDER	MSBFirst
+ #define BITMAP_BIT_ORDER	MSBFirst
+ #define GLYPHPADBYTES		2
+ #define GETLEFTBITS_ALIGNMENT	4
+ 
+ #define AVOID_MEMORY_READ
+ #define FAST_CONSTANT_OFFSET_MODE
+ #define LARGE_INSTRUCTION_CACHE
+ #define PLENTIFUL_REGISTERS
+ 
+ #endif
  
  /* size of buffer to use with GetImage, measured in bytes. There's obviously
   * a trade-off between the amount of stack (or whatever ALLOCATE_LOCAL gives
*** /tmp/,RCSt1DuoAgP	Mon Jan 27 17:36:53 1992
--- mit/server/ddx/ibm/common/ibmUtils.c	Fri Dec 20 18:16:01 1991
***************
*** 1,5 ****
  /*
!  * $XConsortium: ibmUtils.c,v 1.2 91/07/16 13:10:58 jap Exp $
   *
   * Copyright IBM Corporation 1987,1988,1989,1990,1991
   *
--- 1,5 ----
  /*
!  * $XConsortium: ibmUtils.c,v 1.3 91/12/20 18:15:18 eswu Exp $
   *
   * Copyright IBM Corporation 1987,1988,1989,1990,1991
   *
***************
*** 50,81 ****
  return ;
  }
  
- /***==================================================================***/
  
- 	/* 
- 	 * XXX!!! HACK HACK HACKITY HACK HACK!!!
- 	 * 11/4/88 (ef) -- when the server exits, it first kills any active
- 	 * clients, which will paint the root window background where they
- 	 * used to be.  This has a nasty tendency to write on the currently
- 	 * active hft.   Rather than doing something clever to notice
- 	 * that we are inactive when repainting the background, we just
- 	 * exit the server because we "know" that no more real cleanup
- 	 * need be done.
- 	 */
- 
- static void
- ibmAbortInactiveScreens()
- {
- int	scrn;
-     TRACE(("ibmAbortInactiveScreens()\n"));
-     for (scrn = 0; scrn < ibmNumScreens; scrn++) {
- 	if (ibmScreenState(scrn)!=SCREEN_ACTIVE) {
- 	    exit(0);
- 	}
-     }
-     return;
- }
- 
  /***==================================================================***/
  
  void
--- 50,56 ----
***************
*** 84,100 ****
  
      TRACE(("ddxGiveUp()"));
  
- #ifdef AIXV3
-     rcmGiveUp();
-     OS_GiveUp();
-     ibmAbortInactiveScreens();
- #endif
- 
  #ifdef AIXps2
      OS_CapsLockFeedback(0);	
-     OS_GiveUp();
  #endif
  
      return;
  }
  
--- 59,70 ----
  
      TRACE(("ddxGiveUp()"));
  
  #ifdef AIXps2
      OS_CapsLockFeedback(0);	
  #endif
  
+     OS_GiveUp();
+ 
      return;
  }
  
***************
*** 121,135 ****
  {
      TRACE(("AbortDDX()"));
  
- #ifdef AIXV3
-     OS_Abort();
-     ibmAbortInactiveScreens();
- #endif
  #ifdef AIXps2
      OS_CapsLockFeedback(0) ;
-     OS_Abort();
  #endif
  
      return;
  }
  
--- 91,101 ----
  {
      TRACE(("AbortDDX()"));
  
  #ifdef AIXps2
      OS_CapsLockFeedback(0) ;
  #endif
  
+     OS_Abort();
      return;
  }
  
*** /tmp/,RCSt1DvECCX	Mon Jan 27 17:37:12 1992
--- mit/server/ddx/ibm/common/ibmInit.c	Fri Dec 20 18:15:55 1991
***************
*** 1,5 ****
  /*
!  * $XConsortium: ibmInit.c,v 1.4 91/09/09 13:23:00 rws Exp $
   *
   * Copyright IBM Corporation 1987,1988,1989,1990,1991
   *
--- 1,5 ----
  /*
!  * $XConsortium: ibmInit.c,v 1.5 91/12/20 18:13:55 eswu Exp $
   *
   * Copyright IBM Corporation 1987,1988,1989,1990,1991
   *
***************
*** 118,124 ****
  	    return FALSE ;
  	}
  	aixPutScreenAt(ibmNumScreens,x,y);
! 	ibmScreens[ibmNumScreens] = (ibmPerScreenInfo *)Xalloc( sizeof(ibmPerScreenInfo) );
  	*(ibmScreens[ibmNumScreens]) = *scr;
  	ibmScreens[ibmNumScreens]->ibm_DeviceID = tmpDeviceID;
  	ibmScreens[ibmNumScreens]->ibm_ScreenFD = tmpScreenFD;
--- 118,124 ----
  	    return FALSE ;
  	}
  	aixPutScreenAt(ibmNumScreens,x,y);
! 	ibmScreens[ibmNumScreens] = (ibmPerScreenInfo *) xalloc( sizeof(ibmPerScreenInfo) );
  	*(ibmScreens[ibmNumScreens]) = *scr;
  	ibmScreens[ibmNumScreens]->ibm_DeviceID = tmpDeviceID;
  	ibmScreens[ibmNumScreens]->ibm_ScreenFD = tmpScreenFD;
***************
*** 339,345 ****
  	ibmSetupPlumber(argv[++i]);
  	skip= 2;
      }
! #endif IBM_SPECIAL_MALLOC
      else if ( strcmp( argv[i], "-T") == 0)
  	ibmDontZap = TRUE;
      else if ( strcmp( argv[i], "-wp") == 0)
--- 339,345 ----
  	ibmSetupPlumber(argv[++i]);
  	skip= 2;
      }
! #endif /* IBM_SPECIAL_MALLOC */
      else if ( strcmp( argv[i], "-T") == 0)
  	ibmDontZap = TRUE;
      else if ( strcmp( argv[i], "-wp") == 0)
