aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libX11/configure.ac1
-rw-r--r--libX11/man/BitmapBitOrder.man1
-rw-r--r--libX11/man/BitmapPad.man1
-rw-r--r--libX11/man/BitmapUnit.man1
-rw-r--r--libX11/man/BlackPixel.man1
-rw-r--r--libX11/man/CellsOfScreen.man1
-rw-r--r--libX11/man/ClientWhitePointOfCCC.man1
-rw-r--r--libX11/man/ConnectionNumber.man1
-rw-r--r--libX11/man/DefaultColormap.man1
-rw-r--r--libX11/man/DefaultColormapOfScreen.man1
-rw-r--r--libX11/man/DefaultDepth.man1
-rw-r--r--libX11/man/DefaultDepthOfScreen.man1
-rw-r--r--libX11/man/DefaultGC.man1
-rw-r--r--libX11/man/DefaultGCOfScreen.man1
-rw-r--r--libX11/man/DefaultRootWindow.man1
-rw-r--r--libX11/man/DefaultScreen.man1
-rw-r--r--libX11/man/DefaultScreenOfDisplay.man1
-rw-r--r--libX11/man/DefaultVisual.man1
-rw-r--r--libX11/man/DefaultVisualOfScreen.man1
-rw-r--r--libX11/man/DisplayCells.man1
-rw-r--r--libX11/man/DisplayHeight.man1
-rw-r--r--libX11/man/DisplayHeightMM.man1
-rw-r--r--libX11/man/DisplayOfScreen.man1
-rw-r--r--libX11/man/DisplayPlanes.man1
-rw-r--r--libX11/man/DisplayString.man1
-rw-r--r--libX11/man/DisplayWidth.man1
-rw-r--r--libX11/man/DisplayWidthMM.man1
-rw-r--r--libX11/man/DoesBackingStore.man1
-rw-r--r--libX11/man/DoesSaveUnders.man1
-rw-r--r--libX11/man/EventMaskOfScreen.man1
-rw-r--r--libX11/man/HeightMMOfScreen.man1
-rw-r--r--libX11/man/HeightOfScreen.man1
-rw-r--r--libX11/man/IsFunctionKey.man1
-rw-r--r--libX11/man/IsKeypadKey.man1
-rw-r--r--libX11/man/IsMiscFunctionKey.man1
-rw-r--r--libX11/man/IsModifierKey.man1
-rw-r--r--libX11/man/IsPFKey.man1
-rw-r--r--libX11/man/IsPrivateKeypadKey.man1
-rw-r--r--libX11/man/LastKnownRequestProcessed.man1
-rw-r--r--libX11/man/Makefile.am694
-rw-r--r--libX11/man/MaxCmapsOfScreen.man1
-rw-r--r--libX11/man/MinCmapsOfScreen.man1
-rw-r--r--libX11/man/NextRequest.man1
-rw-r--r--libX11/man/PlanesOfScreen.man1
-rw-r--r--libX11/man/ProtocolRevision.man1
-rw-r--r--libX11/man/ProtocolVersion.man1
-rw-r--r--libX11/man/QLength.man1
-rw-r--r--libX11/man/RootWindow.man1
-rw-r--r--libX11/man/RootWindowOfScreen.man1
-rw-r--r--libX11/man/ScreenCount.man1
-rw-r--r--libX11/man/ScreenNumberOfCCC.man1
-rw-r--r--libX11/man/ScreenOfDisplay.man1
-rw-r--r--libX11/man/ScreenWhitePointOfCCC.man1
-rw-r--r--libX11/man/ServerVendor.man1
-rw-r--r--libX11/man/VendorRelease.man1
-rw-r--r--libX11/man/VisualOfCCC.man1
-rw-r--r--libX11/man/WhitePixel.man1
-rw-r--r--libX11/man/WhitePixelOfScreen.man1
-rw-r--r--libX11/man/WidthMMOfScreen.man1
-rw-r--r--libX11/man/WidthOfScreen.man1
-rw-r--r--libX11/man/XActivateScreenSaver.man1
-rw-r--r--libX11/man/XAddHosts.man1
-rw-r--r--libX11/man/XAddPixel.man1
-rw-r--r--libX11/man/XAddToSaveSet.man1
-rw-r--r--libX11/man/XAllocColorCells.man1
-rw-r--r--libX11/man/XAllocColorPlanes.man1
-rw-r--r--libX11/man/XAllocNamedColor.man1
-rw-r--r--libX11/man/XArc.man1
-rw-r--r--libX11/man/XAutoRepeatOff.man1
-rw-r--r--libX11/man/XAutoRepeatOn.man1
-rw-r--r--libX11/man/XBaseFontNameListOfFontSet.man1
-rw-r--r--libX11/man/XBell.man1
-rw-r--r--libX11/man/XChangeActivePointerGrab.man1
-rw-r--r--libX11/man/XChangeGC.man1
-rw-r--r--libX11/man/XChangeProperty.man1
-rw-r--r--libX11/man/XChar2b.man1
-rw-r--r--libX11/man/XCharStruct.man1
-rw-r--r--libX11/man/XCheckIfEvent.man1
-rw-r--r--libX11/man/XCheckMaskEvent.man1
-rw-r--r--libX11/man/XCheckTypedEvent.man1
-rw-r--r--libX11/man/XCheckTypedWindowEvent.man1
-rw-r--r--libX11/man/XCheckWindowEvent.man1
-rw-r--r--libX11/man/XCirculateSubwindows.man1
-rw-r--r--libX11/man/XCirculateSubwindowsDown.man1
-rw-r--r--libX11/man/XCirculateSubwindowsUp.man1
-rw-r--r--libX11/man/XClassHint.man1
-rw-r--r--libX11/man/XClearWindow.man1
-rw-r--r--libX11/man/XClipBox.man1
-rw-r--r--libX11/man/XCloseDisplay.man1
-rw-r--r--libX11/man/XCloseIM.man1
-rw-r--r--libX11/man/XCloseOM.man1
-rw-r--r--libX11/man/XColor.man1
-rw-r--r--libX11/man/XCompose.man1
-rw-r--r--libX11/man/XContextDependentDrawing.man1
-rw-r--r--libX11/man/XContextualDrawing.man1
-rw-r--r--libX11/man/XConvertCase.man1
-rw-r--r--libX11/man/XConvertSelection.man1
-rw-r--r--libX11/man/XCopyColormapAndFree.man1
-rw-r--r--libX11/man/XCopyGC.man1
-rw-r--r--libX11/man/XCopyPlane.man1
-rw-r--r--libX11/man/XCreateBitmapFromData.man1
-rw-r--r--libX11/man/XCreateGlyphCursor.man1
-rw-r--r--libX11/man/XCreateImage.man1
-rw-r--r--libX11/man/XCreatePixmapCursor.man1
-rw-r--r--libX11/man/XCreatePixmapFromBitmapData.man1
-rw-r--r--libX11/man/XCreateSimpleWindow.man1
-rw-r--r--libX11/man/XDefaultString.man1
-rw-r--r--libX11/man/XDeleteContext.man1
-rw-r--r--libX11/man/XDeleteModifiermapEntry.man1
-rw-r--r--libX11/man/XDeleteProperty.man1
-rw-r--r--libX11/man/XDestroyIC.man1
-rw-r--r--libX11/man/XDestroyImage.man1
-rw-r--r--libX11/man/XDestroyOC.man1
-rw-r--r--libX11/man/XDestroyRegion.man1
-rw-r--r--libX11/man/XDestroySubwindows.man1
-rw-r--r--libX11/man/XDirectionalDependentDrawing.man1
-rw-r--r--libX11/man/XDisableAccessControl.man1
-rw-r--r--libX11/man/XDisplayKeycodes.man1
-rw-r--r--libX11/man/XDisplayMotionBufferSize.man1
-rw-r--r--libX11/man/XDisplayName.man1
-rw-r--r--libX11/man/XDisplayOfIM.man1
-rw-r--r--libX11/man/XDisplayOfOM.man1
-rw-r--r--libX11/man/XDrawArcs.man1
-rw-r--r--libX11/man/XDrawImageString16.man1
-rw-r--r--libX11/man/XDrawLines.man1
-rw-r--r--libX11/man/XDrawPoints.man1
-rw-r--r--libX11/man/XDrawRectangles.man1
-rw-r--r--libX11/man/XDrawSegments.man1
-rw-r--r--libX11/man/XDrawString16.man1
-rw-r--r--libX11/man/XDrawText16.man1
-rw-r--r--libX11/man/XEnableAccessControl.man1
-rw-r--r--libX11/man/XEqualRegion.man1
-rw-r--r--libX11/man/XEvent.man1
-rw-r--r--libX11/man/XEventsQueued.man1
-rw-r--r--libX11/man/XExtendedMaxRequestSize.man1
-rw-r--r--libX11/man/XFetchBuffer.man1
-rw-r--r--libX11/man/XFetchBytes.man1
-rw-r--r--libX11/man/XFetchName.man1
-rw-r--r--libX11/man/XFillArc.man1
-rw-r--r--libX11/man/XFillArcs.man1
-rw-r--r--libX11/man/XFillPolygon.man1
-rw-r--r--libX11/man/XFillRectangles.man1
-rw-r--r--libX11/man/XFindContext.man1
-rw-r--r--libX11/man/XFontProp.man1
-rw-r--r--libX11/man/XFontStruct.man1
-rw-r--r--libX11/man/XForceScreenSaver.man1
-rw-r--r--libX11/man/XFreeColormap.man1
-rw-r--r--libX11/man/XFreeColors.man1
-rw-r--r--libX11/man/XFreeCursor.man1
-rw-r--r--libX11/man/XFreeEventData.man1
-rw-r--r--libX11/man/XFreeExtensionList.man1
-rw-r--r--libX11/man/XFreeFont.man1
-rw-r--r--libX11/man/XFreeFontInfo.man1
-rw-r--r--libX11/man/XFreeFontNames.man1
-rw-r--r--libX11/man/XFreeFontPath.man1
-rw-r--r--libX11/man/XFreeFontSet.man1
-rw-r--r--libX11/man/XFreeGC.man1
-rw-r--r--libX11/man/XFreeModifierMap.man1
-rw-r--r--libX11/man/XFreePixmap.man1
-rw-r--r--libX11/man/XFreeStringList.man1
-rw-r--r--libX11/man/XGCValues.man1
-rw-r--r--libX11/man/XGContextFromGC.man1
-rw-r--r--libX11/man/XGenericEventCookie.man1
-rw-r--r--libX11/man/XGetAtomName.man1
-rw-r--r--libX11/man/XGetAtomNames.man1
-rw-r--r--libX11/man/XGetClassHint.man1
-rw-r--r--libX11/man/XGetCommand.man1
-rw-r--r--libX11/man/XGetErrorDatabaseText.man1
-rw-r--r--libX11/man/XGetErrorText.man1
-rw-r--r--libX11/man/XGetFontPath.man1
-rw-r--r--libX11/man/XGetFontProperty.man1
-rw-r--r--libX11/man/XGetGCValues.man1
-rw-r--r--libX11/man/XGetGeometry.man1
-rw-r--r--libX11/man/XGetICValues.man1
-rw-r--r--libX11/man/XGetIMValues.man1
-rw-r--r--libX11/man/XGetIconName.man1
-rw-r--r--libX11/man/XGetIconSizes.man1
-rw-r--r--libX11/man/XGetImage.man1
-rw-r--r--libX11/man/XGetInputFocus.man1
-rw-r--r--libX11/man/XGetKeyboardControl.man1
-rw-r--r--libX11/man/XGetKeyboardMapping.man1
-rw-r--r--libX11/man/XGetModifierMapping.man1
-rw-r--r--libX11/man/XGetMotionEvents.man1
-rw-r--r--libX11/man/XGetOCValues.man1
-rw-r--r--libX11/man/XGetOMValues.man1
-rw-r--r--libX11/man/XGetPixel.man1
-rw-r--r--libX11/man/XGetPointerControl.man1
-rw-r--r--libX11/man/XGetPointerMapping.man1
-rw-r--r--libX11/man/XGetRGBColormaps.man1
-rw-r--r--libX11/man/XGetScreenSaver.man1
-rw-r--r--libX11/man/XGetSelectionOwner.man1
-rw-r--r--libX11/man/XGetSubImage.man1
-rw-r--r--libX11/man/XGetTextProperty.man1
-rw-r--r--libX11/man/XGetTransientForHint.man1
-rw-r--r--libX11/man/XGetWMClientMachine.man1
-rw-r--r--libX11/man/XGetWMColormapWindows.man1
-rw-r--r--libX11/man/XGetWMHints.man1
-rw-r--r--libX11/man/XGetWMIconName.man1
-rw-r--r--libX11/man/XGetWMName.man1
-rw-r--r--libX11/man/XGetWMNormalHints.man1
-rw-r--r--libX11/man/XGetWMProtocols.man1
-rw-r--r--libX11/man/XGetWMSizeHints.man1
-rw-r--r--libX11/man/XHostAddress.man1
-rw-r--r--libX11/man/XIMOfIC.man1
-rw-r--r--libX11/man/XIconSize.man1
-rw-r--r--libX11/man/XInsertModifiermapEntry.man1
-rw-r--r--libX11/man/XInternAtoms.man1
-rw-r--r--libX11/man/XInternalConnectionNumbers.man1
-rw-r--r--libX11/man/XKeyEvent.man1
-rw-r--r--libX11/man/XKeyboardControl.man1
-rw-r--r--libX11/man/XKeycodeToKeysym.man1
-rw-r--r--libX11/man/XKeysymToKeycode.man1
-rw-r--r--libX11/man/XKeysymToString.man1
-rw-r--r--libX11/man/XKillClient.man1
-rw-r--r--libX11/man/XListDepths.man1
-rw-r--r--libX11/man/XListExtensions.man1
-rw-r--r--libX11/man/XListFontsWithInfo.man1
-rw-r--r--libX11/man/XListHosts.man1
-rw-r--r--libX11/man/XListInstalledColormaps.man1
-rw-r--r--libX11/man/XListPixmapFormats.man1
-rw-r--r--libX11/man/XListProperties.man1
-rw-r--r--libX11/man/XLoadQueryFont.man1
-rw-r--r--libX11/man/XLocaleOfFontSet.man1
-rw-r--r--libX11/man/XLocaleOfIM.man1
-rw-r--r--libX11/man/XLocaleOfOM.man1
-rw-r--r--libX11/man/XLockDisplay.man1
-rw-r--r--libX11/man/XLookupColor.man1
-rw-r--r--libX11/man/XLookupString.man1
-rw-r--r--libX11/man/XLowerWindow.man1
-rw-r--r--libX11/man/XMapRaised.man1
-rw-r--r--libX11/man/XMapSubwindows.man1
-rw-r--r--libX11/man/XMappingEvent.man1
-rw-r--r--libX11/man/XMaskEvent.man1
-rw-r--r--libX11/man/XMatchVisualInfo.man1
-rw-r--r--libX11/man/XMaxRequestSize.man1
-rw-r--r--libX11/man/XModifierKeymap.man1
-rw-r--r--libX11/man/XMotionEvent.man1
-rw-r--r--libX11/man/XMoveResizeWindow.man1
-rw-r--r--libX11/man/XMoveWindow.man1
-rw-r--r--libX11/man/XNewModifiermap.man1
-rw-r--r--libX11/man/XNoExposeEvent.man1
-rw-r--r--libX11/man/XOMOfOC.man1
-rw-r--r--libX11/man/XOffsetRegion.man1
-rw-r--r--libX11/man/XParseColor.man1
-rw-r--r--libX11/man/XPeekEvent.man1
-rw-r--r--libX11/man/XPeekIfEvent.man1
-rw-r--r--libX11/man/XPending.man1
-rw-r--r--libX11/man/XPixmapFormatValues.man1
-rw-r--r--libX11/man/XPoint.man1
-rw-r--r--libX11/man/XPointInRegion.man1
-rw-r--r--libX11/man/XProcessInternalConnection.man1
-rw-r--r--libX11/man/XPutPixel.man1
-rw-r--r--libX11/man/XQueryBestCursor.man1
-rw-r--r--libX11/man/XQueryBestStipple.man1
-rw-r--r--libX11/man/XQueryBestTile.man1
-rw-r--r--libX11/man/XQueryColors.man1
-rw-r--r--libX11/man/XQueryFont.man1
-rw-r--r--libX11/man/XQueryKeymap.man1
-rw-r--r--libX11/man/XQueryTextExtents.man1
-rw-r--r--libX11/man/XQueryTextExtents16.man1
-rw-r--r--libX11/man/XReadBitmapFileData.man1
-rw-r--r--libX11/man/XRebindKeysym.man1
-rw-r--r--libX11/man/XReconfigureWMWindow.man1
-rw-r--r--libX11/man/XRectInRegion.man1
-rw-r--r--libX11/man/XRectangle.man1
-rw-r--r--libX11/man/XRefreshKeyboardMapping.man1
-rw-r--r--libX11/man/XRegisterIMInstantiateCallback.man1
-rw-r--r--libX11/man/XRemoveConnectionWatch.man1
-rw-r--r--libX11/man/XRemoveFromSaveSet.man1
-rw-r--r--libX11/man/XRemoveHost.man1
-rw-r--r--libX11/man/XRemoveHosts.man1
-rw-r--r--libX11/man/XResetScreenSaver.man1
-rw-r--r--libX11/man/XResizeWindow.man1
-rw-r--r--libX11/man/XRestackWindows.man1
-rw-r--r--libX11/man/XRotateBuffers.man1
-rw-r--r--libX11/man/XRotateWindowProperties.man1
-rw-r--r--libX11/man/XScreenNumberOfScreen.man1
-rw-r--r--libX11/man/XScreenResourceString.man1
-rw-r--r--libX11/man/XSegment.man1
-rw-r--r--libX11/man/XSetAccessControl.man1
-rw-r--r--libX11/man/XSetAfterFunction.man1
-rw-r--r--libX11/man/XSetBackground.man1
-rw-r--r--libX11/man/XSetClassHint.man1
-rw-r--r--libX11/man/XSetClipMask.man1
-rw-r--r--libX11/man/XSetClipRectangles.man1
-rw-r--r--libX11/man/XSetDashes.man1
-rw-r--r--libX11/man/XSetFillRule.man1
-rw-r--r--libX11/man/XSetForeground.man1
-rw-r--r--libX11/man/XSetFunction.man1
-rw-r--r--libX11/man/XSetGraphicsExposure.man1
-rw-r--r--libX11/man/XSetIMValues.man1
-rw-r--r--libX11/man/XSetIOErrorHandler.man1
-rw-r--r--libX11/man/XSetIconName.man1
-rw-r--r--libX11/man/XSetIconSizes.man1
-rw-r--r--libX11/man/XSetLocaleModifiers.man1
-rw-r--r--libX11/man/XSetModifierMapping.man1
-rw-r--r--libX11/man/XSetOCValues.man1
-rw-r--r--libX11/man/XSetOMValues.man1
-rw-r--r--libX11/man/XSetPlaneMask.man1
-rw-r--r--libX11/man/XSetRGBColormaps.man1
-rw-r--r--libX11/man/XSetRegion.man1
-rw-r--r--libX11/man/XSetStipple.man1
-rw-r--r--libX11/man/XSetSubwindowMode.man1
-rw-r--r--libX11/man/XSetTSOrigin.man1
-rw-r--r--libX11/man/XSetWMHints.man1
-rw-r--r--libX11/man/XSetWMNormalHints.man1
-rw-r--r--libX11/man/XSetWMSizeHints.man1
-rw-r--r--libX11/man/XSetWindowAttributes.man1
-rw-r--r--libX11/man/XSetWindowBackground.man1
-rw-r--r--libX11/man/XSetWindowBackgroundPixmap.man1
-rw-r--r--libX11/man/XSetWindowBorder.man1
-rw-r--r--libX11/man/XSetWindowBorderPixmap.man1
-rw-r--r--libX11/man/XSetWindowBorderWidth.man1
-rw-r--r--libX11/man/XSetWindowColormap.man1
-rw-r--r--libX11/man/XShrinkRegion.man1
-rw-r--r--libX11/man/XSizeHints.man1
-rw-r--r--libX11/man/XStandardColormap.man1
-rw-r--r--libX11/man/XStoreBuffer.man1
-rw-r--r--libX11/man/XStoreColor.man1
-rw-r--r--libX11/man/XStoreName.man1
-rw-r--r--libX11/man/XStoreNamedColor.man1
-rw-r--r--libX11/man/XSubImage.man1
-rw-r--r--libX11/man/XSubtractRegion.man1
-rw-r--r--libX11/man/XSync.man1
-rw-r--r--libX11/man/XTextExtents16.man1
-rw-r--r--libX11/man/XTextItem.man1
-rw-r--r--libX11/man/XTextItem16.man1
-rw-r--r--libX11/man/XTextProperty.man1
-rw-r--r--libX11/man/XTextPropertyToStringList.man1
-rw-r--r--libX11/man/XTextWidth16.man1
-rw-r--r--libX11/man/XTimeCoord.man1
-rw-r--r--libX11/man/XUndefineCursor.man1
-rw-r--r--libX11/man/XUngrabButton.man1
-rw-r--r--libX11/man/XUngrabKey.man1
-rw-r--r--libX11/man/XUngrabKeyboard.man1
-rw-r--r--libX11/man/XUngrabPointer.man1
-rw-r--r--libX11/man/XUngrabServer.man1
-rw-r--r--libX11/man/XUninstallColormap.man1
-rw-r--r--libX11/man/XUnionRectWithRegion.man1
-rw-r--r--libX11/man/XUnionRegion.man1
-rw-r--r--libX11/man/XUniqueContext.man1
-rw-r--r--libX11/man/XUnloadFont.man1
-rw-r--r--libX11/man/XUnlockDisplay.man1
-rw-r--r--libX11/man/XUnmapSubwindows.man1
-rw-r--r--libX11/man/XUnregisterIMInstantiateCallback.man1
-rw-r--r--libX11/man/XUnsetICFocus.man1
-rw-r--r--libX11/man/XVisualIDFromVisual.man1
-rw-r--r--libX11/man/XVisualInfo.man1
-rw-r--r--libX11/man/XWMGeometry.man1
-rw-r--r--libX11/man/XWMHints.man1
-rw-r--r--libX11/man/XWindowAttributes.man1
-rw-r--r--libX11/man/XWindowChanges.man1
-rw-r--r--libX11/man/XWindowEvent.man1
-rw-r--r--libX11/man/XWithdrawWindow.man1
-rw-r--r--libX11/man/XWriteBitmapFile.man1
-rw-r--r--libX11/man/XXorRegion.man1
-rw-r--r--libX11/man/XcmsAllocNamedColor.man1
-rw-r--r--libX11/man/XcmsCIELab.man1
-rw-r--r--libX11/man/XcmsCIELabQueryMaxL.man1
-rw-r--r--libX11/man/XcmsCIELabQueryMaxLC.man1
-rw-r--r--libX11/man/XcmsCIELabQueryMinL.man1
-rw-r--r--libX11/man/XcmsCIELuv.man1
-rw-r--r--libX11/man/XcmsCIELuvQueryMaxL.man1
-rw-r--r--libX11/man/XcmsCIELuvQueryMaxLC.man1
-rw-r--r--libX11/man/XcmsCIELuvQueryMinL.man1
-rw-r--r--libX11/man/XcmsCIEXYZ.man1
-rw-r--r--libX11/man/XcmsCIEuvY.man1
-rw-r--r--libX11/man/XcmsCIExyY.man1
-rw-r--r--libX11/man/XcmsFreeCCC.man1
-rw-r--r--libX11/man/XcmsLookupColor.man1
-rw-r--r--libX11/man/XcmsPad.man1
-rw-r--r--libX11/man/XcmsQueryBlue.man1
-rw-r--r--libX11/man/XcmsQueryColors.man1
-rw-r--r--libX11/man/XcmsQueryGreen.man1
-rw-r--r--libX11/man/XcmsQueryRed.man1
-rw-r--r--libX11/man/XcmsQueryWhite.man1
-rw-r--r--libX11/man/XcmsRGB.man1
-rw-r--r--libX11/man/XcmsRGBi.man1
-rw-r--r--libX11/man/XcmsSetCCCOfColormap.man1
-rw-r--r--libX11/man/XcmsSetWhiteAdjustProc.man1
-rw-r--r--libX11/man/XcmsStoreColors.man1
-rw-r--r--libX11/man/XcmsTekHVC.man1
-rw-r--r--libX11/man/XcmsTekHVCQueryMaxV.man1
-rw-r--r--libX11/man/XcmsTekHVCQueryMaxVC.man1
-rw-r--r--libX11/man/XcmsTekHVCQueryMaxVSamples.man1
-rw-r--r--libX11/man/XcmsTekHVCQueryMinV.man1
-rw-r--r--libX11/man/XmbSetWMProperties.man1
-rw-r--r--libX11/man/XmbTextPropertyToTextList.man1
-rw-r--r--libX11/man/XrmCombineDatabase.man1
-rw-r--r--libX11/man/XrmCombineFileDatabase.man1
-rw-r--r--libX11/man/XrmDestroyDatabase.man1
-rw-r--r--libX11/man/XrmGetDatabase.man1
-rw-r--r--libX11/man/XrmGetStringDatabase.man1
-rw-r--r--libX11/man/XrmLocaleOfDatabase.man1
-rw-r--r--libX11/man/XrmOptionDescRec.man1
-rw-r--r--libX11/man/XrmOptionKind.man1
-rw-r--r--libX11/man/XrmParseCommand.man1
-rw-r--r--libX11/man/XrmPermStringToQuark.man1
-rw-r--r--libX11/man/XrmPutFileDatabase.man1
-rw-r--r--libX11/man/XrmPutLineResource.man1
-rw-r--r--libX11/man/XrmPutStringResource.man1
-rw-r--r--libX11/man/XrmQGetResource.man1
-rw-r--r--libX11/man/XrmQGetSearchList.man1
-rw-r--r--libX11/man/XrmQGetSearchResource.man1
-rw-r--r--libX11/man/XrmQPutResource.man1
-rw-r--r--libX11/man/XrmQPutStringResource.man1
-rw-r--r--libX11/man/XrmQuarkToString.man1
-rw-r--r--libX11/man/XrmSetDatabase.man1
-rw-r--r--libX11/man/XrmStringToBindingQuarkList.man1
-rw-r--r--libX11/man/XrmStringToQuark.man1
-rw-r--r--libX11/man/XrmStringToQuarkList.man1
-rw-r--r--libX11/man/XrmValue.man1
-rw-r--r--libX11/man/Xutf8DrawImageString.man1
-rw-r--r--libX11/man/Xutf8DrawString.man1
-rw-r--r--libX11/man/Xutf8DrawText.man1
-rw-r--r--libX11/man/Xutf8LookupString.man1
-rw-r--r--libX11/man/Xutf8ResetIC.man1
-rw-r--r--libX11/man/Xutf8SetWMProperties.man1
-rw-r--r--libX11/man/Xutf8TextEscapement.man1
-rw-r--r--libX11/man/Xutf8TextExtents.man1
-rw-r--r--libX11/man/Xutf8TextListToTextProperty.man1
-rw-r--r--libX11/man/Xutf8TextPerCharExtents.man1
-rw-r--r--libX11/man/Xutf8TextPropertyToTextList.man1
-rw-r--r--libX11/man/XwcDrawImageString.man1
-rw-r--r--libX11/man/XwcDrawString.man1
-rw-r--r--libX11/man/XwcDrawText.man1
-rw-r--r--libX11/man/XwcFreeStringList.man1
-rw-r--r--libX11/man/XwcLookupString.man1
-rw-r--r--libX11/man/XwcResetIC.man1
-rw-r--r--libX11/man/XwcTextEscapement.man1
-rw-r--r--libX11/man/XwcTextExtents.man1
-rw-r--r--libX11/man/XwcTextListToTextProperty.man1
-rw-r--r--libX11/man/XwcTextPerCharExtents.man1
-rw-r--r--libX11/man/XwcTextPropertyToTextList.man1
-rw-r--r--libX11/man/xkb/Makefile.am2
-rw-r--r--libXau/Makefile.am35
-rw-r--r--libXau/configure.ac7
-rw-r--r--libXau/man/Makefile.am47
-rw-r--r--libXau/man/Xau.man (renamed from libXau/Xau.man)48
-rw-r--r--libXau/man/XauDisposeAuth.man1
-rw-r--r--libXau/man/XauFileName.man1
-rw-r--r--libXau/man/XauGetAuthByAddr.man1
-rw-r--r--libXau/man/XauGetBestAuthByAddr.man1
-rw-r--r--libXau/man/XauLockAuth.man1
-rw-r--r--libXau/man/XauReadAuth.man1
-rw-r--r--libXau/man/XauUnlockAuth.man1
-rw-r--r--libXau/man/XauWriteAuth.man1
-rw-r--r--libXext/man/Makefile.am135
-rw-r--r--libXext/man/XShapeCombineMask.man1
-rw-r--r--libXext/man/XShapeCombineRectangles.man1
-rw-r--r--libXext/man/XShapeCombineRegion.man1
-rw-r--r--libXext/man/XShapeCombineShape.man1
-rw-r--r--libXext/man/XShapeGetRectangles.man1
-rw-r--r--libXext/man/XShapeInputSelected.man1
-rw-r--r--libXext/man/XShapeOffsetShape.man1
-rw-r--r--libXext/man/XShapeQueryExtension.man1
-rw-r--r--libXext/man/XShapeQueryExtents.man1
-rw-r--r--libXext/man/XShapeQueryVersion.man1
-rw-r--r--libXext/man/XShapeSelectInput.man1
-rw-r--r--libXext/man/XShmAttach.man1
-rw-r--r--libXext/man/XShmCreateImage.man1
-rw-r--r--libXext/man/XShmCreatePixmap.man1
-rw-r--r--libXext/man/XShmDetach.man1
-rw-r--r--libXext/man/XShmGetEventBase.man1
-rw-r--r--libXext/man/XShmGetImage.man1
-rw-r--r--libXext/man/XShmPixmapFormat.man1
-rw-r--r--libXext/man/XShmPutImage.man1
-rw-r--r--libXext/man/XShmQueryExtension.man1
-rw-r--r--libXext/man/XShmQueryVersion.man1
-rw-r--r--libXext/man/XeviGetVisualInfo.man1
-rw-r--r--libXext/man/XeviQueryExtension.man1
-rw-r--r--libXext/man/XeviQueryVersion.man1
-rw-r--r--libXext/man/XmbufChangeBufferAttributes.man1
-rw-r--r--libXext/man/XmbufChangeWindowAttributes.man1
-rw-r--r--libXext/man/XmbufCreateBuffers.man1
-rw-r--r--libXext/man/XmbufCreateStereoWindow.man1
-rw-r--r--libXext/man/XmbufDestroyBuffers.man1
-rw-r--r--libXext/man/XmbufDisplayBuffers.man1
-rw-r--r--libXext/man/XmbufGetBufferAttributes.man1
-rw-r--r--libXext/man/XmbufGetScreenInfo.man1
-rw-r--r--libXext/man/XmbufGetVersion.man1
-rw-r--r--libXext/man/XmbufGetWindowAttributes.man1
-rw-r--r--libXext/man/XmbufQueryExtension.man1
-rw-r--r--libXinerama/man/Makefile.am33
-rw-r--r--libXinerama/man/XineramaIsActive.man1
-rw-r--r--libXinerama/man/XineramaQueryExtension.man1
-rw-r--r--libXinerama/man/XineramaQueryScreens.man1
-rw-r--r--libXinerama/man/XineramaQueryVersion.man1
-rw-r--r--libxcb/NEWS837
-rw-r--r--libxcb/configure.ac2
-rw-r--r--pixman/configure.ac12
-rw-r--r--pixman/pixman/pixman-arm-neon-asm.S3519
-rw-r--r--pixman/pixman/pixman-arm-neon.c706
-rw-r--r--pixman/pixman/pixman-fast-path.c7
-rw-r--r--pixman/pixman/pixman-image.c37
-rw-r--r--pixman/pixman/pixman-private.h2
-rw-r--r--pixman/pixman/pixman.c11
-rw-r--r--pixman/test/Makefile.am4
-rw-r--r--pixman/test/alpha-loop.c29
-rw-r--r--pixman/test/utils.c33
-rw-r--r--pixman/test/utils.h3
-rw-r--r--xorg-server/Xext/xace.c170
-rw-r--r--xorg-server/Xi/exevents.c6
-rw-r--r--xorg-server/configure.ac4
-rw-r--r--xorg-server/dix/devices.c8
-rw-r--r--xorg-server/dix/dixfonts.c101
-rw-r--r--xorg-server/dix/getevents.c10
-rw-r--r--xorg-server/doc/xml/Xserver-spec.xml152
-rw-r--r--xorg-server/doc/xml/xmlrules.in2
-rw-r--r--xorg-server/fb/fbpict.c24
-rw-r--r--xorg-server/hw/xfree86/common/xf86Xinput.c3
-rw-r--r--xorg-server/hw/xfree86/parser/Input.c7
-rw-r--r--xorg-server/hw/xfree86/parser/InputClass.c6
-rw-r--r--xorg-server/hw/xwin/glx/indirect.c14
-rw-r--r--xorg-server/include/closestr.h307
-rw-r--r--xorg-server/include/input.h6
-rw-r--r--xorg-server/include/privates.h4
-rw-r--r--xorg-server/miext/rootless/rootlessCommon.c3
-rw-r--r--xorg-server/xkb/xkbActions.c93
-rw-r--r--xorg-server/xkeyboard-config/rules/base.extras.xml.in16
-rw-r--r--xorg-server/xkeyboard-config/rules/extras/variantsMapping.lst1
-rw-r--r--xorg-server/xkeyboard-config/symbols/extras/Makefile.am2
-rw-r--r--xorg-server/xkeyboard-config/symbols/extras/ru59
-rw-r--r--xorg-server/xkeyboard-config/symbols/inet5
524 files changed, 3978 insertions, 3708 deletions
diff --git a/libX11/configure.ac b/libX11/configure.ac
index e720748bd..9eb41d019 100644
--- a/libX11/configure.ac
+++ b/libX11/configure.ac
@@ -30,6 +30,7 @@ XORG_ENABLE_SPECS
XORG_WITH_XMLTO(0.0.20)
XORG_WITH_FOP
XORG_CHECK_SGML_DOCTOOLS(1.5)
+XORG_PROG_RAWCPP
# Checks for programs.
AC_PROG_LIBTOOL
diff --git a/libX11/man/BitmapBitOrder.man b/libX11/man/BitmapBitOrder.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/BitmapBitOrder.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/BitmapPad.man b/libX11/man/BitmapPad.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/BitmapPad.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/BitmapUnit.man b/libX11/man/BitmapUnit.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/BitmapUnit.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/BlackPixel.man b/libX11/man/BlackPixel.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/BlackPixel.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/CellsOfScreen.man b/libX11/man/CellsOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/CellsOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/ClientWhitePointOfCCC.man b/libX11/man/ClientWhitePointOfCCC.man
new file mode 100644
index 000000000..5feb8b936
--- /dev/null
+++ b/libX11/man/ClientWhitePointOfCCC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__
diff --git a/libX11/man/ConnectionNumber.man b/libX11/man/ConnectionNumber.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ConnectionNumber.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultColormap.man b/libX11/man/DefaultColormap.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultColormapOfScreen.man b/libX11/man/DefaultColormapOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DefaultColormapOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DefaultDepth.man b/libX11/man/DefaultDepth.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultDepth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultDepthOfScreen.man b/libX11/man/DefaultDepthOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DefaultDepthOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DefaultGC.man b/libX11/man/DefaultGC.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultGC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultGCOfScreen.man b/libX11/man/DefaultGCOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DefaultGCOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DefaultRootWindow.man b/libX11/man/DefaultRootWindow.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultRootWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultScreen.man b/libX11/man/DefaultScreen.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultScreenOfDisplay.man b/libX11/man/DefaultScreenOfDisplay.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultScreenOfDisplay.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultVisual.man b/libX11/man/DefaultVisual.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DefaultVisual.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DefaultVisualOfScreen.man b/libX11/man/DefaultVisualOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DefaultVisualOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DisplayCells.man b/libX11/man/DisplayCells.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DisplayCells.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DisplayHeight.man b/libX11/man/DisplayHeight.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/DisplayHeight.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/DisplayHeightMM.man b/libX11/man/DisplayHeightMM.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/DisplayHeightMM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/DisplayOfScreen.man b/libX11/man/DisplayOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DisplayOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DisplayPlanes.man b/libX11/man/DisplayPlanes.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DisplayPlanes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DisplayString.man b/libX11/man/DisplayString.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/DisplayString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/DisplayWidth.man b/libX11/man/DisplayWidth.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/DisplayWidth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/DisplayWidthMM.man b/libX11/man/DisplayWidthMM.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/DisplayWidthMM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/DoesBackingStore.man b/libX11/man/DoesBackingStore.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DoesBackingStore.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/DoesSaveUnders.man b/libX11/man/DoesSaveUnders.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/DoesSaveUnders.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/EventMaskOfScreen.man b/libX11/man/EventMaskOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/EventMaskOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/HeightMMOfScreen.man b/libX11/man/HeightMMOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/HeightMMOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/HeightOfScreen.man b/libX11/man/HeightOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/HeightOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/IsFunctionKey.man b/libX11/man/IsFunctionKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsFunctionKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/IsKeypadKey.man b/libX11/man/IsKeypadKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsKeypadKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/IsMiscFunctionKey.man b/libX11/man/IsMiscFunctionKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsMiscFunctionKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/IsModifierKey.man b/libX11/man/IsModifierKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsModifierKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/IsPFKey.man b/libX11/man/IsPFKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsPFKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/IsPrivateKeypadKey.man b/libX11/man/IsPrivateKeypadKey.man
new file mode 100644
index 000000000..2867ce2ad
--- /dev/null
+++ b/libX11/man/IsPrivateKeypadKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/IsCursorKey.__libmansuffix__
diff --git a/libX11/man/LastKnownRequestProcessed.man b/libX11/man/LastKnownRequestProcessed.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/LastKnownRequestProcessed.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/Makefile.am b/libX11/man/Makefile.am
index b1bed16c3..ac3f25ea2 100644
--- a/libX11/man/Makefile.am
+++ b/libX11/man/Makefile.am
@@ -2,34 +2,47 @@ SUBDIRS = xkb
libmandir = $(LIB_MAN_DIR)
-LIB_MAN_DIR_SUFFIX = $(LIB_MAN_DIR:@mandir@/man%=%)
-
libman_PRE = \
+ $(all_shadows:=.man) \
+ $(file_shadows:=.man) \
AllPlanes.man \
BlackPixelOfScreen.man \
DisplayOfCCC.man \
ImageByteOrder.man \
IsCursorKey.man \
+ XAddConnectionWatch.man \
+ XAddHost.man \
XAllocClassHint.man \
+ XAllocColor.man \
XAllocIconSize.man \
- XAllocStandardColormap.man \
XAllocSizeHints.man \
+ XAllocStandardColormap.man \
XAllocWMHints.man \
- XAddHost.man \
- XAllocColor.man \
XAllowEvents.man \
XAnyEvent.man \
XButtonEvent.man \
XChangeKeyboardControl.man \
XChangeKeyboardMapping.man \
- XClientMessageEvent.man \
XChangePointerControl.man \
XChangeSaveSet.man \
XChangeWindowAttributes.man \
- XCreateWindowEvent.man \
XCirculateEvent.man \
XCirculateRequestEvent.man \
XClearArea.man \
+ XClientMessageEvent.man \
+ XcmsAllocColor.man \
+ XcmsCCCOfColormap.man \
+ XcmsCIELabQueryMaxC.man \
+ XcmsCIELuvQueryMaxC.man \
+ XcmsColor.man \
+ XcmsConvertColors.man \
+ XcmsCreateCCC.man \
+ XcmsDefaultCCC.man \
+ XcmsQueryBlack.man \
+ XcmsQueryColor.man \
+ XcmsSetWhitePoint.man \
+ XcmsStoreColor.man \
+ XcmsTekHVCQueryMaxC.man \
XColormapEvent.man \
XConfigureEvent.man \
XConfigureRequestEvent.man \
@@ -40,14 +53,14 @@ libman_PRE = \
XCreateFontSet.man \
XCreateGC.man \
XCreateIC.man \
- XInitImage.man \
XCreateOC.man \
XCreatePixmap.man \
XCreateRegion.man \
+ XCreateWindowEvent.man \
XCreateWindow.man \
XCrossingEvent.man \
- XDestroyWindowEvent.man \
XDefineCursor.man \
+ XDestroyWindowEvent.man \
XDestroyWindow.man \
XDrawArc.man \
XDrawImageString.man \
@@ -57,96 +70,106 @@ libman_PRE = \
XDrawString.man \
XDrawText.man \
XEmptyRegion.man \
- XrmEnumerateDatabase.man \
- XExtentsOfFontSet.man \
XErrorEvent.man \
XExposeEvent.man \
- XFocusChangeEvent.man \
- XFilterEvent.man \
- XFontSetExtents.man \
+ XExtentsOfFontSet.man \
XFillRectangle.man \
+ XFilterEvent.man \
XFlush.man \
+ XFocusChangeEvent.man \
+ XFontSetExtents.man \
XFontsOfFontSet.man \
XFree.man \
- XGraphicsExposeEvent.man \
- XGravityEvent.man \
- XrmGetFileDatabase.man \
- XrmGetResource.man \
XGetEventData.man \
XGetVisualInfo.man \
XGetWindowAttributes.man \
XGetWindowProperty.man \
XGetXCBConnection.man \
XGrabButton.man \
- XGrabKey.man \
XGrabKeyboard.man \
+ XGrabKey.man \
XGrabPointer.man \
XGrabServer.man \
+ XGraphicsExposeEvent.man \
+ XGravityEvent.man \
XIconifyWindow.man \
XIfEvent.man \
- XrmInitialize.man \
+ XInitImage.man \
+ XInitThreads.man \
XInstallColormap.man \
- XAddConnectionWatch.man \
- XIntersectRegion.man \
XInternAtom.man \
+ XIntersectRegion.man \
XKeymapEvent.man \
XListFonts.man \
XLoadFont.man \
XLookupKeysym.man \
- XrmMergeDatabases.man \
XMapEvent.man \
XMapRequestEvent.man \
XMapWindow.man \
+ XmbDrawImageString.man \
+ XmbDrawString.man \
+ XmbDrawText.man \
+ XmbLookupString.man \
+ XmbResetIC.man \
+ XmbTextEscapement.man \
+ XmbTextExtents.man \
+ XmbTextListToTextProperty.man \
+ XmbTextPerCharExtents.man \
XNextEvent.man \
XNoOp.man \
XOpenDisplay.man \
XOpenIM.man \
XOpenOM.man \
- XPropertyEvent.man \
XParseGeometry.man \
XPolygonRegion.man \
+ XPropertyEvent.man \
XPutBackEvent.man \
XPutImage.man \
- XrmPutResource.man \
XQueryBestSize.man \
XQueryColor.man \
XQueryExtension.man \
XQueryPointer.man \
XQueryTree.man \
- XReparentEvent.man \
- XResourceManagerString.man \
- XResizeRequestEvent.man \
XRaiseWindow.man \
XReadBitmapFile.man \
XRecolorCursor.man \
+ XReparentEvent.man \
XReparentWindow.man \
- XSelectionClearEvent.man \
+ XResizeRequestEvent.man \
+ XResourceManagerString.man \
+ XrmEnumerateDatabase.man \
+ XrmGetFileDatabase.man \
+ XrmGetResource.man \
+ XrmInitialize.man \
+ XrmMergeDatabases.man \
+ XrmPutResource.man \
+ XrmUniqueQuark.man \
XSaveContext.man \
- XSelectionEvent.man \
- XSetICFocus.man \
- XSetICValues.man \
XSelectInput.man \
- XStringListToTextProperty.man \
+ XSelectionClearEvent.man \
+ XSelectionEvent.man \
XSelectionRequestEvent.man \
+ XSendEvent.man \
XSetArcMode.man \
XSetClipOrigin.man \
XSetCloseDownMode.man \
XSetCommand.man \
XSetErrorHandler.man \
XSetEventQueueOwner.man \
- XSendEvent.man \
XSetFillStyle.man \
XSetFont.man \
XSetFontPath.man \
+ XSetICFocus.man \
+ XSetICValues.man \
XSetInputFocus.man \
XSetLineAttributes.man \
XSetPointerMapping.man \
XSetScreenSaver.man \
XSetSelectionOwner.man \
XSetState.man \
- XSetTransientForHint.man \
XSetTextProperty.man \
XSetTile.man \
+ XSetTransientForHint.man \
XSetWMClientMachine.man \
XSetWMColormapWindows.man \
XSetWMIconName.man \
@@ -155,45 +178,21 @@ libman_PRE = \
XSetWMProtocols.man \
XStoreBytes.man \
XStoreColors.man \
+ XStringListToTextProperty.man \
XStringToKeysym.man \
XSupportsLocale.man \
XSynchronize.man \
- XmbTextListToTextProperty.man \
XTextExtents.man \
XTextWidth.man \
- XInitThreads.man \
XTranslateCoordinates.man \
- XrmUniqueQuark.man \
XUnmapEvent.man \
XUnmapWindow.man \
XVaCreateNestedList.man \
XVisibilityEvent.man \
- XWarpPointer.man \
- XcmsCCCOfColormap.man \
- XcmsAllocColor.man \
- XcmsConvertColors.man \
- XcmsColor.man \
- XcmsCreateCCC.man \
- XcmsDefaultCCC.man \
- XcmsCIELabQueryMaxC.man \
- XcmsCIELuvQueryMaxC.man \
- XcmsQueryBlack.man \
- XcmsQueryColor.man \
- XcmsStoreColor.man \
- XcmsSetWhitePoint.man \
- XcmsTekHVCQueryMaxC.man \
- XmbDrawImageString.man \
- XmbDrawString.man \
- XmbDrawText.man \
- XmbLookupString.man \
- XmbResetIC.man \
- XmbTextEscapement.man \
- XmbTextExtents.man \
- XmbTextPerCharExtents.man
+ XWarpPointer.man
filemandir = $(FILE_MAN_DIR)
fileman_PRE = Compose.man
-FILE_MAN_DIR_SUFFIX = $(FILE_MAN_DIR:@mandir@/man%=%)
if MANPAGES
libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \
@@ -1076,580 +1075,9 @@ XmbTextPerCharExtents_shadows = \
XwcTextPerCharExtents \
Xutf8TextPerCharExtents
-AllPlanes_shadowmen = $(AllPlanes_shadows:=.@LIB_MAN_SUFFIX@)
-$(AllPlanes_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/AllPlanes.$(LIB_MAN_SUFFIX)" > $@
-
-BlackPixelOfScreen_shadowmen = $(BlackPixelOfScreen_shadows:=.@LIB_MAN_SUFFIX@)
-$(BlackPixelOfScreen_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/BlackPixelOfScreen.$(LIB_MAN_SUFFIX)" > $@
-
-DisplayOfCCC_shadowmen = $(DisplayOfCCC_shadows:=.@LIB_MAN_SUFFIX@)
-$(DisplayOfCCC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/DisplayOfCCC.$(LIB_MAN_SUFFIX)" > $@
-
-ImageByteOrder_shadowmen = $(ImageByteOrder_shadows:=.@LIB_MAN_SUFFIX@)
-$(ImageByteOrder_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/ImageByteOrder.$(LIB_MAN_SUFFIX)" > $@
-
-IsCursorKey_shadowmen = $(IsCursorKey_shadows:=.@LIB_MAN_SUFFIX@)
-$(IsCursorKey_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/IsCursorKey.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocClassHint_shadowmen = $(XAllocClassHint_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocClassHint_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocClassHint.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocIconSize_shadowmen = $(XAllocIconSize_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocIconSize_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocIconSize.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocStandardColormap_shadowmen = $(XAllocStandardColormap_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocStandardColormap_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocStandardColormap.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocSizeHints_shadowmen = $(XAllocSizeHints_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocSizeHints_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocSizeHints.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocWMHints_shadowmen = $(XAllocWMHints_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocWMHints_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocWMHints.$(LIB_MAN_SUFFIX)" > $@
-
-XAddHost_shadowmen = $(XAddHost_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAddHost_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAddHost.$(LIB_MAN_SUFFIX)" > $@
-
-XAllocColor_shadowmen = $(XAllocColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAllocColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAllocColor.$(LIB_MAN_SUFFIX)" > $@
-
-XAnyEvent_shadowmen = $(XAnyEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAnyEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAnyEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XButtonEvent_shadowmen = $(XButtonEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XButtonEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XButtonEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XChangeKeyboardControl_shadowmen = $(XChangeKeyboardControl_shadows:=.@LIB_MAN_SUFFIX@)
-$(XChangeKeyboardControl_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XChangeKeyboardControl.$(LIB_MAN_SUFFIX)" > $@
-
-XChangeKeyboardMapping_shadowmen = $(XChangeKeyboardMapping_shadows:=.@LIB_MAN_SUFFIX@)
-$(XChangeKeyboardMapping_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XChangeKeyboardMapping.$(LIB_MAN_SUFFIX)" > $@
-
-XChangePointerControl_shadowmen = $(XChangePointerControl_shadows:=.@LIB_MAN_SUFFIX@)
-$(XChangePointerControl_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XChangePointerControl.$(LIB_MAN_SUFFIX)" > $@
-
-XChangeSaveSet_shadowmen = $(XChangeSaveSet_shadows:=.@LIB_MAN_SUFFIX@)
-$(XChangeSaveSet_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XChangeSaveSet.$(LIB_MAN_SUFFIX)" > $@
-
-XChangeWindowAttributes_shadowmen = $(XChangeWindowAttributes_shadows:=.@LIB_MAN_SUFFIX@)
-$(XChangeWindowAttributes_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XChangeWindowAttributes.$(LIB_MAN_SUFFIX)" > $@
-
-XClearArea_shadowmen = $(XClearArea_shadows:=.@LIB_MAN_SUFFIX@)
-$(XClearArea_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XClearArea.$(LIB_MAN_SUFFIX)" > $@
-
-XConfigureWindow_shadowmen = $(XConfigureWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XConfigureWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XConfigureWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XCopyArea_shadowmen = $(XCopyArea_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCopyArea_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCopyArea.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateColormap_shadowmen = $(XCreateColormap_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateColormap_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateColormap.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateFontCursor_shadowmen = $(XCreateFontCursor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateFontCursor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateFontCursor.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateFontSet_shadowmen = $(XCreateFontSet_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateFontSet_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateFontSet.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateGC_shadowmen = $(XCreateGC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateGC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateGC.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateIC_shadowmen = $(XCreateIC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateIC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateIC.$(LIB_MAN_SUFFIX)" > $@
-
-XInitImage_shadowmen = $(XInitImage_shadows:=.@LIB_MAN_SUFFIX@)
-$(XInitImage_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XInitImage.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateOC_shadowmen = $(XCreateOC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateOC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateOC.$(LIB_MAN_SUFFIX)" > $@
-
-XCreatePixmap_shadowmen = $(XCreatePixmap_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreatePixmap_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreatePixmap.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateRegion_shadowmen = $(XCreateRegion_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateRegion_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateRegion.$(LIB_MAN_SUFFIX)" > $@
-
-XCreateWindow_shadowmen = $(XCreateWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XCreateWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XCreateWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XDefineCursor_shadowmen = $(XDefineCursor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDefineCursor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDefineCursor.$(LIB_MAN_SUFFIX)" > $@
-
-XDestroyWindow_shadowmen = $(XDestroyWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDestroyWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDestroyWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawArc_shadowmen = $(XDrawArc_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawArc_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawArc.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawImageString_shadowmen = $(XDrawImageString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawImageString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawImageString.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawLine_shadowmen = $(XDrawLine_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawLine_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawLine.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawPoint_shadowmen = $(XDrawPoint_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawPoint_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawPoint.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawRectangle_shadowmen = $(XDrawRectangle_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawRectangle_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawRectangle.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawString_shadowmen = $(XDrawString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawString.$(LIB_MAN_SUFFIX)" > $@
-
-XDrawText_shadowmen = $(XDrawText_shadows:=.@LIB_MAN_SUFFIX@)
-$(XDrawText_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XDrawText.$(LIB_MAN_SUFFIX)" > $@
-
-XEmptyRegion_shadowmen = $(XEmptyRegion_shadows:=.@LIB_MAN_SUFFIX@)
-$(XEmptyRegion_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XEmptyRegion.$(LIB_MAN_SUFFIX)" > $@
-
-XFillRectangle_shadowmen = $(XFillRectangle_shadows:=.@LIB_MAN_SUFFIX@)
-$(XFillRectangle_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XFillRectangle.$(LIB_MAN_SUFFIX)" > $@
-
-XFlush_shadowmen = $(XFlush_shadows:=.@LIB_MAN_SUFFIX@)
-$(XFlush_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XFlush.$(LIB_MAN_SUFFIX)" > $@
-
-XFontsOfFontSet_shadowmen = $(XFontsOfFontSet_shadows:=.@LIB_MAN_SUFFIX@)
-$(XFontsOfFontSet_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XFontsOfFontSet.$(LIB_MAN_SUFFIX)" > $@
-
-XGraphicsExposeEvent_shadowmen = $(XGraphicsExposeEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGraphicsExposeEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGraphicsExposeEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XrmGetFileDatabase_shadowmen = $(XrmGetFileDatabase_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmGetFileDatabase_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmGetFileDatabase.$(LIB_MAN_SUFFIX)" > $@
-
-XrmGetResource_shadowmen = $(XrmGetResource_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmGetResource_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmGetResource.$(LIB_MAN_SUFFIX)" > $@
-
-XGetEventData_shadowmen = $(XGetEventData_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGetEventData_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGetEventData.$(LIB_MAN_SUFFIX)" > $@
-
-XGetVisualInfo_shadowmen = $(XGetVisualInfo_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGetVisualInfo_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGetVisualInfo.$(LIB_MAN_SUFFIX)" > $@
-
-XGetWindowAttributes_shadowmen = $(XGetWindowAttributes_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGetWindowAttributes_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGetWindowAttributes.$(LIB_MAN_SUFFIX)" > $@
-
-XGetWindowProperty_shadowmen = $(XGetWindowProperty_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGetWindowProperty_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGetWindowProperty.$(LIB_MAN_SUFFIX)" > $@
-
-XGrabButton_shadowmen = $(XGrabButton_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGrabButton_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGrabButton.$(LIB_MAN_SUFFIX)" > $@
-
-XGrabKey_shadowmen = $(XGrabKey_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGrabKey_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGrabKey.$(LIB_MAN_SUFFIX)" > $@
-
-XGrabKeyboard_shadowmen = $(XGrabKeyboard_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGrabKeyboard_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGrabKeyboard.$(LIB_MAN_SUFFIX)" > $@
-
-XGrabPointer_shadowmen = $(XGrabPointer_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGrabPointer_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGrabPointer.$(LIB_MAN_SUFFIX)" > $@
-
-XGrabServer_shadowmen = $(XGrabServer_shadows:=.@LIB_MAN_SUFFIX@)
-$(XGrabServer_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XGrabServer.$(LIB_MAN_SUFFIX)" > $@
-
-XIconifyWindow_shadowmen = $(XIconifyWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XIconifyWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XIconifyWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XIfEvent_shadowmen = $(XIfEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XIfEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XIfEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XrmInitialize_shadowmen = $(XrmInitialize_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmInitialize_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmInitialize.$(LIB_MAN_SUFFIX)" > $@
-
-XInstallColormap_shadowmen = $(XInstallColormap_shadows:=.@LIB_MAN_SUFFIX@)
-$(XInstallColormap_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XInstallColormap.$(LIB_MAN_SUFFIX)" > $@
-
-XAddConnectionWatch_shadowmen = $(XAddConnectionWatch_shadows:=.@LIB_MAN_SUFFIX@)
-$(XAddConnectionWatch_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XAddConnectionWatch.$(LIB_MAN_SUFFIX)" > $@
-
-XIntersectRegion_shadowmen = $(XIntersectRegion_shadows:=.@LIB_MAN_SUFFIX@)
-$(XIntersectRegion_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XIntersectRegion.$(LIB_MAN_SUFFIX)" > $@
-
-XInternAtom_shadowmen = $(XInternAtom_shadows:=.@LIB_MAN_SUFFIX@)
-$(XInternAtom_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XInternAtom.$(LIB_MAN_SUFFIX)" > $@
-
-XListFonts_shadowmen = $(XListFonts_shadows:=.@LIB_MAN_SUFFIX@)
-$(XListFonts_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XListFonts.$(LIB_MAN_SUFFIX)" > $@
-
-XLoadFont_shadowmen = $(XLoadFont_shadows:=.@LIB_MAN_SUFFIX@)
-$(XLoadFont_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XLoadFont.$(LIB_MAN_SUFFIX)" > $@
-
-XLookupKeysym_shadowmen = $(XLookupKeysym_shadows:=.@LIB_MAN_SUFFIX@)
-$(XLookupKeysym_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XLookupKeysym.$(LIB_MAN_SUFFIX)" > $@
-
-XrmMergeDatabases_shadowmen = $(XrmMergeDatabases_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmMergeDatabases_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmMergeDatabases.$(LIB_MAN_SUFFIX)" > $@
-
-XMapEvent_shadowmen = $(XMapEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XMapEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XMapEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XMapWindow_shadowmen = $(XMapWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XMapWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XMapWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XNextEvent_shadowmen = $(XNextEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XNextEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XNextEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XOpenDisplay_shadowmen = $(XOpenDisplay_shadows:=.@LIB_MAN_SUFFIX@)
-$(XOpenDisplay_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XOpenDisplay.$(LIB_MAN_SUFFIX)" > $@
-
-XOpenIM_shadowmen = $(XOpenIM_shadows:=.@LIB_MAN_SUFFIX@)
-$(XOpenIM_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XOpenIM.$(LIB_MAN_SUFFIX)" > $@
-
-XOpenOM_shadowmen = $(XOpenOM_shadows:=.@LIB_MAN_SUFFIX@)
-$(XOpenOM_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XOpenOM.$(LIB_MAN_SUFFIX)" > $@
-
-XParseGeometry_shadowmen = $(XParseGeometry_shadows:=.@LIB_MAN_SUFFIX@)
-$(XParseGeometry_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XParseGeometry.$(LIB_MAN_SUFFIX)" > $@
-
-XPolygonRegion_shadowmen = $(XPolygonRegion_shadows:=.@LIB_MAN_SUFFIX@)
-$(XPolygonRegion_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XPolygonRegion.$(LIB_MAN_SUFFIX)" > $@
-
-XPutImage_shadowmen = $(XPutImage_shadows:=.@LIB_MAN_SUFFIX@)
-$(XPutImage_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XPutImage.$(LIB_MAN_SUFFIX)" > $@
-
-XrmPutResource_shadowmen = $(XrmPutResource_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmPutResource_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmPutResource.$(LIB_MAN_SUFFIX)" > $@
-
-XQueryBestSize_shadowmen = $(XQueryBestSize_shadows:=.@LIB_MAN_SUFFIX@)
-$(XQueryBestSize_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XQueryBestSize.$(LIB_MAN_SUFFIX)" > $@
-
-XQueryColor_shadowmen = $(XQueryColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XQueryColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XQueryColor.$(LIB_MAN_SUFFIX)" > $@
-
-XQueryExtension_shadowmen = $(XQueryExtension_shadows:=.@LIB_MAN_SUFFIX@)
-$(XQueryExtension_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XQueryExtension.$(LIB_MAN_SUFFIX)" > $@
-
-XResourceManagerString_shadowmen = $(XResourceManagerString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XResourceManagerString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XResourceManagerString.$(LIB_MAN_SUFFIX)" > $@
-
-XRaiseWindow_shadowmen = $(XRaiseWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XRaiseWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XRaiseWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XReadBitmapFile_shadowmen = $(XReadBitmapFile_shadows:=.@LIB_MAN_SUFFIX@)
-$(XReadBitmapFile_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XReadBitmapFile.$(LIB_MAN_SUFFIX)" > $@
-
-XRecolorCursor_shadowmen = $(XRecolorCursor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XRecolorCursor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XRecolorCursor.$(LIB_MAN_SUFFIX)" > $@
-
-XSaveContext_shadowmen = $(XSaveContext_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSaveContext_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSaveContext.$(LIB_MAN_SUFFIX)" > $@
-
-XSetICFocus_shadowmen = $(XSetICFocus_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetICFocus_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetICFocus.$(LIB_MAN_SUFFIX)" > $@
-
-XSetICValues_shadowmen = $(XSetICValues_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetICValues_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetICValues.$(LIB_MAN_SUFFIX)" > $@
-
-XStringListToTextProperty_shadowmen = $(XStringListToTextProperty_shadows:=.@LIB_MAN_SUFFIX@)
-$(XStringListToTextProperty_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XStringListToTextProperty.$(LIB_MAN_SUFFIX)" > $@
-
-XSetArcMode_shadowmen = $(XSetArcMode_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetArcMode_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetArcMode.$(LIB_MAN_SUFFIX)" > $@
-
-XSetClipOrigin_shadowmen = $(XSetClipOrigin_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetClipOrigin_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetClipOrigin.$(LIB_MAN_SUFFIX)" > $@
-
-XSetCloseDownMode_shadowmen = $(XSetCloseDownMode_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetCloseDownMode_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetCloseDownMode.$(LIB_MAN_SUFFIX)" > $@
-
-XSetCommand_shadowmen = $(XSetCommand_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetCommand_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetCommand.$(LIB_MAN_SUFFIX)" > $@
-
-XSetErrorHandler_shadowmen = $(XSetErrorHandler_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetErrorHandler_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetErrorHandler.$(LIB_MAN_SUFFIX)" > $@
-
-XSendEvent_shadowmen = $(XSendEvent_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSendEvent_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSendEvent.$(LIB_MAN_SUFFIX)" > $@
-
-XSetFillStyle_shadowmen = $(XSetFillStyle_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetFillStyle_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetFillStyle.$(LIB_MAN_SUFFIX)" > $@
-
-XSetFontPath_shadowmen = $(XSetFontPath_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetFontPath_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetFontPath.$(LIB_MAN_SUFFIX)" > $@
-
-XSetInputFocus_shadowmen = $(XSetInputFocus_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetInputFocus_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetInputFocus.$(LIB_MAN_SUFFIX)" > $@
-
-XSetLineAttributes_shadowmen = $(XSetLineAttributes_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetLineAttributes_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetLineAttributes.$(LIB_MAN_SUFFIX)" > $@
-
-XSetPointerMapping_shadowmen = $(XSetPointerMapping_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetPointerMapping_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetPointerMapping.$(LIB_MAN_SUFFIX)" > $@
-
-XSetScreenSaver_shadowmen = $(XSetScreenSaver_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetScreenSaver_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetScreenSaver.$(LIB_MAN_SUFFIX)" > $@
-
-XSetSelectionOwner_shadowmen = $(XSetSelectionOwner_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetSelectionOwner_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetSelectionOwner.$(LIB_MAN_SUFFIX)" > $@
-
-XSetState_shadowmen = $(XSetState_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetState_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetState.$(LIB_MAN_SUFFIX)" > $@
-
-XSetTransientForHint_shadowmen = $(XSetTransientForHint_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetTransientForHint_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetTransientForHint.$(LIB_MAN_SUFFIX)" > $@
-
-XSetTextProperty_shadowmen = $(XSetTextProperty_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetTextProperty_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetTextProperty.$(LIB_MAN_SUFFIX)" > $@
-
-XSetTile_shadowmen = $(XSetTile_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetTile_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetTile.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMClientMachine_shadowmen = $(XSetWMClientMachine_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMClientMachine_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMClientMachine.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMColormapWindows_shadowmen = $(XSetWMColormapWindows_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMColormapWindows_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMColormapWindows.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMIconName_shadowmen = $(XSetWMIconName_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMIconName_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMIconName.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMName_shadowmen = $(XSetWMName_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMName_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMName.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMProperties_shadowmen = $(XSetWMProperties_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMProperties_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMProperties.$(LIB_MAN_SUFFIX)" > $@
-
-XSetWMProtocols_shadowmen = $(XSetWMProtocols_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSetWMProtocols_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSetWMProtocols.$(LIB_MAN_SUFFIX)" > $@
-
-XStoreBytes_shadowmen = $(XStoreBytes_shadows:=.@LIB_MAN_SUFFIX@)
-$(XStoreBytes_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XStoreBytes.$(LIB_MAN_SUFFIX)" > $@
-
-XStoreColors_shadowmen = $(XStoreColors_shadows:=.@LIB_MAN_SUFFIX@)
-$(XStoreColors_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XStoreColors.$(LIB_MAN_SUFFIX)" > $@
-
-XStringToKeysym_shadowmen = $(XStringToKeysym_shadows:=.@LIB_MAN_SUFFIX@)
-$(XStringToKeysym_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XStringToKeysym.$(LIB_MAN_SUFFIX)" > $@
-
-XSupportsLocale_shadowmen = $(XSupportsLocale_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSupportsLocale_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSupportsLocale.$(LIB_MAN_SUFFIX)" > $@
-
-XSynchronize_shadowmen = $(XSynchronize_shadows:=.@LIB_MAN_SUFFIX@)
-$(XSynchronize_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XSynchronize.$(LIB_MAN_SUFFIX)" > $@
-
-XmbTextListToTextProperty_shadowmen = $(XmbTextListToTextProperty_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbTextListToTextProperty_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbTextListToTextProperty.$(LIB_MAN_SUFFIX)" > $@
-
-XTextExtents_shadowmen = $(XTextExtents_shadows:=.@LIB_MAN_SUFFIX@)
-$(XTextExtents_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XTextExtents.$(LIB_MAN_SUFFIX)" > $@
-
-XTextWidth_shadowmen = $(XTextWidth_shadows:=.@LIB_MAN_SUFFIX@)
-$(XTextWidth_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XTextWidth.$(LIB_MAN_SUFFIX)" > $@
-
-XInitThreads_shadowmen = $(XInitThreads_shadows:=.@LIB_MAN_SUFFIX@)
-$(XInitThreads_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XInitThreads.$(LIB_MAN_SUFFIX)" > $@
-
-XrmUniqueQuark_shadowmen = $(XrmUniqueQuark_shadows:=.@LIB_MAN_SUFFIX@)
-$(XrmUniqueQuark_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XrmUniqueQuark.$(LIB_MAN_SUFFIX)" > $@
-
-XUnmapWindow_shadowmen = $(XUnmapWindow_shadows:=.@LIB_MAN_SUFFIX@)
-$(XUnmapWindow_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XUnmapWindow.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsCCCOfColormap_shadowmen = $(XcmsCCCOfColormap_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsCCCOfColormap_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsCCCOfColormap.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsAllocColor_shadowmen = $(XcmsAllocColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsAllocColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsAllocColor.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsColor_shadowmen = $(XcmsColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsColor.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsCreateCCC_shadowmen = $(XcmsCreateCCC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsCreateCCC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsCreateCCC.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsCIELabQueryMaxC_shadowmen = $(XcmsCIELabQueryMaxC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsCIELabQueryMaxC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsCIELabQueryMaxC.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsCIELuvQueryMaxC_shadowmen = $(XcmsCIELuvQueryMaxC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsCIELuvQueryMaxC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsCIELuvQueryMaxC.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsQueryBlack_shadowmen = $(XcmsQueryBlack_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsQueryBlack_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsQueryBlack.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsQueryColor_shadowmen = $(XcmsQueryColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsQueryColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsQueryColor.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsStoreColor_shadowmen = $(XcmsStoreColor_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsStoreColor_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsStoreColor.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsSetWhitePoint_shadowmen = $(XcmsSetWhitePoint_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsSetWhitePoint_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsSetWhitePoint.$(LIB_MAN_SUFFIX)" > $@
-
-XcmsTekHVCQueryMaxC_shadowmen = $(XcmsTekHVCQueryMaxC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XcmsTekHVCQueryMaxC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XcmsTekHVCQueryMaxC.$(LIB_MAN_SUFFIX)" > $@
-
-XmbDrawImageString_shadowmen = $(XmbDrawImageString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbDrawImageString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbDrawImageString.$(LIB_MAN_SUFFIX)" > $@
-
-XmbDrawString_shadowmen = $(XmbDrawString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbDrawString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbDrawString.$(LIB_MAN_SUFFIX)" > $@
-
-XmbDrawText_shadowmen = $(XmbDrawText_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbDrawText_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbDrawText.$(LIB_MAN_SUFFIX)" > $@
-
-XmbLookupString_shadowmen = $(XmbLookupString_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbLookupString_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbLookupString.$(LIB_MAN_SUFFIX)" > $@
-
-XmbResetIC_shadowmen = $(XmbResetIC_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbResetIC_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbResetIC.$(LIB_MAN_SUFFIX)" > $@
-
-XmbTextEscapement_shadowmen = $(XmbTextEscapement_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbTextEscapement_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbTextEscapement.$(LIB_MAN_SUFFIX)" > $@
-
-XmbTextExtents_shadowmen = $(XmbTextExtents_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbTextExtents_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbTextExtents.$(LIB_MAN_SUFFIX)" > $@
-
-XmbTextPerCharExtents_shadowmen = $(XmbTextPerCharExtents_shadows:=.@LIB_MAN_SUFFIX@)
-$(XmbTextPerCharExtents_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/XmbTextPerCharExtents.$(LIB_MAN_SUFFIX)" > $@
-
-file_shadows = \
+file_shadows = \
$(Compose_shadows)
Compose_shadows = \
XCompose
-Compose_shadowmen = $(Compose_shadows:=.@FILE_MAN_SUFFIX@)
-$(Compose_shadowmen):
- $(AM_V_GEN)echo ".so man$(FILE_MAN_DIR_SUFFIX)/Compose.$(FILE_MAN_SUFFIX)" > $@
diff --git a/libX11/man/MaxCmapsOfScreen.man b/libX11/man/MaxCmapsOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/MaxCmapsOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/MinCmapsOfScreen.man b/libX11/man/MinCmapsOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/MinCmapsOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/NextRequest.man b/libX11/man/NextRequest.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/NextRequest.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/PlanesOfScreen.man b/libX11/man/PlanesOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/PlanesOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/ProtocolRevision.man b/libX11/man/ProtocolRevision.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ProtocolRevision.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/ProtocolVersion.man b/libX11/man/ProtocolVersion.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ProtocolVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/QLength.man b/libX11/man/QLength.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/QLength.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/RootWindow.man b/libX11/man/RootWindow.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/RootWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/RootWindowOfScreen.man b/libX11/man/RootWindowOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/RootWindowOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/ScreenCount.man b/libX11/man/ScreenCount.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ScreenCount.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/ScreenNumberOfCCC.man b/libX11/man/ScreenNumberOfCCC.man
new file mode 100644
index 000000000..5feb8b936
--- /dev/null
+++ b/libX11/man/ScreenNumberOfCCC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__
diff --git a/libX11/man/ScreenOfDisplay.man b/libX11/man/ScreenOfDisplay.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ScreenOfDisplay.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/ScreenWhitePointOfCCC.man b/libX11/man/ScreenWhitePointOfCCC.man
new file mode 100644
index 000000000..5feb8b936
--- /dev/null
+++ b/libX11/man/ScreenWhitePointOfCCC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__
diff --git a/libX11/man/ServerVendor.man b/libX11/man/ServerVendor.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/ServerVendor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/VendorRelease.man b/libX11/man/VendorRelease.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/VendorRelease.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/VisualOfCCC.man b/libX11/man/VisualOfCCC.man
new file mode 100644
index 000000000..5feb8b936
--- /dev/null
+++ b/libX11/man/VisualOfCCC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__
diff --git a/libX11/man/WhitePixel.man b/libX11/man/WhitePixel.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/WhitePixel.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/WhitePixelOfScreen.man b/libX11/man/WhitePixelOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/WhitePixelOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/WidthMMOfScreen.man b/libX11/man/WidthMMOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/WidthMMOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/WidthOfScreen.man b/libX11/man/WidthOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/WidthOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/XActivateScreenSaver.man b/libX11/man/XActivateScreenSaver.man
new file mode 100644
index 000000000..35198d594
--- /dev/null
+++ b/libX11/man/XActivateScreenSaver.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__
diff --git a/libX11/man/XAddHosts.man b/libX11/man/XAddHosts.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XAddHosts.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XAddPixel.man b/libX11/man/XAddPixel.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XAddPixel.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XAddToSaveSet.man b/libX11/man/XAddToSaveSet.man
new file mode 100644
index 000000000..0ea6bfcfc
--- /dev/null
+++ b/libX11/man/XAddToSaveSet.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeSaveSet.__libmansuffix__
diff --git a/libX11/man/XAllocColorCells.man b/libX11/man/XAllocColorCells.man
new file mode 100644
index 000000000..843a17fc9
--- /dev/null
+++ b/libX11/man/XAllocColorCells.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocColor.__libmansuffix__
diff --git a/libX11/man/XAllocColorPlanes.man b/libX11/man/XAllocColorPlanes.man
new file mode 100644
index 000000000..843a17fc9
--- /dev/null
+++ b/libX11/man/XAllocColorPlanes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocColor.__libmansuffix__
diff --git a/libX11/man/XAllocNamedColor.man b/libX11/man/XAllocNamedColor.man
new file mode 100644
index 000000000..843a17fc9
--- /dev/null
+++ b/libX11/man/XAllocNamedColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocColor.__libmansuffix__
diff --git a/libX11/man/XArc.man b/libX11/man/XArc.man
new file mode 100644
index 000000000..71f63e1e2
--- /dev/null
+++ b/libX11/man/XArc.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawArc.__libmansuffix__
diff --git a/libX11/man/XAutoRepeatOff.man b/libX11/man/XAutoRepeatOff.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XAutoRepeatOff.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XAutoRepeatOn.man b/libX11/man/XAutoRepeatOn.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XAutoRepeatOn.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XBaseFontNameListOfFontSet.man b/libX11/man/XBaseFontNameListOfFontSet.man
new file mode 100644
index 000000000..48ea35b67
--- /dev/null
+++ b/libX11/man/XBaseFontNameListOfFontSet.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__
diff --git a/libX11/man/XBell.man b/libX11/man/XBell.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XBell.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XChangeActivePointerGrab.man b/libX11/man/XChangeActivePointerGrab.man
new file mode 100644
index 000000000..93259b8c3
--- /dev/null
+++ b/libX11/man/XChangeActivePointerGrab.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabPointer.__libmansuffix__
diff --git a/libX11/man/XChangeGC.man b/libX11/man/XChangeGC.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XChangeGC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XChangeProperty.man b/libX11/man/XChangeProperty.man
new file mode 100644
index 000000000..e265d7d69
--- /dev/null
+++ b/libX11/man/XChangeProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__
diff --git a/libX11/man/XChar2b.man b/libX11/man/XChar2b.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XChar2b.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XCharStruct.man b/libX11/man/XCharStruct.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XCharStruct.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XCheckIfEvent.man b/libX11/man/XCheckIfEvent.man
new file mode 100644
index 000000000..5970130fb
--- /dev/null
+++ b/libX11/man/XCheckIfEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIfEvent.__libmansuffix__
diff --git a/libX11/man/XCheckMaskEvent.man b/libX11/man/XCheckMaskEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XCheckMaskEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XCheckTypedEvent.man b/libX11/man/XCheckTypedEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XCheckTypedEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XCheckTypedWindowEvent.man b/libX11/man/XCheckTypedWindowEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XCheckTypedWindowEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XCheckWindowEvent.man b/libX11/man/XCheckWindowEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XCheckWindowEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XCirculateSubwindows.man b/libX11/man/XCirculateSubwindows.man
new file mode 100644
index 000000000..61d7a2348
--- /dev/null
+++ b/libX11/man/XCirculateSubwindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRaiseWindow.__libmansuffix__
diff --git a/libX11/man/XCirculateSubwindowsDown.man b/libX11/man/XCirculateSubwindowsDown.man
new file mode 100644
index 000000000..61d7a2348
--- /dev/null
+++ b/libX11/man/XCirculateSubwindowsDown.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRaiseWindow.__libmansuffix__
diff --git a/libX11/man/XCirculateSubwindowsUp.man b/libX11/man/XCirculateSubwindowsUp.man
new file mode 100644
index 000000000..61d7a2348
--- /dev/null
+++ b/libX11/man/XCirculateSubwindowsUp.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRaiseWindow.__libmansuffix__
diff --git a/libX11/man/XClassHint.man b/libX11/man/XClassHint.man
new file mode 100644
index 000000000..fc953a21b
--- /dev/null
+++ b/libX11/man/XClassHint.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocClassHint.__libmansuffix__
diff --git a/libX11/man/XClearWindow.man b/libX11/man/XClearWindow.man
new file mode 100644
index 000000000..ca4582acc
--- /dev/null
+++ b/libX11/man/XClearWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XClearArea.__libmansuffix__
diff --git a/libX11/man/XClipBox.man b/libX11/man/XClipBox.man
new file mode 100644
index 000000000..06c8f86f2
--- /dev/null
+++ b/libX11/man/XClipBox.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XPolygonRegion.__libmansuffix__
diff --git a/libX11/man/XCloseDisplay.man b/libX11/man/XCloseDisplay.man
new file mode 100644
index 000000000..6e5e6c03a
--- /dev/null
+++ b/libX11/man/XCloseDisplay.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenDisplay.__libmansuffix__
diff --git a/libX11/man/XCloseIM.man b/libX11/man/XCloseIM.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XCloseIM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XCloseOM.man b/libX11/man/XCloseOM.man
new file mode 100644
index 000000000..d7e1adb03
--- /dev/null
+++ b/libX11/man/XCloseOM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenOM.__libmansuffix__
diff --git a/libX11/man/XColor.man b/libX11/man/XColor.man
new file mode 100644
index 000000000..7a214a7a8
--- /dev/null
+++ b/libX11/man/XColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateColormap.__libmansuffix__
diff --git a/libX11/man/XCompose.man b/libX11/man/XCompose.man
new file mode 100644
index 000000000..09e458290
--- /dev/null
+++ b/libX11/man/XCompose.man
@@ -0,0 +1 @@
+.so man__filemansuffix__/Compose.__filemansuffix__
diff --git a/libX11/man/XContextDependentDrawing.man b/libX11/man/XContextDependentDrawing.man
new file mode 100644
index 000000000..48ea35b67
--- /dev/null
+++ b/libX11/man/XContextDependentDrawing.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__
diff --git a/libX11/man/XContextualDrawing.man b/libX11/man/XContextualDrawing.man
new file mode 100644
index 000000000..48ea35b67
--- /dev/null
+++ b/libX11/man/XContextualDrawing.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__
diff --git a/libX11/man/XConvertCase.man b/libX11/man/XConvertCase.man
new file mode 100644
index 000000000..9126b791f
--- /dev/null
+++ b/libX11/man/XConvertCase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringToKeysym.__libmansuffix__
diff --git a/libX11/man/XConvertSelection.man b/libX11/man/XConvertSelection.man
new file mode 100644
index 000000000..c8e52aa34
--- /dev/null
+++ b/libX11/man/XConvertSelection.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetSelectionOwner.__libmansuffix__
diff --git a/libX11/man/XCopyColormapAndFree.man b/libX11/man/XCopyColormapAndFree.man
new file mode 100644
index 000000000..7a214a7a8
--- /dev/null
+++ b/libX11/man/XCopyColormapAndFree.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateColormap.__libmansuffix__
diff --git a/libX11/man/XCopyGC.man b/libX11/man/XCopyGC.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XCopyGC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XCopyPlane.man b/libX11/man/XCopyPlane.man
new file mode 100644
index 000000000..9e6488817
--- /dev/null
+++ b/libX11/man/XCopyPlane.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCopyArea.__libmansuffix__
diff --git a/libX11/man/XCreateBitmapFromData.man b/libX11/man/XCreateBitmapFromData.man
new file mode 100644
index 000000000..9631570d0
--- /dev/null
+++ b/libX11/man/XCreateBitmapFromData.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__
diff --git a/libX11/man/XCreateGlyphCursor.man b/libX11/man/XCreateGlyphCursor.man
new file mode 100644
index 000000000..1023b0611
--- /dev/null
+++ b/libX11/man/XCreateGlyphCursor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateFontCursor.__libmansuffix__
diff --git a/libX11/man/XCreateImage.man b/libX11/man/XCreateImage.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XCreateImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XCreatePixmapCursor.man b/libX11/man/XCreatePixmapCursor.man
new file mode 100644
index 000000000..1023b0611
--- /dev/null
+++ b/libX11/man/XCreatePixmapCursor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateFontCursor.__libmansuffix__
diff --git a/libX11/man/XCreatePixmapFromBitmapData.man b/libX11/man/XCreatePixmapFromBitmapData.man
new file mode 100644
index 000000000..9631570d0
--- /dev/null
+++ b/libX11/man/XCreatePixmapFromBitmapData.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__
diff --git a/libX11/man/XCreateSimpleWindow.man b/libX11/man/XCreateSimpleWindow.man
new file mode 100644
index 000000000..11440c64e
--- /dev/null
+++ b/libX11/man/XCreateSimpleWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateWindow.__libmansuffix__
diff --git a/libX11/man/XDefaultString.man b/libX11/man/XDefaultString.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/XDefaultString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XDeleteContext.man b/libX11/man/XDeleteContext.man
new file mode 100644
index 000000000..60c71a492
--- /dev/null
+++ b/libX11/man/XDeleteContext.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSaveContext.__libmansuffix__
diff --git a/libX11/man/XDeleteModifiermapEntry.man b/libX11/man/XDeleteModifiermapEntry.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XDeleteModifiermapEntry.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XDeleteProperty.man b/libX11/man/XDeleteProperty.man
new file mode 100644
index 000000000..e265d7d69
--- /dev/null
+++ b/libX11/man/XDeleteProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__
diff --git a/libX11/man/XDestroyIC.man b/libX11/man/XDestroyIC.man
new file mode 100644
index 000000000..652aa0330
--- /dev/null
+++ b/libX11/man/XDestroyIC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateIC.__libmansuffix__
diff --git a/libX11/man/XDestroyImage.man b/libX11/man/XDestroyImage.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XDestroyImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XDestroyOC.man b/libX11/man/XDestroyOC.man
new file mode 100644
index 000000000..ece6d5ce7
--- /dev/null
+++ b/libX11/man/XDestroyOC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateOC.__libmansuffix__
diff --git a/libX11/man/XDestroyRegion.man b/libX11/man/XDestroyRegion.man
new file mode 100644
index 000000000..9e7e7d197
--- /dev/null
+++ b/libX11/man/XDestroyRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateRegion.__libmansuffix__
diff --git a/libX11/man/XDestroySubwindows.man b/libX11/man/XDestroySubwindows.man
new file mode 100644
index 000000000..e81bc7ace
--- /dev/null
+++ b/libX11/man/XDestroySubwindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDestroyWindow.__libmansuffix__
diff --git a/libX11/man/XDirectionalDependentDrawing.man b/libX11/man/XDirectionalDependentDrawing.man
new file mode 100644
index 000000000..48ea35b67
--- /dev/null
+++ b/libX11/man/XDirectionalDependentDrawing.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__
diff --git a/libX11/man/XDisableAccessControl.man b/libX11/man/XDisableAccessControl.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XDisableAccessControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XDisplayKeycodes.man b/libX11/man/XDisplayKeycodes.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XDisplayKeycodes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XDisplayMotionBufferSize.man b/libX11/man/XDisplayMotionBufferSize.man
new file mode 100644
index 000000000..708dee7c8
--- /dev/null
+++ b/libX11/man/XDisplayMotionBufferSize.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSendEvent.__libmansuffix__
diff --git a/libX11/man/XDisplayName.man b/libX11/man/XDisplayName.man
new file mode 100644
index 000000000..608900365
--- /dev/null
+++ b/libX11/man/XDisplayName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__
diff --git a/libX11/man/XDisplayOfIM.man b/libX11/man/XDisplayOfIM.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XDisplayOfIM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XDisplayOfOM.man b/libX11/man/XDisplayOfOM.man
new file mode 100644
index 000000000..d7e1adb03
--- /dev/null
+++ b/libX11/man/XDisplayOfOM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenOM.__libmansuffix__
diff --git a/libX11/man/XDrawArcs.man b/libX11/man/XDrawArcs.man
new file mode 100644
index 000000000..71f63e1e2
--- /dev/null
+++ b/libX11/man/XDrawArcs.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawArc.__libmansuffix__
diff --git a/libX11/man/XDrawImageString16.man b/libX11/man/XDrawImageString16.man
new file mode 100644
index 000000000..e2de3d0ae
--- /dev/null
+++ b/libX11/man/XDrawImageString16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawImageString.__libmansuffix__
diff --git a/libX11/man/XDrawLines.man b/libX11/man/XDrawLines.man
new file mode 100644
index 000000000..a361976a0
--- /dev/null
+++ b/libX11/man/XDrawLines.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawLine.__libmansuffix__
diff --git a/libX11/man/XDrawPoints.man b/libX11/man/XDrawPoints.man
new file mode 100644
index 000000000..268cdcd97
--- /dev/null
+++ b/libX11/man/XDrawPoints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawPoint.__libmansuffix__
diff --git a/libX11/man/XDrawRectangles.man b/libX11/man/XDrawRectangles.man
new file mode 100644
index 000000000..0def1f675
--- /dev/null
+++ b/libX11/man/XDrawRectangles.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawRectangle.__libmansuffix__
diff --git a/libX11/man/XDrawSegments.man b/libX11/man/XDrawSegments.man
new file mode 100644
index 000000000..a361976a0
--- /dev/null
+++ b/libX11/man/XDrawSegments.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawLine.__libmansuffix__
diff --git a/libX11/man/XDrawString16.man b/libX11/man/XDrawString16.man
new file mode 100644
index 000000000..15a747f8b
--- /dev/null
+++ b/libX11/man/XDrawString16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawString.__libmansuffix__
diff --git a/libX11/man/XDrawText16.man b/libX11/man/XDrawText16.man
new file mode 100644
index 000000000..cee50e8da
--- /dev/null
+++ b/libX11/man/XDrawText16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawText.__libmansuffix__
diff --git a/libX11/man/XEnableAccessControl.man b/libX11/man/XEnableAccessControl.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XEnableAccessControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XEqualRegion.man b/libX11/man/XEqualRegion.man
new file mode 100644
index 000000000..19b5dac0b
--- /dev/null
+++ b/libX11/man/XEqualRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XEmptyRegion.__libmansuffix__
diff --git a/libX11/man/XEvent.man b/libX11/man/XEvent.man
new file mode 100644
index 000000000..cda915d19
--- /dev/null
+++ b/libX11/man/XEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAnyEvent.__libmansuffix__
diff --git a/libX11/man/XEventsQueued.man b/libX11/man/XEventsQueued.man
new file mode 100644
index 000000000..170707ae0
--- /dev/null
+++ b/libX11/man/XEventsQueued.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFlush.__libmansuffix__
diff --git a/libX11/man/XExtendedMaxRequestSize.man b/libX11/man/XExtendedMaxRequestSize.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/XExtendedMaxRequestSize.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/XFetchBuffer.man b/libX11/man/XFetchBuffer.man
new file mode 100644
index 000000000..c399f1c19
--- /dev/null
+++ b/libX11/man/XFetchBuffer.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreBytes.__libmansuffix__
diff --git a/libX11/man/XFetchBytes.man b/libX11/man/XFetchBytes.man
new file mode 100644
index 000000000..c399f1c19
--- /dev/null
+++ b/libX11/man/XFetchBytes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreBytes.__libmansuffix__
diff --git a/libX11/man/XFetchName.man b/libX11/man/XFetchName.man
new file mode 100644
index 000000000..6b4fc7e7d
--- /dev/null
+++ b/libX11/man/XFetchName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMName.__libmansuffix__
diff --git a/libX11/man/XFillArc.man b/libX11/man/XFillArc.man
new file mode 100644
index 000000000..10ca9226e
--- /dev/null
+++ b/libX11/man/XFillArc.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFillRectangle.__libmansuffix__
diff --git a/libX11/man/XFillArcs.man b/libX11/man/XFillArcs.man
new file mode 100644
index 000000000..10ca9226e
--- /dev/null
+++ b/libX11/man/XFillArcs.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFillRectangle.__libmansuffix__
diff --git a/libX11/man/XFillPolygon.man b/libX11/man/XFillPolygon.man
new file mode 100644
index 000000000..10ca9226e
--- /dev/null
+++ b/libX11/man/XFillPolygon.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFillRectangle.__libmansuffix__
diff --git a/libX11/man/XFillRectangles.man b/libX11/man/XFillRectangles.man
new file mode 100644
index 000000000..10ca9226e
--- /dev/null
+++ b/libX11/man/XFillRectangles.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFillRectangle.__libmansuffix__
diff --git a/libX11/man/XFindContext.man b/libX11/man/XFindContext.man
new file mode 100644
index 000000000..60c71a492
--- /dev/null
+++ b/libX11/man/XFindContext.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSaveContext.__libmansuffix__
diff --git a/libX11/man/XFontProp.man b/libX11/man/XFontProp.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XFontProp.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XFontStruct.man b/libX11/man/XFontStruct.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XFontStruct.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XForceScreenSaver.man b/libX11/man/XForceScreenSaver.man
new file mode 100644
index 000000000..35198d594
--- /dev/null
+++ b/libX11/man/XForceScreenSaver.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__
diff --git a/libX11/man/XFreeColormap.man b/libX11/man/XFreeColormap.man
new file mode 100644
index 000000000..7a214a7a8
--- /dev/null
+++ b/libX11/man/XFreeColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateColormap.__libmansuffix__
diff --git a/libX11/man/XFreeColors.man b/libX11/man/XFreeColors.man
new file mode 100644
index 000000000..843a17fc9
--- /dev/null
+++ b/libX11/man/XFreeColors.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocColor.__libmansuffix__
diff --git a/libX11/man/XFreeCursor.man b/libX11/man/XFreeCursor.man
new file mode 100644
index 000000000..2600d2f3b
--- /dev/null
+++ b/libX11/man/XFreeCursor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRecolorCursor.__libmansuffix__
diff --git a/libX11/man/XFreeEventData.man b/libX11/man/XFreeEventData.man
new file mode 100644
index 000000000..cf44d9698
--- /dev/null
+++ b/libX11/man/XFreeEventData.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetEventData.__libmansuffix__
diff --git a/libX11/man/XFreeExtensionList.man b/libX11/man/XFreeExtensionList.man
new file mode 100644
index 000000000..d5ffc5c35
--- /dev/null
+++ b/libX11/man/XFreeExtensionList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryExtension.__libmansuffix__
diff --git a/libX11/man/XFreeFont.man b/libX11/man/XFreeFont.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XFreeFont.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XFreeFontInfo.man b/libX11/man/XFreeFontInfo.man
new file mode 100644
index 000000000..5c6200765
--- /dev/null
+++ b/libX11/man/XFreeFontInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XListFonts.__libmansuffix__
diff --git a/libX11/man/XFreeFontNames.man b/libX11/man/XFreeFontNames.man
new file mode 100644
index 000000000..5c6200765
--- /dev/null
+++ b/libX11/man/XFreeFontNames.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XListFonts.__libmansuffix__
diff --git a/libX11/man/XFreeFontPath.man b/libX11/man/XFreeFontPath.man
new file mode 100644
index 000000000..49b4723ce
--- /dev/null
+++ b/libX11/man/XFreeFontPath.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetFontPath.__libmansuffix__
diff --git a/libX11/man/XFreeFontSet.man b/libX11/man/XFreeFontSet.man
new file mode 100644
index 000000000..cda2771c0
--- /dev/null
+++ b/libX11/man/XFreeFontSet.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateFontSet.__libmansuffix__
diff --git a/libX11/man/XFreeGC.man b/libX11/man/XFreeGC.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XFreeGC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XFreeModifierMap.man b/libX11/man/XFreeModifierMap.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XFreeModifierMap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XFreePixmap.man b/libX11/man/XFreePixmap.man
new file mode 100644
index 000000000..36a302413
--- /dev/null
+++ b/libX11/man/XFreePixmap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreatePixmap.__libmansuffix__
diff --git a/libX11/man/XFreeStringList.man b/libX11/man/XFreeStringList.man
new file mode 100644
index 000000000..70c3debc2
--- /dev/null
+++ b/libX11/man/XFreeStringList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XGCValues.man b/libX11/man/XGCValues.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XGCValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XGContextFromGC.man b/libX11/man/XGContextFromGC.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XGContextFromGC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XGenericEventCookie.man b/libX11/man/XGenericEventCookie.man
new file mode 100644
index 000000000..cf44d9698
--- /dev/null
+++ b/libX11/man/XGenericEventCookie.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetEventData.__libmansuffix__
diff --git a/libX11/man/XGetAtomName.man b/libX11/man/XGetAtomName.man
new file mode 100644
index 000000000..6c0495121
--- /dev/null
+++ b/libX11/man/XGetAtomName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInternAtom.__libmansuffix__
diff --git a/libX11/man/XGetAtomNames.man b/libX11/man/XGetAtomNames.man
new file mode 100644
index 000000000..6c0495121
--- /dev/null
+++ b/libX11/man/XGetAtomNames.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInternAtom.__libmansuffix__
diff --git a/libX11/man/XGetClassHint.man b/libX11/man/XGetClassHint.man
new file mode 100644
index 000000000..fc953a21b
--- /dev/null
+++ b/libX11/man/XGetClassHint.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocClassHint.__libmansuffix__
diff --git a/libX11/man/XGetCommand.man b/libX11/man/XGetCommand.man
new file mode 100644
index 000000000..706fb1e1f
--- /dev/null
+++ b/libX11/man/XGetCommand.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetCommand.__libmansuffix__
diff --git a/libX11/man/XGetErrorDatabaseText.man b/libX11/man/XGetErrorDatabaseText.man
new file mode 100644
index 000000000..608900365
--- /dev/null
+++ b/libX11/man/XGetErrorDatabaseText.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__
diff --git a/libX11/man/XGetErrorText.man b/libX11/man/XGetErrorText.man
new file mode 100644
index 000000000..608900365
--- /dev/null
+++ b/libX11/man/XGetErrorText.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__
diff --git a/libX11/man/XGetFontPath.man b/libX11/man/XGetFontPath.man
new file mode 100644
index 000000000..49b4723ce
--- /dev/null
+++ b/libX11/man/XGetFontPath.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetFontPath.__libmansuffix__
diff --git a/libX11/man/XGetFontProperty.man b/libX11/man/XGetFontProperty.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XGetFontProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XGetGCValues.man b/libX11/man/XGetGCValues.man
new file mode 100644
index 000000000..dec9f1eb7
--- /dev/null
+++ b/libX11/man/XGetGCValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateGC.__libmansuffix__
diff --git a/libX11/man/XGetGeometry.man b/libX11/man/XGetGeometry.man
new file mode 100644
index 000000000..df77346fb
--- /dev/null
+++ b/libX11/man/XGetGeometry.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XGetICValues.man b/libX11/man/XGetICValues.man
new file mode 100644
index 000000000..a80dcff32
--- /dev/null
+++ b/libX11/man/XGetICValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetICValues.__libmansuffix__
diff --git a/libX11/man/XGetIMValues.man b/libX11/man/XGetIMValues.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XGetIMValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XGetIconName.man b/libX11/man/XGetIconName.man
new file mode 100644
index 000000000..e315e4495
--- /dev/null
+++ b/libX11/man/XGetIconName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMIconName.__libmansuffix__
diff --git a/libX11/man/XGetIconSizes.man b/libX11/man/XGetIconSizes.man
new file mode 100644
index 000000000..edc8882fb
--- /dev/null
+++ b/libX11/man/XGetIconSizes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocIconSize.__libmansuffix__
diff --git a/libX11/man/XGetImage.man b/libX11/man/XGetImage.man
new file mode 100644
index 000000000..d17774846
--- /dev/null
+++ b/libX11/man/XGetImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XPutImage.__libmansuffix__
diff --git a/libX11/man/XGetInputFocus.man b/libX11/man/XGetInputFocus.man
new file mode 100644
index 000000000..c6c1bbb04
--- /dev/null
+++ b/libX11/man/XGetInputFocus.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetInputFocus.__libmansuffix__
diff --git a/libX11/man/XGetKeyboardControl.man b/libX11/man/XGetKeyboardControl.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XGetKeyboardControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XGetKeyboardMapping.man b/libX11/man/XGetKeyboardMapping.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XGetKeyboardMapping.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XGetModifierMapping.man b/libX11/man/XGetModifierMapping.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XGetModifierMapping.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XGetMotionEvents.man b/libX11/man/XGetMotionEvents.man
new file mode 100644
index 000000000..708dee7c8
--- /dev/null
+++ b/libX11/man/XGetMotionEvents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSendEvent.__libmansuffix__
diff --git a/libX11/man/XGetOCValues.man b/libX11/man/XGetOCValues.man
new file mode 100644
index 000000000..ece6d5ce7
--- /dev/null
+++ b/libX11/man/XGetOCValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateOC.__libmansuffix__
diff --git a/libX11/man/XGetOMValues.man b/libX11/man/XGetOMValues.man
new file mode 100644
index 000000000..d7e1adb03
--- /dev/null
+++ b/libX11/man/XGetOMValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenOM.__libmansuffix__
diff --git a/libX11/man/XGetPixel.man b/libX11/man/XGetPixel.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XGetPixel.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XGetPointerControl.man b/libX11/man/XGetPointerControl.man
new file mode 100644
index 000000000..f4e744322
--- /dev/null
+++ b/libX11/man/XGetPointerControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangePointerControl.__libmansuffix__
diff --git a/libX11/man/XGetPointerMapping.man b/libX11/man/XGetPointerMapping.man
new file mode 100644
index 000000000..9fc1407c5
--- /dev/null
+++ b/libX11/man/XGetPointerMapping.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetPointerMapping.__libmansuffix__
diff --git a/libX11/man/XGetRGBColormaps.man b/libX11/man/XGetRGBColormaps.man
new file mode 100644
index 000000000..a36aee4fe
--- /dev/null
+++ b/libX11/man/XGetRGBColormaps.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__
diff --git a/libX11/man/XGetScreenSaver.man b/libX11/man/XGetScreenSaver.man
new file mode 100644
index 000000000..35198d594
--- /dev/null
+++ b/libX11/man/XGetScreenSaver.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__
diff --git a/libX11/man/XGetSelectionOwner.man b/libX11/man/XGetSelectionOwner.man
new file mode 100644
index 000000000..c8e52aa34
--- /dev/null
+++ b/libX11/man/XGetSelectionOwner.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetSelectionOwner.__libmansuffix__
diff --git a/libX11/man/XGetSubImage.man b/libX11/man/XGetSubImage.man
new file mode 100644
index 000000000..d17774846
--- /dev/null
+++ b/libX11/man/XGetSubImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XPutImage.__libmansuffix__
diff --git a/libX11/man/XGetTextProperty.man b/libX11/man/XGetTextProperty.man
new file mode 100644
index 000000000..1d04e4fc3
--- /dev/null
+++ b/libX11/man/XGetTextProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetTextProperty.__libmansuffix__
diff --git a/libX11/man/XGetTransientForHint.man b/libX11/man/XGetTransientForHint.man
new file mode 100644
index 000000000..df25fc239
--- /dev/null
+++ b/libX11/man/XGetTransientForHint.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetTransientForHint.__libmansuffix__
diff --git a/libX11/man/XGetWMClientMachine.man b/libX11/man/XGetWMClientMachine.man
new file mode 100644
index 000000000..cd7c2f074
--- /dev/null
+++ b/libX11/man/XGetWMClientMachine.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMClientMachine.__libmansuffix__
diff --git a/libX11/man/XGetWMColormapWindows.man b/libX11/man/XGetWMColormapWindows.man
new file mode 100644
index 000000000..5b0f489ce
--- /dev/null
+++ b/libX11/man/XGetWMColormapWindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMColormapWindows.__libmansuffix__
diff --git a/libX11/man/XGetWMHints.man b/libX11/man/XGetWMHints.man
new file mode 100644
index 000000000..e066f6d95
--- /dev/null
+++ b/libX11/man/XGetWMHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocWMHints.__libmansuffix__
diff --git a/libX11/man/XGetWMIconName.man b/libX11/man/XGetWMIconName.man
new file mode 100644
index 000000000..e315e4495
--- /dev/null
+++ b/libX11/man/XGetWMIconName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMIconName.__libmansuffix__
diff --git a/libX11/man/XGetWMName.man b/libX11/man/XGetWMName.man
new file mode 100644
index 000000000..6b4fc7e7d
--- /dev/null
+++ b/libX11/man/XGetWMName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMName.__libmansuffix__
diff --git a/libX11/man/XGetWMNormalHints.man b/libX11/man/XGetWMNormalHints.man
new file mode 100644
index 000000000..94ebb6295
--- /dev/null
+++ b/libX11/man/XGetWMNormalHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__
diff --git a/libX11/man/XGetWMProtocols.man b/libX11/man/XGetWMProtocols.man
new file mode 100644
index 000000000..565aad646
--- /dev/null
+++ b/libX11/man/XGetWMProtocols.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMProtocols.__libmansuffix__
diff --git a/libX11/man/XGetWMSizeHints.man b/libX11/man/XGetWMSizeHints.man
new file mode 100644
index 000000000..94ebb6295
--- /dev/null
+++ b/libX11/man/XGetWMSizeHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__
diff --git a/libX11/man/XHostAddress.man b/libX11/man/XHostAddress.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XHostAddress.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XIMOfIC.man b/libX11/man/XIMOfIC.man
new file mode 100644
index 000000000..652aa0330
--- /dev/null
+++ b/libX11/man/XIMOfIC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateIC.__libmansuffix__
diff --git a/libX11/man/XIconSize.man b/libX11/man/XIconSize.man
new file mode 100644
index 000000000..edc8882fb
--- /dev/null
+++ b/libX11/man/XIconSize.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocIconSize.__libmansuffix__
diff --git a/libX11/man/XInsertModifiermapEntry.man b/libX11/man/XInsertModifiermapEntry.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XInsertModifiermapEntry.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XInternAtoms.man b/libX11/man/XInternAtoms.man
new file mode 100644
index 000000000..6c0495121
--- /dev/null
+++ b/libX11/man/XInternAtoms.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInternAtom.__libmansuffix__
diff --git a/libX11/man/XInternalConnectionNumbers.man b/libX11/man/XInternalConnectionNumbers.man
new file mode 100644
index 000000000..4a3cc1380
--- /dev/null
+++ b/libX11/man/XInternalConnectionNumbers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__
diff --git a/libX11/man/XKeyEvent.man b/libX11/man/XKeyEvent.man
new file mode 100644
index 000000000..41e30bbe3
--- /dev/null
+++ b/libX11/man/XKeyEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XButtonEvent.__libmansuffix__
diff --git a/libX11/man/XKeyboardControl.man b/libX11/man/XKeyboardControl.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XKeyboardControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XKeycodeToKeysym.man b/libX11/man/XKeycodeToKeysym.man
new file mode 100644
index 000000000..9126b791f
--- /dev/null
+++ b/libX11/man/XKeycodeToKeysym.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringToKeysym.__libmansuffix__
diff --git a/libX11/man/XKeysymToKeycode.man b/libX11/man/XKeysymToKeycode.man
new file mode 100644
index 000000000..9126b791f
--- /dev/null
+++ b/libX11/man/XKeysymToKeycode.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringToKeysym.__libmansuffix__
diff --git a/libX11/man/XKeysymToString.man b/libX11/man/XKeysymToString.man
new file mode 100644
index 000000000..9126b791f
--- /dev/null
+++ b/libX11/man/XKeysymToString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringToKeysym.__libmansuffix__
diff --git a/libX11/man/XKillClient.man b/libX11/man/XKillClient.man
new file mode 100644
index 000000000..a94379149
--- /dev/null
+++ b/libX11/man/XKillClient.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetCloseDownMode.__libmansuffix__
diff --git a/libX11/man/XListDepths.man b/libX11/man/XListDepths.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/XListDepths.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/XListExtensions.man b/libX11/man/XListExtensions.man
new file mode 100644
index 000000000..d5ffc5c35
--- /dev/null
+++ b/libX11/man/XListExtensions.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryExtension.__libmansuffix__
diff --git a/libX11/man/XListFontsWithInfo.man b/libX11/man/XListFontsWithInfo.man
new file mode 100644
index 000000000..5c6200765
--- /dev/null
+++ b/libX11/man/XListFontsWithInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XListFonts.__libmansuffix__
diff --git a/libX11/man/XListHosts.man b/libX11/man/XListHosts.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XListHosts.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XListInstalledColormaps.man b/libX11/man/XListInstalledColormaps.man
new file mode 100644
index 000000000..7b18ab38b
--- /dev/null
+++ b/libX11/man/XListInstalledColormaps.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInstallColormap.__libmansuffix__
diff --git a/libX11/man/XListPixmapFormats.man b/libX11/man/XListPixmapFormats.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/XListPixmapFormats.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/XListProperties.man b/libX11/man/XListProperties.man
new file mode 100644
index 000000000..e265d7d69
--- /dev/null
+++ b/libX11/man/XListProperties.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__
diff --git a/libX11/man/XLoadQueryFont.man b/libX11/man/XLoadQueryFont.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XLoadQueryFont.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XLocaleOfFontSet.man b/libX11/man/XLocaleOfFontSet.man
new file mode 100644
index 000000000..48ea35b67
--- /dev/null
+++ b/libX11/man/XLocaleOfFontSet.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__
diff --git a/libX11/man/XLocaleOfIM.man b/libX11/man/XLocaleOfIM.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XLocaleOfIM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XLocaleOfOM.man b/libX11/man/XLocaleOfOM.man
new file mode 100644
index 000000000..d7e1adb03
--- /dev/null
+++ b/libX11/man/XLocaleOfOM.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenOM.__libmansuffix__
diff --git a/libX11/man/XLockDisplay.man b/libX11/man/XLockDisplay.man
new file mode 100644
index 000000000..bc8bb0205
--- /dev/null
+++ b/libX11/man/XLockDisplay.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitThreads.__libmansuffix__
diff --git a/libX11/man/XLookupColor.man b/libX11/man/XLookupColor.man
new file mode 100644
index 000000000..d1aad2b4a
--- /dev/null
+++ b/libX11/man/XLookupColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryColor.__libmansuffix__
diff --git a/libX11/man/XLookupString.man b/libX11/man/XLookupString.man
new file mode 100644
index 000000000..23156fe74
--- /dev/null
+++ b/libX11/man/XLookupString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLookupKeysym.__libmansuffix__
diff --git a/libX11/man/XLowerWindow.man b/libX11/man/XLowerWindow.man
new file mode 100644
index 000000000..61d7a2348
--- /dev/null
+++ b/libX11/man/XLowerWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRaiseWindow.__libmansuffix__
diff --git a/libX11/man/XMapRaised.man b/libX11/man/XMapRaised.man
new file mode 100644
index 000000000..ab771f83f
--- /dev/null
+++ b/libX11/man/XMapRaised.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XMapWindow.__libmansuffix__
diff --git a/libX11/man/XMapSubwindows.man b/libX11/man/XMapSubwindows.man
new file mode 100644
index 000000000..ab771f83f
--- /dev/null
+++ b/libX11/man/XMapSubwindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XMapWindow.__libmansuffix__
diff --git a/libX11/man/XMappingEvent.man b/libX11/man/XMappingEvent.man
new file mode 100644
index 000000000..c0a031b46
--- /dev/null
+++ b/libX11/man/XMappingEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XMapEvent.__libmansuffix__
diff --git a/libX11/man/XMaskEvent.man b/libX11/man/XMaskEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XMaskEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XMatchVisualInfo.man b/libX11/man/XMatchVisualInfo.man
new file mode 100644
index 000000000..0b12bf69d
--- /dev/null
+++ b/libX11/man/XMatchVisualInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__
diff --git a/libX11/man/XMaxRequestSize.man b/libX11/man/XMaxRequestSize.man
new file mode 100644
index 000000000..963c4fe94
--- /dev/null
+++ b/libX11/man/XMaxRequestSize.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/AllPlanes.__libmansuffix__
diff --git a/libX11/man/XModifierKeymap.man b/libX11/man/XModifierKeymap.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XModifierKeymap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XMotionEvent.man b/libX11/man/XMotionEvent.man
new file mode 100644
index 000000000..41e30bbe3
--- /dev/null
+++ b/libX11/man/XMotionEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XButtonEvent.__libmansuffix__
diff --git a/libX11/man/XMoveResizeWindow.man b/libX11/man/XMoveResizeWindow.man
new file mode 100644
index 000000000..5fbc49488
--- /dev/null
+++ b/libX11/man/XMoveResizeWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XConfigureWindow.__libmansuffix__
diff --git a/libX11/man/XMoveWindow.man b/libX11/man/XMoveWindow.man
new file mode 100644
index 000000000..5fbc49488
--- /dev/null
+++ b/libX11/man/XMoveWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XConfigureWindow.__libmansuffix__
diff --git a/libX11/man/XNewModifiermap.man b/libX11/man/XNewModifiermap.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XNewModifiermap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XNoExposeEvent.man b/libX11/man/XNoExposeEvent.man
new file mode 100644
index 000000000..c986c219c
--- /dev/null
+++ b/libX11/man/XNoExposeEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGraphicsExposeEvent.__libmansuffix__
diff --git a/libX11/man/XOMOfOC.man b/libX11/man/XOMOfOC.man
new file mode 100644
index 000000000..ece6d5ce7
--- /dev/null
+++ b/libX11/man/XOMOfOC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateOC.__libmansuffix__
diff --git a/libX11/man/XOffsetRegion.man b/libX11/man/XOffsetRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XOffsetRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XParseColor.man b/libX11/man/XParseColor.man
new file mode 100644
index 000000000..d1aad2b4a
--- /dev/null
+++ b/libX11/man/XParseColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryColor.__libmansuffix__
diff --git a/libX11/man/XPeekEvent.man b/libX11/man/XPeekEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XPeekEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XPeekIfEvent.man b/libX11/man/XPeekIfEvent.man
new file mode 100644
index 000000000..5970130fb
--- /dev/null
+++ b/libX11/man/XPeekIfEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIfEvent.__libmansuffix__
diff --git a/libX11/man/XPending.man b/libX11/man/XPending.man
new file mode 100644
index 000000000..170707ae0
--- /dev/null
+++ b/libX11/man/XPending.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFlush.__libmansuffix__
diff --git a/libX11/man/XPixmapFormatValues.man b/libX11/man/XPixmapFormatValues.man
new file mode 100644
index 000000000..0a59afe46
--- /dev/null
+++ b/libX11/man/XPixmapFormatValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/ImageByteOrder.__libmansuffix__
diff --git a/libX11/man/XPoint.man b/libX11/man/XPoint.man
new file mode 100644
index 000000000..268cdcd97
--- /dev/null
+++ b/libX11/man/XPoint.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawPoint.__libmansuffix__
diff --git a/libX11/man/XPointInRegion.man b/libX11/man/XPointInRegion.man
new file mode 100644
index 000000000..19b5dac0b
--- /dev/null
+++ b/libX11/man/XPointInRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XEmptyRegion.__libmansuffix__
diff --git a/libX11/man/XProcessInternalConnection.man b/libX11/man/XProcessInternalConnection.man
new file mode 100644
index 000000000..4a3cc1380
--- /dev/null
+++ b/libX11/man/XProcessInternalConnection.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__
diff --git a/libX11/man/XPutPixel.man b/libX11/man/XPutPixel.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XPutPixel.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XQueryBestCursor.man b/libX11/man/XQueryBestCursor.man
new file mode 100644
index 000000000..2600d2f3b
--- /dev/null
+++ b/libX11/man/XQueryBestCursor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRecolorCursor.__libmansuffix__
diff --git a/libX11/man/XQueryBestStipple.man b/libX11/man/XQueryBestStipple.man
new file mode 100644
index 000000000..171150340
--- /dev/null
+++ b/libX11/man/XQueryBestStipple.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryBestSize.__libmansuffix__
diff --git a/libX11/man/XQueryBestTile.man b/libX11/man/XQueryBestTile.man
new file mode 100644
index 000000000..171150340
--- /dev/null
+++ b/libX11/man/XQueryBestTile.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryBestSize.__libmansuffix__
diff --git a/libX11/man/XQueryColors.man b/libX11/man/XQueryColors.man
new file mode 100644
index 000000000..d1aad2b4a
--- /dev/null
+++ b/libX11/man/XQueryColors.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XQueryColor.__libmansuffix__
diff --git a/libX11/man/XQueryFont.man b/libX11/man/XQueryFont.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XQueryFont.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XQueryKeymap.man b/libX11/man/XQueryKeymap.man
new file mode 100644
index 000000000..528cea2d7
--- /dev/null
+++ b/libX11/man/XQueryKeymap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__
diff --git a/libX11/man/XQueryTextExtents.man b/libX11/man/XQueryTextExtents.man
new file mode 100644
index 000000000..36be9d3c7
--- /dev/null
+++ b/libX11/man/XQueryTextExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XTextExtents.__libmansuffix__
diff --git a/libX11/man/XQueryTextExtents16.man b/libX11/man/XQueryTextExtents16.man
new file mode 100644
index 000000000..36be9d3c7
--- /dev/null
+++ b/libX11/man/XQueryTextExtents16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XTextExtents.__libmansuffix__
diff --git a/libX11/man/XReadBitmapFileData.man b/libX11/man/XReadBitmapFileData.man
new file mode 100644
index 000000000..9631570d0
--- /dev/null
+++ b/libX11/man/XReadBitmapFileData.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__
diff --git a/libX11/man/XRebindKeysym.man b/libX11/man/XRebindKeysym.man
new file mode 100644
index 000000000..23156fe74
--- /dev/null
+++ b/libX11/man/XRebindKeysym.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLookupKeysym.__libmansuffix__
diff --git a/libX11/man/XReconfigureWMWindow.man b/libX11/man/XReconfigureWMWindow.man
new file mode 100644
index 000000000..799989ad0
--- /dev/null
+++ b/libX11/man/XReconfigureWMWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIconifyWindow.__libmansuffix__
diff --git a/libX11/man/XRectInRegion.man b/libX11/man/XRectInRegion.man
new file mode 100644
index 000000000..19b5dac0b
--- /dev/null
+++ b/libX11/man/XRectInRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XEmptyRegion.__libmansuffix__
diff --git a/libX11/man/XRectangle.man b/libX11/man/XRectangle.man
new file mode 100644
index 000000000..0def1f675
--- /dev/null
+++ b/libX11/man/XRectangle.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawRectangle.__libmansuffix__
diff --git a/libX11/man/XRefreshKeyboardMapping.man b/libX11/man/XRefreshKeyboardMapping.man
new file mode 100644
index 000000000..23156fe74
--- /dev/null
+++ b/libX11/man/XRefreshKeyboardMapping.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLookupKeysym.__libmansuffix__
diff --git a/libX11/man/XRegisterIMInstantiateCallback.man b/libX11/man/XRegisterIMInstantiateCallback.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XRegisterIMInstantiateCallback.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XRemoveConnectionWatch.man b/libX11/man/XRemoveConnectionWatch.man
new file mode 100644
index 000000000..4a3cc1380
--- /dev/null
+++ b/libX11/man/XRemoveConnectionWatch.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__
diff --git a/libX11/man/XRemoveFromSaveSet.man b/libX11/man/XRemoveFromSaveSet.man
new file mode 100644
index 000000000..0ea6bfcfc
--- /dev/null
+++ b/libX11/man/XRemoveFromSaveSet.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeSaveSet.__libmansuffix__
diff --git a/libX11/man/XRemoveHost.man b/libX11/man/XRemoveHost.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XRemoveHost.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XRemoveHosts.man b/libX11/man/XRemoveHosts.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XRemoveHosts.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XResetScreenSaver.man b/libX11/man/XResetScreenSaver.man
new file mode 100644
index 000000000..35198d594
--- /dev/null
+++ b/libX11/man/XResetScreenSaver.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__
diff --git a/libX11/man/XResizeWindow.man b/libX11/man/XResizeWindow.man
new file mode 100644
index 000000000..5fbc49488
--- /dev/null
+++ b/libX11/man/XResizeWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XConfigureWindow.__libmansuffix__
diff --git a/libX11/man/XRestackWindows.man b/libX11/man/XRestackWindows.man
new file mode 100644
index 000000000..61d7a2348
--- /dev/null
+++ b/libX11/man/XRestackWindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XRaiseWindow.__libmansuffix__
diff --git a/libX11/man/XRotateBuffers.man b/libX11/man/XRotateBuffers.man
new file mode 100644
index 000000000..c399f1c19
--- /dev/null
+++ b/libX11/man/XRotateBuffers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreBytes.__libmansuffix__
diff --git a/libX11/man/XRotateWindowProperties.man b/libX11/man/XRotateWindowProperties.man
new file mode 100644
index 000000000..e265d7d69
--- /dev/null
+++ b/libX11/man/XRotateWindowProperties.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__
diff --git a/libX11/man/XScreenNumberOfScreen.man b/libX11/man/XScreenNumberOfScreen.man
new file mode 100644
index 000000000..c69be9763
--- /dev/null
+++ b/libX11/man/XScreenNumberOfScreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__
diff --git a/libX11/man/XScreenResourceString.man b/libX11/man/XScreenResourceString.man
new file mode 100644
index 000000000..5bb47cead
--- /dev/null
+++ b/libX11/man/XScreenResourceString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XResourceManagerString.__libmansuffix__
diff --git a/libX11/man/XSegment.man b/libX11/man/XSegment.man
new file mode 100644
index 000000000..a361976a0
--- /dev/null
+++ b/libX11/man/XSegment.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawLine.__libmansuffix__
diff --git a/libX11/man/XSetAccessControl.man b/libX11/man/XSetAccessControl.man
new file mode 100644
index 000000000..8efac194e
--- /dev/null
+++ b/libX11/man/XSetAccessControl.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAddHost.__libmansuffix__
diff --git a/libX11/man/XSetAfterFunction.man b/libX11/man/XSetAfterFunction.man
new file mode 100644
index 000000000..f37afee4a
--- /dev/null
+++ b/libX11/man/XSetAfterFunction.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSynchronize.__libmansuffix__
diff --git a/libX11/man/XSetBackground.man b/libX11/man/XSetBackground.man
new file mode 100644
index 000000000..137df8ee5
--- /dev/null
+++ b/libX11/man/XSetBackground.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetState.__libmansuffix__
diff --git a/libX11/man/XSetClassHint.man b/libX11/man/XSetClassHint.man
new file mode 100644
index 000000000..fc953a21b
--- /dev/null
+++ b/libX11/man/XSetClassHint.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocClassHint.__libmansuffix__
diff --git a/libX11/man/XSetClipMask.man b/libX11/man/XSetClipMask.man
new file mode 100644
index 000000000..5393e9b2a
--- /dev/null
+++ b/libX11/man/XSetClipMask.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetClipOrigin.__libmansuffix__
diff --git a/libX11/man/XSetClipRectangles.man b/libX11/man/XSetClipRectangles.man
new file mode 100644
index 000000000..5393e9b2a
--- /dev/null
+++ b/libX11/man/XSetClipRectangles.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetClipOrigin.__libmansuffix__
diff --git a/libX11/man/XSetDashes.man b/libX11/man/XSetDashes.man
new file mode 100644
index 000000000..6193102c0
--- /dev/null
+++ b/libX11/man/XSetDashes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetLineAttributes.__libmansuffix__
diff --git a/libX11/man/XSetFillRule.man b/libX11/man/XSetFillRule.man
new file mode 100644
index 000000000..aa575baab
--- /dev/null
+++ b/libX11/man/XSetFillRule.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetFillStyle.__libmansuffix__
diff --git a/libX11/man/XSetForeground.man b/libX11/man/XSetForeground.man
new file mode 100644
index 000000000..137df8ee5
--- /dev/null
+++ b/libX11/man/XSetForeground.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetState.__libmansuffix__
diff --git a/libX11/man/XSetFunction.man b/libX11/man/XSetFunction.man
new file mode 100644
index 000000000..137df8ee5
--- /dev/null
+++ b/libX11/man/XSetFunction.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetState.__libmansuffix__
diff --git a/libX11/man/XSetGraphicsExposure.man b/libX11/man/XSetGraphicsExposure.man
new file mode 100644
index 000000000..9d4203f44
--- /dev/null
+++ b/libX11/man/XSetGraphicsExposure.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetArcMode.__libmansuffix__
diff --git a/libX11/man/XSetIMValues.man b/libX11/man/XSetIMValues.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XSetIMValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XSetIOErrorHandler.man b/libX11/man/XSetIOErrorHandler.man
new file mode 100644
index 000000000..608900365
--- /dev/null
+++ b/libX11/man/XSetIOErrorHandler.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__
diff --git a/libX11/man/XSetIconName.man b/libX11/man/XSetIconName.man
new file mode 100644
index 000000000..e315e4495
--- /dev/null
+++ b/libX11/man/XSetIconName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMIconName.__libmansuffix__
diff --git a/libX11/man/XSetIconSizes.man b/libX11/man/XSetIconSizes.man
new file mode 100644
index 000000000..edc8882fb
--- /dev/null
+++ b/libX11/man/XSetIconSizes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocIconSize.__libmansuffix__
diff --git a/libX11/man/XSetLocaleModifiers.man b/libX11/man/XSetLocaleModifiers.man
new file mode 100644
index 000000000..046f97fe3
--- /dev/null
+++ b/libX11/man/XSetLocaleModifiers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSupportsLocale.__libmansuffix__
diff --git a/libX11/man/XSetModifierMapping.man b/libX11/man/XSetModifierMapping.man
new file mode 100644
index 000000000..013c70a95
--- /dev/null
+++ b/libX11/man/XSetModifierMapping.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__
diff --git a/libX11/man/XSetOCValues.man b/libX11/man/XSetOCValues.man
new file mode 100644
index 000000000..ece6d5ce7
--- /dev/null
+++ b/libX11/man/XSetOCValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateOC.__libmansuffix__
diff --git a/libX11/man/XSetOMValues.man b/libX11/man/XSetOMValues.man
new file mode 100644
index 000000000..d7e1adb03
--- /dev/null
+++ b/libX11/man/XSetOMValues.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenOM.__libmansuffix__
diff --git a/libX11/man/XSetPlaneMask.man b/libX11/man/XSetPlaneMask.man
new file mode 100644
index 000000000..137df8ee5
--- /dev/null
+++ b/libX11/man/XSetPlaneMask.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetState.__libmansuffix__
diff --git a/libX11/man/XSetRGBColormaps.man b/libX11/man/XSetRGBColormaps.man
new file mode 100644
index 000000000..a36aee4fe
--- /dev/null
+++ b/libX11/man/XSetRGBColormaps.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__
diff --git a/libX11/man/XSetRegion.man b/libX11/man/XSetRegion.man
new file mode 100644
index 000000000..9e7e7d197
--- /dev/null
+++ b/libX11/man/XSetRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateRegion.__libmansuffix__
diff --git a/libX11/man/XSetStipple.man b/libX11/man/XSetStipple.man
new file mode 100644
index 000000000..7c434f5cc
--- /dev/null
+++ b/libX11/man/XSetStipple.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetTile.__libmansuffix__
diff --git a/libX11/man/XSetSubwindowMode.man b/libX11/man/XSetSubwindowMode.man
new file mode 100644
index 000000000..9d4203f44
--- /dev/null
+++ b/libX11/man/XSetSubwindowMode.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetArcMode.__libmansuffix__
diff --git a/libX11/man/XSetTSOrigin.man b/libX11/man/XSetTSOrigin.man
new file mode 100644
index 000000000..7c434f5cc
--- /dev/null
+++ b/libX11/man/XSetTSOrigin.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetTile.__libmansuffix__
diff --git a/libX11/man/XSetWMHints.man b/libX11/man/XSetWMHints.man
new file mode 100644
index 000000000..e066f6d95
--- /dev/null
+++ b/libX11/man/XSetWMHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocWMHints.__libmansuffix__
diff --git a/libX11/man/XSetWMNormalHints.man b/libX11/man/XSetWMNormalHints.man
new file mode 100644
index 000000000..94ebb6295
--- /dev/null
+++ b/libX11/man/XSetWMNormalHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__
diff --git a/libX11/man/XSetWMSizeHints.man b/libX11/man/XSetWMSizeHints.man
new file mode 100644
index 000000000..94ebb6295
--- /dev/null
+++ b/libX11/man/XSetWMSizeHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__
diff --git a/libX11/man/XSetWindowAttributes.man b/libX11/man/XSetWindowAttributes.man
new file mode 100644
index 000000000..11440c64e
--- /dev/null
+++ b/libX11/man/XSetWindowAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XCreateWindow.__libmansuffix__
diff --git a/libX11/man/XSetWindowBackground.man b/libX11/man/XSetWindowBackground.man
new file mode 100644
index 000000000..1c1160ec3
--- /dev/null
+++ b/libX11/man/XSetWindowBackground.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XSetWindowBackgroundPixmap.man b/libX11/man/XSetWindowBackgroundPixmap.man
new file mode 100644
index 000000000..1c1160ec3
--- /dev/null
+++ b/libX11/man/XSetWindowBackgroundPixmap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XSetWindowBorder.man b/libX11/man/XSetWindowBorder.man
new file mode 100644
index 000000000..1c1160ec3
--- /dev/null
+++ b/libX11/man/XSetWindowBorder.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XSetWindowBorderPixmap.man b/libX11/man/XSetWindowBorderPixmap.man
new file mode 100644
index 000000000..1c1160ec3
--- /dev/null
+++ b/libX11/man/XSetWindowBorderPixmap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XSetWindowBorderWidth.man b/libX11/man/XSetWindowBorderWidth.man
new file mode 100644
index 000000000..5fbc49488
--- /dev/null
+++ b/libX11/man/XSetWindowBorderWidth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XConfigureWindow.__libmansuffix__
diff --git a/libX11/man/XSetWindowColormap.man b/libX11/man/XSetWindowColormap.man
new file mode 100644
index 000000000..1c1160ec3
--- /dev/null
+++ b/libX11/man/XSetWindowColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XShrinkRegion.man b/libX11/man/XShrinkRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XShrinkRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XSizeHints.man b/libX11/man/XSizeHints.man
new file mode 100644
index 000000000..94ebb6295
--- /dev/null
+++ b/libX11/man/XSizeHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__
diff --git a/libX11/man/XStandardColormap.man b/libX11/man/XStandardColormap.man
new file mode 100644
index 000000000..a36aee4fe
--- /dev/null
+++ b/libX11/man/XStandardColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__
diff --git a/libX11/man/XStoreBuffer.man b/libX11/man/XStoreBuffer.man
new file mode 100644
index 000000000..c399f1c19
--- /dev/null
+++ b/libX11/man/XStoreBuffer.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreBytes.__libmansuffix__
diff --git a/libX11/man/XStoreColor.man b/libX11/man/XStoreColor.man
new file mode 100644
index 000000000..f185b7e60
--- /dev/null
+++ b/libX11/man/XStoreColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreColors.__libmansuffix__
diff --git a/libX11/man/XStoreName.man b/libX11/man/XStoreName.man
new file mode 100644
index 000000000..6b4fc7e7d
--- /dev/null
+++ b/libX11/man/XStoreName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMName.__libmansuffix__
diff --git a/libX11/man/XStoreNamedColor.man b/libX11/man/XStoreNamedColor.man
new file mode 100644
index 000000000..f185b7e60
--- /dev/null
+++ b/libX11/man/XStoreNamedColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStoreColors.__libmansuffix__
diff --git a/libX11/man/XSubImage.man b/libX11/man/XSubImage.man
new file mode 100644
index 000000000..8fe560159
--- /dev/null
+++ b/libX11/man/XSubImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitImage.__libmansuffix__
diff --git a/libX11/man/XSubtractRegion.man b/libX11/man/XSubtractRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XSubtractRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XSync.man b/libX11/man/XSync.man
new file mode 100644
index 000000000..170707ae0
--- /dev/null
+++ b/libX11/man/XSync.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XFlush.__libmansuffix__
diff --git a/libX11/man/XTextExtents16.man b/libX11/man/XTextExtents16.man
new file mode 100644
index 000000000..36be9d3c7
--- /dev/null
+++ b/libX11/man/XTextExtents16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XTextExtents.__libmansuffix__
diff --git a/libX11/man/XTextItem.man b/libX11/man/XTextItem.man
new file mode 100644
index 000000000..cee50e8da
--- /dev/null
+++ b/libX11/man/XTextItem.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawText.__libmansuffix__
diff --git a/libX11/man/XTextItem16.man b/libX11/man/XTextItem16.man
new file mode 100644
index 000000000..cee50e8da
--- /dev/null
+++ b/libX11/man/XTextItem16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDrawText.__libmansuffix__
diff --git a/libX11/man/XTextProperty.man b/libX11/man/XTextProperty.man
new file mode 100644
index 000000000..70c3debc2
--- /dev/null
+++ b/libX11/man/XTextProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XTextPropertyToStringList.man b/libX11/man/XTextPropertyToStringList.man
new file mode 100644
index 000000000..70c3debc2
--- /dev/null
+++ b/libX11/man/XTextPropertyToStringList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XTextWidth16.man b/libX11/man/XTextWidth16.man
new file mode 100644
index 000000000..e0e845a85
--- /dev/null
+++ b/libX11/man/XTextWidth16.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XTextWidth.__libmansuffix__
diff --git a/libX11/man/XTimeCoord.man b/libX11/man/XTimeCoord.man
new file mode 100644
index 000000000..708dee7c8
--- /dev/null
+++ b/libX11/man/XTimeCoord.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSendEvent.__libmansuffix__
diff --git a/libX11/man/XUndefineCursor.man b/libX11/man/XUndefineCursor.man
new file mode 100644
index 000000000..55aeaca40
--- /dev/null
+++ b/libX11/man/XUndefineCursor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XDefineCursor.__libmansuffix__
diff --git a/libX11/man/XUngrabButton.man b/libX11/man/XUngrabButton.man
new file mode 100644
index 000000000..d82a48eb5
--- /dev/null
+++ b/libX11/man/XUngrabButton.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabButton.__libmansuffix__
diff --git a/libX11/man/XUngrabKey.man b/libX11/man/XUngrabKey.man
new file mode 100644
index 000000000..55923cdec
--- /dev/null
+++ b/libX11/man/XUngrabKey.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabKey.__libmansuffix__
diff --git a/libX11/man/XUngrabKeyboard.man b/libX11/man/XUngrabKeyboard.man
new file mode 100644
index 000000000..0e7379418
--- /dev/null
+++ b/libX11/man/XUngrabKeyboard.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabKeyboard.__libmansuffix__
diff --git a/libX11/man/XUngrabPointer.man b/libX11/man/XUngrabPointer.man
new file mode 100644
index 000000000..93259b8c3
--- /dev/null
+++ b/libX11/man/XUngrabPointer.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabPointer.__libmansuffix__
diff --git a/libX11/man/XUngrabServer.man b/libX11/man/XUngrabServer.man
new file mode 100644
index 000000000..2427493cf
--- /dev/null
+++ b/libX11/man/XUngrabServer.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGrabServer.__libmansuffix__
diff --git a/libX11/man/XUninstallColormap.man b/libX11/man/XUninstallColormap.man
new file mode 100644
index 000000000..7b18ab38b
--- /dev/null
+++ b/libX11/man/XUninstallColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInstallColormap.__libmansuffix__
diff --git a/libX11/man/XUnionRectWithRegion.man b/libX11/man/XUnionRectWithRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XUnionRectWithRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XUnionRegion.man b/libX11/man/XUnionRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XUnionRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XUniqueContext.man b/libX11/man/XUniqueContext.man
new file mode 100644
index 000000000..60c71a492
--- /dev/null
+++ b/libX11/man/XUniqueContext.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSaveContext.__libmansuffix__
diff --git a/libX11/man/XUnloadFont.man b/libX11/man/XUnloadFont.man
new file mode 100644
index 000000000..8b44e8513
--- /dev/null
+++ b/libX11/man/XUnloadFont.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XLoadFont.__libmansuffix__
diff --git a/libX11/man/XUnlockDisplay.man b/libX11/man/XUnlockDisplay.man
new file mode 100644
index 000000000..bc8bb0205
--- /dev/null
+++ b/libX11/man/XUnlockDisplay.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XInitThreads.__libmansuffix__
diff --git a/libX11/man/XUnmapSubwindows.man b/libX11/man/XUnmapSubwindows.man
new file mode 100644
index 000000000..86b768e8e
--- /dev/null
+++ b/libX11/man/XUnmapSubwindows.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XUnmapWindow.__libmansuffix__
diff --git a/libX11/man/XUnregisterIMInstantiateCallback.man b/libX11/man/XUnregisterIMInstantiateCallback.man
new file mode 100644
index 000000000..6d302b9cd
--- /dev/null
+++ b/libX11/man/XUnregisterIMInstantiateCallback.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XOpenIM.__libmansuffix__
diff --git a/libX11/man/XUnsetICFocus.man b/libX11/man/XUnsetICFocus.man
new file mode 100644
index 000000000..034ffb47d
--- /dev/null
+++ b/libX11/man/XUnsetICFocus.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetICFocus.__libmansuffix__
diff --git a/libX11/man/XVisualIDFromVisual.man b/libX11/man/XVisualIDFromVisual.man
new file mode 100644
index 000000000..0b12bf69d
--- /dev/null
+++ b/libX11/man/XVisualIDFromVisual.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__
diff --git a/libX11/man/XVisualInfo.man b/libX11/man/XVisualInfo.man
new file mode 100644
index 000000000..0b12bf69d
--- /dev/null
+++ b/libX11/man/XVisualInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__
diff --git a/libX11/man/XWMGeometry.man b/libX11/man/XWMGeometry.man
new file mode 100644
index 000000000..9ad74b7ba
--- /dev/null
+++ b/libX11/man/XWMGeometry.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XParseGeometry.__libmansuffix__
diff --git a/libX11/man/XWMHints.man b/libX11/man/XWMHints.man
new file mode 100644
index 000000000..e066f6d95
--- /dev/null
+++ b/libX11/man/XWMHints.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XAllocWMHints.__libmansuffix__
diff --git a/libX11/man/XWindowAttributes.man b/libX11/man/XWindowAttributes.man
new file mode 100644
index 000000000..df77346fb
--- /dev/null
+++ b/libX11/man/XWindowAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XGetWindowAttributes.__libmansuffix__
diff --git a/libX11/man/XWindowChanges.man b/libX11/man/XWindowChanges.man
new file mode 100644
index 000000000..5fbc49488
--- /dev/null
+++ b/libX11/man/XWindowChanges.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XConfigureWindow.__libmansuffix__
diff --git a/libX11/man/XWindowEvent.man b/libX11/man/XWindowEvent.man
new file mode 100644
index 000000000..f421b8caa
--- /dev/null
+++ b/libX11/man/XWindowEvent.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XNextEvent.__libmansuffix__
diff --git a/libX11/man/XWithdrawWindow.man b/libX11/man/XWithdrawWindow.man
new file mode 100644
index 000000000..799989ad0
--- /dev/null
+++ b/libX11/man/XWithdrawWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIconifyWindow.__libmansuffix__
diff --git a/libX11/man/XWriteBitmapFile.man b/libX11/man/XWriteBitmapFile.man
new file mode 100644
index 000000000..9631570d0
--- /dev/null
+++ b/libX11/man/XWriteBitmapFile.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__
diff --git a/libX11/man/XXorRegion.man b/libX11/man/XXorRegion.man
new file mode 100644
index 000000000..630c1f2c8
--- /dev/null
+++ b/libX11/man/XXorRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XIntersectRegion.__libmansuffix__
diff --git a/libX11/man/XcmsAllocNamedColor.man b/libX11/man/XcmsAllocNamedColor.man
new file mode 100644
index 000000000..e8e02c0af
--- /dev/null
+++ b/libX11/man/XcmsAllocNamedColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsAllocColor.__libmansuffix__
diff --git a/libX11/man/XcmsCIELab.man b/libX11/man/XcmsCIELab.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsCIELab.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsCIELabQueryMaxL.man b/libX11/man/XcmsCIELabQueryMaxL.man
new file mode 100644
index 000000000..ae4d10014
--- /dev/null
+++ b/libX11/man/XcmsCIELabQueryMaxL.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIELabQueryMaxLC.man b/libX11/man/XcmsCIELabQueryMaxLC.man
new file mode 100644
index 000000000..ae4d10014
--- /dev/null
+++ b/libX11/man/XcmsCIELabQueryMaxLC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIELabQueryMinL.man b/libX11/man/XcmsCIELabQueryMinL.man
new file mode 100644
index 000000000..ae4d10014
--- /dev/null
+++ b/libX11/man/XcmsCIELabQueryMinL.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIELuv.man b/libX11/man/XcmsCIELuv.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsCIELuv.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsCIELuvQueryMaxL.man b/libX11/man/XcmsCIELuvQueryMaxL.man
new file mode 100644
index 000000000..96b9c7f1d
--- /dev/null
+++ b/libX11/man/XcmsCIELuvQueryMaxL.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIELuvQueryMaxLC.man b/libX11/man/XcmsCIELuvQueryMaxLC.man
new file mode 100644
index 000000000..96b9c7f1d
--- /dev/null
+++ b/libX11/man/XcmsCIELuvQueryMaxLC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIELuvQueryMinL.man b/libX11/man/XcmsCIELuvQueryMinL.man
new file mode 100644
index 000000000..96b9c7f1d
--- /dev/null
+++ b/libX11/man/XcmsCIELuvQueryMinL.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsCIEXYZ.man b/libX11/man/XcmsCIEXYZ.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsCIEXYZ.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsCIEuvY.man b/libX11/man/XcmsCIEuvY.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsCIEuvY.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsCIExyY.man b/libX11/man/XcmsCIExyY.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsCIExyY.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsFreeCCC.man b/libX11/man/XcmsFreeCCC.man
new file mode 100644
index 000000000..8d43dee20
--- /dev/null
+++ b/libX11/man/XcmsFreeCCC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCreateCCC.__libmansuffix__
diff --git a/libX11/man/XcmsLookupColor.man b/libX11/man/XcmsLookupColor.man
new file mode 100644
index 000000000..60500d85e
--- /dev/null
+++ b/libX11/man/XcmsLookupColor.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryColor.__libmansuffix__
diff --git a/libX11/man/XcmsPad.man b/libX11/man/XcmsPad.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsPad.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsQueryBlue.man b/libX11/man/XcmsQueryBlue.man
new file mode 100644
index 000000000..16213132b
--- /dev/null
+++ b/libX11/man/XcmsQueryBlue.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__
diff --git a/libX11/man/XcmsQueryColors.man b/libX11/man/XcmsQueryColors.man
new file mode 100644
index 000000000..60500d85e
--- /dev/null
+++ b/libX11/man/XcmsQueryColors.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryColor.__libmansuffix__
diff --git a/libX11/man/XcmsQueryGreen.man b/libX11/man/XcmsQueryGreen.man
new file mode 100644
index 000000000..16213132b
--- /dev/null
+++ b/libX11/man/XcmsQueryGreen.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__
diff --git a/libX11/man/XcmsQueryRed.man b/libX11/man/XcmsQueryRed.man
new file mode 100644
index 000000000..16213132b
--- /dev/null
+++ b/libX11/man/XcmsQueryRed.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__
diff --git a/libX11/man/XcmsQueryWhite.man b/libX11/man/XcmsQueryWhite.man
new file mode 100644
index 000000000..16213132b
--- /dev/null
+++ b/libX11/man/XcmsQueryWhite.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__
diff --git a/libX11/man/XcmsRGB.man b/libX11/man/XcmsRGB.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsRGB.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsRGBi.man b/libX11/man/XcmsRGBi.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsRGBi.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsSetCCCOfColormap.man b/libX11/man/XcmsSetCCCOfColormap.man
new file mode 100644
index 000000000..862869ffe
--- /dev/null
+++ b/libX11/man/XcmsSetCCCOfColormap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsCCCOfColormap.__libmansuffix__
diff --git a/libX11/man/XcmsSetWhiteAdjustProc.man b/libX11/man/XcmsSetWhiteAdjustProc.man
new file mode 100644
index 000000000..1b224cccb
--- /dev/null
+++ b/libX11/man/XcmsSetWhiteAdjustProc.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsSetWhitePoint.__libmansuffix__
diff --git a/libX11/man/XcmsStoreColors.man b/libX11/man/XcmsStoreColors.man
new file mode 100644
index 000000000..356624062
--- /dev/null
+++ b/libX11/man/XcmsStoreColors.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsStoreColor.__libmansuffix__
diff --git a/libX11/man/XcmsTekHVC.man b/libX11/man/XcmsTekHVC.man
new file mode 100644
index 000000000..ddce73e37
--- /dev/null
+++ b/libX11/man/XcmsTekHVC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsColor.__libmansuffix__
diff --git a/libX11/man/XcmsTekHVCQueryMaxV.man b/libX11/man/XcmsTekHVCQueryMaxV.man
new file mode 100644
index 000000000..0893603c7
--- /dev/null
+++ b/libX11/man/XcmsTekHVCQueryMaxV.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsTekHVCQueryMaxVC.man b/libX11/man/XcmsTekHVCQueryMaxVC.man
new file mode 100644
index 000000000..0893603c7
--- /dev/null
+++ b/libX11/man/XcmsTekHVCQueryMaxVC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsTekHVCQueryMaxVSamples.man b/libX11/man/XcmsTekHVCQueryMaxVSamples.man
new file mode 100644
index 000000000..0893603c7
--- /dev/null
+++ b/libX11/man/XcmsTekHVCQueryMaxVSamples.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XcmsTekHVCQueryMinV.man b/libX11/man/XcmsTekHVCQueryMinV.man
new file mode 100644
index 000000000..0893603c7
--- /dev/null
+++ b/libX11/man/XcmsTekHVCQueryMinV.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__
diff --git a/libX11/man/XmbSetWMProperties.man b/libX11/man/XmbSetWMProperties.man
new file mode 100644
index 000000000..24e3c41af
--- /dev/null
+++ b/libX11/man/XmbSetWMProperties.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMProperties.__libmansuffix__
diff --git a/libX11/man/XmbTextPropertyToTextList.man b/libX11/man/XmbTextPropertyToTextList.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/XmbTextPropertyToTextList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XrmCombineDatabase.man b/libX11/man/XrmCombineDatabase.man
new file mode 100644
index 000000000..7630c51e8
--- /dev/null
+++ b/libX11/man/XrmCombineDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmMergeDatabases.__libmansuffix__
diff --git a/libX11/man/XrmCombineFileDatabase.man b/libX11/man/XrmCombineFileDatabase.man
new file mode 100644
index 000000000..7630c51e8
--- /dev/null
+++ b/libX11/man/XrmCombineFileDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmMergeDatabases.__libmansuffix__
diff --git a/libX11/man/XrmDestroyDatabase.man b/libX11/man/XrmDestroyDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmDestroyDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmGetDatabase.man b/libX11/man/XrmGetDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmGetDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmGetStringDatabase.man b/libX11/man/XrmGetStringDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmGetStringDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmLocaleOfDatabase.man b/libX11/man/XrmLocaleOfDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmLocaleOfDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmOptionDescRec.man b/libX11/man/XrmOptionDescRec.man
new file mode 100644
index 000000000..cbff21629
--- /dev/null
+++ b/libX11/man/XrmOptionDescRec.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmInitialize.__libmansuffix__
diff --git a/libX11/man/XrmOptionKind.man b/libX11/man/XrmOptionKind.man
new file mode 100644
index 000000000..cbff21629
--- /dev/null
+++ b/libX11/man/XrmOptionKind.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmInitialize.__libmansuffix__
diff --git a/libX11/man/XrmParseCommand.man b/libX11/man/XrmParseCommand.man
new file mode 100644
index 000000000..cbff21629
--- /dev/null
+++ b/libX11/man/XrmParseCommand.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmInitialize.__libmansuffix__
diff --git a/libX11/man/XrmPermStringToQuark.man b/libX11/man/XrmPermStringToQuark.man
new file mode 100644
index 000000000..8f5733ea4
--- /dev/null
+++ b/libX11/man/XrmPermStringToQuark.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__
diff --git a/libX11/man/XrmPutFileDatabase.man b/libX11/man/XrmPutFileDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmPutFileDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmPutLineResource.man b/libX11/man/XrmPutLineResource.man
new file mode 100644
index 000000000..6011ae5fd
--- /dev/null
+++ b/libX11/man/XrmPutLineResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmPutResource.__libmansuffix__
diff --git a/libX11/man/XrmPutStringResource.man b/libX11/man/XrmPutStringResource.man
new file mode 100644
index 000000000..6011ae5fd
--- /dev/null
+++ b/libX11/man/XrmPutStringResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmPutResource.__libmansuffix__
diff --git a/libX11/man/XrmQGetResource.man b/libX11/man/XrmQGetResource.man
new file mode 100644
index 000000000..19ab8bff8
--- /dev/null
+++ b/libX11/man/XrmQGetResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetResource.__libmansuffix__
diff --git a/libX11/man/XrmQGetSearchList.man b/libX11/man/XrmQGetSearchList.man
new file mode 100644
index 000000000..19ab8bff8
--- /dev/null
+++ b/libX11/man/XrmQGetSearchList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetResource.__libmansuffix__
diff --git a/libX11/man/XrmQGetSearchResource.man b/libX11/man/XrmQGetSearchResource.man
new file mode 100644
index 000000000..19ab8bff8
--- /dev/null
+++ b/libX11/man/XrmQGetSearchResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetResource.__libmansuffix__
diff --git a/libX11/man/XrmQPutResource.man b/libX11/man/XrmQPutResource.man
new file mode 100644
index 000000000..6011ae5fd
--- /dev/null
+++ b/libX11/man/XrmQPutResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmPutResource.__libmansuffix__
diff --git a/libX11/man/XrmQPutStringResource.man b/libX11/man/XrmQPutStringResource.man
new file mode 100644
index 000000000..6011ae5fd
--- /dev/null
+++ b/libX11/man/XrmQPutStringResource.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmPutResource.__libmansuffix__
diff --git a/libX11/man/XrmQuarkToString.man b/libX11/man/XrmQuarkToString.man
new file mode 100644
index 000000000..8f5733ea4
--- /dev/null
+++ b/libX11/man/XrmQuarkToString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__
diff --git a/libX11/man/XrmSetDatabase.man b/libX11/man/XrmSetDatabase.man
new file mode 100644
index 000000000..2dc1243ec
--- /dev/null
+++ b/libX11/man/XrmSetDatabase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__
diff --git a/libX11/man/XrmStringToBindingQuarkList.man b/libX11/man/XrmStringToBindingQuarkList.man
new file mode 100644
index 000000000..8f5733ea4
--- /dev/null
+++ b/libX11/man/XrmStringToBindingQuarkList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__
diff --git a/libX11/man/XrmStringToQuark.man b/libX11/man/XrmStringToQuark.man
new file mode 100644
index 000000000..8f5733ea4
--- /dev/null
+++ b/libX11/man/XrmStringToQuark.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__
diff --git a/libX11/man/XrmStringToQuarkList.man b/libX11/man/XrmStringToQuarkList.man
new file mode 100644
index 000000000..8f5733ea4
--- /dev/null
+++ b/libX11/man/XrmStringToQuarkList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__
diff --git a/libX11/man/XrmValue.man b/libX11/man/XrmValue.man
new file mode 100644
index 000000000..cbff21629
--- /dev/null
+++ b/libX11/man/XrmValue.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XrmInitialize.__libmansuffix__
diff --git a/libX11/man/Xutf8DrawImageString.man b/libX11/man/Xutf8DrawImageString.man
new file mode 100644
index 000000000..ce965eb55
--- /dev/null
+++ b/libX11/man/Xutf8DrawImageString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawImageString.__libmansuffix__
diff --git a/libX11/man/Xutf8DrawString.man b/libX11/man/Xutf8DrawString.man
new file mode 100644
index 000000000..dad556159
--- /dev/null
+++ b/libX11/man/Xutf8DrawString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawString.__libmansuffix__
diff --git a/libX11/man/Xutf8DrawText.man b/libX11/man/Xutf8DrawText.man
new file mode 100644
index 000000000..6588ec558
--- /dev/null
+++ b/libX11/man/Xutf8DrawText.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawText.__libmansuffix__
diff --git a/libX11/man/Xutf8LookupString.man b/libX11/man/Xutf8LookupString.man
new file mode 100644
index 000000000..3d2805b88
--- /dev/null
+++ b/libX11/man/Xutf8LookupString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbLookupString.__libmansuffix__
diff --git a/libX11/man/Xutf8ResetIC.man b/libX11/man/Xutf8ResetIC.man
new file mode 100644
index 000000000..a2336ccfa
--- /dev/null
+++ b/libX11/man/Xutf8ResetIC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbResetIC.__libmansuffix__
diff --git a/libX11/man/Xutf8SetWMProperties.man b/libX11/man/Xutf8SetWMProperties.man
new file mode 100644
index 000000000..24e3c41af
--- /dev/null
+++ b/libX11/man/Xutf8SetWMProperties.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XSetWMProperties.__libmansuffix__
diff --git a/libX11/man/Xutf8TextEscapement.man b/libX11/man/Xutf8TextEscapement.man
new file mode 100644
index 000000000..e63373fb0
--- /dev/null
+++ b/libX11/man/Xutf8TextEscapement.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextEscapement.__libmansuffix__
diff --git a/libX11/man/Xutf8TextExtents.man b/libX11/man/Xutf8TextExtents.man
new file mode 100644
index 000000000..f5a3c260f
--- /dev/null
+++ b/libX11/man/Xutf8TextExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextExtents.__libmansuffix__
diff --git a/libX11/man/Xutf8TextListToTextProperty.man b/libX11/man/Xutf8TextListToTextProperty.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/Xutf8TextListToTextProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/Xutf8TextPerCharExtents.man b/libX11/man/Xutf8TextPerCharExtents.man
new file mode 100644
index 000000000..41db614d9
--- /dev/null
+++ b/libX11/man/Xutf8TextPerCharExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextPerCharExtents.__libmansuffix__
diff --git a/libX11/man/Xutf8TextPropertyToTextList.man b/libX11/man/Xutf8TextPropertyToTextList.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/Xutf8TextPropertyToTextList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XwcDrawImageString.man b/libX11/man/XwcDrawImageString.man
new file mode 100644
index 000000000..ce965eb55
--- /dev/null
+++ b/libX11/man/XwcDrawImageString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawImageString.__libmansuffix__
diff --git a/libX11/man/XwcDrawString.man b/libX11/man/XwcDrawString.man
new file mode 100644
index 000000000..dad556159
--- /dev/null
+++ b/libX11/man/XwcDrawString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawString.__libmansuffix__
diff --git a/libX11/man/XwcDrawText.man b/libX11/man/XwcDrawText.man
new file mode 100644
index 000000000..6588ec558
--- /dev/null
+++ b/libX11/man/XwcDrawText.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbDrawText.__libmansuffix__
diff --git a/libX11/man/XwcFreeStringList.man b/libX11/man/XwcFreeStringList.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/XwcFreeStringList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XwcLookupString.man b/libX11/man/XwcLookupString.man
new file mode 100644
index 000000000..3d2805b88
--- /dev/null
+++ b/libX11/man/XwcLookupString.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbLookupString.__libmansuffix__
diff --git a/libX11/man/XwcResetIC.man b/libX11/man/XwcResetIC.man
new file mode 100644
index 000000000..a2336ccfa
--- /dev/null
+++ b/libX11/man/XwcResetIC.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbResetIC.__libmansuffix__
diff --git a/libX11/man/XwcTextEscapement.man b/libX11/man/XwcTextEscapement.man
new file mode 100644
index 000000000..e63373fb0
--- /dev/null
+++ b/libX11/man/XwcTextEscapement.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextEscapement.__libmansuffix__
diff --git a/libX11/man/XwcTextExtents.man b/libX11/man/XwcTextExtents.man
new file mode 100644
index 000000000..f5a3c260f
--- /dev/null
+++ b/libX11/man/XwcTextExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextExtents.__libmansuffix__
diff --git a/libX11/man/XwcTextListToTextProperty.man b/libX11/man/XwcTextListToTextProperty.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/XwcTextListToTextProperty.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/XwcTextPerCharExtents.man b/libX11/man/XwcTextPerCharExtents.man
new file mode 100644
index 000000000..41db614d9
--- /dev/null
+++ b/libX11/man/XwcTextPerCharExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextPerCharExtents.__libmansuffix__
diff --git a/libX11/man/XwcTextPropertyToTextList.man b/libX11/man/XwcTextPropertyToTextList.man
new file mode 100644
index 000000000..d73114782
--- /dev/null
+++ b/libX11/man/XwcTextPropertyToTextList.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__
diff --git a/libX11/man/xkb/Makefile.am b/libX11/man/xkb/Makefile.am
index e385d445e..c5d970074 100644
--- a/libX11/man/xkb/Makefile.am
+++ b/libX11/man/xkb/Makefile.am
@@ -1,7 +1,5 @@
libmandir = $(LIB_MAN_DIR)
-LIB_MAN_DIR_SUFFIX = $(LIB_MAN_DIR:@mandir@/man%=%)
-
libman_PRE = \
XkbActionCtrls.man \
XkbAddDeviceLedInfo.man \
diff --git a/libXau/Makefile.am b/libXau/Makefile.am
index 3ff7c03a9..f74f1bf93 100644
--- a/libXau/Makefile.am
+++ b/libXau/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS=man
+
lib_LTLIBRARIES = libXau.la
AM_CFLAGS = $(XAU_CFLAGS) $(CWARNFLAGS)
@@ -48,39 +50,8 @@ $(LINTLIB): $(libXau_la_SOURCES)
$(LINT) -y -oXau -x $(ALL_LINT_FLAGS) $(libXau_la_SOURCES)
endif MAKE_LINT_LIB
-LIB_MAN_DIR_SUFFIX = $(LIB_MAN_DIR:@mandir@/man%=%)
-
-libmandir = $(LIB_MAN_DIR)
-libman_PRE = Xau.man
-BUILT_SOURCES = $(Xau_shadows:=.@LIB_MAN_SUFFIX@)
-CLEANFILES = $(libman_DATA) $(BUILT_SOURCES) $(lintlib_DATA)
-libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \
- $(Xau_shadows:=.@LIB_MAN_SUFFIX@)
-
+CLEANFILES = $(lintlib_DATA)
MAINTAINERCLEANFILES = ChangeLog INSTALL
-EXTRA_DIST = $(libman_PRE)
-
-Xau_shadows = \
- XauFileName \
- XauReadAuth \
- XauLockAuth \
- XauUnlockAuth \
- XauWriteAuth \
- XauDisposeAuth \
- XauGetAuthByAddr \
- XauGetBestAuthByAddr
-
-Xau_shadows_man = $(Xau_shadows:=.@LIB_MAN_SUFFIX@)
-$(Xau_shadows_man):
- $(AM_V_GEN)echo .so man$(LIB_MAN_DIR_SUFFIX)/Xau.$(LIB_MAN_SUFFIX) > $@
-
-XORGRELSTRING = @PACKAGE_STRING@
- XORGMANNAME = X Version 11
-
-Xau.$(LIB_MAN_SUFFIX): $(srcdir)/Xau.man
- $(AM_V_GEN)$(SED) \
- -e 's/__xorgversion__/"$(XORGRELSTRING)" "$(XORGMANNAME)"/' \
- < $(srcdir)/Xau.man > Xau.$(LIB_MAN_SUFFIX)
.PHONY: ChangeLog INSTALL
diff --git a/libXau/configure.ac b/libXau/configure.ac
index 98e0184d6..ae37e62b3 100644
--- a/libXau/configure.ac
+++ b/libXau/configure.ac
@@ -28,10 +28,10 @@ AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h)
-# Require xorg-macros: XORG_DEFAULT_OPTIONS
+# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.4 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.4)
+ [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS
AC_PROG_CC
@@ -75,4 +75,5 @@ LINT_FLAGS="${LINT_FLAGS} ${XAU_CFLAGS}"
AC_OUTPUT([Makefile
+ man/Makefile
xau.pc])
diff --git a/libXau/man/Makefile.am b/libXau/man/Makefile.am
new file mode 100644
index 000000000..694c376b0
--- /dev/null
+++ b/libXau/man/Makefile.am
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+
+libmandir = $(LIB_MAN_DIR)
+
+libman_PRE = \
+ Xau.man \
+ XauDisposeAuth.man \
+ XauFileName.man \
+ XauGetAuthByAddr.man \
+ XauGetBestAuthByAddr.man \
+ XauLockAuth.man \
+ XauReadAuth.man \
+ XauUnlockAuth.man \
+ XauWriteAuth.man
+
+libman_DATA = $(libman_PRE:man=$(LIB_MAN_SUFFIX))
+
+EXTRA_DIST = $(libman_PRE)
+
+CLEANFILES = $(libman_DATA)
+
+# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
+SUFFIXES = .$(LIB_MAN_SUFFIX) .man
+
+.man.$(LIB_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
diff --git a/libXau/Xau.man b/libXau/man/Xau.man
index 2cea88c22..0688f49ef 100644
--- a/libXau/Xau.man
+++ b/libXau/man/Xau.man
@@ -2,33 +2,33 @@
.\" $XdotOrg$
.\"
.\" Copyright (c) 1994 X Consortium
-.\"
+.\"
.\" Permission is hereby granted, free of charge, to any person obtaining a
-.\" copy of this software and associated documentation files (the "Software"),
-.\" to deal in the Software without restriction, including without limitation
-.\" the rights to use, copy, modify, merge, publish, distribute, sublicense,
-.\" and/or sell copies of the Software, and to permit persons to whom the
+.\" copy of this software and associated documentation files (the "Software"),
+.\" to deal in the Software without restriction, including without limitation
+.\" the rights to use, copy, modify, merge, publish, distribute, sublicense,
+.\" and/or sell copies of the Software, and to permit persons to whom the
.\" Software furnished to do so, subject to the following conditions:
-.\"
+.\"
.\" The above copyright notice and this permission notice shall be included in
.\" all copies or substantial portions of the Software.
-.\"
+.\"
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
.\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
.\" SOFTWARE.
-.\"
-.\" Except as contained in this notice, the name of the X Consortium shall not
-.\" be used in advertising or otherwise to promote the sale, use or other
-.\" dealing in this Software without prior written authorization from the
+.\"
+.\" Except as contained in this notice, the name of the X Consortium shall not
+.\" be used in advertising or otherwise to promote the sale, use or other
+.\" dealing in this Software without prior written authorization from the
.\" X Consortium.
.\"
.\" $XFree86: xc/doc/man/Xau/Xau.man,v 1.2 2001/01/27 18:20:19 dawes Exp $
.\"
-.TH Xau 3 __xorgversion__
+.TH Xau __libmansuffix__ __xorgversion__
.SH NAME
Xau library: XauFileName, XauReadAuth, XauLockAuth, XauUnlockAuth,
XauWriteAuth, XauDisposeAuth,
@@ -51,11 +51,11 @@ typedef struct xauth {
} Xauth;
.HP
-char *XauFileName (void);
+char *XauFileName (void);
.HP
-Xauth *XauReadAuth (FILE *\fIauth_file\fP\^);
+Xauth *XauReadAuth (FILE *\fIauth_file\fP\^);
.HP
-int XauWriteAuth (FILE *\fIauth_file\fP, Xauth *\fIauth\fP\^);
+int XauWriteAuth (FILE *\fIauth_file\fP, Xauth *\fIauth\fP\^);
.HP
Xauth *XauGetAuthByAddr (unsigned short \fIfamily\fP\^, unsigned short
\fIaddress_length\fP\^, const char *\fIaddress\fP\^, unsigned short
@@ -65,14 +65,14 @@ Xauth *XauGetAuthByAddr (unsigned short \fIfamily\fP\^, unsigned short
Xauth *XauGetBestAuthByAddr (unsigned short \fIfamily\fP\^, unsigned short
\fIaddress_length\fP\^, const char *\fIaddress\fP\^, unsigned short
\fInumber_length\fP\^, const char *\fInumber\fP\^, int \fItypes_length\fP\^,
-char **\fItypes\fR\^, const int *\fItype_lengths\fR\^);
+char **\fItypes\fR\^, const int *\fItype_lengths\fR\^);
.HP
int XauLockAuth (const char *\fIfile_name\fP\^, int \fIretries\fP\^, int
-\fItimeout\fP\^, long \fIdead\fP\^);
+\fItimeout\fP\^, long \fIdead\fP\^);
.HP
-int XauUnlockAuth (const char *\fIfile_name\fP\^);
+int XauUnlockAuth (const char *\fIfile_name\fP\^);
.HP
-int XauDisposeAuth (Xauth *\fIauth\fP\^);
+int XauDisposeAuth (Xauth *\fIauth\fP\^);
.ft R
.SH DESCRIPTION
.PP
@@ -124,7 +124,7 @@ results:
.fi
.PP
-\fBXauUnlockAuth\fP undoes the work of \fIXauLockAuth\fP by unlinking both
+\fBXauUnlockAuth\fP undoes the work of \fIXauLockAuth\fP by unlinking both
the ``-c'' and ``-l'' file names.
.PP
\fBXauDisposeAuth\fP frees storage allocated to hold an authorization entry.
diff --git a/libXau/man/XauDisposeAuth.man b/libXau/man/XauDisposeAuth.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauDisposeAuth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauFileName.man b/libXau/man/XauFileName.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauFileName.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauGetAuthByAddr.man b/libXau/man/XauGetAuthByAddr.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauGetAuthByAddr.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauGetBestAuthByAddr.man b/libXau/man/XauGetBestAuthByAddr.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauGetBestAuthByAddr.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauLockAuth.man b/libXau/man/XauLockAuth.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauLockAuth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauReadAuth.man b/libXau/man/XauReadAuth.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauReadAuth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauUnlockAuth.man b/libXau/man/XauUnlockAuth.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauUnlockAuth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXau/man/XauWriteAuth.man b/libXau/man/XauWriteAuth.man
new file mode 100644
index 000000000..d20306a06
--- /dev/null
+++ b/libXau/man/XauWriteAuth.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xau.__libmansuffix__
diff --git a/libXext/man/Makefile.am b/libXext/man/Makefile.am
index 0b4288882..0d7c1bba5 100644
--- a/libXext/man/Makefile.am
+++ b/libXext/man/Makefile.am
@@ -1,74 +1,85 @@
libmandir = $(LIB_MAN_DIR)
-LIB_MAN_DIR_SUFFIX = $(LIB_MAN_DIR:@mandir@/man%=%)
-
-libman_PRE = \
- DBE.man \
- DPMSCapable.man \
- DPMSDisable.man \
- DPMSEnable.man \
- DPMSForceLevel.man \
- DPMSGetTimeouts.man \
- DPMSGetVersion.man \
- DPMSInfo.man \
- DPMSQueryExtension.man \
- DPMSSetTimeouts.man \
- XShape.man \
- XShm.man \
- XcupGetReservedColormapEntries.man \
- XcupQueryVersion.man \
- XcupStoreColors.man \
- XdbeAllocateBackBufferName.man \
- XdbeBeginIdiom.man \
- XdbeDeallocateBackBufferName.man \
- XdbeEndIdiom.man \
- XdbeFreeVisualInfo.man \
- XdbeGetBackBufferAttributes.man \
- XdbeGetVisualInfo.man \
- XdbeQueryExtension.man \
- XdbeSwapBuffers.man \
- Xevi.man \
+libman_PRE = \
+ $(all_shadows:=.man) \
+ DBE.man \
+ DPMSCapable.man \
+ DPMSDisable.man \
+ DPMSEnable.man \
+ DPMSForceLevel.man \
+ DPMSGetTimeouts.man \
+ DPMSGetVersion.man \
+ DPMSInfo.man \
+ DPMSQueryExtension.man \
+ DPMSSetTimeouts.man \
+ XShape.man \
+ XShm.man \
+ XcupGetReservedColormapEntries.man \
+ XcupQueryVersion.man \
+ XcupStoreColors.man \
+ XdbeAllocateBackBufferName.man \
+ XdbeBeginIdiom.man \
+ XdbeDeallocateBackBufferName.man \
+ XdbeEndIdiom.man \
+ XdbeFreeVisualInfo.man \
+ XdbeGetBackBufferAttributes.man \
+ XdbeGetVisualInfo.man \
+ XdbeQueryExtension.man \
+ XdbeSwapBuffers.man \
+ Xevi.man \
Xmbuf.man
-XShape_man_aliases = XShapeQueryExtension XShapeQueryVersion XShapeCombineRegion XShapeCombineRectangles XShapeCombineMask XShapeCombineShape XShapeOffsetShape XShapeQueryExtents XShapeSelectInput XShapeInputSelected XShapeGetRectangles
-
-XShm_man_aliases = XShmQueryExtension XShmQueryVersion XShmPixmapFormat XShmAttach XShmDetach XShmCreateImage XShmPutImage XShmGetImage XShmCreatePixmap XShmGetEventBase
-
-Xmbuf_man_aliases = XmbufQueryExtension XmbufGetVersion XmbufCreateBuffers XmbufDestroyBuffers XmbufDisplayBuffers XmbufGetWindowAttributes XmbufChangeWindowAttributes XmbufGetBufferAttributes XmbufChangeBufferAttributes XmbufGetScreenInfo XmbufCreateStereoWindow
-
-Xevi_man_aliases = XeviQueryVersion XeviGetVisualInfo XeviQueryExtension
-
-all_aliases = $(XShape_man_aliases) $(XShm_man_aliases) $(Xmbuf_man_aliases) $(Xevi_man_aliases)
-
-libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \
- $(all_aliases:=.@LIB_MAN_SUFFIX@)
+XShape_shadows = \
+ XShapeQueryExtension \
+ XShapeQueryVersion \
+ XShapeCombineRegion \
+ XShapeCombineRectangles \
+ XShapeCombineMask \
+ XShapeCombineShape \
+ XShapeOffsetShape \
+ XShapeQueryExtents \
+ XShapeSelectInput \
+ XShapeInputSelected \
+ XShapeGetRectangles
+
+XShm_shadows = \
+ XShmQueryExtension \
+ XShmQueryVersion \
+ XShmPixmapFormat \
+ XShmAttach \
+ XShmDetach \
+ XShmCreateImage \
+ XShmPutImage \
+ XShmGetImage \
+ XShmCreatePixmap \
+ XShmGetEventBase
+
+Xmbuf_shadows = \
+ XmbufQueryExtension \
+ XmbufGetVersion \
+ XmbufCreateBuffers \
+ XmbufDestroyBuffers \
+ XmbufDisplayBuffers \
+ XmbufGetWindowAttributes \
+ XmbufChangeWindowAttributes \
+ XmbufGetBufferAttributes \
+ XmbufChangeBufferAttributes \
+ XmbufGetScreenInfo \
+ XmbufCreateStereoWindow
+
+Xevi_shadows = \
+ XeviQueryVersion \
+ XeviGetVisualInfo \
+ XeviQueryExtension
+
+all_shadows = $(XShape_shadows) $(XShm_shadows) $(Xmbuf_shadows) $(Xevi_shadows)
+
+libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@)
EXTRA_DIST = $(libman_PRE)
CLEANFILES = $(libman_DATA)
-# Generate man page shadow files (Replaces InstallManPageAliases from Imake)
-
-XShape_shadowmen = $(XShape_man_aliases:=.@LIB_MAN_SUFFIX@)
-
-$(XShape_shadowmen):
- $(AM_V_GEN)echo .so man$(LIB_MAN_DIR_SUFFIX)/XShape.$(LIB_MAN_SUFFIX) > $@
-
-XShm_shadowmen = $(XShm_man_aliases:=.@LIB_MAN_SUFFIX@)
-
-$(XShm_shadowmen):
- $(AM_V_GEN)echo .so man$(LIB_MAN_DIR_SUFFIX)/XShm.$(LIB_MAN_SUFFIX) > $@
-
-Xmbuf_shadowmen = $(Xmbuf_man_aliases:=.@LIB_MAN_SUFFIX@)
-
-$(Xmbuf_shadowmen):
- $(AM_V_GEN)echo .so man$(LIB_MAN_DIR_SUFFIX)/Xmbuf.$(LIB_MAN_SUFFIX) > $@
-
-Xevi_shadowmen = $(Xevi_man_aliases:=.@LIB_MAN_SUFFIX@)
-
-$(Xevi_shadowmen):
- $(AM_V_GEN)echo .so man$(LIB_MAN_DIR_SUFFIX)/Xevi.$(LIB_MAN_SUFFIX) > $@
-
SUFFIXES = .$(LIB_MAN_SUFFIX) .man
# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
diff --git a/libXext/man/XShapeCombineMask.man b/libXext/man/XShapeCombineMask.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeCombineMask.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeCombineRectangles.man b/libXext/man/XShapeCombineRectangles.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeCombineRectangles.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeCombineRegion.man b/libXext/man/XShapeCombineRegion.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeCombineRegion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeCombineShape.man b/libXext/man/XShapeCombineShape.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeCombineShape.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeGetRectangles.man b/libXext/man/XShapeGetRectangles.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeGetRectangles.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeInputSelected.man b/libXext/man/XShapeInputSelected.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeInputSelected.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeOffsetShape.man b/libXext/man/XShapeOffsetShape.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeOffsetShape.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeQueryExtension.man b/libXext/man/XShapeQueryExtension.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeQueryExtension.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeQueryExtents.man b/libXext/man/XShapeQueryExtents.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeQueryExtents.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeQueryVersion.man b/libXext/man/XShapeQueryVersion.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeQueryVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShapeSelectInput.man b/libXext/man/XShapeSelectInput.man
new file mode 100644
index 000000000..033600bd9
--- /dev/null
+++ b/libXext/man/XShapeSelectInput.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShape.__libmansuffix__
diff --git a/libXext/man/XShmAttach.man b/libXext/man/XShmAttach.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmAttach.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmCreateImage.man b/libXext/man/XShmCreateImage.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmCreateImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmCreatePixmap.man b/libXext/man/XShmCreatePixmap.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmCreatePixmap.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmDetach.man b/libXext/man/XShmDetach.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmDetach.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmGetEventBase.man b/libXext/man/XShmGetEventBase.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmGetEventBase.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmGetImage.man b/libXext/man/XShmGetImage.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmGetImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmPixmapFormat.man b/libXext/man/XShmPixmapFormat.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmPixmapFormat.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmPutImage.man b/libXext/man/XShmPutImage.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmPutImage.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmQueryExtension.man b/libXext/man/XShmQueryExtension.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmQueryExtension.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XShmQueryVersion.man b/libXext/man/XShmQueryVersion.man
new file mode 100644
index 000000000..d2725373c
--- /dev/null
+++ b/libXext/man/XShmQueryVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/XShm.__libmansuffix__
diff --git a/libXext/man/XeviGetVisualInfo.man b/libXext/man/XeviGetVisualInfo.man
new file mode 100644
index 000000000..dae44c178
--- /dev/null
+++ b/libXext/man/XeviGetVisualInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xevi.__libmansuffix__
diff --git a/libXext/man/XeviQueryExtension.man b/libXext/man/XeviQueryExtension.man
new file mode 100644
index 000000000..dae44c178
--- /dev/null
+++ b/libXext/man/XeviQueryExtension.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xevi.__libmansuffix__
diff --git a/libXext/man/XeviQueryVersion.man b/libXext/man/XeviQueryVersion.man
new file mode 100644
index 000000000..dae44c178
--- /dev/null
+++ b/libXext/man/XeviQueryVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xevi.__libmansuffix__
diff --git a/libXext/man/XmbufChangeBufferAttributes.man b/libXext/man/XmbufChangeBufferAttributes.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufChangeBufferAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufChangeWindowAttributes.man b/libXext/man/XmbufChangeWindowAttributes.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufChangeWindowAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufCreateBuffers.man b/libXext/man/XmbufCreateBuffers.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufCreateBuffers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufCreateStereoWindow.man b/libXext/man/XmbufCreateStereoWindow.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufCreateStereoWindow.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufDestroyBuffers.man b/libXext/man/XmbufDestroyBuffers.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufDestroyBuffers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufDisplayBuffers.man b/libXext/man/XmbufDisplayBuffers.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufDisplayBuffers.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufGetBufferAttributes.man b/libXext/man/XmbufGetBufferAttributes.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufGetBufferAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufGetScreenInfo.man b/libXext/man/XmbufGetScreenInfo.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufGetScreenInfo.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufGetVersion.man b/libXext/man/XmbufGetVersion.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufGetVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufGetWindowAttributes.man b/libXext/man/XmbufGetWindowAttributes.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufGetWindowAttributes.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXext/man/XmbufQueryExtension.man b/libXext/man/XmbufQueryExtension.man
new file mode 100644
index 000000000..2a25ca646
--- /dev/null
+++ b/libXext/man/XmbufQueryExtension.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xmbuf.__libmansuffix__
diff --git a/libXinerama/man/Makefile.am b/libXinerama/man/Makefile.am
index 7d8cc3dec..312a14b93 100644
--- a/libXinerama/man/Makefile.am
+++ b/libXinerama/man/Makefile.am
@@ -23,32 +23,23 @@
libmandir = $(LIB_MAN_DIR)
-LIB_MAN_DIR_SUFFIX = $(LIB_MAN_DIR:@mandir@/man%=%)
-
-libman_PRE = Xinerama.man
-
-BUILT_SOURCES = $(Xinerama_shadowmen)
+libman_PRE = \
+ Xinerama.man \
+ $(Xinerama_shadows:=.man)
+
+Xinerama_shadows = \
+ XineramaQueryExtension \
+ XineramaQueryVersion \
+ XineramaIsActive \
+ XineramaQueryScreens
EXTRA_DIST = $(libman_PRE)
+CLEANFILES = $(libman_DATA)
-CLEANFILES = $(libman_DATA) $(BUILT_SOURCES)
-
-libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \
- $(Xinerama_shadowmen)
+libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@)
SUFFIXES = .$(LIB_MAN_SUFFIX) .man
+# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
.man.$(LIB_MAN_SUFFIX):
$(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
-
-# Generate man page shadow files (Replaces InstallManPageAliases from Imake)
-
-Xinerama_shadows = \
- XineramaQueryExtension \
- XineramaQueryVersion \
- XineramaIsActive \
- XineramaQueryScreens
-
-Xinerama_shadowmen = $(Xinerama_shadows:=.@LIB_MAN_SUFFIX@)
-$(Xinerama_shadowmen):
- $(AM_V_GEN)echo ".so man$(LIB_MAN_DIR_SUFFIX)/Xinerama.$(LIB_MAN_SUFFIX)" > $@
diff --git a/libXinerama/man/XineramaIsActive.man b/libXinerama/man/XineramaIsActive.man
new file mode 100644
index 000000000..a4f83321b
--- /dev/null
+++ b/libXinerama/man/XineramaIsActive.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xinerama.__libmansuffix__
diff --git a/libXinerama/man/XineramaQueryExtension.man b/libXinerama/man/XineramaQueryExtension.man
new file mode 100644
index 000000000..a4f83321b
--- /dev/null
+++ b/libXinerama/man/XineramaQueryExtension.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xinerama.__libmansuffix__
diff --git a/libXinerama/man/XineramaQueryScreens.man b/libXinerama/man/XineramaQueryScreens.man
new file mode 100644
index 000000000..a4f83321b
--- /dev/null
+++ b/libXinerama/man/XineramaQueryScreens.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xinerama.__libmansuffix__
diff --git a/libXinerama/man/XineramaQueryVersion.man b/libXinerama/man/XineramaQueryVersion.man
new file mode 100644
index 000000000..a4f83321b
--- /dev/null
+++ b/libXinerama/man/XineramaQueryVersion.man
@@ -0,0 +1 @@
+.so man__libmansuffix__/Xinerama.__libmansuffix__
diff --git a/libxcb/NEWS b/libxcb/NEWS
index 457059877..eaa31e885 100644
--- a/libxcb/NEWS
+++ b/libxcb/NEWS
@@ -1,414 +1,423 @@
-Release 1.6 (2010-04-09)
-========================
-- darwin: xnu doesn't support poll on ttys on the master side
-- Fix descriptor leak on memory error path
-- Support xcb_discard_reply
-- Open the X11 socket with close-on-exec flag
-- Fix authentication on hpux and Hurd
-
-Release 1.5 (2009-12-03)
-========================
-- setsockopt(SO_KEEPALIVE) on TCP display connections
-- Add DRI2 support
-- Fix check dependency
-- Cygwin build fix: Add -no-undefined to libtool flags
-
-Release 1.4 (2009-07-15)
-========================
-* Add majorCode, minorCode and resourceID fields to X generic error
-* Fix precedence bug: wrong length for big-requests preceded by sync
-* Fix libxcb-randr version info
-
-Release 1.3 (2009-05-29)
-========================
-* Copy full IPv4 mapping (Bug #20665)
-* Fix XID allocation
-* Use poll() instead of select() when available
-* Fix local socket connection on Hurd
-* Fix XDM-AUTHORIZATION-1
-* Disable Nagle on TCP socket
-
-Release 1.2 (2009-02-17)
-========================
-* Stop packaging auto-generated C files into tarball.
-
-Release 1.1.93 (2008-12-11)
-===========================
-Enhancements:
-* Apple: Enable support for launchd DISPLAY socket
-* Treat XIDs the same as other cardinal values.
-
-Release 1.1.92 (2008-11-01)
-===========================
-Enhancements:
-* Added small fix to support trailing fixed fields; also warning for non-pad fixed fields
-* Fixed overly aggressive warning about fixed field following variable
-* Added generation of extern "C" for compatibility with C++
-* Remove libxcb-xlib and xcbxlib.h.
-* Inline _xcb_lock_io, _xcb_unlock_io, and _xcb_wait_io.
-* Track 64-bit sequence numbers internally.
-* Use sequence number ranges in pending replies
-* Remove duplicate XCB_EXTENSION calls for Composite extension
-* Factorize m4 macros and add one to set X extensions
-* Allow compile-time setting for XCB queue buffer size
-* Support handing off socket write permission to external code.
-* Add support for the abstract socket namespace under Linux
-
-Bug fixes:
-* Fix tiny memory leak in read_packet
-* Fix some fd leaks in _xcb_open_*()
-
-Release 1.1 (2007-11-04)
-========================
-
-This release requires xcb-proto 1.1, due to the addition of the
-extension-multiword attribute to the XML schema.
-
-This release contains several important bug fixes, summarized below. It
-also contains a patch much like Novell's libxcb-sloppy-lock.diff.
-Rationale from the commit message follows. The patch and this rationale
-were authored by Jamey Sharp <jamey@minilop.net>, with agreement from
-Josh Triplett <josh@freedesktop.org>.
-
- I strongly opposed proposals like this one for a long time.
- Originally I had a very good reason: libX11, when compiled to use
- XCB, would crash soon after a locking correctness violation, so it
- was better to have an informative assert failure than a mystifying
- crash soon after.
-
- It took some time for me to realize that I'd changed the libX11
- implementation (for unrelated reasons) so that it could survive most
- invalid locking situations, as long as it wasn't actually being used
- from multiple threads concurrently.
-
- The other thing that has changed is that most of the code with
- incorrect locking has now been fixed. The value of the assert is
- accordingly lower.
-
- However, remaining broken callers do need to be fixed. That's why
- libXCB will still noisily print a stacktrace (if possible) on each
- assertion failure, even when assert isn't actually invoked to
- abort() the program; and that's why aborting is still default. This
- environment variable is provided only for use as a temporary
- workaround for broken applications.
-
-Enhancements:
-* Print a backtrace, if possible, on locking assertion failures.
-* Skip abort() on locking assertions if LIBXCB_ALLOW_SLOPPY_LOCK is set.
-* xcb_poll_for_event: Return already-read events before reading again.
-* Output a configuration summary at the end of ./configure.
-
-Bug fixes:
-* Don't hold the xlib-xcb lock while sleeping: that allows deadlock.
-* Allow unix:<screen> style display names again.
-* Bug #9119: test xcb_popcount
-* Fix unit tests for FreeBSD
-* NetBSD doesn't have AI_ADDRCONFIG: use it only if it's available.
-* Require libXau >= 0.99.2; earlier versions have a broken .pc file
-* Use substitition variables in xcb-xinerama.pc.in
-* Update autogen.sh to one that does objdir != srcdir
-* Add tools/* and autogen.sh to EXTRA_DIST.
-* Doxygen can now be fully disabled if desired.
-
-Documentation improvements:
-* Many fixes and updates to the tutorial.
-* Iterators, requests, and replies get partial Doxygen documentation.
-
-
-Release 1.0 (2006-11-23)
-========================
-
-The "Thanksgiving" release: We feel thankful to have it released. Five years
-have passed since XCB's initial commit on September 3rd, 2001:
- <http://gitweb.freedesktop.org/?p=xcb.git;a=commit;h=09e54c4a3c>
-
-* Support IPv6. XCB now supports displays with IPv6 addresses, with or without
- enclosing square brackets, or with hosts which resolve to IPv6 addresses, by
- using getaddrinfo instead of gethostbyname, and by including support for
- authentication for such connections. This allows such displays as "::1:1.1".
-
-* XCB now uses the libpthread-stubs, to properly support optional use of
- pthreads even on platforms which do not have all the necessary pthread stubs
- in libc or otherwise available by default.
-
-* Switch from the old AM_PATH_CHECK macro to pkg-config. check 0.9.4 is now
- required to build XCB's unit tests. The version that we were requiring was
- not actually new enough to let our unit tests compile, and the AM_PATH_CHECK
- macro is now considered deprecated. We know that versions of check using
- pkg-config are new enough to work, and the check dependency was optional
- anyway, so we've dropped support for older versions.
-
-* Provide a xcb_prefetch_maximum_request_length counterpart to
- xcb_get_maximum_request_length.
-
-* Fix Bug #5958: zero out padding bytes in requests.
-
-* Change xcb_connect to pass the display number to _xcb_get_auth_info, which
- passes it to get_authptr. This allows get_authptr to stop hacking the
- display number out of the sockaddrs of various address families, such as
- port - X_TCP_PORT, or the number after the last X in the UNIX socket path.
-
-* Remove --with-opt and --with-debug options from configure.ac; configure
- supports the use of custom CFLAGS, so please use that instead.
-
-* Reove support for the <localfield> tag in protocol descriptions, since they
- no longer use it, and since new protocol descriptions should not need it
- either.
-
-* xcb-proto has no libraries or headers, so don't use XCBPROTO_CFLAGS or
- XCBPROTO_LIBS.
-
-* XCB builds which use xdmcp now include it in Requires.private, to support
- static linking.
-
-* Replace "long" with uint32_t when used for a 32-bit quantity
-
-* Various enhancements to the generation of documentation with Doxygen:
- * Check for doxygen in configure.ac
- * Fix some Doxygen warnings.
- * Install documentation.
- * Handle out-of-tree builds, with srcdir != builddir. xcb.doxygen now gets
- generated from xcb.doxygen.in, so that it can use top_builddir and
- top_srcdir to find source and to output documentation.
- * Fill in PROJECT_NUMBER from @VERSION@, now that we have it readily
- available via autoconf.
-
-
-Release 1.0 RC3 (2006-11-02)
-============================
-
-Note: Version 0.9.4 of the test suite tool "check" provides a broken
-version of the AM_PATH_CHECK macro, which causes autoconf to fail due to
-insufficient quoting on the macro names it prints in its deprecation
-message. We have written a patch to fix this problem, available at:
-<http://bugs.debian.org/cgi-bin/bugreport.cgi/check-m4-am-path-check-use-quadrigraphs-in-macro-names-to-unbreak-autoconf.patch?bug=395466;msg=20;att=1>
-Version 0.9.4-2 of the Debian package for check includes this patch.
-Users of other distributions who want to re-autotool libxcb will need to
-apply this patch, use an older version of check, or wait for a fixed
-upstream version. This bug does not affect users who use the distributed
-tarballs and do not re-autotool.
-
-* Add library support for xcb-xinerama, using new protocol description
- from xcb-proto.
-* In the generated protocol code, define and use constants for opcode
- numbers rather than hard-coding them.
-* In the API conversion script, match only XCB-namespaced XID generators
- when converting to xcb_generate_id.
-* Quit treating xproto specially in Makefile.am: handle it like all the
- extensions.
-* Generate Doxygen documentation comments in the protocol stubs, and
- provide a Doxygen config file for building HTML documentation for XCB.
-* Add note to xcbxlib.h that nothing except Xlib/XCB should use it.
-* Extend test suite to test xcb_parse_display with NULL argument and
- display in $DISPLAY.
-
-
-Release 1.0 RC2 (2006-10-07)
-============================
-
-API changes
------------
-
-In our announcement of XCB 1.0 RC1, we proposed two API changes for
-community feedback:
-
- We would greatly appreciate API review in this final release
- candidate period. We've had some limited feedback that our attempts
- to impose static type safety on XIDs in C pose more a hindrance than
- a help, so we would appreciate discussion over whether this
- constitutes a "serious issue with the API". Some question also
- remains of whether xcb_poll_for_event should have the out-parameter
- 'error', now that XCB has a more uniform mechanism for reporting
- connection errors. Speak now on these points or leave us alone. ;-)
-
-Since we've received feedback agreeing with our proposed changes, and no
-objections or requests to keep the existing API, we made both changes
-and bumped the soname to libxcb.so.1.0.0 in preparation for the release
-of XCB 1.0.
-
-* Remove XID wrapper structures and replace them with uint32_t typedefs.
- XID union types like xcb_drawable_t and xcb_fontable_t also become
- uint32_t typedefs. The API conversion script now replaces xcb_*_new
- with calls directly to xcb_generate_id. This change makes
- xcb_generate_id part of the client API rather than the extension API,
- so move xcb_generate_id from xcbext.h to xcb.h.
-
-* Remove the 'int *error' out-parameter for xcb_poll_for_event.
- xcb_poll_for_event now shuts down the xcb_connection_t on fatal
- errors; use xcb_connection_has_error to check.
-
-The Xlib-specific API in libxcb-xlib also changed:
-
-* Stop exposing the XCB IO lock for Xlib's benefit, by removing
- xcb_get_io_lock from the Xlib-specific XCB API; instead, libxcb-xlib
- now provides xcb_xlib_lock and xcb_xlib_unlock.
-
-Code generation changes
------------------------
-
-* The code generator no longer implicitly imports xproto for extensions.
- xcb-proto 1.0 RC2 includes the corresponding change to explicitly
- import xproto in extensions that need it
-
-* The generated protocol headers now declare "struct foo", "union foo"
- or "enum foo", not just the typedef "foo" of an unnamed
- struct/union/enum type.
-
-Bug Fixes
----------
-
-* Make Plan 7 'checked' requests work correctly.
-
-Documentation improvements
---------------------------
-
-* Document xcb_generate_id.
-
-* Tutorial enhancements.
-
-
-Release 1.0 RC1 (2006-09-25)
-============================
-
-The Great XCB Renaming
-----------------------
-
-Rename API to follow a new naming convention:
-
-* XCB_CONSTANTS_UPPERCASE_WITH_UNDERSCORES
-* xcb_functions_lowercase_with_underscores
-* xcb_types_lowercase_with_underscores_and_suffix_t
-* expand all abbreviations like "req", "rep", and "iter"
-
-Word boundaries for the names in the protocol descriptions fall:
-
-* Wherever the protocol descriptions already have an underscore
-* Between a lowercase letter and a subsequent uppercase letter
-* Before the last uppercase letter in a string of uppercase letters
- followed by a lowercase letter (such as in LSBFirst between LSB and
- First)
-* Before and after a string of digits (with exceptions for sized types
- like xcb_char2b_t and xcb_glx_float32_t to match the stdint.h
- convention)
-
-Also fix up some particular naming issues:
-
-* Rename shape_op and shape_kind to drop the "shape_" prefix, since
- otherwise these types end up as xcb_shape_shape_{op,kind}_t.
-* Remove leading underscores from enums in the GLX protocol description,
- previously needed to ensure a word separator, but now redundant.
-
-This renaming breaks code written for the previous API naming
-convention. The scripts in XCB's tools directory will convert code
-written for the old API to use the new API; they work well enough that
-we used them to convert the non-program-generated code in XCB, and when
-run on the old program-generated code, they almost exactly reproduce the
-new program-generated code (modulo whitespace and bugs in the old code
-generator).
-
-Authors: Vincent Torri, Thomas Hunger, Josh Triplett
-
-In addition to the API renaming, the library SONAMEs have changed to
-libxcb.so and libxcb-extname.so. The library major version remains at 0,
-to become version 1 before 1.0 is released; the SONAME lowercasing means
-that this will not conflict with XCB 0.9 libraries.
-
-The header files have moved from /usr/include/X11/XCB/ to
-/usr/include/xcb/. The XML-XCB protocol descriptions have moved to
-/usr/share/xcb, with extension descriptions no longer relegated to an
-extensions/ subdirectory. The API conversion script api_conv.pl will fix
-references to the header files, and packages using pkg-config will
-automatically use the new library names.
-
-Error handling Plan 7
----------------------
-
-All request functions now come in an "unchecked" and "checked" variant.
-The checked variant allows callers to handle errors inline where they
-obtain the reply, or by calling xcb_request_check for requests with no
-reply. The unchecked variant uses the event queue for errors. Requests
-with replies default to checked, because the caller must already make a
-function call to retrieve the reply and can see the error at that time;
-the unchecked variant uses the suffix _unchecked. Requests without
-replies default to unchecked, because the caller will not necessarily
-expect to handle a response, and the checked variant uses the suffix
-_checked.
-
-Connection error handling
--------------------------
-
-Fatal connection errors now put the xcb_connection_t object into an
-error state, at which point all further operations on that connection
-will fail. Callers can use the new xcb_connection_has_error function to
-check for this state in a connection. Functions that return a
-connection, such as the xcb_connect function, may instead return an
-xcb_connection_t already in an error state.
-
-In the future we expect to add additional API for getting more
-information about the error condition that caused the connection to get
-into an error state.
-
-Smaller API changes
--------------------
-
-All functions that have been marked 'deprecated' up to now have been
-removed for this release. After XCB 1.0 is released, functions marked
-'deprecated' will be preserved until the end of time to maintain
-compatibility.
-
-XCB no longer provides a sync function. Most callers of this function
-should use xcb_flush instead, which usually provides the intended
-functionality and does not require a round-trip to the server. If you
-really need this functionality, either use xcb_get_input_focus like sync
-used to do, or use the xcb_aux_sync function from the xcb-aux library in
-xcb-util. However, note that we do not consider the libraries in
-xcb-util remotely stable yet.
-
-XCB no longer provides xcb_[extension_name]_init functions for each
-extension. These functions previously caused XCB to issue and process a
-QueryExtension request. Callers should now directly call
-xcb_get_extension_data on the xcb_[extension_name]_id, or use
-xcb_prefetch_extension_data if they do not need to force a round-trip
-immediately.
-
-The compatibility functions in xcbxlib.h, provided solely for use by
-Xlib/XCB, now exist in a separate library libxcb-xlib. We don't want to
-have to change the libxcb soname if we later change or remove the Xlib
-compatibility functions, and nothing except Xlib/XCB should ever use
-them. (Applications which use Xlib/XCB do not need this library either;
-Xlib/XCB only uses it internally.)
-
-The descriptions of several extensions have been updated to match the
-latest versions implemented in the X.org X server.
-
-GIT Repository split
---------------------
-
-Previously, several XCB-related projects all existed under the umbrella
-of a single monolithic GIT repository with per-project subdirectories.
-We have split this repository into individual per-project repositories.
-
-Josh Triplett and Jamey Sharp wrote a tool called git-split to
-accomplish this repository split. git-split reconstructs the history of
-a sub-project previously stored in a subdirectory of a larger
-repository. It constructs new commit objects based on the existing tree
-objects for the subtree in each commit, and discards commits which do
-not affect the history of the sub-project, as well as merges made
-unnecessary due to these discarded commits.
-
-We would like to acknowledge the work of the gobby team in creating a
-collaborative editor which greatly aided the development of git-split
-(as well as these release notes).
-
-Build and implementation fixes
-------------------------------
-
-XCB no longer needs proto/x11 from X.org; the XCB header xproto.h
-provides the definitions from X.h, named according to XCB conventions.
-
-XCB should now build with non-GNU implementations of Make.
-
-XCB properly handles 32-bit wrap of sequence numbers, and thus now
-supports issuing more than 2**32 requests in one connection.
-
-Fixed bugs #7001, #7261.
+Release 1.7 (2010-08-13)
+========================
+- Always wake up readers after writing
+- Get rid of PATH_MAX and MAXPATHLEN
+- Add ~ operator support in code generator
+- xcb_open: Improve protocol/host parsing
+- xcb_connect_to_display_with_auth_info: Fix memory leak
+- Report which extensions are being built
+
+Release 1.6 (2010-04-09)
+========================
+- darwin: xnu doesn't support poll on ttys on the master side
+- Fix descriptor leak on memory error path
+- Support xcb_discard_reply
+- Open the X11 socket with close-on-exec flag
+- Fix authentication on hpux and Hurd
+
+Release 1.5 (2009-12-03)
+========================
+- setsockopt(SO_KEEPALIVE) on TCP display connections
+- Add DRI2 support
+- Fix check dependency
+- Cygwin build fix: Add -no-undefined to libtool flags
+
+Release 1.4 (2009-07-15)
+========================
+* Add majorCode, minorCode and resourceID fields to X generic error
+* Fix precedence bug: wrong length for big-requests preceded by sync
+* Fix libxcb-randr version info
+
+Release 1.3 (2009-05-29)
+========================
+* Copy full IPv4 mapping (Bug #20665)
+* Fix XID allocation
+* Use poll() instead of select() when available
+* Fix local socket connection on Hurd
+* Fix XDM-AUTHORIZATION-1
+* Disable Nagle on TCP socket
+
+Release 1.2 (2009-02-17)
+========================
+* Stop packaging auto-generated C files into tarball.
+
+Release 1.1.93 (2008-12-11)
+===========================
+Enhancements:
+* Apple: Enable support for launchd DISPLAY socket
+* Treat XIDs the same as other cardinal values.
+
+Release 1.1.92 (2008-11-01)
+===========================
+Enhancements:
+* Added small fix to support trailing fixed fields; also warning for non-pad fixed fields
+* Fixed overly aggressive warning about fixed field following variable
+* Added generation of extern "C" for compatibility with C++
+* Remove libxcb-xlib and xcbxlib.h.
+* Inline _xcb_lock_io, _xcb_unlock_io, and _xcb_wait_io.
+* Track 64-bit sequence numbers internally.
+* Use sequence number ranges in pending replies
+* Remove duplicate XCB_EXTENSION calls for Composite extension
+* Factorize m4 macros and add one to set X extensions
+* Allow compile-time setting for XCB queue buffer size
+* Support handing off socket write permission to external code.
+* Add support for the abstract socket namespace under Linux
+
+Bug fixes:
+* Fix tiny memory leak in read_packet
+* Fix some fd leaks in _xcb_open_*()
+
+Release 1.1 (2007-11-04)
+========================
+
+This release requires xcb-proto 1.1, due to the addition of the
+extension-multiword attribute to the XML schema.
+
+This release contains several important bug fixes, summarized below. It
+also contains a patch much like Novell's libxcb-sloppy-lock.diff.
+Rationale from the commit message follows. The patch and this rationale
+were authored by Jamey Sharp <jamey@minilop.net>, with agreement from
+Josh Triplett <josh@freedesktop.org>.
+
+ I strongly opposed proposals like this one for a long time.
+ Originally I had a very good reason: libX11, when compiled to use
+ XCB, would crash soon after a locking correctness violation, so it
+ was better to have an informative assert failure than a mystifying
+ crash soon after.
+
+ It took some time for me to realize that I'd changed the libX11
+ implementation (for unrelated reasons) so that it could survive most
+ invalid locking situations, as long as it wasn't actually being used
+ from multiple threads concurrently.
+
+ The other thing that has changed is that most of the code with
+ incorrect locking has now been fixed. The value of the assert is
+ accordingly lower.
+
+ However, remaining broken callers do need to be fixed. That's why
+ libXCB will still noisily print a stacktrace (if possible) on each
+ assertion failure, even when assert isn't actually invoked to
+ abort() the program; and that's why aborting is still default. This
+ environment variable is provided only for use as a temporary
+ workaround for broken applications.
+
+Enhancements:
+* Print a backtrace, if possible, on locking assertion failures.
+* Skip abort() on locking assertions if LIBXCB_ALLOW_SLOPPY_LOCK is set.
+* xcb_poll_for_event: Return already-read events before reading again.
+* Output a configuration summary at the end of ./configure.
+
+Bug fixes:
+* Don't hold the xlib-xcb lock while sleeping: that allows deadlock.
+* Allow unix:<screen> style display names again.
+* Bug #9119: test xcb_popcount
+* Fix unit tests for FreeBSD
+* NetBSD doesn't have AI_ADDRCONFIG: use it only if it's available.
+* Require libXau >= 0.99.2; earlier versions have a broken .pc file
+* Use substitition variables in xcb-xinerama.pc.in
+* Update autogen.sh to one that does objdir != srcdir
+* Add tools/* and autogen.sh to EXTRA_DIST.
+* Doxygen can now be fully disabled if desired.
+
+Documentation improvements:
+* Many fixes and updates to the tutorial.
+* Iterators, requests, and replies get partial Doxygen documentation.
+
+
+Release 1.0 (2006-11-23)
+========================
+
+The "Thanksgiving" release: We feel thankful to have it released. Five years
+have passed since XCB's initial commit on September 3rd, 2001:
+ <http://gitweb.freedesktop.org/?p=xcb.git;a=commit;h=09e54c4a3c>
+
+* Support IPv6. XCB now supports displays with IPv6 addresses, with or without
+ enclosing square brackets, or with hosts which resolve to IPv6 addresses, by
+ using getaddrinfo instead of gethostbyname, and by including support for
+ authentication for such connections. This allows such displays as "::1:1.1".
+
+* XCB now uses the libpthread-stubs, to properly support optional use of
+ pthreads even on platforms which do not have all the necessary pthread stubs
+ in libc or otherwise available by default.
+
+* Switch from the old AM_PATH_CHECK macro to pkg-config. check 0.9.4 is now
+ required to build XCB's unit tests. The version that we were requiring was
+ not actually new enough to let our unit tests compile, and the AM_PATH_CHECK
+ macro is now considered deprecated. We know that versions of check using
+ pkg-config are new enough to work, and the check dependency was optional
+ anyway, so we've dropped support for older versions.
+
+* Provide a xcb_prefetch_maximum_request_length counterpart to
+ xcb_get_maximum_request_length.
+
+* Fix Bug #5958: zero out padding bytes in requests.
+
+* Change xcb_connect to pass the display number to _xcb_get_auth_info, which
+ passes it to get_authptr. This allows get_authptr to stop hacking the
+ display number out of the sockaddrs of various address families, such as
+ port - X_TCP_PORT, or the number after the last X in the UNIX socket path.
+
+* Remove --with-opt and --with-debug options from configure.ac; configure
+ supports the use of custom CFLAGS, so please use that instead.
+
+* Reove support for the <localfield> tag in protocol descriptions, since they
+ no longer use it, and since new protocol descriptions should not need it
+ either.
+
+* xcb-proto has no libraries or headers, so don't use XCBPROTO_CFLAGS or
+ XCBPROTO_LIBS.
+
+* XCB builds which use xdmcp now include it in Requires.private, to support
+ static linking.
+
+* Replace "long" with uint32_t when used for a 32-bit quantity
+
+* Various enhancements to the generation of documentation with Doxygen:
+ * Check for doxygen in configure.ac
+ * Fix some Doxygen warnings.
+ * Install documentation.
+ * Handle out-of-tree builds, with srcdir != builddir. xcb.doxygen now gets
+ generated from xcb.doxygen.in, so that it can use top_builddir and
+ top_srcdir to find source and to output documentation.
+ * Fill in PROJECT_NUMBER from @VERSION@, now that we have it readily
+ available via autoconf.
+
+
+Release 1.0 RC3 (2006-11-02)
+============================
+
+Note: Version 0.9.4 of the test suite tool "check" provides a broken
+version of the AM_PATH_CHECK macro, which causes autoconf to fail due to
+insufficient quoting on the macro names it prints in its deprecation
+message. We have written a patch to fix this problem, available at:
+<http://bugs.debian.org/cgi-bin/bugreport.cgi/check-m4-am-path-check-use-quadrigraphs-in-macro-names-to-unbreak-autoconf.patch?bug=395466;msg=20;att=1>
+Version 0.9.4-2 of the Debian package for check includes this patch.
+Users of other distributions who want to re-autotool libxcb will need to
+apply this patch, use an older version of check, or wait for a fixed
+upstream version. This bug does not affect users who use the distributed
+tarballs and do not re-autotool.
+
+* Add library support for xcb-xinerama, using new protocol description
+ from xcb-proto.
+* In the generated protocol code, define and use constants for opcode
+ numbers rather than hard-coding them.
+* In the API conversion script, match only XCB-namespaced XID generators
+ when converting to xcb_generate_id.
+* Quit treating xproto specially in Makefile.am: handle it like all the
+ extensions.
+* Generate Doxygen documentation comments in the protocol stubs, and
+ provide a Doxygen config file for building HTML documentation for XCB.
+* Add note to xcbxlib.h that nothing except Xlib/XCB should use it.
+* Extend test suite to test xcb_parse_display with NULL argument and
+ display in $DISPLAY.
+
+
+Release 1.0 RC2 (2006-10-07)
+============================
+
+API changes
+-----------
+
+In our announcement of XCB 1.0 RC1, we proposed two API changes for
+community feedback:
+
+ We would greatly appreciate API review in this final release
+ candidate period. We've had some limited feedback that our attempts
+ to impose static type safety on XIDs in C pose more a hindrance than
+ a help, so we would appreciate discussion over whether this
+ constitutes a "serious issue with the API". Some question also
+ remains of whether xcb_poll_for_event should have the out-parameter
+ 'error', now that XCB has a more uniform mechanism for reporting
+ connection errors. Speak now on these points or leave us alone. ;-)
+
+Since we've received feedback agreeing with our proposed changes, and no
+objections or requests to keep the existing API, we made both changes
+and bumped the soname to libxcb.so.1.0.0 in preparation for the release
+of XCB 1.0.
+
+* Remove XID wrapper structures and replace them with uint32_t typedefs.
+ XID union types like xcb_drawable_t and xcb_fontable_t also become
+ uint32_t typedefs. The API conversion script now replaces xcb_*_new
+ with calls directly to xcb_generate_id. This change makes
+ xcb_generate_id part of the client API rather than the extension API,
+ so move xcb_generate_id from xcbext.h to xcb.h.
+
+* Remove the 'int *error' out-parameter for xcb_poll_for_event.
+ xcb_poll_for_event now shuts down the xcb_connection_t on fatal
+ errors; use xcb_connection_has_error to check.
+
+The Xlib-specific API in libxcb-xlib also changed:
+
+* Stop exposing the XCB IO lock for Xlib's benefit, by removing
+ xcb_get_io_lock from the Xlib-specific XCB API; instead, libxcb-xlib
+ now provides xcb_xlib_lock and xcb_xlib_unlock.
+
+Code generation changes
+-----------------------
+
+* The code generator no longer implicitly imports xproto for extensions.
+ xcb-proto 1.0 RC2 includes the corresponding change to explicitly
+ import xproto in extensions that need it
+
+* The generated protocol headers now declare "struct foo", "union foo"
+ or "enum foo", not just the typedef "foo" of an unnamed
+ struct/union/enum type.
+
+Bug Fixes
+---------
+
+* Make Plan 7 'checked' requests work correctly.
+
+Documentation improvements
+--------------------------
+
+* Document xcb_generate_id.
+
+* Tutorial enhancements.
+
+
+Release 1.0 RC1 (2006-09-25)
+============================
+
+The Great XCB Renaming
+----------------------
+
+Rename API to follow a new naming convention:
+
+* XCB_CONSTANTS_UPPERCASE_WITH_UNDERSCORES
+* xcb_functions_lowercase_with_underscores
+* xcb_types_lowercase_with_underscores_and_suffix_t
+* expand all abbreviations like "req", "rep", and "iter"
+
+Word boundaries for the names in the protocol descriptions fall:
+
+* Wherever the protocol descriptions already have an underscore
+* Between a lowercase letter and a subsequent uppercase letter
+* Before the last uppercase letter in a string of uppercase letters
+ followed by a lowercase letter (such as in LSBFirst between LSB and
+ First)
+* Before and after a string of digits (with exceptions for sized types
+ like xcb_char2b_t and xcb_glx_float32_t to match the stdint.h
+ convention)
+
+Also fix up some particular naming issues:
+
+* Rename shape_op and shape_kind to drop the "shape_" prefix, since
+ otherwise these types end up as xcb_shape_shape_{op,kind}_t.
+* Remove leading underscores from enums in the GLX protocol description,
+ previously needed to ensure a word separator, but now redundant.
+
+This renaming breaks code written for the previous API naming
+convention. The scripts in XCB's tools directory will convert code
+written for the old API to use the new API; they work well enough that
+we used them to convert the non-program-generated code in XCB, and when
+run on the old program-generated code, they almost exactly reproduce the
+new program-generated code (modulo whitespace and bugs in the old code
+generator).
+
+Authors: Vincent Torri, Thomas Hunger, Josh Triplett
+
+In addition to the API renaming, the library SONAMEs have changed to
+libxcb.so and libxcb-extname.so. The library major version remains at 0,
+to become version 1 before 1.0 is released; the SONAME lowercasing means
+that this will not conflict with XCB 0.9 libraries.
+
+The header files have moved from /usr/include/X11/XCB/ to
+/usr/include/xcb/. The XML-XCB protocol descriptions have moved to
+/usr/share/xcb, with extension descriptions no longer relegated to an
+extensions/ subdirectory. The API conversion script api_conv.pl will fix
+references to the header files, and packages using pkg-config will
+automatically use the new library names.
+
+Error handling Plan 7
+---------------------
+
+All request functions now come in an "unchecked" and "checked" variant.
+The checked variant allows callers to handle errors inline where they
+obtain the reply, or by calling xcb_request_check for requests with no
+reply. The unchecked variant uses the event queue for errors. Requests
+with replies default to checked, because the caller must already make a
+function call to retrieve the reply and can see the error at that time;
+the unchecked variant uses the suffix _unchecked. Requests without
+replies default to unchecked, because the caller will not necessarily
+expect to handle a response, and the checked variant uses the suffix
+_checked.
+
+Connection error handling
+-------------------------
+
+Fatal connection errors now put the xcb_connection_t object into an
+error state, at which point all further operations on that connection
+will fail. Callers can use the new xcb_connection_has_error function to
+check for this state in a connection. Functions that return a
+connection, such as the xcb_connect function, may instead return an
+xcb_connection_t already in an error state.
+
+In the future we expect to add additional API for getting more
+information about the error condition that caused the connection to get
+into an error state.
+
+Smaller API changes
+-------------------
+
+All functions that have been marked 'deprecated' up to now have been
+removed for this release. After XCB 1.0 is released, functions marked
+'deprecated' will be preserved until the end of time to maintain
+compatibility.
+
+XCB no longer provides a sync function. Most callers of this function
+should use xcb_flush instead, which usually provides the intended
+functionality and does not require a round-trip to the server. If you
+really need this functionality, either use xcb_get_input_focus like sync
+used to do, or use the xcb_aux_sync function from the xcb-aux library in
+xcb-util. However, note that we do not consider the libraries in
+xcb-util remotely stable yet.
+
+XCB no longer provides xcb_[extension_name]_init functions for each
+extension. These functions previously caused XCB to issue and process a
+QueryExtension request. Callers should now directly call
+xcb_get_extension_data on the xcb_[extension_name]_id, or use
+xcb_prefetch_extension_data if they do not need to force a round-trip
+immediately.
+
+The compatibility functions in xcbxlib.h, provided solely for use by
+Xlib/XCB, now exist in a separate library libxcb-xlib. We don't want to
+have to change the libxcb soname if we later change or remove the Xlib
+compatibility functions, and nothing except Xlib/XCB should ever use
+them. (Applications which use Xlib/XCB do not need this library either;
+Xlib/XCB only uses it internally.)
+
+The descriptions of several extensions have been updated to match the
+latest versions implemented in the X.org X server.
+
+GIT Repository split
+--------------------
+
+Previously, several XCB-related projects all existed under the umbrella
+of a single monolithic GIT repository with per-project subdirectories.
+We have split this repository into individual per-project repositories.
+
+Josh Triplett and Jamey Sharp wrote a tool called git-split to
+accomplish this repository split. git-split reconstructs the history of
+a sub-project previously stored in a subdirectory of a larger
+repository. It constructs new commit objects based on the existing tree
+objects for the subtree in each commit, and discards commits which do
+not affect the history of the sub-project, as well as merges made
+unnecessary due to these discarded commits.
+
+We would like to acknowledge the work of the gobby team in creating a
+collaborative editor which greatly aided the development of git-split
+(as well as these release notes).
+
+Build and implementation fixes
+------------------------------
+
+XCB no longer needs proto/x11 from X.org; the XCB header xproto.h
+provides the definitions from X.h, named according to XCB conventions.
+
+XCB should now build with non-GNU implementations of Make.
+
+XCB properly handles 32-bit wrap of sequence numbers, and thus now
+supports issuing more than 2**32 requests in one connection.
+
+Fixed bugs #7001, #7261.
diff --git a/libxcb/configure.ac b/libxcb/configure.ac
index ef71ad886..173755c2a 100644
--- a/libxcb/configure.ac
+++ b/libxcb/configure.ac
@@ -3,7 +3,7 @@
AC_PREREQ(2.57)
AC_INIT([libxcb],
- 1.6,
+ 1.7,
[xcb@lists.freedesktop.org])
AC_CONFIG_SRCDIR([xcb.pc.in])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
diff --git a/pixman/configure.ac b/pixman/configure.ac
index ae7b4ee15..be1690b3b 100644
--- a/pixman/configure.ac
+++ b/pixman/configure.ac
@@ -600,13 +600,23 @@ AC_SUBST(DEP_CFLAGS)
AC_SUBST(DEP_LIBS)
dnl =====================================
-dnl posix_memalign
+dnl posix_memalign, sigaction, alarm
AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
if test x$have_posix_memalign = xyes; then
AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
fi
+AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
+if test x$have_sigaction = xyes; then
+ AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
+fi
+
+AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
+if test x$have_alarm = xyes; then
+ AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
+fi
+
dnl =====================================
dnl Thread local storage
diff --git a/pixman/pixman/pixman-arm-neon-asm.S b/pixman/pixman/pixman-arm-neon-asm.S
index 51bc347bc..18dca54ef 100644
--- a/pixman/pixman/pixman-arm-neon-asm.S
+++ b/pixman/pixman/pixman-arm-neon-asm.S
@@ -1,1713 +1,1806 @@
-/*
- * Copyright © 2009 Nokia Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
- */
-
-/*
- * This file contains implementations of NEON optimized pixel processing
- * functions. There is no full and detailed tutorial, but some functions
- * (those which are exposing some new or interesting features) are
- * extensively commented and can be used as examples.
- *
- * You may want to have a look at the comments for following functions:
- * - pixman_composite_over_8888_0565_asm_neon
- * - pixman_composite_over_n_8_0565_asm_neon
- */
-
-/* Prevent the stack from becoming executable for no reason... */
-#if defined(__linux__) && defined(__ELF__)
-.section .note.GNU-stack,"",%progbits
-#endif
-
- .text
- .fpu neon
- .arch armv7a
- .object_arch armv4
- .eabi_attribute 10, 0 /* suppress Tag_FP_arch */
- .eabi_attribute 12, 0 /* suppress Tag_Advanced_SIMD_arch */
- .arm
- .altmacro
-
-#include "pixman-arm-neon-asm.h"
-
-/* Global configuration options and preferences */
-
-/*
- * The code can optionally make use of unaligned memory accesses to improve
- * performance of handling leading/trailing pixels for each scanline.
- * Configuration variable RESPECT_STRICT_ALIGNMENT can be set to 0 for
- * example in linux if unaligned memory accesses are not configured to
- * generate.exceptions.
- */
-.set RESPECT_STRICT_ALIGNMENT, 1
-
-/*
- * Set default prefetch type. There is a choice between the following options:
- *
- * PREFETCH_TYPE_NONE (may be useful for the ARM cores where PLD is set to work
- * as NOP to workaround some HW bugs or for whatever other reason)
- *
- * PREFETCH_TYPE_SIMPLE (may be useful for simple single-issue ARM cores where
- * advanced prefetch intruduces heavy overhead)
- *
- * PREFETCH_TYPE_ADVANCED (useful for superscalar cores such as ARM Cortex-A8
- * which can run ARM and NEON instructions simultaneously so that extra ARM
- * instructions do not add (many) extra cycles, but improve prefetch efficiency)
- *
- * Note: some types of function can't support advanced prefetch and fallback
- * to simple one (those which handle 24bpp pixels)
- */
-.set PREFETCH_TYPE_DEFAULT, PREFETCH_TYPE_ADVANCED
-
-/* Prefetch distance in pixels for simple prefetch */
-.set PREFETCH_DISTANCE_SIMPLE, 64
-
-/*
- * Implementation of pixman_composite_over_8888_0565_asm_neon
- *
- * This function takes a8r8g8b8 source buffer, r5g6b5 destination buffer and
- * performs OVER compositing operation. Function fast_composite_over_8888_0565
- * from pixman-fast-path.c does the same in C and can be used as a reference.
- *
- * First we need to have some NEON assembly code which can do the actual
- * operation on the pixels and provide it to the template macro.
- *
- * Template macro quite conveniently takes care of emitting all the necessary
- * code for memory reading and writing (including quite tricky cases of
- * handling unaligned leading/trailing pixels), so we only need to deal with
- * the data in NEON registers.
- *
- * NEON registers allocation in general is recommented to be the following:
- * d0, d1, d2, d3 - contain loaded source pixel data
- * d4, d5, d6, d7 - contain loaded destination pixels (if they are needed)
- * d24, d25, d26, d27 - contain loading mask pixel data (if mask is used)
- * d28, d29, d30, d31 - place for storing the result (destination pixels)
- *
- * As can be seen above, four 64-bit NEON registers are used for keeping
- * intermediate pixel data and up to 8 pixels can be processed in one step
- * for 32bpp formats (16 pixels for 16bpp, 32 pixels for 8bpp).
- *
- * This particular function uses the following registers allocation:
- * d0, d1, d2, d3 - contain loaded source pixel data
- * d4, d5 - contain loaded destination pixels (they are needed)
- * d28, d29 - place for storing the result (destination pixels)
- */
-
-/*
- * Step one. We need to have some code to do some arithmetics on pixel data.
- * This is implemented as a pair of macros: '*_head' and '*_tail'. When used
- * back-to-back, they take pixel data from {d0, d1, d2, d3} and {d4, d5},
- * perform all the needed calculations and write the result to {d28, d29}.
- * The rationale for having two macros and not just one will be explained
- * later. In practice, any single monolitic function which does the work can
- * be split into two parts in any arbitrary way without affecting correctness.
- *
- * There is one special trick here too. Common template macro can optionally
- * make our life a bit easier by doing R, G, B, A color components
- * deinterleaving for 32bpp pixel formats (and this feature is used in
- * 'pixman_composite_over_8888_0565_asm_neon' function). So it means that
- * instead of having 8 packed pixels in {d0, d1, d2, d3} registers, we
- * actually use d0 register for blue channel (a vector of eight 8-bit
- * values), d1 register for green, d2 for red and d3 for alpha. This
- * simple conversion can be also done with a few NEON instructions:
- *
- * Packed to planar conversion:
- * vuzp.8 d0, d1
- * vuzp.8 d2, d3
- * vuzp.8 d1, d3
- * vuzp.8 d0, d2
- *
- * Planar to packed conversion:
- * vzip.8 d0, d2
- * vzip.8 d1, d3
- * vzip.8 d2, d3
- * vzip.8 d0, d1
- *
- * But pixel can be loaded directly in planar format using VLD4.8 NEON
- * instruction. It is 1 cycle slower than VLD1.32, so this is not always
- * desirable, that's why deinterleaving is optional.
- *
- * But anyway, here is the code:
- */
-.macro pixman_composite_over_8888_0565_process_pixblock_head
- /* convert 8 r5g6b5 pixel data from {d4, d5} to planar 8-bit format
- and put data into d6 - red, d7 - green, d30 - blue */
- vshrn.u16 d6, q2, #8
- vshrn.u16 d7, q2, #3
- vsli.u16 q2, q2, #5
- vsri.u8 d6, d6, #5
- vmvn.8 d3, d3 /* invert source alpha */
- vsri.u8 d7, d7, #6
- vshrn.u16 d30, q2, #2
- /* now do alpha blending, storing results in 8-bit planar format
- into d16 - red, d19 - green, d18 - blue */
- vmull.u8 q10, d3, d6
- vmull.u8 q11, d3, d7
- vmull.u8 q12, d3, d30
- vrshr.u16 q13, q10, #8
- vrshr.u16 q3, q11, #8
- vrshr.u16 q15, q12, #8
- vraddhn.u16 d20, q10, q13
- vraddhn.u16 d23, q11, q3
- vraddhn.u16 d22, q12, q15
-.endm
-
-.macro pixman_composite_over_8888_0565_process_pixblock_tail
- /* ... continue alpha blending */
- vqadd.u8 d16, d2, d20
- vqadd.u8 q9, q0, q11
- /* convert the result to r5g6b5 and store it into {d28, d29} */
- vshll.u8 q14, d16, #8
- vshll.u8 q8, d19, #8
- vshll.u8 q9, d18, #8
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
-.endm
-
-/*
- * OK, now we got almost everything that we need. Using the above two
- * macros, the work can be done right. But now we want to optimize
- * it a bit. ARM Cortex-A8 is an in-order core, and benefits really
- * a lot from good code scheduling and software pipelining.
- *
- * Let's construct some code, which will run in the core main loop.
- * Some pseudo-code of the main loop will look like this:
- * head
- * while (...) {
- * tail
- * head
- * }
- * tail
- *
- * It may look a bit weird, but this setup allows to hide instruction
- * latencies better and also utilize dual-issue capability more
- * efficiently (make pairs of load-store and ALU instructions).
- *
- * So what we need now is a '*_tail_head' macro, which will be used
- * in the core main loop. A trivial straightforward implementation
- * of this macro would look like this:
- *
- * pixman_composite_over_8888_0565_process_pixblock_tail
- * vst1.16 {d28, d29}, [DST_W, :128]!
- * vld1.16 {d4, d5}, [DST_R, :128]!
- * vld4.32 {d0, d1, d2, d3}, [SRC]!
- * pixman_composite_over_8888_0565_process_pixblock_head
- * cache_preload 8, 8
- *
- * Now it also got some VLD/VST instructions. We simply can't move from
- * processing one block of pixels to the other one with just arithmetics.
- * The previously processed data needs to be written to memory and new
- * data needs to be fetched. Fortunately, this main loop does not deal
- * with partial leading/trailing pixels and can load/store a full block
- * of pixels in a bulk. Additionally, destination buffer is already
- * 16 bytes aligned here (which is good for performance).
- *
- * New things here are DST_R, DST_W, SRC and MASK identifiers. These
- * are the aliases for ARM registers which are used as pointers for
- * accessing data. We maintain separate pointers for reading and writing
- * destination buffer (DST_R and DST_W).
- *
- * Another new thing is 'cache_preload' macro. It is used for prefetching
- * data into CPU L2 cache and improve performance when dealing with large
- * images which are far larger than cache size. It uses one argument
- * (actually two, but they need to be the same here) - number of pixels
- * in a block. Looking into 'pixman-arm-neon-asm.h' can provide some
- * details about this macro. Moreover, if good performance is needed
- * the code from this macro needs to be copied into '*_tail_head' macro
- * and mixed with the rest of code for optimal instructions scheduling.
- * We are actually doing it below.
- *
- * Now after all the explanations, here is the optimized code.
- * Different instruction streams (originaling from '*_head', '*_tail'
- * and 'cache_preload' macro) use different indentation levels for
- * better readability. Actually taking the code from one of these
- * indentation levels and ignoring a few VLD/VST instructions would
- * result in exactly the code from '*_head', '*_tail' or 'cache_preload'
- * macro!
- */
-
-#if 1
-
-.macro pixman_composite_over_8888_0565_process_pixblock_tail_head
- vqadd.u8 d16, d2, d20
- vld1.16 {d4, d5}, [DST_R, :128]!
- vqadd.u8 q9, q0, q11
- vshrn.u16 d6, q2, #8
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- vshrn.u16 d7, q2, #3
- vsli.u16 q2, q2, #5
- vshll.u8 q14, d16, #8
- PF add PF_X, PF_X, #8
- vshll.u8 q8, d19, #8
- PF tst PF_CTL, #0xF
- vsri.u8 d6, d6, #5
- PF addne PF_X, PF_X, #8
- vmvn.8 d3, d3
- PF subne PF_CTL, PF_CTL, #1
- vsri.u8 d7, d7, #6
- vshrn.u16 d30, q2, #2
- vmull.u8 q10, d3, d6
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- vmull.u8 q11, d3, d7
- vmull.u8 q12, d3, d30
- PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
- vsri.u16 q14, q8, #5
- PF cmp PF_X, ORIG_W
- vshll.u8 q9, d18, #8
- vrshr.u16 q13, q10, #8
- PF subge PF_X, PF_X, ORIG_W
- vrshr.u16 q3, q11, #8
- vrshr.u16 q15, q12, #8
- PF subges PF_CTL, PF_CTL, #0x10
- vsri.u16 q14, q9, #11
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
- vraddhn.u16 d20, q10, q13
- vraddhn.u16 d23, q11, q3
- PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
- vraddhn.u16 d22, q12, q15
- vst1.16 {d28, d29}, [DST_W, :128]!
-.endm
-
-#else
-
-/* If we did not care much about the performance, we would just use this... */
-.macro pixman_composite_over_8888_0565_process_pixblock_tail_head
- pixman_composite_over_8888_0565_process_pixblock_tail
- vst1.16 {d28, d29}, [DST_W, :128]!
- vld1.16 {d4, d5}, [DST_R, :128]!
- vld4.32 {d0, d1, d2, d3}, [SRC]!
- pixman_composite_over_8888_0565_process_pixblock_head
- cache_preload 8, 8
-.endm
-
-#endif
-
-/*
- * And now the final part. We are using 'generate_composite_function' macro
- * to put all the stuff together. We are specifying the name of the function
- * which we want to get, number of bits per pixel for the source, mask and
- * destination (0 if unused, like mask in this case). Next come some bit
- * flags:
- * FLAG_DST_READWRITE - tells that the destination buffer is both read
- * and written, for write-only buffer we would use
- * FLAG_DST_WRITEONLY flag instead
- * FLAG_DEINTERLEAVE_32BPP - tells that we prefer to work with planar data
- * and separate color channels for 32bpp format.
- * The next things are:
- * - the number of pixels processed per iteration (8 in this case, because
- * that's the maximum what can fit into four 64-bit NEON registers).
- * - prefetch distance, measured in pixel blocks. In this case it is 5 times
- * by 8 pixels. That would be 40 pixels, or up to 160 bytes. Optimal
- * prefetch distance can be selected by running some benchmarks.
- *
- * After that we specify some macros, these are 'default_init',
- * 'default_cleanup' here which are empty (but it is possible to have custom
- * init/cleanup macros to be able to save/restore some extra NEON registers
- * like d8-d15 or do anything else) followed by
- * 'pixman_composite_over_8888_0565_process_pixblock_head',
- * 'pixman_composite_over_8888_0565_process_pixblock_tail' and
- * 'pixman_composite_over_8888_0565_process_pixblock_tail_head'
- * which we got implemented above.
- *
- * The last part is the NEON registers allocation scheme.
- */
-generate_composite_function \
- pixman_composite_over_8888_0565_asm_neon, 32, 0, 16, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_over_8888_0565_process_pixblock_head, \
- pixman_composite_over_8888_0565_process_pixblock_tail, \
- pixman_composite_over_8888_0565_process_pixblock_tail_head, \
- 28, /* dst_w_basereg */ \
- 4, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 24 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_over_n_0565_process_pixblock_head
- /* convert 8 r5g6b5 pixel data from {d4, d5} to planar 8-bit format
- and put data into d6 - red, d7 - green, d30 - blue */
- vshrn.u16 d6, q2, #8
- vshrn.u16 d7, q2, #3
- vsli.u16 q2, q2, #5
- vsri.u8 d6, d6, #5
- vsri.u8 d7, d7, #6
- vshrn.u16 d30, q2, #2
- /* now do alpha blending, storing results in 8-bit planar format
- into d16 - red, d19 - green, d18 - blue */
- vmull.u8 q10, d3, d6
- vmull.u8 q11, d3, d7
- vmull.u8 q12, d3, d30
- vrshr.u16 q13, q10, #8
- vrshr.u16 q3, q11, #8
- vrshr.u16 q15, q12, #8
- vraddhn.u16 d20, q10, q13
- vraddhn.u16 d23, q11, q3
- vraddhn.u16 d22, q12, q15
-.endm
-
-.macro pixman_composite_over_n_0565_process_pixblock_tail
- /* ... continue alpha blending */
- vqadd.u8 d16, d2, d20
- vqadd.u8 q9, q0, q11
- /* convert the result to r5g6b5 and store it into {d28, d29} */
- vshll.u8 q14, d16, #8
- vshll.u8 q8, d19, #8
- vshll.u8 q9, d18, #8
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_n_0565_process_pixblock_tail_head
- pixman_composite_over_n_0565_process_pixblock_tail
- vld1.16 {d4, d5}, [DST_R, :128]!
- vst1.16 {d28, d29}, [DST_W, :128]!
- pixman_composite_over_n_0565_process_pixblock_head
-.endm
-
-.macro pixman_composite_over_n_0565_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
- vmvn.8 d3, d3 /* invert source alpha */
-.endm
-
-generate_composite_function \
- pixman_composite_over_n_0565_asm_neon, 0, 0, 16, \
- FLAG_DST_READWRITE, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_n_0565_init, \
- default_cleanup, \
- pixman_composite_over_n_0565_process_pixblock_head, \
- pixman_composite_over_n_0565_process_pixblock_tail, \
- pixman_composite_over_n_0565_process_pixblock_tail_head, \
- 28, /* dst_w_basereg */ \
- 4, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 24 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_8888_0565_process_pixblock_head
- vshll.u8 q8, d1, #8
- vshll.u8 q14, d2, #8
- vshll.u8 q9, d0, #8
-.endm
-
-.macro pixman_composite_src_8888_0565_process_pixblock_tail
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
-.endm
-
-.macro pixman_composite_src_8888_0565_process_pixblock_tail_head
- vsri.u16 q14, q8, #5
- PF add PF_X, PF_X, #8
- PF tst PF_CTL, #0xF
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- PF addne PF_X, PF_X, #8
- PF subne PF_CTL, PF_CTL, #1
- vsri.u16 q14, q9, #11
- PF cmp PF_X, ORIG_W
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- vshll.u8 q8, d1, #8
- vst1.16 {d28, d29}, [DST_W, :128]!
- PF subge PF_X, PF_X, ORIG_W
- PF subges PF_CTL, PF_CTL, #0x10
- vshll.u8 q14, d2, #8
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
- vshll.u8 q9, d0, #8
-.endm
-
-generate_composite_function \
- pixman_composite_src_8888_0565_asm_neon, 32, 0, 16, \
- FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_8888_0565_process_pixblock_head, \
- pixman_composite_src_8888_0565_process_pixblock_tail, \
- pixman_composite_src_8888_0565_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_src_0565_8888_process_pixblock_head
- vshrn.u16 d30, q0, #8
- vshrn.u16 d29, q0, #3
- vsli.u16 q0, q0, #5
- vmov.u8 d31, #255
- vsri.u8 d30, d30, #5
- vsri.u8 d29, d29, #6
- vshrn.u16 d28, q0, #2
-.endm
-
-.macro pixman_composite_src_0565_8888_process_pixblock_tail
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_src_0565_8888_process_pixblock_tail_head
- pixman_composite_src_0565_8888_process_pixblock_tail
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- vld1.16 {d0, d1}, [SRC]!
- pixman_composite_src_0565_8888_process_pixblock_head
- cache_preload 8, 8
-.endm
-
-generate_composite_function \
- pixman_composite_src_0565_8888_asm_neon, 16, 0, 32, \
- FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_0565_8888_process_pixblock_head, \
- pixman_composite_src_0565_8888_process_pixblock_tail, \
- pixman_composite_src_0565_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_add_8000_8000_process_pixblock_head
- vqadd.u8 q14, q0, q2
- vqadd.u8 q15, q1, q3
-.endm
-
-.macro pixman_composite_add_8000_8000_process_pixblock_tail
-.endm
-
-.macro pixman_composite_add_8000_8000_process_pixblock_tail_head
- vld1.8 {d0, d1, d2, d3}, [SRC]!
- PF add PF_X, PF_X, #32
- PF tst PF_CTL, #0xF
- vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
- PF addne PF_X, PF_X, #32
- PF subne PF_CTL, PF_CTL, #1
- vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
- PF cmp PF_X, ORIG_W
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
- PF subge PF_X, PF_X, ORIG_W
- PF subges PF_CTL, PF_CTL, #0x10
- vqadd.u8 q14, q0, q2
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
- PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
- vqadd.u8 q15, q1, q3
-.endm
-
-generate_composite_function \
- pixman_composite_add_8000_8000_asm_neon, 8, 0, 8, \
- FLAG_DST_READWRITE, \
- 32, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_add_8000_8000_process_pixblock_head, \
- pixman_composite_add_8000_8000_process_pixblock_tail, \
- pixman_composite_add_8000_8000_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_add_8888_8888_process_pixblock_tail_head
- vld1.8 {d0, d1, d2, d3}, [SRC]!
- PF add PF_X, PF_X, #8
- PF tst PF_CTL, #0xF
- vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
- PF addne PF_X, PF_X, #8
- PF subne PF_CTL, PF_CTL, #1
- vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
- PF cmp PF_X, ORIG_W
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
- PF subge PF_X, PF_X, ORIG_W
- PF subges PF_CTL, PF_CTL, #0x10
- vqadd.u8 q14, q0, q2
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
- PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
- vqadd.u8 q15, q1, q3
-.endm
-
-generate_composite_function \
- pixman_composite_add_8888_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_READWRITE, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_add_8000_8000_process_pixblock_head, \
- pixman_composite_add_8000_8000_process_pixblock_tail, \
- pixman_composite_add_8888_8888_process_pixblock_tail_head
-
-generate_composite_function_single_scanline \
- pixman_composite_scanline_add_asm_neon, 32, 0, 32, \
- FLAG_DST_READWRITE, \
- 8, /* number of pixels, processed in a single block */ \
- default_init, \
- default_cleanup, \
- pixman_composite_add_8000_8000_process_pixblock_head, \
- pixman_composite_add_8000_8000_process_pixblock_tail, \
- pixman_composite_add_8888_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_over_8888_8888_process_pixblock_head
- vmvn.8 d24, d3 /* get inverted alpha */
- /* do alpha blending */
- vmull.u8 q8, d24, d4
- vmull.u8 q9, d24, d5
- vmull.u8 q10, d24, d6
- vmull.u8 q11, d24, d7
-.endm
-
-.macro pixman_composite_over_8888_8888_process_pixblock_tail
- vrshr.u16 q14, q8, #8
- vrshr.u16 q15, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- vraddhn.u16 d30, q12, q10
- vraddhn.u16 d31, q13, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
-.endm
-
-.macro pixman_composite_over_8888_8888_process_pixblock_tail_head
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vrshr.u16 q14, q8, #8
- PF add PF_X, PF_X, #8
- PF tst PF_CTL, #0xF
- vrshr.u16 q15, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- PF addne PF_X, PF_X, #8
- PF subne PF_CTL, PF_CTL, #1
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- PF cmp PF_X, ORIG_W
- vraddhn.u16 d30, q12, q10
- vraddhn.u16 d31, q13, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- vmvn.8 d22, d3
- PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- PF subge PF_X, PF_X, ORIG_W
- vmull.u8 q8, d22, d4
- PF subges PF_CTL, PF_CTL, #0x10
- vmull.u8 q9, d22, d5
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
- vmull.u8 q10, d22, d6
- PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
- vmull.u8 q11, d22, d7
-.endm
-
-generate_composite_function \
- pixman_composite_over_8888_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_over_8888_8888_process_pixblock_head, \
- pixman_composite_over_8888_8888_process_pixblock_tail, \
- pixman_composite_over_8888_8888_process_pixblock_tail_head
-
-generate_composite_function_single_scanline \
- pixman_composite_scanline_over_asm_neon, 32, 0, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- default_init, \
- default_cleanup, \
- pixman_composite_over_8888_8888_process_pixblock_head, \
- pixman_composite_over_8888_8888_process_pixblock_tail, \
- pixman_composite_over_8888_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_n_8888_process_pixblock_tail_head
- pixman_composite_over_8888_8888_process_pixblock_tail
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- pixman_composite_over_8888_8888_process_pixblock_head
-.endm
-
-.macro pixman_composite_over_n_8888_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
-.endm
-
-generate_composite_function \
- pixman_composite_over_n_8888_asm_neon, 0, 0, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_n_8888_init, \
- default_cleanup, \
- pixman_composite_over_8888_8888_process_pixblock_head, \
- pixman_composite_over_8888_8888_process_pixblock_tail, \
- pixman_composite_over_n_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head
- vrshr.u16 q14, q8, #8
- PF add PF_X, PF_X, #8
- PF tst PF_CTL, #0xF
- vrshr.u16 q15, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- PF addne PF_X, PF_X, #8
- PF subne PF_CTL, PF_CTL, #1
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- PF cmp PF_X, ORIG_W
- vraddhn.u16 d30, q12, q10
- vraddhn.u16 d31, q13, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
- vld4.8 {d0, d1, d2, d3}, [DST_R, :128]!
- vmvn.8 d22, d3
- PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- PF subge PF_X, PF_X, ORIG_W
- vmull.u8 q8, d22, d4
- PF subges PF_CTL, PF_CTL, #0x10
- vmull.u8 q9, d22, d5
- vmull.u8 q10, d22, d6
- PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
- vmull.u8 q11, d22, d7
-.endm
-
-.macro pixman_composite_over_reverse_n_8888_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d7[0]}, [DUMMY]
- vdup.8 d4, d7[0]
- vdup.8 d5, d7[1]
- vdup.8 d6, d7[2]
- vdup.8 d7, d7[3]
-.endm
-
-generate_composite_function \
- pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_reverse_n_8888_init, \
- default_cleanup, \
- pixman_composite_over_8888_8888_process_pixblock_head, \
- pixman_composite_over_8888_8888_process_pixblock_tail, \
- pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \
- 28, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 4, /* src_basereg */ \
- 24 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_over_n_8_0565_process_pixblock_head
- /* in */
- vmull.u8 q0, d24, d8
- vmull.u8 q1, d24, d9
- vmull.u8 q6, d24, d10
- vmull.u8 q7, d24, d11
- vrshr.u16 q10, q0, #8
- vrshr.u16 q11, q1, #8
- vrshr.u16 q12, q6, #8
- vrshr.u16 q13, q7, #8
- vraddhn.u16 d0, q0, q10
- vraddhn.u16 d1, q1, q11
- vraddhn.u16 d2, q6, q12
- vraddhn.u16 d3, q7, q13
-
- vshrn.u16 d6, q2, #8
- vshrn.u16 d7, q2, #3
- vsli.u16 q2, q2, #5
- vsri.u8 d6, d6, #5
- vmvn.8 d3, d3
- vsri.u8 d7, d7, #6
- vshrn.u16 d30, q2, #2
- /* now do alpha blending */
- vmull.u8 q10, d3, d6
- vmull.u8 q11, d3, d7
- vmull.u8 q12, d3, d30
- vrshr.u16 q13, q10, #8
- vrshr.u16 q3, q11, #8
- vrshr.u16 q15, q12, #8
- vraddhn.u16 d20, q10, q13
- vraddhn.u16 d23, q11, q3
- vraddhn.u16 d22, q12, q15
-.endm
-
-.macro pixman_composite_over_n_8_0565_process_pixblock_tail
- vqadd.u8 d16, d2, d20
- vqadd.u8 q9, q0, q11
- /* convert to r5g6b5 */
- vshll.u8 q14, d16, #8
- vshll.u8 q8, d19, #8
- vshll.u8 q9, d18, #8
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_n_8_0565_process_pixblock_tail_head
- pixman_composite_over_n_8_0565_process_pixblock_tail
- vst1.16 {d28, d29}, [DST_W, :128]!
- vld1.16 {d4, d5}, [DST_R, :128]!
- vld1.8 {d24}, [MASK]!
- cache_preload 8, 8
- pixman_composite_over_n_8_0565_process_pixblock_head
-.endm
-
-/*
- * This function needs a special initialization of solid mask.
- * Solid source pixel data is fetched from stack at ARGS_STACK_OFFSET
- * offset, split into color components and replicated in d8-d11
- * registers. Additionally, this function needs all the NEON registers,
- * so it has to save d8-d15 registers which are callee saved according
- * to ABI. These registers are restored from 'cleanup' macro. All the
- * other NEON registers are caller saved, so can be clobbered freely
- * without introducing any problems.
- */
-.macro pixman_composite_over_n_8_0565_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
-.endm
-
-.macro pixman_composite_over_n_8_0565_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_n_8_0565_asm_neon, 0, 8, 16, \
- FLAG_DST_READWRITE, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_n_8_0565_init, \
- pixman_composite_over_n_8_0565_cleanup, \
- pixman_composite_over_n_8_0565_process_pixblock_head, \
- pixman_composite_over_n_8_0565_process_pixblock_tail, \
- pixman_composite_over_n_8_0565_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_src_0565_0565_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_0565_0565_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_0565_0565_process_pixblock_tail_head
- vst1.16 {d0, d1, d2, d3}, [DST_W, :128]!
- vld1.16 {d0, d1, d2, d3}, [SRC]!
- cache_preload 16, 16
-.endm
-
-generate_composite_function \
- pixman_composite_src_0565_0565_asm_neon, 16, 0, 16, \
- FLAG_DST_WRITEONLY, \
- 16, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_0565_0565_process_pixblock_head, \
- pixman_composite_src_0565_0565_process_pixblock_tail, \
- pixman_composite_src_0565_0565_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_n_8_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_n_8_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_n_8_process_pixblock_tail_head
- vst1.8 {d0, d1, d2, d3}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_src_n_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #8
- vsli.u64 d0, d0, #16
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
-.endm
-
-.macro pixman_composite_src_n_8_cleanup
-.endm
-
-generate_composite_function \
- pixman_composite_src_n_8_asm_neon, 0, 0, 8, \
- FLAG_DST_WRITEONLY, \
- 32, /* number of pixels, processed in a single block */ \
- 0, /* prefetch distance */ \
- pixman_composite_src_n_8_init, \
- pixman_composite_src_n_8_cleanup, \
- pixman_composite_src_n_8_process_pixblock_head, \
- pixman_composite_src_n_8_process_pixblock_tail, \
- pixman_composite_src_n_8_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_n_0565_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_n_0565_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_n_0565_process_pixblock_tail_head
- vst1.16 {d0, d1, d2, d3}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_src_n_0565_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #16
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
-.endm
-
-.macro pixman_composite_src_n_0565_cleanup
-.endm
-
-generate_composite_function \
- pixman_composite_src_n_0565_asm_neon, 0, 0, 16, \
- FLAG_DST_WRITEONLY, \
- 16, /* number of pixels, processed in a single block */ \
- 0, /* prefetch distance */ \
- pixman_composite_src_n_0565_init, \
- pixman_composite_src_n_0565_cleanup, \
- pixman_composite_src_n_0565_process_pixblock_head, \
- pixman_composite_src_n_0565_process_pixblock_tail, \
- pixman_composite_src_n_0565_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_n_8888_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_n_8888_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_n_8888_process_pixblock_tail_head
- vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_src_n_8888_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
-.endm
-
-.macro pixman_composite_src_n_8888_cleanup
-.endm
-
-generate_composite_function \
- pixman_composite_src_n_8888_asm_neon, 0, 0, 32, \
- FLAG_DST_WRITEONLY, \
- 8, /* number of pixels, processed in a single block */ \
- 0, /* prefetch distance */ \
- pixman_composite_src_n_8888_init, \
- pixman_composite_src_n_8888_cleanup, \
- pixman_composite_src_n_8888_process_pixblock_head, \
- pixman_composite_src_n_8888_process_pixblock_tail, \
- pixman_composite_src_n_8888_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_8888_8888_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_8888_8888_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_8888_8888_process_pixblock_tail_head
- vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
- vld1.32 {d0, d1, d2, d3}, [SRC]!
- cache_preload 8, 8
-.endm
-
-generate_composite_function \
- pixman_composite_src_8888_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_WRITEONLY, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_8888_8888_process_pixblock_head, \
- pixman_composite_src_8888_8888_process_pixblock_tail, \
- pixman_composite_src_8888_8888_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_x888_8888_process_pixblock_head
- vorr q0, q0, q2
- vorr q1, q1, q2
-.endm
-
-.macro pixman_composite_src_x888_8888_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_x888_8888_process_pixblock_tail_head
- vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
- vld1.32 {d0, d1, d2, d3}, [SRC]!
- vorr q0, q0, q2
- vorr q1, q1, q2
- cache_preload 8, 8
-.endm
-
-.macro pixman_composite_src_x888_8888_init
- vmov.u8 q2, #0xFF
- vshl.u32 q2, q2, #24
-.endm
-
-generate_composite_function \
- pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_WRITEONLY, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- pixman_composite_src_x888_8888_init, \
- default_cleanup, \
- pixman_composite_src_x888_8888_process_pixblock_head, \
- pixman_composite_src_x888_8888_process_pixblock_tail, \
- pixman_composite_src_x888_8888_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_over_n_8_8888_process_pixblock_head
- /* expecting deinterleaved source data in {d8, d9, d10, d11} */
- /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
- /* and destination data in {d4, d5, d6, d7} */
- /* mask is in d24 (d25, d26, d27 are unused) */
-
- /* in */
- vmull.u8 q0, d24, d8
- vmull.u8 q1, d24, d9
- vmull.u8 q6, d24, d10
- vmull.u8 q7, d24, d11
- vrshr.u16 q10, q0, #8
- vrshr.u16 q11, q1, #8
- vrshr.u16 q12, q6, #8
- vrshr.u16 q13, q7, #8
- vraddhn.u16 d0, q0, q10
- vraddhn.u16 d1, q1, q11
- vraddhn.u16 d2, q6, q12
- vraddhn.u16 d3, q7, q13
- vmvn.8 d24, d3 /* get inverted alpha */
- /* source: d0 - blue, d1 - green, d2 - red, d3 - alpha */
- /* destination: d4 - blue, d5 - green, d6 - red, d7 - alpha */
- /* now do alpha blending */
- vmull.u8 q8, d24, d4
- vmull.u8 q9, d24, d5
- vmull.u8 q10, d24, d6
- vmull.u8 q11, d24, d7
-.endm
-
-.macro pixman_composite_over_n_8_8888_process_pixblock_tail
- vrshr.u16 q14, q8, #8
- vrshr.u16 q15, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- vraddhn.u16 d30, q12, q10
- vraddhn.u16 d31, q13, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_n_8_8888_process_pixblock_tail_head
- pixman_composite_over_n_8_8888_process_pixblock_tail
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vld1.8 {d24}, [MASK]!
- cache_preload 8, 8
- pixman_composite_over_n_8_8888_process_pixblock_head
-.endm
-
-.macro pixman_composite_over_n_8_8888_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
-.endm
-
-.macro pixman_composite_over_n_8_8888_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_n_8_8888_asm_neon, 0, 8, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_n_8_8888_init, \
- pixman_composite_over_n_8_8888_cleanup, \
- pixman_composite_over_n_8_8888_process_pixblock_head, \
- pixman_composite_over_n_8_8888_process_pixblock_tail, \
- pixman_composite_over_n_8_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head
- /*
- * 'combine_mask_ca' replacement
- *
- * input: solid src (n) in {d8, d9, d10, d11}
- * dest in {d4, d5, d6, d7 }
- * mask in {d24, d25, d26, d27}
- * output: updated src in {d0, d1, d2, d3 }
- * updated mask in {d24, d25, d26, d3 }
- */
- vmull.u8 q0, d24, d8
- vmull.u8 q1, d25, d9
- vmull.u8 q6, d26, d10
- vmull.u8 q7, d27, d11
- vmull.u8 q9, d11, d25
- vmull.u8 q12, d11, d24
- vmull.u8 q13, d11, d26
- vrshr.u16 q8, q0, #8
- vrshr.u16 q10, q1, #8
- vrshr.u16 q11, q6, #8
- vraddhn.u16 d0, q0, q8
- vraddhn.u16 d1, q1, q10
- vraddhn.u16 d2, q6, q11
- vrshr.u16 q11, q12, #8
- vrshr.u16 q8, q9, #8
- vrshr.u16 q6, q13, #8
- vrshr.u16 q10, q7, #8
- vraddhn.u16 d24, q12, q11
- vraddhn.u16 d25, q9, q8
- vraddhn.u16 d26, q13, q6
- vraddhn.u16 d3, q7, q10
- /*
- * 'combine_over_ca' replacement
- *
- * output: updated dest in {d28, d29, d30, d31}
- */
- vmvn.8 d24, d24
- vmvn.8 d25, d25
- vmull.u8 q8, d24, d4
- vmull.u8 q9, d25, d5
- vmvn.8 d26, d26
- vmvn.8 d27, d3
- vmull.u8 q10, d26, d6
- vmull.u8 q11, d27, d7
-.endm
-
-.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail
- /* ... continue 'combine_over_ca' replacement */
- vrshr.u16 q14, q8, #8
- vrshr.u16 q15, q9, #8
- vrshr.u16 q6, q10, #8
- vrshr.u16 q7, q11, #8
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- vraddhn.u16 d30, q6, q10
- vraddhn.u16 d31, q7, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
-.endm
-
-.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
- vrshr.u16 q14, q8, #8
- vrshr.u16 q15, q9, #8
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vrshr.u16 q6, q10, #8
- vrshr.u16 q7, q11, #8
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- vraddhn.u16 d30, q6, q10
- vraddhn.u16 d31, q7, q11
- vld4.8 {d24, d25, d26, d27}, [MASK]!
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
- cache_preload 8, 8
- pixman_composite_over_n_8888_8888_ca_process_pixblock_head
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_over_n_8888_8888_ca_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
-.endm
-
-.macro pixman_composite_over_n_8888_8888_ca_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_n_8888_8888_ca_init, \
- pixman_composite_over_n_8888_8888_ca_cleanup, \
- pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \
- pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \
- pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_add_n_8_8_process_pixblock_head
- /* expecting source data in {d8, d9, d10, d11} */
- /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
- /* and destination data in {d4, d5, d6, d7} */
- /* mask is in d24, d25, d26, d27 */
- vmull.u8 q0, d24, d11
- vmull.u8 q1, d25, d11
- vmull.u8 q6, d26, d11
- vmull.u8 q7, d27, d11
- vrshr.u16 q10, q0, #8
- vrshr.u16 q11, q1, #8
- vrshr.u16 q12, q6, #8
- vrshr.u16 q13, q7, #8
- vraddhn.u16 d0, q0, q10
- vraddhn.u16 d1, q1, q11
- vraddhn.u16 d2, q6, q12
- vraddhn.u16 d3, q7, q13
- vqadd.u8 q14, q0, q2
- vqadd.u8 q15, q1, q3
-.endm
-
-.macro pixman_composite_add_n_8_8_process_pixblock_tail
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_add_n_8_8_process_pixblock_tail_head
- pixman_composite_add_n_8_8_process_pixblock_tail
- vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
- vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vld1.8 {d24, d25, d26, d27}, [MASK]!
- cache_preload 32, 32
- pixman_composite_add_n_8_8_process_pixblock_head
-.endm
-
-.macro pixman_composite_add_n_8_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d11, d11[3]
-.endm
-
-.macro pixman_composite_add_n_8_8_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_add_n_8_8_asm_neon, 0, 8, 8, \
- FLAG_DST_READWRITE, \
- 32, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_add_n_8_8_init, \
- pixman_composite_add_n_8_8_cleanup, \
- pixman_composite_add_n_8_8_process_pixblock_head, \
- pixman_composite_add_n_8_8_process_pixblock_tail, \
- pixman_composite_add_n_8_8_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_add_8_8_8_process_pixblock_head
- /* expecting source data in {d0, d1, d2, d3} */
- /* destination data in {d4, d5, d6, d7} */
- /* mask in {d24, d25, d26, d27} */
- vmull.u8 q8, d24, d0
- vmull.u8 q9, d25, d1
- vmull.u8 q10, d26, d2
- vmull.u8 q11, d27, d3
- vrshr.u16 q0, q8, #8
- vrshr.u16 q1, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- vraddhn.u16 d0, q0, q8
- vraddhn.u16 d1, q1, q9
- vraddhn.u16 d2, q12, q10
- vraddhn.u16 d3, q13, q11
- vqadd.u8 q14, q0, q2
- vqadd.u8 q15, q1, q3
-.endm
-
-.macro pixman_composite_add_8_8_8_process_pixblock_tail
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_add_8_8_8_process_pixblock_tail_head
- pixman_composite_add_8_8_8_process_pixblock_tail
- vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
- vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vld1.8 {d24, d25, d26, d27}, [MASK]!
- vld1.8 {d0, d1, d2, d3}, [SRC]!
- cache_preload 32, 32
- pixman_composite_add_8_8_8_process_pixblock_head
-.endm
-
-.macro pixman_composite_add_8_8_8_init
-.endm
-
-.macro pixman_composite_add_8_8_8_cleanup
-.endm
-
-generate_composite_function \
- pixman_composite_add_8_8_8_asm_neon, 8, 8, 8, \
- FLAG_DST_READWRITE, \
- 32, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_add_8_8_8_init, \
- pixman_composite_add_8_8_8_cleanup, \
- pixman_composite_add_8_8_8_process_pixblock_head, \
- pixman_composite_add_8_8_8_process_pixblock_tail, \
- pixman_composite_add_8_8_8_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_add_8888_8888_8888_process_pixblock_head
- /* expecting source data in {d0, d1, d2, d3} */
- /* destination data in {d4, d5, d6, d7} */
- /* mask in {d24, d25, d26, d27} */
- vmull.u8 q8, d27, d0
- vmull.u8 q9, d27, d1
- vmull.u8 q10, d27, d2
- vmull.u8 q11, d27, d3
- vrshr.u16 q0, q8, #8
- vrshr.u16 q1, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- vraddhn.u16 d0, q0, q8
- vraddhn.u16 d1, q1, q9
- vraddhn.u16 d2, q12, q10
- vraddhn.u16 d3, q13, q11
- vqadd.u8 q14, q0, q2
- vqadd.u8 q15, q1, q3
-.endm
-
-.macro pixman_composite_add_8888_8888_8888_process_pixblock_tail
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
- pixman_composite_add_8888_8888_8888_process_pixblock_tail
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- vld4.8 {d24, d25, d26, d27}, [MASK]!
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- cache_preload 8, 8
- pixman_composite_add_8888_8888_8888_process_pixblock_head
-.endm
-
-generate_composite_function \
- pixman_composite_add_8888_8888_8888_asm_neon, 32, 32, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_add_8888_8888_8888_process_pixblock_head, \
- pixman_composite_add_8888_8888_8888_process_pixblock_tail, \
- pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
-
-generate_composite_function_single_scanline \
- pixman_composite_scanline_add_mask_asm_neon, 32, 32, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- default_init, \
- default_cleanup, \
- pixman_composite_add_8888_8888_8888_process_pixblock_head, \
- pixman_composite_add_8888_8888_8888_process_pixblock_tail, \
- pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-.macro pixman_composite_over_8888_n_8888_process_pixblock_head
- /* expecting source data in {d0, d1, d2, d3} */
- /* destination data in {d4, d5, d6, d7} */
- /* solid mask is in d15 */
-
- /* 'in' */
- vmull.u8 q8, d15, d3
- vmull.u8 q6, d15, d2
- vmull.u8 q5, d15, d1
- vmull.u8 q4, d15, d0
- vrshr.u16 q13, q8, #8
- vrshr.u16 q12, q6, #8
- vrshr.u16 q11, q5, #8
- vrshr.u16 q10, q4, #8
- vraddhn.u16 d3, q8, q13
- vraddhn.u16 d2, q6, q12
- vraddhn.u16 d1, q5, q11
- vraddhn.u16 d0, q4, q10
- vmvn.8 d24, d3 /* get inverted alpha */
- /* now do alpha blending */
- vmull.u8 q8, d24, d4
- vmull.u8 q9, d24, d5
- vmull.u8 q10, d24, d6
- vmull.u8 q11, d24, d7
-.endm
-
-.macro pixman_composite_over_8888_n_8888_process_pixblock_tail
- vrshr.u16 q14, q8, #8
- vrshr.u16 q15, q9, #8
- vrshr.u16 q12, q10, #8
- vrshr.u16 q13, q11, #8
- vraddhn.u16 d28, q14, q8
- vraddhn.u16 d29, q15, q9
- vraddhn.u16 d30, q12, q10
- vraddhn.u16 d31, q13, q11
- vqadd.u8 q14, q0, q14
- vqadd.u8 q15, q1, q15
-.endm
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_8888_n_8888_process_pixblock_tail_head
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- pixman_composite_over_8888_n_8888_process_pixblock_tail
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- cache_preload 8, 8
- pixman_composite_over_8888_n_8888_process_pixblock_head
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_over_8888_n_8888_init
- add DUMMY, sp, #48
- vpush {d8-d15}
- vld1.32 {d15[0]}, [DUMMY]
- vdup.8 d15, d15[3]
-.endm
-
-.macro pixman_composite_over_8888_n_8888_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_8888_n_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_8888_n_8888_init, \
- pixman_composite_over_8888_n_8888_cleanup, \
- pixman_composite_over_8888_n_8888_process_pixblock_head, \
- pixman_composite_over_8888_n_8888_process_pixblock_tail, \
- pixman_composite_over_8888_n_8888_process_pixblock_tail_head
-
-/******************************************************************************/
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_8888_8888_8888_process_pixblock_tail_head
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- pixman_composite_over_8888_n_8888_process_pixblock_tail
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- cache_preload 8, 8
- vld4.8 {d12, d13, d14, d15}, [MASK]!
- pixman_composite_over_8888_n_8888_process_pixblock_head
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_over_8888_8888_8888_init
- vpush {d8-d15}
-.endm
-
-.macro pixman_composite_over_8888_8888_8888_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_8888_8888_8888_asm_neon, 32, 32, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_8888_8888_8888_init, \
- pixman_composite_over_8888_8888_8888_cleanup, \
- pixman_composite_over_8888_n_8888_process_pixblock_head, \
- pixman_composite_over_8888_n_8888_process_pixblock_tail, \
- pixman_composite_over_8888_8888_8888_process_pixblock_tail_head \
- 28, /* dst_w_basereg */ \
- 4, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 12 /* mask_basereg */
-
-generate_composite_function_single_scanline \
- pixman_composite_scanline_over_mask_asm_neon, 32, 32, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- pixman_composite_over_8888_8888_8888_init, \
- pixman_composite_over_8888_8888_8888_cleanup, \
- pixman_composite_over_8888_n_8888_process_pixblock_head, \
- pixman_composite_over_8888_n_8888_process_pixblock_tail, \
- pixman_composite_over_8888_8888_8888_process_pixblock_tail_head \
- 28, /* dst_w_basereg */ \
- 4, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 12 /* mask_basereg */
-
-/******************************************************************************/
-
-/* TODO: expand macros and do better instructions scheduling */
-.macro pixman_composite_over_8888_8_8888_process_pixblock_tail_head
- vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
- pixman_composite_over_8888_n_8888_process_pixblock_tail
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- cache_preload 8, 8
- vld1.8 {d15}, [MASK]!
- pixman_composite_over_8888_n_8888_process_pixblock_head
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
-.endm
-
-.macro pixman_composite_over_8888_8_8888_init
- vpush {d8-d15}
-.endm
-
-.macro pixman_composite_over_8888_8_8888_cleanup
- vpop {d8-d15}
-.endm
-
-generate_composite_function \
- pixman_composite_over_8888_8_8888_asm_neon, 32, 8, 32, \
- FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 5, /* prefetch distance */ \
- pixman_composite_over_8888_8_8888_init, \
- pixman_composite_over_8888_8_8888_cleanup, \
- pixman_composite_over_8888_n_8888_process_pixblock_head, \
- pixman_composite_over_8888_n_8888_process_pixblock_tail, \
- pixman_composite_over_8888_8_8888_process_pixblock_tail_head \
- 28, /* dst_w_basereg */ \
- 4, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 15 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_0888_0888_process_pixblock_head
-.endm
-
-.macro pixman_composite_src_0888_0888_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_0888_0888_process_pixblock_tail_head
- vst3.8 {d0, d1, d2}, [DST_W]!
- vld3.8 {d0, d1, d2}, [SRC]!
- cache_preload 8, 8
-.endm
-
-generate_composite_function \
- pixman_composite_src_0888_0888_asm_neon, 24, 0, 24, \
- FLAG_DST_WRITEONLY, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_0888_0888_process_pixblock_head, \
- pixman_composite_src_0888_0888_process_pixblock_tail, \
- pixman_composite_src_0888_0888_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_0888_8888_rev_process_pixblock_head
- vswp d0, d2
-.endm
-
-.macro pixman_composite_src_0888_8888_rev_process_pixblock_tail
-.endm
-
-.macro pixman_composite_src_0888_8888_rev_process_pixblock_tail_head
- vst4.8 {d0, d1, d2, d3}, [DST_W]!
- vld3.8 {d0, d1, d2}, [SRC]!
- vswp d0, d2
- cache_preload 8, 8
-.endm
-
-.macro pixman_composite_src_0888_8888_rev_init
- veor d3, d3, d3
-.endm
-
-generate_composite_function \
- pixman_composite_src_0888_8888_rev_asm_neon, 24, 0, 32, \
- FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- pixman_composite_src_0888_8888_rev_init, \
- default_cleanup, \
- pixman_composite_src_0888_8888_rev_process_pixblock_head, \
- pixman_composite_src_0888_8888_rev_process_pixblock_tail, \
- pixman_composite_src_0888_8888_rev_process_pixblock_tail_head, \
- 0, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_0888_0565_rev_process_pixblock_head
- vshll.u8 q8, d1, #8
- vshll.u8 q9, d2, #8
-.endm
-
-.macro pixman_composite_src_0888_0565_rev_process_pixblock_tail
- vshll.u8 q14, d0, #8
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
-.endm
-
-.macro pixman_composite_src_0888_0565_rev_process_pixblock_tail_head
- vshll.u8 q14, d0, #8
- vld3.8 {d0, d1, d2}, [SRC]!
- vsri.u16 q14, q8, #5
- vsri.u16 q14, q9, #11
- vshll.u8 q8, d1, #8
- vst1.16 {d28, d29}, [DST_W, :128]!
- vshll.u8 q9, d2, #8
-.endm
-
-generate_composite_function \
- pixman_composite_src_0888_0565_rev_asm_neon, 24, 0, 16, \
- FLAG_DST_WRITEONLY, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_0888_0565_rev_process_pixblock_head, \
- pixman_composite_src_0888_0565_rev_process_pixblock_tail, \
- pixman_composite_src_0888_0565_rev_process_pixblock_tail_head, \
- 28, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
-
-/******************************************************************************/
-
-.macro pixman_composite_src_pixbuf_8888_process_pixblock_head
- vmull.u8 q8, d3, d0
- vmull.u8 q9, d3, d1
- vmull.u8 q10, d3, d2
-.endm
-
-.macro pixman_composite_src_pixbuf_8888_process_pixblock_tail
- vrshr.u16 q11, q8, #8
- vswp d3, d31
- vrshr.u16 q12, q9, #8
- vrshr.u16 q13, q10, #8
- vraddhn.u16 d30, q11, q8
- vraddhn.u16 d29, q12, q9
- vraddhn.u16 d28, q13, q10
-.endm
-
-.macro pixman_composite_src_pixbuf_8888_process_pixblock_tail_head
- vrshr.u16 q11, q8, #8
- vswp d3, d31
- vrshr.u16 q12, q9, #8
- vrshr.u16 q13, q10, #8
- vld4.8 {d0, d1, d2, d3}, [SRC]!
- vraddhn.u16 d30, q11, q8
- PF add PF_X, PF_X, #8
- PF tst PF_CTL, #0xF
- PF addne PF_X, PF_X, #8
- PF subne PF_CTL, PF_CTL, #1
- vraddhn.u16 d29, q12, q9
- vraddhn.u16 d28, q13, q10
- vmull.u8 q8, d3, d0
- vmull.u8 q9, d3, d1
- vmull.u8 q10, d3, d2
- vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
- PF cmp PF_X, ORIG_W
- PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
- PF subge PF_X, PF_X, ORIG_W
- PF subges PF_CTL, PF_CTL, #0x10
- PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
-.endm
-
-generate_composite_function \
- pixman_composite_src_pixbuf_8888_asm_neon, 32, 0, 32, \
- FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
- 8, /* number of pixels, processed in a single block */ \
- 10, /* prefetch distance */ \
- default_init, \
- default_cleanup, \
- pixman_composite_src_pixbuf_8888_process_pixblock_head, \
- pixman_composite_src_pixbuf_8888_process_pixblock_tail, \
- pixman_composite_src_pixbuf_8888_process_pixblock_tail_head, \
- 28, /* dst_w_basereg */ \
- 0, /* dst_r_basereg */ \
- 0, /* src_basereg */ \
- 0 /* mask_basereg */
+/*
+ * Copyright © 2009 Nokia Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
+ */
+
+/*
+ * This file contains implementations of NEON optimized pixel processing
+ * functions. There is no full and detailed tutorial, but some functions
+ * (those which are exposing some new or interesting features) are
+ * extensively commented and can be used as examples.
+ *
+ * You may want to have a look at the comments for following functions:
+ * - pixman_composite_over_8888_0565_asm_neon
+ * - pixman_composite_over_n_8_0565_asm_neon
+ */
+
+/* Prevent the stack from becoming executable for no reason... */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+ .text
+ .fpu neon
+ .arch armv7a
+ .object_arch armv4
+ .eabi_attribute 10, 0 /* suppress Tag_FP_arch */
+ .eabi_attribute 12, 0 /* suppress Tag_Advanced_SIMD_arch */
+ .arm
+ .altmacro
+
+#include "pixman-arm-neon-asm.h"
+
+/* Global configuration options and preferences */
+
+/*
+ * The code can optionally make use of unaligned memory accesses to improve
+ * performance of handling leading/trailing pixels for each scanline.
+ * Configuration variable RESPECT_STRICT_ALIGNMENT can be set to 0 for
+ * example in linux if unaligned memory accesses are not configured to
+ * generate.exceptions.
+ */
+.set RESPECT_STRICT_ALIGNMENT, 1
+
+/*
+ * Set default prefetch type. There is a choice between the following options:
+ *
+ * PREFETCH_TYPE_NONE (may be useful for the ARM cores where PLD is set to work
+ * as NOP to workaround some HW bugs or for whatever other reason)
+ *
+ * PREFETCH_TYPE_SIMPLE (may be useful for simple single-issue ARM cores where
+ * advanced prefetch intruduces heavy overhead)
+ *
+ * PREFETCH_TYPE_ADVANCED (useful for superscalar cores such as ARM Cortex-A8
+ * which can run ARM and NEON instructions simultaneously so that extra ARM
+ * instructions do not add (many) extra cycles, but improve prefetch efficiency)
+ *
+ * Note: some types of function can't support advanced prefetch and fallback
+ * to simple one (those which handle 24bpp pixels)
+ */
+.set PREFETCH_TYPE_DEFAULT, PREFETCH_TYPE_ADVANCED
+
+/* Prefetch distance in pixels for simple prefetch */
+.set PREFETCH_DISTANCE_SIMPLE, 64
+
+/*
+ * Implementation of pixman_composite_over_8888_0565_asm_neon
+ *
+ * This function takes a8r8g8b8 source buffer, r5g6b5 destination buffer and
+ * performs OVER compositing operation. Function fast_composite_over_8888_0565
+ * from pixman-fast-path.c does the same in C and can be used as a reference.
+ *
+ * First we need to have some NEON assembly code which can do the actual
+ * operation on the pixels and provide it to the template macro.
+ *
+ * Template macro quite conveniently takes care of emitting all the necessary
+ * code for memory reading and writing (including quite tricky cases of
+ * handling unaligned leading/trailing pixels), so we only need to deal with
+ * the data in NEON registers.
+ *
+ * NEON registers allocation in general is recommented to be the following:
+ * d0, d1, d2, d3 - contain loaded source pixel data
+ * d4, d5, d6, d7 - contain loaded destination pixels (if they are needed)
+ * d24, d25, d26, d27 - contain loading mask pixel data (if mask is used)
+ * d28, d29, d30, d31 - place for storing the result (destination pixels)
+ *
+ * As can be seen above, four 64-bit NEON registers are used for keeping
+ * intermediate pixel data and up to 8 pixels can be processed in one step
+ * for 32bpp formats (16 pixels for 16bpp, 32 pixels for 8bpp).
+ *
+ * This particular function uses the following registers allocation:
+ * d0, d1, d2, d3 - contain loaded source pixel data
+ * d4, d5 - contain loaded destination pixels (they are needed)
+ * d28, d29 - place for storing the result (destination pixels)
+ */
+
+/*
+ * Step one. We need to have some code to do some arithmetics on pixel data.
+ * This is implemented as a pair of macros: '*_head' and '*_tail'. When used
+ * back-to-back, they take pixel data from {d0, d1, d2, d3} and {d4, d5},
+ * perform all the needed calculations and write the result to {d28, d29}.
+ * The rationale for having two macros and not just one will be explained
+ * later. In practice, any single monolitic function which does the work can
+ * be split into two parts in any arbitrary way without affecting correctness.
+ *
+ * There is one special trick here too. Common template macro can optionally
+ * make our life a bit easier by doing R, G, B, A color components
+ * deinterleaving for 32bpp pixel formats (and this feature is used in
+ * 'pixman_composite_over_8888_0565_asm_neon' function). So it means that
+ * instead of having 8 packed pixels in {d0, d1, d2, d3} registers, we
+ * actually use d0 register for blue channel (a vector of eight 8-bit
+ * values), d1 register for green, d2 for red and d3 for alpha. This
+ * simple conversion can be also done with a few NEON instructions:
+ *
+ * Packed to planar conversion:
+ * vuzp.8 d0, d1
+ * vuzp.8 d2, d3
+ * vuzp.8 d1, d3
+ * vuzp.8 d0, d2
+ *
+ * Planar to packed conversion:
+ * vzip.8 d0, d2
+ * vzip.8 d1, d3
+ * vzip.8 d2, d3
+ * vzip.8 d0, d1
+ *
+ * But pixel can be loaded directly in planar format using VLD4.8 NEON
+ * instruction. It is 1 cycle slower than VLD1.32, so this is not always
+ * desirable, that's why deinterleaving is optional.
+ *
+ * But anyway, here is the code:
+ */
+.macro pixman_composite_over_8888_0565_process_pixblock_head
+ /* convert 8 r5g6b5 pixel data from {d4, d5} to planar 8-bit format
+ and put data into d6 - red, d7 - green, d30 - blue */
+ vshrn.u16 d6, q2, #8
+ vshrn.u16 d7, q2, #3
+ vsli.u16 q2, q2, #5
+ vsri.u8 d6, d6, #5
+ vmvn.8 d3, d3 /* invert source alpha */
+ vsri.u8 d7, d7, #6
+ vshrn.u16 d30, q2, #2
+ /* now do alpha blending, storing results in 8-bit planar format
+ into d16 - red, d19 - green, d18 - blue */
+ vmull.u8 q10, d3, d6
+ vmull.u8 q11, d3, d7
+ vmull.u8 q12, d3, d30
+ vrshr.u16 q13, q10, #8
+ vrshr.u16 q3, q11, #8
+ vrshr.u16 q15, q12, #8
+ vraddhn.u16 d20, q10, q13
+ vraddhn.u16 d23, q11, q3
+ vraddhn.u16 d22, q12, q15
+.endm
+
+.macro pixman_composite_over_8888_0565_process_pixblock_tail
+ /* ... continue alpha blending */
+ vqadd.u8 d16, d2, d20
+ vqadd.u8 q9, q0, q11
+ /* convert the result to r5g6b5 and store it into {d28, d29} */
+ vshll.u8 q14, d16, #8
+ vshll.u8 q8, d19, #8
+ vshll.u8 q9, d18, #8
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+.endm
+
+/*
+ * OK, now we got almost everything that we need. Using the above two
+ * macros, the work can be done right. But now we want to optimize
+ * it a bit. ARM Cortex-A8 is an in-order core, and benefits really
+ * a lot from good code scheduling and software pipelining.
+ *
+ * Let's construct some code, which will run in the core main loop.
+ * Some pseudo-code of the main loop will look like this:
+ * head
+ * while (...) {
+ * tail
+ * head
+ * }
+ * tail
+ *
+ * It may look a bit weird, but this setup allows to hide instruction
+ * latencies better and also utilize dual-issue capability more
+ * efficiently (make pairs of load-store and ALU instructions).
+ *
+ * So what we need now is a '*_tail_head' macro, which will be used
+ * in the core main loop. A trivial straightforward implementation
+ * of this macro would look like this:
+ *
+ * pixman_composite_over_8888_0565_process_pixblock_tail
+ * vst1.16 {d28, d29}, [DST_W, :128]!
+ * vld1.16 {d4, d5}, [DST_R, :128]!
+ * vld4.32 {d0, d1, d2, d3}, [SRC]!
+ * pixman_composite_over_8888_0565_process_pixblock_head
+ * cache_preload 8, 8
+ *
+ * Now it also got some VLD/VST instructions. We simply can't move from
+ * processing one block of pixels to the other one with just arithmetics.
+ * The previously processed data needs to be written to memory and new
+ * data needs to be fetched. Fortunately, this main loop does not deal
+ * with partial leading/trailing pixels and can load/store a full block
+ * of pixels in a bulk. Additionally, destination buffer is already
+ * 16 bytes aligned here (which is good for performance).
+ *
+ * New things here are DST_R, DST_W, SRC and MASK identifiers. These
+ * are the aliases for ARM registers which are used as pointers for
+ * accessing data. We maintain separate pointers for reading and writing
+ * destination buffer (DST_R and DST_W).
+ *
+ * Another new thing is 'cache_preload' macro. It is used for prefetching
+ * data into CPU L2 cache and improve performance when dealing with large
+ * images which are far larger than cache size. It uses one argument
+ * (actually two, but they need to be the same here) - number of pixels
+ * in a block. Looking into 'pixman-arm-neon-asm.h' can provide some
+ * details about this macro. Moreover, if good performance is needed
+ * the code from this macro needs to be copied into '*_tail_head' macro
+ * and mixed with the rest of code for optimal instructions scheduling.
+ * We are actually doing it below.
+ *
+ * Now after all the explanations, here is the optimized code.
+ * Different instruction streams (originaling from '*_head', '*_tail'
+ * and 'cache_preload' macro) use different indentation levels for
+ * better readability. Actually taking the code from one of these
+ * indentation levels and ignoring a few VLD/VST instructions would
+ * result in exactly the code from '*_head', '*_tail' or 'cache_preload'
+ * macro!
+ */
+
+#if 1
+
+.macro pixman_composite_over_8888_0565_process_pixblock_tail_head
+ vqadd.u8 d16, d2, d20
+ vld1.16 {d4, d5}, [DST_R, :128]!
+ vqadd.u8 q9, q0, q11
+ vshrn.u16 d6, q2, #8
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ vshrn.u16 d7, q2, #3
+ vsli.u16 q2, q2, #5
+ vshll.u8 q14, d16, #8
+ PF add PF_X, PF_X, #8
+ vshll.u8 q8, d19, #8
+ PF tst PF_CTL, #0xF
+ vsri.u8 d6, d6, #5
+ PF addne PF_X, PF_X, #8
+ vmvn.8 d3, d3
+ PF subne PF_CTL, PF_CTL, #1
+ vsri.u8 d7, d7, #6
+ vshrn.u16 d30, q2, #2
+ vmull.u8 q10, d3, d6
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmull.u8 q11, d3, d7
+ vmull.u8 q12, d3, d30
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vsri.u16 q14, q8, #5
+ PF cmp PF_X, ORIG_W
+ vshll.u8 q9, d18, #8
+ vrshr.u16 q13, q10, #8
+ PF subge PF_X, PF_X, ORIG_W
+ vrshr.u16 q3, q11, #8
+ vrshr.u16 q15, q12, #8
+ PF subges PF_CTL, PF_CTL, #0x10
+ vsri.u16 q14, q9, #11
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vraddhn.u16 d20, q10, q13
+ vraddhn.u16 d23, q11, q3
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vraddhn.u16 d22, q12, q15
+ vst1.16 {d28, d29}, [DST_W, :128]!
+.endm
+
+#else
+
+/* If we did not care much about the performance, we would just use this... */
+.macro pixman_composite_over_8888_0565_process_pixblock_tail_head
+ pixman_composite_over_8888_0565_process_pixblock_tail
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ vld1.16 {d4, d5}, [DST_R, :128]!
+ vld4.32 {d0, d1, d2, d3}, [SRC]!
+ pixman_composite_over_8888_0565_process_pixblock_head
+ cache_preload 8, 8
+.endm
+
+#endif
+
+/*
+ * And now the final part. We are using 'generate_composite_function' macro
+ * to put all the stuff together. We are specifying the name of the function
+ * which we want to get, number of bits per pixel for the source, mask and
+ * destination (0 if unused, like mask in this case). Next come some bit
+ * flags:
+ * FLAG_DST_READWRITE - tells that the destination buffer is both read
+ * and written, for write-only buffer we would use
+ * FLAG_DST_WRITEONLY flag instead
+ * FLAG_DEINTERLEAVE_32BPP - tells that we prefer to work with planar data
+ * and separate color channels for 32bpp format.
+ * The next things are:
+ * - the number of pixels processed per iteration (8 in this case, because
+ * that's the maximum what can fit into four 64-bit NEON registers).
+ * - prefetch distance, measured in pixel blocks. In this case it is 5 times
+ * by 8 pixels. That would be 40 pixels, or up to 160 bytes. Optimal
+ * prefetch distance can be selected by running some benchmarks.
+ *
+ * After that we specify some macros, these are 'default_init',
+ * 'default_cleanup' here which are empty (but it is possible to have custom
+ * init/cleanup macros to be able to save/restore some extra NEON registers
+ * like d8-d15 or do anything else) followed by
+ * 'pixman_composite_over_8888_0565_process_pixblock_head',
+ * 'pixman_composite_over_8888_0565_process_pixblock_tail' and
+ * 'pixman_composite_over_8888_0565_process_pixblock_tail_head'
+ * which we got implemented above.
+ *
+ * The last part is the NEON registers allocation scheme.
+ */
+generate_composite_function \
+ pixman_composite_over_8888_0565_asm_neon, 32, 0, 16, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_over_8888_0565_process_pixblock_head, \
+ pixman_composite_over_8888_0565_process_pixblock_tail, \
+ pixman_composite_over_8888_0565_process_pixblock_tail_head, \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 24 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_over_n_0565_process_pixblock_head
+ /* convert 8 r5g6b5 pixel data from {d4, d5} to planar 8-bit format
+ and put data into d6 - red, d7 - green, d30 - blue */
+ vshrn.u16 d6, q2, #8
+ vshrn.u16 d7, q2, #3
+ vsli.u16 q2, q2, #5
+ vsri.u8 d6, d6, #5
+ vsri.u8 d7, d7, #6
+ vshrn.u16 d30, q2, #2
+ /* now do alpha blending, storing results in 8-bit planar format
+ into d16 - red, d19 - green, d18 - blue */
+ vmull.u8 q10, d3, d6
+ vmull.u8 q11, d3, d7
+ vmull.u8 q12, d3, d30
+ vrshr.u16 q13, q10, #8
+ vrshr.u16 q3, q11, #8
+ vrshr.u16 q15, q12, #8
+ vraddhn.u16 d20, q10, q13
+ vraddhn.u16 d23, q11, q3
+ vraddhn.u16 d22, q12, q15
+.endm
+
+.macro pixman_composite_over_n_0565_process_pixblock_tail
+ /* ... continue alpha blending */
+ vqadd.u8 d16, d2, d20
+ vqadd.u8 q9, q0, q11
+ /* convert the result to r5g6b5 and store it into {d28, d29} */
+ vshll.u8 q14, d16, #8
+ vshll.u8 q8, d19, #8
+ vshll.u8 q9, d18, #8
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_n_0565_process_pixblock_tail_head
+ pixman_composite_over_n_0565_process_pixblock_tail
+ vld1.16 {d4, d5}, [DST_R, :128]!
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ pixman_composite_over_n_0565_process_pixblock_head
+.endm
+
+.macro pixman_composite_over_n_0565_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d3[0]}, [DUMMY]
+ vdup.8 d0, d3[0]
+ vdup.8 d1, d3[1]
+ vdup.8 d2, d3[2]
+ vdup.8 d3, d3[3]
+ vmvn.8 d3, d3 /* invert source alpha */
+.endm
+
+generate_composite_function \
+ pixman_composite_over_n_0565_asm_neon, 0, 0, 16, \
+ FLAG_DST_READWRITE, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_n_0565_init, \
+ default_cleanup, \
+ pixman_composite_over_n_0565_process_pixblock_head, \
+ pixman_composite_over_n_0565_process_pixblock_tail, \
+ pixman_composite_over_n_0565_process_pixblock_tail_head, \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 24 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_8888_0565_process_pixblock_head
+ vshll.u8 q8, d1, #8
+ vshll.u8 q14, d2, #8
+ vshll.u8 q9, d0, #8
+.endm
+
+.macro pixman_composite_src_8888_0565_process_pixblock_tail
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+.endm
+
+.macro pixman_composite_src_8888_0565_process_pixblock_tail_head
+ vsri.u16 q14, q8, #5
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vsri.u16 q14, q9, #11
+ PF cmp PF_X, ORIG_W
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vshll.u8 q8, d1, #8
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ PF subge PF_X, PF_X, ORIG_W
+ PF subges PF_CTL, PF_CTL, #0x10
+ vshll.u8 q14, d2, #8
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vshll.u8 q9, d0, #8
+.endm
+
+generate_composite_function \
+ pixman_composite_src_8888_0565_asm_neon, 32, 0, 16, \
+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_8888_0565_process_pixblock_head, \
+ pixman_composite_src_8888_0565_process_pixblock_tail, \
+ pixman_composite_src_8888_0565_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_src_0565_8888_process_pixblock_head
+ vshrn.u16 d30, q0, #8
+ vshrn.u16 d29, q0, #3
+ vsli.u16 q0, q0, #5
+ vmov.u8 d31, #255
+ vsri.u8 d30, d30, #5
+ vsri.u8 d29, d29, #6
+ vshrn.u16 d28, q0, #2
+.endm
+
+.macro pixman_composite_src_0565_8888_process_pixblock_tail
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_src_0565_8888_process_pixblock_tail_head
+ pixman_composite_src_0565_8888_process_pixblock_tail
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ vld1.16 {d0, d1}, [SRC]!
+ pixman_composite_src_0565_8888_process_pixblock_head
+ cache_preload 8, 8
+.endm
+
+generate_composite_function \
+ pixman_composite_src_0565_8888_asm_neon, 16, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_0565_8888_process_pixblock_head, \
+ pixman_composite_src_0565_8888_process_pixblock_tail, \
+ pixman_composite_src_0565_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_add_8000_8000_process_pixblock_head
+ vqadd.u8 q14, q0, q2
+ vqadd.u8 q15, q1, q3
+.endm
+
+.macro pixman_composite_add_8000_8000_process_pixblock_tail
+.endm
+
+.macro pixman_composite_add_8000_8000_process_pixblock_tail_head
+ vld1.8 {d0, d1, d2, d3}, [SRC]!
+ PF add PF_X, PF_X, #32
+ PF tst PF_CTL, #0xF
+ vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ PF addne PF_X, PF_X, #32
+ PF subne PF_CTL, PF_CTL, #1
+ vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF cmp PF_X, ORIG_W
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ PF subge PF_X, PF_X, ORIG_W
+ PF subges PF_CTL, PF_CTL, #0x10
+ vqadd.u8 q14, q0, q2
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vqadd.u8 q15, q1, q3
+.endm
+
+generate_composite_function \
+ pixman_composite_add_8000_8000_asm_neon, 8, 0, 8, \
+ FLAG_DST_READWRITE, \
+ 32, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_add_8000_8000_process_pixblock_head, \
+ pixman_composite_add_8000_8000_process_pixblock_tail, \
+ pixman_composite_add_8000_8000_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_add_8888_8888_process_pixblock_tail_head
+ vld1.8 {d0, d1, d2, d3}, [SRC]!
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF cmp PF_X, ORIG_W
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ PF subge PF_X, PF_X, ORIG_W
+ PF subges PF_CTL, PF_CTL, #0x10
+ vqadd.u8 q14, q0, q2
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vqadd.u8 q15, q1, q3
+.endm
+
+generate_composite_function \
+ pixman_composite_add_8888_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_add_8000_8000_process_pixblock_head, \
+ pixman_composite_add_8000_8000_process_pixblock_tail, \
+ pixman_composite_add_8888_8888_process_pixblock_tail_head
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_add_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE, \
+ 8, /* number of pixels, processed in a single block */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_add_8000_8000_process_pixblock_head, \
+ pixman_composite_add_8000_8000_process_pixblock_tail, \
+ pixman_composite_add_8888_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_head
+ vmvn.8 d24, d3 /* get inverted alpha */
+ /* do alpha blending */
+ vmull.u8 q8, d24, d4
+ vmull.u8 q9, d24, d5
+ vmull.u8 q10, d24, d6
+ vmull.u8 q11, d24, d7
+.endm
+
+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail
+ vrshr.u16 q14, q8, #8
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+.endm
+
+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vrshr.u16 q14, q8, #8
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ PF cmp PF_X, ORIG_W
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmvn.8 d22, d3
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF subge PF_X, PF_X, ORIG_W
+ vmull.u8 q8, d22, d4
+ PF subges PF_CTL, PF_CTL, #0x10
+ vmull.u8 q9, d22, d5
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vmull.u8 q10, d22, d6
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vmull.u8 q11, d22, d7
+.endm
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_out_reverse_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_out_reverse_8888_8888_process_pixblock_head, \
+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail, \
+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_over_8888_8888_process_pixblock_head
+ pixman_composite_out_reverse_8888_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_over_8888_8888_process_pixblock_tail
+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+.endm
+
+.macro pixman_composite_over_8888_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vrshr.u16 q14, q8, #8
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ PF cmp PF_X, ORIG_W
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmvn.8 d22, d3
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF subge PF_X, PF_X, ORIG_W
+ vmull.u8 q8, d22, d4
+ PF subges PF_CTL, PF_CTL, #0x10
+ vmull.u8 q9, d22, d5
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vmull.u8 q10, d22, d6
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vmull.u8 q11, d22, d7
+.endm
+
+generate_composite_function \
+ pixman_composite_over_8888_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_over_8888_8888_process_pixblock_head, \
+ pixman_composite_over_8888_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_8888_process_pixblock_tail_head
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_over_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_over_8888_8888_process_pixblock_head, \
+ pixman_composite_over_8888_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_n_8888_process_pixblock_tail_head
+ pixman_composite_over_8888_8888_process_pixblock_tail
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ pixman_composite_over_8888_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_over_n_8888_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d3[0]}, [DUMMY]
+ vdup.8 d0, d3[0]
+ vdup.8 d1, d3[1]
+ vdup.8 d2, d3[2]
+ vdup.8 d3, d3[3]
+.endm
+
+generate_composite_function \
+ pixman_composite_over_n_8888_asm_neon, 0, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_n_8888_init, \
+ default_cleanup, \
+ pixman_composite_over_8888_8888_process_pixblock_head, \
+ pixman_composite_over_8888_8888_process_pixblock_tail, \
+ pixman_composite_over_n_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head
+ vrshr.u16 q14, q8, #8
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ PF cmp PF_X, ORIG_W
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+ vld4.8 {d0, d1, d2, d3}, [DST_R, :128]!
+ vmvn.8 d22, d3
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF subge PF_X, PF_X, ORIG_W
+ vmull.u8 q8, d22, d4
+ PF subges PF_CTL, PF_CTL, #0x10
+ vmull.u8 q9, d22, d5
+ vmull.u8 q10, d22, d6
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vmull.u8 q11, d22, d7
+.endm
+
+.macro pixman_composite_over_reverse_n_8888_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d7[0]}, [DUMMY]
+ vdup.8 d4, d7[0]
+ vdup.8 d5, d7[1]
+ vdup.8 d6, d7[2]
+ vdup.8 d7, d7[3]
+.endm
+
+generate_composite_function \
+ pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_reverse_n_8888_init, \
+ default_cleanup, \
+ pixman_composite_over_8888_8888_process_pixblock_head, \
+ pixman_composite_over_8888_8888_process_pixblock_tail, \
+ pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \
+ 28, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 4, /* src_basereg */ \
+ 24 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_over_n_8_0565_process_pixblock_head
+ /* in */
+ vmull.u8 q0, d24, d8
+ vmull.u8 q1, d24, d9
+ vmull.u8 q6, d24, d10
+ vmull.u8 q7, d24, d11
+ vrshr.u16 q10, q0, #8
+ vrshr.u16 q11, q1, #8
+ vrshr.u16 q12, q6, #8
+ vrshr.u16 q13, q7, #8
+ vraddhn.u16 d0, q0, q10
+ vraddhn.u16 d1, q1, q11
+ vraddhn.u16 d2, q6, q12
+ vraddhn.u16 d3, q7, q13
+
+ vshrn.u16 d6, q2, #8
+ vshrn.u16 d7, q2, #3
+ vsli.u16 q2, q2, #5
+ vsri.u8 d6, d6, #5
+ vmvn.8 d3, d3
+ vsri.u8 d7, d7, #6
+ vshrn.u16 d30, q2, #2
+ /* now do alpha blending */
+ vmull.u8 q10, d3, d6
+ vmull.u8 q11, d3, d7
+ vmull.u8 q12, d3, d30
+ vrshr.u16 q13, q10, #8
+ vrshr.u16 q3, q11, #8
+ vrshr.u16 q15, q12, #8
+ vraddhn.u16 d20, q10, q13
+ vraddhn.u16 d23, q11, q3
+ vraddhn.u16 d22, q12, q15
+.endm
+
+.macro pixman_composite_over_n_8_0565_process_pixblock_tail
+ vqadd.u8 d16, d2, d20
+ vqadd.u8 q9, q0, q11
+ /* convert to r5g6b5 */
+ vshll.u8 q14, d16, #8
+ vshll.u8 q8, d19, #8
+ vshll.u8 q9, d18, #8
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_n_8_0565_process_pixblock_tail_head
+ pixman_composite_over_n_8_0565_process_pixblock_tail
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ vld1.16 {d4, d5}, [DST_R, :128]!
+ vld1.8 {d24}, [MASK]!
+ cache_preload 8, 8
+ pixman_composite_over_n_8_0565_process_pixblock_head
+.endm
+
+/*
+ * This function needs a special initialization of solid mask.
+ * Solid source pixel data is fetched from stack at ARGS_STACK_OFFSET
+ * offset, split into color components and replicated in d8-d11
+ * registers. Additionally, this function needs all the NEON registers,
+ * so it has to save d8-d15 registers which are callee saved according
+ * to ABI. These registers are restored from 'cleanup' macro. All the
+ * other NEON registers are caller saved, so can be clobbered freely
+ * without introducing any problems.
+ */
+.macro pixman_composite_over_n_8_0565_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vpush {d8-d15}
+ vld1.32 {d11[0]}, [DUMMY]
+ vdup.8 d8, d11[0]
+ vdup.8 d9, d11[1]
+ vdup.8 d10, d11[2]
+ vdup.8 d11, d11[3]
+.endm
+
+.macro pixman_composite_over_n_8_0565_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_n_8_0565_asm_neon, 0, 8, 16, \
+ FLAG_DST_READWRITE, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_n_8_0565_init, \
+ pixman_composite_over_n_8_0565_cleanup, \
+ pixman_composite_over_n_8_0565_process_pixblock_head, \
+ pixman_composite_over_n_8_0565_process_pixblock_tail, \
+ pixman_composite_over_n_8_0565_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_src_0565_0565_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_0565_0565_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_0565_0565_process_pixblock_tail_head
+ vst1.16 {d0, d1, d2, d3}, [DST_W, :128]!
+ vld1.16 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 16, 16
+.endm
+
+generate_composite_function \
+ pixman_composite_src_0565_0565_asm_neon, 16, 0, 16, \
+ FLAG_DST_WRITEONLY, \
+ 16, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_0565_0565_process_pixblock_head, \
+ pixman_composite_src_0565_0565_process_pixblock_tail, \
+ pixman_composite_src_0565_0565_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_n_8_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_n_8_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_n_8_process_pixblock_tail_head
+ vst1.8 {d0, d1, d2, d3}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_src_n_8_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d0[0]}, [DUMMY]
+ vsli.u64 d0, d0, #8
+ vsli.u64 d0, d0, #16
+ vsli.u64 d0, d0, #32
+ vorr d1, d0, d0
+ vorr q1, q0, q0
+.endm
+
+.macro pixman_composite_src_n_8_cleanup
+.endm
+
+generate_composite_function \
+ pixman_composite_src_n_8_asm_neon, 0, 0, 8, \
+ FLAG_DST_WRITEONLY, \
+ 32, /* number of pixels, processed in a single block */ \
+ 0, /* prefetch distance */ \
+ pixman_composite_src_n_8_init, \
+ pixman_composite_src_n_8_cleanup, \
+ pixman_composite_src_n_8_process_pixblock_head, \
+ pixman_composite_src_n_8_process_pixblock_tail, \
+ pixman_composite_src_n_8_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_n_0565_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_n_0565_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_n_0565_process_pixblock_tail_head
+ vst1.16 {d0, d1, d2, d3}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_src_n_0565_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d0[0]}, [DUMMY]
+ vsli.u64 d0, d0, #16
+ vsli.u64 d0, d0, #32
+ vorr d1, d0, d0
+ vorr q1, q0, q0
+.endm
+
+.macro pixman_composite_src_n_0565_cleanup
+.endm
+
+generate_composite_function \
+ pixman_composite_src_n_0565_asm_neon, 0, 0, 16, \
+ FLAG_DST_WRITEONLY, \
+ 16, /* number of pixels, processed in a single block */ \
+ 0, /* prefetch distance */ \
+ pixman_composite_src_n_0565_init, \
+ pixman_composite_src_n_0565_cleanup, \
+ pixman_composite_src_n_0565_process_pixblock_head, \
+ pixman_composite_src_n_0565_process_pixblock_tail, \
+ pixman_composite_src_n_0565_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_n_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_n_8888_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_n_8888_process_pixblock_tail_head
+ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_src_n_8888_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vld1.32 {d0[0]}, [DUMMY]
+ vsli.u64 d0, d0, #32
+ vorr d1, d0, d0
+ vorr q1, q0, q0
+.endm
+
+.macro pixman_composite_src_n_8888_cleanup
+.endm
+
+generate_composite_function \
+ pixman_composite_src_n_8888_asm_neon, 0, 0, 32, \
+ FLAG_DST_WRITEONLY, \
+ 8, /* number of pixels, processed in a single block */ \
+ 0, /* prefetch distance */ \
+ pixman_composite_src_n_8888_init, \
+ pixman_composite_src_n_8888_cleanup, \
+ pixman_composite_src_n_8888_process_pixblock_head, \
+ pixman_composite_src_n_8888_process_pixblock_tail, \
+ pixman_composite_src_n_8888_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_8888_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_8888_8888_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_8888_8888_process_pixblock_tail_head
+ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
+ vld1.32 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+.endm
+
+generate_composite_function \
+ pixman_composite_src_8888_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_WRITEONLY, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_8888_8888_process_pixblock_head, \
+ pixman_composite_src_8888_8888_process_pixblock_tail, \
+ pixman_composite_src_8888_8888_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_x888_8888_process_pixblock_head
+ vorr q0, q0, q2
+ vorr q1, q1, q2
+.endm
+
+.macro pixman_composite_src_x888_8888_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_x888_8888_process_pixblock_tail_head
+ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
+ vld1.32 {d0, d1, d2, d3}, [SRC]!
+ vorr q0, q0, q2
+ vorr q1, q1, q2
+ cache_preload 8, 8
+.endm
+
+.macro pixman_composite_src_x888_8888_init
+ vmov.u8 q2, #0xFF
+ vshl.u32 q2, q2, #24
+.endm
+
+generate_composite_function \
+ pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_WRITEONLY, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ pixman_composite_src_x888_8888_init, \
+ default_cleanup, \
+ pixman_composite_src_x888_8888_process_pixblock_head, \
+ pixman_composite_src_x888_8888_process_pixblock_tail, \
+ pixman_composite_src_x888_8888_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_over_n_8_8888_process_pixblock_head
+ /* expecting deinterleaved source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+ /* and destination data in {d4, d5, d6, d7} */
+ /* mask is in d24 (d25, d26, d27 are unused) */
+
+ /* in */
+ vmull.u8 q0, d24, d8
+ vmull.u8 q1, d24, d9
+ vmull.u8 q6, d24, d10
+ vmull.u8 q7, d24, d11
+ vrshr.u16 q10, q0, #8
+ vrshr.u16 q11, q1, #8
+ vrshr.u16 q12, q6, #8
+ vrshr.u16 q13, q7, #8
+ vraddhn.u16 d0, q0, q10
+ vraddhn.u16 d1, q1, q11
+ vraddhn.u16 d2, q6, q12
+ vraddhn.u16 d3, q7, q13
+ vmvn.8 d24, d3 /* get inverted alpha */
+ /* source: d0 - blue, d1 - green, d2 - red, d3 - alpha */
+ /* destination: d4 - blue, d5 - green, d6 - red, d7 - alpha */
+ /* now do alpha blending */
+ vmull.u8 q8, d24, d4
+ vmull.u8 q9, d24, d5
+ vmull.u8 q10, d24, d6
+ vmull.u8 q11, d24, d7
+.endm
+
+.macro pixman_composite_over_n_8_8888_process_pixblock_tail
+ vrshr.u16 q14, q8, #8
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_n_8_8888_process_pixblock_tail_head
+ pixman_composite_over_n_8_8888_process_pixblock_tail
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vld1.8 {d24}, [MASK]!
+ cache_preload 8, 8
+ pixman_composite_over_n_8_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_over_n_8_8888_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vpush {d8-d15}
+ vld1.32 {d11[0]}, [DUMMY]
+ vdup.8 d8, d11[0]
+ vdup.8 d9, d11[1]
+ vdup.8 d10, d11[2]
+ vdup.8 d11, d11[3]
+.endm
+
+.macro pixman_composite_over_n_8_8888_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_n_8_8888_asm_neon, 0, 8, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_n_8_8888_init, \
+ pixman_composite_over_n_8_8888_cleanup, \
+ pixman_composite_over_n_8_8888_process_pixblock_head, \
+ pixman_composite_over_n_8_8888_process_pixblock_tail, \
+ pixman_composite_over_n_8_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head
+ /*
+ * 'combine_mask_ca' replacement
+ *
+ * input: solid src (n) in {d8, d9, d10, d11}
+ * dest in {d4, d5, d6, d7 }
+ * mask in {d24, d25, d26, d27}
+ * output: updated src in {d0, d1, d2, d3 }
+ * updated mask in {d24, d25, d26, d3 }
+ */
+ vmull.u8 q0, d24, d8
+ vmull.u8 q1, d25, d9
+ vmull.u8 q6, d26, d10
+ vmull.u8 q7, d27, d11
+ vmull.u8 q9, d11, d25
+ vmull.u8 q12, d11, d24
+ vmull.u8 q13, d11, d26
+ vrshr.u16 q8, q0, #8
+ vrshr.u16 q10, q1, #8
+ vrshr.u16 q11, q6, #8
+ vraddhn.u16 d0, q0, q8
+ vraddhn.u16 d1, q1, q10
+ vraddhn.u16 d2, q6, q11
+ vrshr.u16 q11, q12, #8
+ vrshr.u16 q8, q9, #8
+ vrshr.u16 q6, q13, #8
+ vrshr.u16 q10, q7, #8
+ vraddhn.u16 d24, q12, q11
+ vraddhn.u16 d25, q9, q8
+ vraddhn.u16 d26, q13, q6
+ vraddhn.u16 d3, q7, q10
+ /*
+ * 'combine_over_ca' replacement
+ *
+ * output: updated dest in {d28, d29, d30, d31}
+ */
+ vmvn.8 d24, d24
+ vmvn.8 d25, d25
+ vmull.u8 q8, d24, d4
+ vmull.u8 q9, d25, d5
+ vmvn.8 d26, d26
+ vmvn.8 d27, d3
+ vmull.u8 q10, d26, d6
+ vmull.u8 q11, d27, d7
+.endm
+
+.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail
+ /* ... continue 'combine_over_ca' replacement */
+ vrshr.u16 q14, q8, #8
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q6, q10, #8
+ vrshr.u16 q7, q11, #8
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ vraddhn.u16 d30, q6, q10
+ vraddhn.u16 d31, q7, q11
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+.endm
+
+.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
+ vrshr.u16 q14, q8, #8
+ vrshr.u16 q15, q9, #8
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vrshr.u16 q6, q10, #8
+ vrshr.u16 q7, q11, #8
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ vraddhn.u16 d30, q6, q10
+ vraddhn.u16 d31, q7, q11
+ vld4.8 {d24, d25, d26, d27}, [MASK]!
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+ cache_preload 8, 8
+ pixman_composite_over_n_8888_8888_ca_process_pixblock_head
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_over_n_8888_8888_ca_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vpush {d8-d15}
+ vld1.32 {d11[0]}, [DUMMY]
+ vdup.8 d8, d11[0]
+ vdup.8 d9, d11[1]
+ vdup.8 d10, d11[2]
+ vdup.8 d11, d11[3]
+.endm
+
+.macro pixman_composite_over_n_8888_8888_ca_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_n_8888_8888_ca_init, \
+ pixman_composite_over_n_8888_8888_ca_cleanup, \
+ pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \
+ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \
+ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_add_n_8_8_process_pixblock_head
+ /* expecting source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+ /* and destination data in {d4, d5, d6, d7} */
+ /* mask is in d24, d25, d26, d27 */
+ vmull.u8 q0, d24, d11
+ vmull.u8 q1, d25, d11
+ vmull.u8 q6, d26, d11
+ vmull.u8 q7, d27, d11
+ vrshr.u16 q10, q0, #8
+ vrshr.u16 q11, q1, #8
+ vrshr.u16 q12, q6, #8
+ vrshr.u16 q13, q7, #8
+ vraddhn.u16 d0, q0, q10
+ vraddhn.u16 d1, q1, q11
+ vraddhn.u16 d2, q6, q12
+ vraddhn.u16 d3, q7, q13
+ vqadd.u8 q14, q0, q2
+ vqadd.u8 q15, q1, q3
+.endm
+
+.macro pixman_composite_add_n_8_8_process_pixblock_tail
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_add_n_8_8_process_pixblock_tail_head
+ pixman_composite_add_n_8_8_process_pixblock_tail
+ vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vld1.8 {d24, d25, d26, d27}, [MASK]!
+ cache_preload 32, 32
+ pixman_composite_add_n_8_8_process_pixblock_head
+.endm
+
+.macro pixman_composite_add_n_8_8_init
+ add DUMMY, sp, #ARGS_STACK_OFFSET
+ vpush {d8-d15}
+ vld1.32 {d11[0]}, [DUMMY]
+ vdup.8 d11, d11[3]
+.endm
+
+.macro pixman_composite_add_n_8_8_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_add_n_8_8_asm_neon, 0, 8, 8, \
+ FLAG_DST_READWRITE, \
+ 32, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_add_n_8_8_init, \
+ pixman_composite_add_n_8_8_cleanup, \
+ pixman_composite_add_n_8_8_process_pixblock_head, \
+ pixman_composite_add_n_8_8_process_pixblock_tail, \
+ pixman_composite_add_n_8_8_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_add_8_8_8_process_pixblock_head
+ /* expecting source data in {d0, d1, d2, d3} */
+ /* destination data in {d4, d5, d6, d7} */
+ /* mask in {d24, d25, d26, d27} */
+ vmull.u8 q8, d24, d0
+ vmull.u8 q9, d25, d1
+ vmull.u8 q10, d26, d2
+ vmull.u8 q11, d27, d3
+ vrshr.u16 q0, q8, #8
+ vrshr.u16 q1, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ vraddhn.u16 d0, q0, q8
+ vraddhn.u16 d1, q1, q9
+ vraddhn.u16 d2, q12, q10
+ vraddhn.u16 d3, q13, q11
+ vqadd.u8 q14, q0, q2
+ vqadd.u8 q15, q1, q3
+.endm
+
+.macro pixman_composite_add_8_8_8_process_pixblock_tail
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_add_8_8_8_process_pixblock_tail_head
+ pixman_composite_add_8_8_8_process_pixblock_tail
+ vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vld1.8 {d24, d25, d26, d27}, [MASK]!
+ vld1.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 32, 32
+ pixman_composite_add_8_8_8_process_pixblock_head
+.endm
+
+.macro pixman_composite_add_8_8_8_init
+.endm
+
+.macro pixman_composite_add_8_8_8_cleanup
+.endm
+
+generate_composite_function \
+ pixman_composite_add_8_8_8_asm_neon, 8, 8, 8, \
+ FLAG_DST_READWRITE, \
+ 32, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_add_8_8_8_init, \
+ pixman_composite_add_8_8_8_cleanup, \
+ pixman_composite_add_8_8_8_process_pixblock_head, \
+ pixman_composite_add_8_8_8_process_pixblock_tail, \
+ pixman_composite_add_8_8_8_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_add_8888_8888_8888_process_pixblock_head
+ /* expecting source data in {d0, d1, d2, d3} */
+ /* destination data in {d4, d5, d6, d7} */
+ /* mask in {d24, d25, d26, d27} */
+ vmull.u8 q8, d27, d0
+ vmull.u8 q9, d27, d1
+ vmull.u8 q10, d27, d2
+ vmull.u8 q11, d27, d3
+ vrshr.u16 q0, q8, #8
+ vrshr.u16 q1, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ vraddhn.u16 d0, q0, q8
+ vraddhn.u16 d1, q1, q9
+ vraddhn.u16 d2, q12, q10
+ vraddhn.u16 d3, q13, q11
+ vqadd.u8 q14, q0, q2
+ vqadd.u8 q15, q1, q3
+.endm
+
+.macro pixman_composite_add_8888_8888_8888_process_pixblock_tail
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
+ pixman_composite_add_8888_8888_8888_process_pixblock_tail
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vld4.8 {d24, d25, d26, d27}, [MASK]!
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+ pixman_composite_add_8888_8888_8888_process_pixblock_head
+.endm
+
+generate_composite_function \
+ pixman_composite_add_8888_8888_8888_asm_neon, 32, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_head, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_tail, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_add_mask_asm_neon, 32, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_head, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_tail, \
+ pixman_composite_add_8888_8888_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_head
+ /* expecting source data in {d0, d1, d2, d3} */
+ /* destination data in {d4, d5, d6, d7} */
+ /* solid mask is in d15 */
+
+ /* 'in' */
+ vmull.u8 q8, d15, d3
+ vmull.u8 q6, d15, d2
+ vmull.u8 q5, d15, d1
+ vmull.u8 q4, d15, d0
+ vrshr.u16 q13, q8, #8
+ vrshr.u16 q12, q6, #8
+ vrshr.u16 q11, q5, #8
+ vrshr.u16 q10, q4, #8
+ vraddhn.u16 d3, q8, q13
+ vraddhn.u16 d2, q6, q12
+ vraddhn.u16 d1, q5, q11
+ vraddhn.u16 d0, q4, q10
+ vmvn.8 d24, d3 /* get inverted alpha */
+ /* now do alpha blending */
+ vmull.u8 q8, d24, d4
+ vmull.u8 q9, d24, d5
+ vmull.u8 q10, d24, d6
+ vmull.u8 q11, d24, d7
+.endm
+
+.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail
+ vrshr.u16 q14, q8, #8
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+.endm
+
+.macro pixman_composite_out_reverse_8888_8888_8888_init
+ vpush {d8-d15}
+.endm
+
+.macro pixman_composite_out_reverse_8888_8888_8888_cleanup
+ vpop {d8-d15}
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+ vld4.8 {d12, d13, d14, d15}, [MASK]!
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+.endm
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_out_reverse_mask_asm_neon, 32, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ pixman_composite_out_reverse_8888_8888_8888_init, \
+ pixman_composite_out_reverse_8888_8888_8888_cleanup, \
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head, \
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail, \
+ pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 12 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_over_8888_n_8888_process_pixblock_head
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head
+.endm
+
+.macro pixman_composite_over_8888_n_8888_process_pixblock_tail
+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+.endm
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_8888_n_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ pixman_composite_over_8888_n_8888_process_pixblock_tail
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+ pixman_composite_over_8888_n_8888_process_pixblock_head
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_over_8888_n_8888_init
+ add DUMMY, sp, #48
+ vpush {d8-d15}
+ vld1.32 {d15[0]}, [DUMMY]
+ vdup.8 d15, d15[3]
+.endm
+
+.macro pixman_composite_over_8888_n_8888_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_8888_n_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_8888_n_8888_init, \
+ pixman_composite_over_8888_n_8888_cleanup, \
+ pixman_composite_over_8888_n_8888_process_pixblock_head, \
+ pixman_composite_over_8888_n_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_n_8888_process_pixblock_tail_head
+
+/******************************************************************************/
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_8888_8888_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ pixman_composite_over_8888_n_8888_process_pixblock_tail
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+ vld4.8 {d12, d13, d14, d15}, [MASK]!
+ pixman_composite_over_8888_n_8888_process_pixblock_head
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_over_8888_8888_8888_init
+ vpush {d8-d15}
+.endm
+
+.macro pixman_composite_over_8888_8888_8888_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_8888_8888_8888_asm_neon, 32, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_8888_8888_8888_init, \
+ pixman_composite_over_8888_8888_8888_cleanup, \
+ pixman_composite_over_8888_n_8888_process_pixblock_head, \
+ pixman_composite_over_8888_n_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_8888_8888_process_pixblock_tail_head \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 12 /* mask_basereg */
+
+generate_composite_function_single_scanline \
+ pixman_composite_scanline_over_mask_asm_neon, 32, 32, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ pixman_composite_over_8888_8888_8888_init, \
+ pixman_composite_over_8888_8888_8888_cleanup, \
+ pixman_composite_over_8888_n_8888_process_pixblock_head, \
+ pixman_composite_over_8888_n_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_8888_8888_process_pixblock_tail_head \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 12 /* mask_basereg */
+
+/******************************************************************************/
+
+/* TODO: expand macros and do better instructions scheduling */
+.macro pixman_composite_over_8888_8_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ pixman_composite_over_8888_n_8888_process_pixblock_tail
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ cache_preload 8, 8
+ vld1.8 {d15}, [MASK]!
+ pixman_composite_over_8888_n_8888_process_pixblock_head
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+.endm
+
+.macro pixman_composite_over_8888_8_8888_init
+ vpush {d8-d15}
+.endm
+
+.macro pixman_composite_over_8888_8_8888_cleanup
+ vpop {d8-d15}
+.endm
+
+generate_composite_function \
+ pixman_composite_over_8888_8_8888_asm_neon, 32, 8, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ pixman_composite_over_8888_8_8888_init, \
+ pixman_composite_over_8888_8_8888_cleanup, \
+ pixman_composite_over_8888_n_8888_process_pixblock_head, \
+ pixman_composite_over_8888_n_8888_process_pixblock_tail, \
+ pixman_composite_over_8888_8_8888_process_pixblock_tail_head \
+ 28, /* dst_w_basereg */ \
+ 4, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 15 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_0888_0888_process_pixblock_head
+.endm
+
+.macro pixman_composite_src_0888_0888_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_0888_0888_process_pixblock_tail_head
+ vst3.8 {d0, d1, d2}, [DST_W]!
+ vld3.8 {d0, d1, d2}, [SRC]!
+ cache_preload 8, 8
+.endm
+
+generate_composite_function \
+ pixman_composite_src_0888_0888_asm_neon, 24, 0, 24, \
+ FLAG_DST_WRITEONLY, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_0888_0888_process_pixblock_head, \
+ pixman_composite_src_0888_0888_process_pixblock_tail, \
+ pixman_composite_src_0888_0888_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_0888_8888_rev_process_pixblock_head
+ vswp d0, d2
+.endm
+
+.macro pixman_composite_src_0888_8888_rev_process_pixblock_tail
+.endm
+
+.macro pixman_composite_src_0888_8888_rev_process_pixblock_tail_head
+ vst4.8 {d0, d1, d2, d3}, [DST_W]!
+ vld3.8 {d0, d1, d2}, [SRC]!
+ vswp d0, d2
+ cache_preload 8, 8
+.endm
+
+.macro pixman_composite_src_0888_8888_rev_init
+ veor d3, d3, d3
+.endm
+
+generate_composite_function \
+ pixman_composite_src_0888_8888_rev_asm_neon, 24, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ pixman_composite_src_0888_8888_rev_init, \
+ default_cleanup, \
+ pixman_composite_src_0888_8888_rev_process_pixblock_head, \
+ pixman_composite_src_0888_8888_rev_process_pixblock_tail, \
+ pixman_composite_src_0888_8888_rev_process_pixblock_tail_head, \
+ 0, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_0888_0565_rev_process_pixblock_head
+ vshll.u8 q8, d1, #8
+ vshll.u8 q9, d2, #8
+.endm
+
+.macro pixman_composite_src_0888_0565_rev_process_pixblock_tail
+ vshll.u8 q14, d0, #8
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+.endm
+
+.macro pixman_composite_src_0888_0565_rev_process_pixblock_tail_head
+ vshll.u8 q14, d0, #8
+ vld3.8 {d0, d1, d2}, [SRC]!
+ vsri.u16 q14, q8, #5
+ vsri.u16 q14, q9, #11
+ vshll.u8 q8, d1, #8
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ vshll.u8 q9, d2, #8
+.endm
+
+generate_composite_function \
+ pixman_composite_src_0888_0565_rev_asm_neon, 24, 0, 16, \
+ FLAG_DST_WRITEONLY, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_0888_0565_rev_process_pixblock_head, \
+ pixman_composite_src_0888_0565_rev_process_pixblock_tail, \
+ pixman_composite_src_0888_0565_rev_process_pixblock_tail_head, \
+ 28, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
+
+/******************************************************************************/
+
+.macro pixman_composite_src_pixbuf_8888_process_pixblock_head
+ vmull.u8 q8, d3, d0
+ vmull.u8 q9, d3, d1
+ vmull.u8 q10, d3, d2
+.endm
+
+.macro pixman_composite_src_pixbuf_8888_process_pixblock_tail
+ vrshr.u16 q11, q8, #8
+ vswp d3, d31
+ vrshr.u16 q12, q9, #8
+ vrshr.u16 q13, q10, #8
+ vraddhn.u16 d30, q11, q8
+ vraddhn.u16 d29, q12, q9
+ vraddhn.u16 d28, q13, q10
+.endm
+
+.macro pixman_composite_src_pixbuf_8888_process_pixblock_tail_head
+ vrshr.u16 q11, q8, #8
+ vswp d3, d31
+ vrshr.u16 q12, q9, #8
+ vrshr.u16 q13, q10, #8
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+ vraddhn.u16 d30, q11, q8
+ PF add PF_X, PF_X, #8
+ PF tst PF_CTL, #0xF
+ PF addne PF_X, PF_X, #8
+ PF subne PF_CTL, PF_CTL, #1
+ vraddhn.u16 d29, q12, q9
+ vraddhn.u16 d28, q13, q10
+ vmull.u8 q8, d3, d0
+ vmull.u8 q9, d3, d1
+ vmull.u8 q10, d3, d2
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ PF cmp PF_X, ORIG_W
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ PF subge PF_X, PF_X, ORIG_W
+ PF subges PF_CTL, PF_CTL, #0x10
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+.endm
+
+generate_composite_function \
+ pixman_composite_src_pixbuf_8888_asm_neon, 32, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 10, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ pixman_composite_src_pixbuf_8888_process_pixblock_head, \
+ pixman_composite_src_pixbuf_8888_process_pixblock_tail, \
+ pixman_composite_src_pixbuf_8888_process_pixblock_tail_head, \
+ 28, /* dst_w_basereg */ \
+ 0, /* dst_r_basereg */ \
+ 0, /* src_basereg */ \
+ 0 /* mask_basereg */
diff --git a/pixman/pixman/pixman-arm-neon.c b/pixman/pixman/pixman-arm-neon.c
index 6808b3658..ce049b280 100644
--- a/pixman/pixman/pixman-arm-neon.c
+++ b/pixman/pixman/pixman-arm-neon.c
@@ -1,352 +1,354 @@
-/*
- * Copyright © 2009 ARM Ltd, Movial Creative Technologies Oy
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of ARM Ltd not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. ARM Ltd makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Author: Ian Rickards (ian.rickards@arm.com)
- * Author: Jonathan Morton (jonathan.morton@movial.com)
- * Author: Markku Vire (markku.vire@movial.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include "pixman-private.h"
-#include "pixman-arm-common.h"
-
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_8888,
- uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_x888_8888,
- uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_0565,
- uint16_t, 1, uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0888,
- uint8_t, 3, uint8_t, 3)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_0565,
- uint32_t, 1, uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_8888,
- uint16_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_8888_rev,
- uint8_t, 3, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0565_rev,
- uint8_t, 3, uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_pixbuf_8888,
- uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8000_8000,
- uint8_t, 1, uint8_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8888_8888,
- uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_0565,
- uint32_t, 1, uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_8888,
- uint32_t, 1, uint32_t, 1)
-
-PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_0565,
- uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_8888,
- uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_reverse_n_8888,
- uint32_t, 1)
-
-PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_0565,
- uint8_t, 1, uint16_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_8888,
- uint8_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8888_8888_ca,
- uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, add_n_8_8,
- uint8_t, 1, uint8_t, 1)
-
-PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (neon, over_8888_n_8888,
- uint32_t, 1, uint32_t, 1)
-
-PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8_8_8,
- uint8_t, 1, uint8_t, 1, uint8_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8888_8888_8888,
- uint32_t, 1, uint32_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8_8888,
- uint32_t, 1, uint8_t, 1, uint32_t, 1)
-PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8888_8888,
- uint32_t, 1, uint32_t, 1, uint32_t, 1)
-
-void
-pixman_composite_src_n_8_asm_neon (int32_t w,
- int32_t h,
- uint8_t *dst,
- int32_t dst_stride,
- uint8_t src);
-
-void
-pixman_composite_src_n_0565_asm_neon (int32_t w,
- int32_t h,
- uint16_t *dst,
- int32_t dst_stride,
- uint16_t src);
-
-void
-pixman_composite_src_n_8888_asm_neon (int32_t w,
- int32_t h,
- uint32_t *dst,
- int32_t dst_stride,
- uint32_t src);
-
-static pixman_bool_t
-pixman_fill_neon (uint32_t *bits,
- int stride,
- int bpp,
- int x,
- int y,
- int width,
- int height,
- uint32_t _xor)
-{
- /* stride is always multiple of 32bit units in pixman */
- uint32_t byte_stride = stride * sizeof(uint32_t);
-
- switch (bpp)
- {
- case 8:
- pixman_composite_src_n_8_asm_neon (
- width,
- height,
- (uint8_t *)(((char *) bits) + y * byte_stride + x),
- byte_stride,
- _xor & 0xff);
- return TRUE;
- case 16:
- pixman_composite_src_n_0565_asm_neon (
- width,
- height,
- (uint16_t *)(((char *) bits) + y * byte_stride + x * 2),
- byte_stride / 2,
- _xor & 0xffff);
- return TRUE;
- case 32:
- pixman_composite_src_n_8888_asm_neon (
- width,
- height,
- (uint32_t *)(((char *) bits) + y * byte_stride + x * 4),
- byte_stride / 4,
- _xor);
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static pixman_bool_t
-pixman_blt_neon (uint32_t *src_bits,
- uint32_t *dst_bits,
- int src_stride,
- int dst_stride,
- int src_bpp,
- int dst_bpp,
- int src_x,
- int src_y,
- int dst_x,
- int dst_y,
- int width,
- int height)
-{
- if (src_bpp != dst_bpp)
- return FALSE;
-
- switch (src_bpp)
- {
- case 16:
- pixman_composite_src_0565_0565_asm_neon (
- width, height,
- (uint16_t *)(((char *) dst_bits) +
- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
- (uint16_t *)(((char *) src_bits) +
- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
- return TRUE;
- case 32:
- pixman_composite_src_8888_8888_asm_neon (
- width, height,
- (uint32_t *)(((char *) dst_bits) +
- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
- (uint32_t *)(((char *) src_bits) +
- src_y * src_stride * 4 + src_x * 4), src_stride);
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static const pixman_fast_path_t arm_neon_fast_paths[] =
-{
- PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, r5g6b5, neon_composite_src_0565_0565),
- PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, b5g6r5, neon_composite_src_0565_0565),
- PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, neon_composite_src_8888_0565),
- PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, neon_composite_src_8888_0565),
- PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, neon_composite_src_8888_0565),
- PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, neon_composite_src_8888_0565),
- PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, a8r8g8b8, neon_composite_src_0565_8888),
- PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, x8r8g8b8, neon_composite_src_0565_8888),
- PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, a8b8g8r8, neon_composite_src_0565_8888),
- PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, x8b8g8r8, neon_composite_src_0565_8888),
- PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, neon_composite_src_8888_8888),
- PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
- PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
- PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, neon_composite_src_0888_0888),
- PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, neon_composite_src_0888_8888_rev),
- PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, neon_composite_src_0888_0565_rev),
- PIXMAN_STD_FAST_PATH (SRC, pixbuf, pixbuf, a8r8g8b8, neon_composite_src_pixbuf_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, neon_composite_over_n_8_0565),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, neon_composite_over_n_8_0565),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, neon_composite_over_n_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, neon_composite_over_n_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, neon_composite_over_n_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, neon_composite_over_n_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, neon_composite_over_n_0565),
- PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, neon_composite_over_n_8888),
- PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, neon_composite_over_n_8888),
- PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
- PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
- PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca),
- PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, neon_composite_over_8888_n_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, neon_composite_over_8888_n_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, neon_composite_over_8888_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, x8r8g8b8, neon_composite_over_8888_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, a8b8g8r8, neon_composite_over_8888_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, x8b8g8r8, neon_composite_over_8888_8_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_over_8888_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, r5g6b5, neon_composite_over_8888_0565),
- PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, b5g6r5, neon_composite_over_8888_0565),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, neon_composite_over_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, neon_composite_over_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, neon_composite_over_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, neon_composite_over_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
- PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
- PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, neon_composite_add_n_8_8),
- PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, neon_composite_add_8_8_8),
- PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888),
- PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, neon_composite_add_8000_8000),
- PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, neon_composite_add_8888_8888),
- PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, neon_composite_add_8888_8888),
- PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
- PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888),
-
- { PIXMAN_OP_NONE },
-};
-
-static pixman_bool_t
-arm_neon_blt (pixman_implementation_t *imp,
- uint32_t * src_bits,
- uint32_t * dst_bits,
- int src_stride,
- int dst_stride,
- int src_bpp,
- int dst_bpp,
- int src_x,
- int src_y,
- int dst_x,
- int dst_y,
- int width,
- int height)
-{
- if (!pixman_blt_neon (
- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
- src_x, src_y, dst_x, dst_y, width, height))
-
- {
- return _pixman_implementation_blt (
- imp->delegate,
- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
- src_x, src_y, dst_x, dst_y, width, height);
- }
-
- return TRUE;
-}
-
-static pixman_bool_t
-arm_neon_fill (pixman_implementation_t *imp,
- uint32_t * bits,
- int stride,
- int bpp,
- int x,
- int y,
- int width,
- int height,
- uint32_t xor)
-{
- if (pixman_fill_neon (bits, stride, bpp, x, y, width, height, xor))
- return TRUE;
-
- return _pixman_implementation_fill (
- imp->delegate, bits, stride, bpp, x, y, width, height, xor);
-}
-
-#define BIND_COMBINE_U(name) \
-void \
-pixman_composite_scanline_##name##_mask_asm_neon (int32_t w, \
- const uint32_t *dst, \
- const uint32_t *src, \
- const uint32_t *mask); \
- \
-void \
-pixman_composite_scanline_##name##_asm_neon (int32_t w, \
- const uint32_t *dst, \
- const uint32_t *src); \
- \
-static void \
-neon_combine_##name##_u (pixman_implementation_t *imp, \
- pixman_op_t op, \
- uint32_t * dest, \
- const uint32_t * src, \
- const uint32_t * mask, \
- int width) \
-{ \
- if (mask) \
- pixman_composite_scanline_##name##_mask_asm_neon (width, dest, \
- src, mask); \
- else \
- pixman_composite_scanline_##name##_asm_neon (width, dest, src); \
-}
-
-BIND_COMBINE_U (over)
-BIND_COMBINE_U (add)
-
-pixman_implementation_t *
-_pixman_implementation_create_arm_neon (void)
-{
- pixman_implementation_t *general = _pixman_implementation_create_fast_path ();
- pixman_implementation_t *imp =
- _pixman_implementation_create (general, arm_neon_fast_paths);
-
- imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
- imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
-
- imp->blt = arm_neon_blt;
- imp->fill = arm_neon_fill;
-
- return imp;
-}
+/*
+ * Copyright © 2009 ARM Ltd, Movial Creative Technologies Oy
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of ARM Ltd not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. ARM Ltd makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Ian Rickards (ian.rickards@arm.com)
+ * Author: Jonathan Morton (jonathan.morton@movial.com)
+ * Author: Markku Vire (markku.vire@movial.com)
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include "pixman-private.h"
+#include "pixman-arm-common.h"
+
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_8888,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_x888_8888,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_0565,
+ uint16_t, 1, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0888,
+ uint8_t, 3, uint8_t, 3)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_0565,
+ uint32_t, 1, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_8888,
+ uint16_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_8888_rev,
+ uint8_t, 3, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0565_rev,
+ uint8_t, 3, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_pixbuf_8888,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8000_8000,
+ uint8_t, 1, uint8_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8888_8888,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_0565,
+ uint32_t, 1, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_8888,
+ uint32_t, 1, uint32_t, 1)
+
+PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_0565,
+ uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_8888,
+ uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_reverse_n_8888,
+ uint32_t, 1)
+
+PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_0565,
+ uint8_t, 1, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_8888,
+ uint8_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8888_8888_ca,
+ uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, add_n_8_8,
+ uint8_t, 1, uint8_t, 1)
+
+PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (neon, over_8888_n_8888,
+ uint32_t, 1, uint32_t, 1)
+
+PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8_8_8,
+ uint8_t, 1, uint8_t, 1, uint8_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8888_8888_8888,
+ uint32_t, 1, uint32_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8_8888,
+ uint32_t, 1, uint8_t, 1, uint32_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8888_8888,
+ uint32_t, 1, uint32_t, 1, uint32_t, 1)
+
+void
+pixman_composite_src_n_8_asm_neon (int32_t w,
+ int32_t h,
+ uint8_t *dst,
+ int32_t dst_stride,
+ uint8_t src);
+
+void
+pixman_composite_src_n_0565_asm_neon (int32_t w,
+ int32_t h,
+ uint16_t *dst,
+ int32_t dst_stride,
+ uint16_t src);
+
+void
+pixman_composite_src_n_8888_asm_neon (int32_t w,
+ int32_t h,
+ uint32_t *dst,
+ int32_t dst_stride,
+ uint32_t src);
+
+static pixman_bool_t
+pixman_fill_neon (uint32_t *bits,
+ int stride,
+ int bpp,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint32_t _xor)
+{
+ /* stride is always multiple of 32bit units in pixman */
+ uint32_t byte_stride = stride * sizeof(uint32_t);
+
+ switch (bpp)
+ {
+ case 8:
+ pixman_composite_src_n_8_asm_neon (
+ width,
+ height,
+ (uint8_t *)(((char *) bits) + y * byte_stride + x),
+ byte_stride,
+ _xor & 0xff);
+ return TRUE;
+ case 16:
+ pixman_composite_src_n_0565_asm_neon (
+ width,
+ height,
+ (uint16_t *)(((char *) bits) + y * byte_stride + x * 2),
+ byte_stride / 2,
+ _xor & 0xffff);
+ return TRUE;
+ case 32:
+ pixman_composite_src_n_8888_asm_neon (
+ width,
+ height,
+ (uint32_t *)(((char *) bits) + y * byte_stride + x * 4),
+ byte_stride / 4,
+ _xor);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static pixman_bool_t
+pixman_blt_neon (uint32_t *src_bits,
+ uint32_t *dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x,
+ int src_y,
+ int dst_x,
+ int dst_y,
+ int width,
+ int height)
+{
+ if (src_bpp != dst_bpp)
+ return FALSE;
+
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+ width, height,
+ (uint16_t *)(((char *) dst_bits) +
+ dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+ (uint16_t *)(((char *) src_bits) +
+ src_y * src_stride * 4 + src_x * 2), src_stride * 2);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+ width, height,
+ (uint32_t *)(((char *) dst_bits) +
+ dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+ (uint32_t *)(((char *) src_bits) +
+ src_y * src_stride * 4 + src_x * 4), src_stride);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static const pixman_fast_path_t arm_neon_fast_paths[] =
+{
+ PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, r5g6b5, neon_composite_src_0565_0565),
+ PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, b5g6r5, neon_composite_src_0565_0565),
+ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, neon_composite_src_8888_0565),
+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, neon_composite_src_8888_0565),
+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, neon_composite_src_8888_0565),
+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, neon_composite_src_8888_0565),
+ PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, a8r8g8b8, neon_composite_src_0565_8888),
+ PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, x8r8g8b8, neon_composite_src_0565_8888),
+ PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, a8b8g8r8, neon_composite_src_0565_8888),
+ PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, x8b8g8r8, neon_composite_src_0565_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, neon_composite_src_0888_0888),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, neon_composite_src_0888_8888_rev),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, neon_composite_src_0888_0565_rev),
+ PIXMAN_STD_FAST_PATH (SRC, pixbuf, pixbuf, a8r8g8b8, neon_composite_src_pixbuf_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, neon_composite_over_n_8_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, neon_composite_over_n_8_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, neon_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, neon_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, neon_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, neon_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, neon_composite_over_n_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, neon_composite_over_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, neon_composite_over_n_8888),
+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, neon_composite_over_8888_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, x8r8g8b8, neon_composite_over_8888_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, a8b8g8r8, neon_composite_over_8888_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, x8b8g8r8, neon_composite_over_8888_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_over_8888_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, r5g6b5, neon_composite_over_8888_0565),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, b5g6r5, neon_composite_over_8888_0565),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, neon_composite_add_n_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, neon_composite_add_8_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, neon_composite_add_8000_8000),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, neon_composite_add_8888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, neon_composite_add_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888),
+
+ { PIXMAN_OP_NONE },
+};
+
+static pixman_bool_t
+arm_neon_blt (pixman_implementation_t *imp,
+ uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x,
+ int src_y,
+ int dst_x,
+ int dst_y,
+ int width,
+ int height)
+{
+ if (!pixman_blt_neon (
+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+ src_x, src_y, dst_x, dst_y, width, height))
+
+ {
+ return _pixman_implementation_blt (
+ imp->delegate,
+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+ src_x, src_y, dst_x, dst_y, width, height);
+ }
+
+ return TRUE;
+}
+
+static pixman_bool_t
+arm_neon_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+ int bpp,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint32_t xor)
+{
+ if (pixman_fill_neon (bits, stride, bpp, x, y, width, height, xor))
+ return TRUE;
+
+ return _pixman_implementation_fill (
+ imp->delegate, bits, stride, bpp, x, y, width, height, xor);
+}
+
+#define BIND_COMBINE_U(name) \
+void \
+pixman_composite_scanline_##name##_mask_asm_neon (int32_t w, \
+ const uint32_t *dst, \
+ const uint32_t *src, \
+ const uint32_t *mask); \
+ \
+void \
+pixman_composite_scanline_##name##_asm_neon (int32_t w, \
+ const uint32_t *dst, \
+ const uint32_t *src); \
+ \
+static void \
+neon_combine_##name##_u (pixman_implementation_t *imp, \
+ pixman_op_t op, \
+ uint32_t * dest, \
+ const uint32_t * src, \
+ const uint32_t * mask, \
+ int width) \
+{ \
+ if (mask) \
+ pixman_composite_scanline_##name##_mask_asm_neon (width, dest, \
+ src, mask); \
+ else \
+ pixman_composite_scanline_##name##_asm_neon (width, dest, src); \
+}
+
+BIND_COMBINE_U (over)
+BIND_COMBINE_U (add)
+BIND_COMBINE_U (out_reverse)
+
+pixman_implementation_t *
+_pixman_implementation_create_arm_neon (void)
+{
+ pixman_implementation_t *general = _pixman_implementation_create_fast_path ();
+ pixman_implementation_t *imp =
+ _pixman_implementation_create (general, arm_neon_fast_paths);
+
+ imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
+ imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+ imp->combine_32[PIXMAN_OP_OUT_REVERSE] = neon_combine_out_reverse_u;
+
+ imp->blt = arm_neon_blt;
+ imp->fill = arm_neon_fill;
+
+ return imp;
+}
diff --git a/pixman/pixman/pixman-fast-path.c b/pixman/pixman/pixman-fast-path.c
index 8165db4c7..6c214fede 100644
--- a/pixman/pixman/pixman-fast-path.c
+++ b/pixman/pixman/pixman-fast-path.c
@@ -1591,13 +1591,6 @@ fast_composite_scaled_nearest_ ## scale_func_name ## _ ## OP (pixman_implementat
if (w & 1) \
{ \
x1 = vx >> 16; \
- vx += unit_x; \
- if (PIXMAN_REPEAT_ ## repeat_mode == PIXMAN_REPEAT_NORMAL) \
- { \
- /* This works because we know that unit_x is positive */ \
- while (vx >= max_vx) \
- vx -= max_vx; \
- } \
s1 = src[x1]; \
\
if (PIXMAN_OP_ ## OP == PIXMAN_OP_OVER) \
diff --git a/pixman/pixman/pixman-image.c b/pixman/pixman/pixman-image.c
index 1cce9273d..3020f246c 100644
--- a/pixman/pixman/pixman-image.c
+++ b/pixman/pixman/pixman-image.c
@@ -101,6 +101,7 @@ _pixman_image_allocate (void)
pixman_region32_init (&common->clip_region);
+ common->alpha_count = 0;
common->have_clip_region = FALSE;
common->clip_sources = FALSE;
common->transform = NULL;
@@ -408,12 +409,14 @@ compute_image_info (pixman_image_t *image)
}
}
- if (image->common.repeat != PIXMAN_REPEAT_NONE &&
- !PIXMAN_FORMAT_A (image->bits.format) &&
+ if (!PIXMAN_FORMAT_A (image->bits.format) &&
PIXMAN_FORMAT_TYPE (image->bits.format) != PIXMAN_TYPE_GRAY &&
PIXMAN_FORMAT_TYPE (image->bits.format) != PIXMAN_TYPE_COLOR)
{
- flags |= FAST_PATH_IS_OPAQUE;
+ flags |= FAST_PATH_SAMPLES_OPAQUE;
+
+ if (image->common.repeat != PIXMAN_REPEAT_NONE)
+ flags |= FAST_PATH_IS_OPAQUE;
}
if (source_image_needs_out_of_bounds_workaround (&image->bits))
@@ -461,7 +464,7 @@ compute_image_info (pixman_image_t *image)
image->common.filter == PIXMAN_FILTER_CONVOLUTION ||
image->common.component_alpha)
{
- flags &= ~FAST_PATH_IS_OPAQUE;
+ flags &= ~(FAST_PATH_IS_OPAQUE | FAST_PATH_SAMPLES_OPAQUE);
}
image->common.flags = flags;
@@ -668,15 +671,41 @@ pixman_image_set_alpha_map (pixman_image_t *image,
return_if_fail (!alpha_map || alpha_map->type == BITS);
+ if (alpha_map && common->alpha_count > 0)
+ {
+ /* If this image is being used as an alpha map itself,
+ * then you can't give it an alpha map of its own.
+ */
+ return;
+ }
+
+ if (alpha_map && alpha_map->common.alpha_map)
+ {
+ /* If the image has an alpha map of its own,
+ * then it can't be used as an alpha map itself
+ */
+ return;
+ }
+
if (common->alpha_map != (bits_image_t *)alpha_map)
{
if (common->alpha_map)
+ {
+ common->alpha_map->common.alpha_count--;
+
pixman_image_unref ((pixman_image_t *)common->alpha_map);
+ }
if (alpha_map)
+ {
common->alpha_map = (bits_image_t *)pixman_image_ref (alpha_map);
+
+ common->alpha_map->common.alpha_count++;
+ }
else
+ {
common->alpha_map = NULL;
+ }
}
common->alpha_origin_x = x;
diff --git a/pixman/pixman/pixman-private.h b/pixman/pixman/pixman-private.h
index 6774b1514..0a6cbd275 100644
--- a/pixman/pixman/pixman-private.h
+++ b/pixman/pixman/pixman-private.h
@@ -80,6 +80,7 @@ struct image_common
image_type_t type;
int32_t ref_count;
pixman_region32_t clip_region;
+ int32_t alpha_count; /* How many times this image is being used as an alpha map */
pixman_bool_t have_clip_region; /* FALSE if there is no clip */
pixman_bool_t client_clip; /* Whether the source clip was
set by a client */
@@ -570,6 +571,7 @@ _pixman_choose_implementation (void);
#define FAST_PATH_BILINEAR_FILTER (1 << 20)
#define FAST_PATH_NO_NORMAL_REPEAT (1 << 21)
#define FAST_PATH_HAS_TRANSFORM (1 << 22)
+#define FAST_PATH_SAMPLES_OPAQUE (1 << 23)
#define FAST_PATH_PAD_REPEAT \
(FAST_PATH_NO_NONE_REPEAT | \
diff --git a/pixman/pixman/pixman.c b/pixman/pixman/pixman.c
index 1dbfd83f8..819bb5146 100644
--- a/pixman/pixman/pixman.c
+++ b/pixman/pixman/pixman.c
@@ -884,6 +884,17 @@ do_composite (pixman_op_t op,
if (!analyze_extent (mask, dest_x - mask_x, dest_y - mask_y, extents, &mask_flags))
goto out;
+ /* If the clip is within the source samples, and the samples are opaque,
+ * then the source is effectively opaque.
+ */
+#define BOTH (FAST_PATH_SAMPLES_OPAQUE | FAST_PATH_SAMPLES_COVER_CLIP)
+
+ if ((src_flags & BOTH) == BOTH)
+ src_flags |= FAST_PATH_IS_OPAQUE;
+
+ if ((mask_flags & BOTH) == BOTH)
+ mask_flags |= FAST_PATH_IS_OPAQUE;
+
/*
* Check if we can replace our operator by a simpler one
* if the src or dest are opaque. The output operator should be
diff --git a/pixman/test/Makefile.am b/pixman/test/Makefile.am
index efd9cd91a..d3e9d3fa0 100644
--- a/pixman/test/Makefile.am
+++ b/pixman/test/Makefile.am
@@ -13,6 +13,7 @@ TESTPROGRAMS = \
gradient-crash-test \
trap-crasher \
alphamap \
+ alpha-loop \
scaling-crash-test \
blitters-test \
scaling-test \
@@ -39,6 +40,9 @@ scaling_test_SOURCES = scaling-test.c utils.c utils.h
alphamap_LDADD = $(TEST_LDADD)
alphamap_SOURCES = alphamap.c utils.c utils.h
+alpha_loop_LDADD = $(TEST_LDADD)
+alpha_loop_SOURCES = alpha-loop.c utils.c utils.h
+
# GTK using test programs
if HAVE_GTK
diff --git a/pixman/test/alpha-loop.c b/pixman/test/alpha-loop.c
new file mode 100644
index 000000000..38fc21f5d
--- /dev/null
+++ b/pixman/test/alpha-loop.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "utils.h"
+
+#define WIDTH 400
+#define HEIGHT 200
+
+int
+main (int argc, char **argv)
+{
+ uint8_t *alpha = make_random_bytes (WIDTH * HEIGHT);
+ uint32_t *src = (uint32_t *)make_random_bytes (WIDTH * HEIGHT * 4);
+ uint32_t *dest = (uint32_t *)make_random_bytes (WIDTH * HEIGHT * 4);
+
+ pixman_image_t *a = pixman_image_create_bits (PIXMAN_a8, WIDTH, HEIGHT, (uint32_t *)alpha, WIDTH);
+ pixman_image_t *d = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, dest, WIDTH * 4);
+ pixman_image_t *s = pixman_image_create_bits (PIXMAN_a2r10g10b10, WIDTH, HEIGHT, src, WIDTH * 4);
+
+ fail_after (5, "Infinite loop detected: 5 seconds without progress\n");
+
+ pixman_image_set_alpha_map (s, a, 0, 0);
+ pixman_image_set_alpha_map (a, s, 0, 0);
+
+ pixman_image_composite (PIXMAN_OP_SRC, s, NULL, d, 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+ pixman_image_unref (s);
+
+ return 0;
+}
diff --git a/pixman/test/utils.c b/pixman/test/utils.c
index 4b68debff..f5199268b 100644
--- a/pixman/test/utils.c
+++ b/pixman/test/utils.c
@@ -1,4 +1,9 @@
#include "utils.h"
+#include <signal.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
/* Random number seed
*/
@@ -319,3 +324,31 @@ fuzzer_test_main (const char *test_name,
return 0;
}
+
+static const char *global_msg;
+
+static void
+on_alarm (int signo)
+{
+ printf ("%s\n", global_msg);
+ exit (1);
+}
+
+void
+fail_after (int seconds, const char *msg)
+{
+#ifdef HAVE_SIGACTION
+#ifdef HAVE_ALARM
+ struct sigaction action;
+
+ global_msg = msg;
+
+ memset (&action, 0, sizeof (action));
+ action.sa_handler = on_alarm;
+
+ alarm (seconds);
+
+ sigaction (SIGALRM, &action, NULL);
+#endif
+#endif
+}
diff --git a/pixman/test/utils.h b/pixman/test/utils.h
index 39b49b2c1..a5b3c91c4 100644
--- a/pixman/test/utils.h
+++ b/pixman/test/utils.h
@@ -62,3 +62,6 @@ fuzzer_test_main (const char *test_name,
uint32_t (*test_function)(int testnum, int verbose),
int argc,
const char *argv[]);
+
+void
+fail_after (int seconds, const char *msg);
diff --git a/xorg-server/Xext/xace.c b/xorg-server/Xext/xace.c
index bc621ff85..28c51687c 100644
--- a/xorg-server/Xext/xace.c
+++ b/xorg-server/Xext/xace.c
@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
*/
int XaceHook(int hook, ...)
{
- pointer calldata; /* data passed to callback */
+ union {
+ XaceResourceAccessRec res;
+ XaceDeviceAccessRec dev;
+ XaceSendAccessRec send;
+ XaceReceiveAccessRec recv;
+ XaceClientAccessRec client;
+ XaceExtAccessRec ext;
+ XaceServerAccessRec server;
+ XaceScreenAccessRec screen;
+ XaceAuthAvailRec auth;
+ XaceKeyAvailRec key;
+ } u;
int *prv = NULL; /* points to return value from callback */
va_list ap; /* argument list */
va_start(ap, hook);
@@ -99,117 +110,86 @@ int XaceHook(int hook, ...)
*/
switch (hook)
{
- case XACE_RESOURCE_ACCESS: {
- XaceResourceAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.id = va_arg(ap, XID);
- rec.rtype = va_arg(ap, RESTYPE);
- rec.res = va_arg(ap, pointer);
- rec.ptype = va_arg(ap, RESTYPE);
- rec.parent = va_arg(ap, pointer);
- rec.access_mode = va_arg(ap, Mask);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_RESOURCE_ACCESS:
+ u.res.client = va_arg(ap, ClientPtr);
+ u.res.id = va_arg(ap, XID);
+ u.res.rtype = va_arg(ap, RESTYPE);
+ u.res.res = va_arg(ap, pointer);
+ u.res.ptype = va_arg(ap, RESTYPE);
+ u.res.parent = va_arg(ap, pointer);
+ u.res.access_mode = va_arg(ap, Mask);
+ u.res.status = Success; /* default allow */
+ prv = &u.res.status;
break;
- }
- case XACE_DEVICE_ACCESS: {
- XaceDeviceAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.dev = va_arg(ap, DeviceIntPtr);
- rec.access_mode = va_arg(ap, Mask);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_DEVICE_ACCESS:
+ u.dev.client = va_arg(ap, ClientPtr);
+ u.dev.dev = va_arg(ap, DeviceIntPtr);
+ u.dev.access_mode = va_arg(ap, Mask);
+ u.dev.status = Success; /* default allow */
+ prv = &u.dev.status;
break;
- }
- case XACE_SEND_ACCESS: {
- XaceSendAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.dev = va_arg(ap, DeviceIntPtr);
- rec.pWin = va_arg(ap, WindowPtr);
- rec.events = va_arg(ap, xEventPtr);
- rec.count = va_arg(ap, int);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_SEND_ACCESS:
+ u.send.client = va_arg(ap, ClientPtr);
+ u.send.dev = va_arg(ap, DeviceIntPtr);
+ u.send.pWin = va_arg(ap, WindowPtr);
+ u.send.events = va_arg(ap, xEventPtr);
+ u.send.count = va_arg(ap, int);
+ u.send.status = Success; /* default allow */
+ prv = &u.send.status;
break;
- }
- case XACE_RECEIVE_ACCESS: {
- XaceReceiveAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.pWin = va_arg(ap, WindowPtr);
- rec.events = va_arg(ap, xEventPtr);
- rec.count = va_arg(ap, int);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_RECEIVE_ACCESS:
+ u.recv.client = va_arg(ap, ClientPtr);
+ u.recv.pWin = va_arg(ap, WindowPtr);
+ u.recv.events = va_arg(ap, xEventPtr);
+ u.recv.count = va_arg(ap, int);
+ u.recv.status = Success; /* default allow */
+ prv = &u.recv.status;
break;
- }
- case XACE_CLIENT_ACCESS: {
- XaceClientAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.target = va_arg(ap, ClientPtr);
- rec.access_mode = va_arg(ap, Mask);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_CLIENT_ACCESS:
+ u.client.client = va_arg(ap, ClientPtr);
+ u.client.target = va_arg(ap, ClientPtr);
+ u.client.access_mode = va_arg(ap, Mask);
+ u.client.status = Success; /* default allow */
+ prv = &u.client.status;
break;
- }
- case XACE_EXT_ACCESS: {
- XaceExtAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.ext = va_arg(ap, ExtensionEntry*);
- rec.access_mode = DixGetAttrAccess;
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_EXT_ACCESS:
+ u.ext.client = va_arg(ap, ClientPtr);
+ u.ext.ext = va_arg(ap, ExtensionEntry*);
+ u.ext.access_mode = DixGetAttrAccess;
+ u.ext.status = Success; /* default allow */
+ prv = &u.ext.status;
break;
- }
- case XACE_SERVER_ACCESS: {
- XaceServerAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.access_mode = va_arg(ap, Mask);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_SERVER_ACCESS:
+ u.server.client = va_arg(ap, ClientPtr);
+ u.server.access_mode = va_arg(ap, Mask);
+ u.server.status = Success; /* default allow */
+ prv = &u.server.status;
break;
- }
case XACE_SCREEN_ACCESS:
- case XACE_SCREENSAVER_ACCESS: {
- XaceScreenAccessRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.screen = va_arg(ap, ScreenPtr);
- rec.access_mode = va_arg(ap, Mask);
- rec.status = Success; /* default allow */
- calldata = &rec;
- prv = &rec.status;
+ case XACE_SCREENSAVER_ACCESS:
+ u.screen.client = va_arg(ap, ClientPtr);
+ u.screen.screen = va_arg(ap, ScreenPtr);
+ u.screen.access_mode = va_arg(ap, Mask);
+ u.screen.status = Success; /* default allow */
+ prv = &u.screen.status;
break;
- }
- case XACE_AUTH_AVAIL: {
- XaceAuthAvailRec rec;
- rec.client = va_arg(ap, ClientPtr);
- rec.authId = va_arg(ap, XID);
- calldata = &rec;
+ case XACE_AUTH_AVAIL:
+ u.auth.client = va_arg(ap, ClientPtr);
+ u.auth.authId = va_arg(ap, XID);
break;
- }
- case XACE_KEY_AVAIL: {
- XaceKeyAvailRec rec;
- rec.event = va_arg(ap, xEventPtr);
- rec.keybd = va_arg(ap, DeviceIntPtr);
- rec.count = va_arg(ap, int);
- calldata = &rec;
+ case XACE_KEY_AVAIL:
+ u.key.event = va_arg(ap, xEventPtr);
+ u.key.keybd = va_arg(ap, DeviceIntPtr);
+ u.key.count = va_arg(ap, int);
break;
- }
- default: {
+ default:
va_end(ap);
return 0; /* unimplemented hook number */
- }
}
va_end(ap);
/* call callbacks and return result, if any. */
- CallCallbacks(&XaceHooks[hook], calldata);
+ CallCallbacks(&XaceHooks[hook], &u);
return prv ? *prv : Success;
}
diff --git a/xorg-server/Xi/exevents.c b/xorg-server/Xi/exevents.c
index 0bc2ecc81..fcb7e584b 100644
--- a/xorg-server/Xi/exevents.c
+++ b/xorg-server/Xi/exevents.c
@@ -223,6 +223,7 @@ DeepCopyFeedbackClasses(DeviceIntPtr from, DeviceIntPtr to)
{
classes = to->unused_classes;
to->intfeed = classes->intfeed;
+ classes->intfeed = NULL;
}
i = &to->intfeed;
@@ -258,6 +259,7 @@ DeepCopyFeedbackClasses(DeviceIntPtr from, DeviceIntPtr to)
{
classes = to->unused_classes;
to->stringfeed = classes->stringfeed;
+ classes->stringfeed = NULL;
}
s = &to->stringfeed;
@@ -293,6 +295,7 @@ DeepCopyFeedbackClasses(DeviceIntPtr from, DeviceIntPtr to)
{
classes = to->unused_classes;
to->bell = classes->bell;
+ classes->bell = NULL;
}
b = &to->bell;
@@ -329,6 +332,7 @@ DeepCopyFeedbackClasses(DeviceIntPtr from, DeviceIntPtr to)
{
classes = to->unused_classes;
to->leds = classes->leds;
+ classes->leds = NULL;
}
l = &to->leds;
@@ -379,6 +383,7 @@ DeepCopyKeyboardClasses(DeviceIntPtr from, DeviceIntPtr to)
to->kbdfeed = classes->kbdfeed;
if (!to->kbdfeed)
InitKeyboardDeviceStruct(to, NULL, NULL, NULL);
+ classes->kbdfeed = NULL;
}
k = &to->kbdfeed;
@@ -506,6 +511,7 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
{
classes = to->unused_classes;
to->ptrfeed = classes->ptrfeed;
+ classes->ptrfeed = NULL;
}
p = &to->ptrfeed;
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac
index 50313b616..14b4f1bb2 100644
--- a/xorg-server/configure.ac
+++ b/xorg-server/configure.ac
@@ -26,8 +26,8 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.8.99.905, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2010-07-14"
+AC_INIT([xorg-server], 1.8.99.906, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2010-08-12"
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c
index 42ea9c8d8..ec43f294a 100644
--- a/xorg-server/dix/devices.c
+++ b/xorg-server/dix/devices.c
@@ -2111,9 +2111,6 @@ ProcChangePointerControl(ClientPtr client)
REQUEST(xChangePointerControlReq);
REQUEST_SIZE_MATCH(xChangePointerControlReq);
- if (!mouse->ptrfeed->CtrlProc)
- return BadDevice;
-
ctrl = mouse->ptrfeed->ctrl;
if ((stuff->doAccel != xTrue) && (stuff->doAccel != xFalse)) {
client->errorValue = stuff->doAccel;
@@ -2161,7 +2158,7 @@ ProcChangePointerControl(ClientPtr client)
for (dev = inputInfo.devices; dev; dev = dev->next) {
if ((dev == mouse || (!IsMaster(dev) && dev->u.master == mouse)) &&
- dev->ptrfeed && dev->ptrfeed->CtrlProc) {
+ dev->ptrfeed) {
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixManageAccess);
if (rc != Success)
return rc;
@@ -2170,9 +2167,8 @@ ProcChangePointerControl(ClientPtr client)
for (dev = inputInfo.devices; dev; dev = dev->next) {
if ((dev == mouse || (!IsMaster(dev) && dev->u.master == mouse)) &&
- dev->ptrfeed && dev->ptrfeed->CtrlProc) {
+ dev->ptrfeed) {
dev->ptrfeed->ctrl = ctrl;
- (*dev->ptrfeed->CtrlProc)(dev, &mouse->ptrfeed->ctrl);
}
}
diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c
index 1c9da1e26..dc4b32cc2 100644
--- a/xorg-server/dix/dixfonts.c
+++ b/xorg-server/dix/dixfonts.c
@@ -321,10 +321,10 @@ doOpenFont(ClientPtr client, OFclosurePtr c)
continue;
}
if (err == Suspended) {
- if (!c->slept) {
- c->slept = TRUE;
- ClientSleep(client, (ClientSleepProcPtr)doOpenFont, (pointer) c);
- }
+ if (!ClientIsAsleep(client))
+ ClientSleep(client, (ClientSleepProcPtr)doOpenFont, c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
break;
@@ -373,8 +373,8 @@ bail:
SendErrorToClient(c->client, X_OpenFont, 0,
c->fontid, FontToXError(err));
}
- if (c->slept)
- ClientWakeup(c->client);
+ ClientWakeup(c->client);
+xinerama_sleep:
for (i = 0; i < c->num_fpes; i++) {
FreeFPE(c->fpe_list[i]);
}
@@ -460,7 +460,6 @@ OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname, char *pfontna
c->current_fpe = 0;
c->num_fpes = num_fpes;
c->fnamelen = lenfname;
- c->slept = FALSE;
c->flags = flags;
c->non_cachable_font = cached;
@@ -622,12 +621,12 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
c->names);
if (err == Suspended) {
- if (!c->slept) {
- c->slept = TRUE;
+ if (!ClientIsAsleep(client))
ClientSleep(client,
- (ClientSleepProcPtr)doListFontsAndAliases,
- (pointer) c);
- }
+ (ClientSleepProcPtr)doListFontsAndAliases,
+ c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
@@ -650,12 +649,12 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
c->current.patlen, c->current.max_names - c->names->nnames,
&c->current.private);
if (err == Suspended) {
- if (!c->slept) {
+ if (!ClientIsAsleep(client))
ClientSleep(client,
(ClientSleepProcPtr)doListFontsAndAliases,
- (pointer) c);
- c->slept = TRUE;
- }
+ c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
if (err == Successful)
@@ -668,12 +667,12 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
((pointer) c->client, fpe, &name, &namelen, &tmpname,
&resolvedlen, c->current.private);
if (err == Suspended) {
- if (!c->slept) {
+ if (ClientIsAsleep(client))
ClientSleep(client,
(ClientSleepProcPtr)doListFontsAndAliases,
- (pointer) c);
- c->slept = TRUE;
- }
+ c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
if (err == FontNameAlias) {
@@ -822,8 +821,8 @@ finish:
free(bufferStart);
bail:
- if (c->slept)
- ClientWakeup(client);
+ ClientWakeup(client);
+xinerama_sleep:
for (i = 0; i < c->num_fpes; i++)
FreeFPE(c->fpe_list[i]);
free(c->fpe_list);
@@ -881,7 +880,6 @@ ListFonts(ClientPtr client, unsigned char *pattern, unsigned length,
c->current.list_started = FALSE;
c->current.private = 0;
c->haveSaved = FALSE;
- c->slept = FALSE;
c->savedName = 0;
doListFontsAndAliases(client, c);
return Success;
@@ -928,11 +926,11 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
c->current.max_names, &c->current.private);
if (err == Suspended)
{
- if (!c->slept)
- {
- ClientSleep(client, (ClientSleepProcPtr)doListFontsWithInfo, c);
- c->slept = TRUE;
- }
+ if (!ClientIsAsleep(client))
+ ClientSleep(client,
+ (ClientSleepProcPtr)doListFontsWithInfo, c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
if (err == Successful)
@@ -947,13 +945,11 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
&numFonts, c->current.private);
if (err == Suspended)
{
- if (!c->slept)
- {
+ if (!ClientIsAsleep(client))
ClientSleep(client,
- (ClientSleepProcPtr)doListFontsWithInfo,
- c);
- c->slept = TRUE;
- }
+ (ClientSleepProcPtr)doListFontsWithInfo, c);
+ else
+ goto xinerama_sleep;
return TRUE;
}
}
@@ -1098,8 +1094,8 @@ finish:
- sizeof(xGenericReply));
WriteSwappedDataToClient(client, length, &finalReply);
bail:
- if (c->slept)
- ClientWakeup(client);
+ ClientWakeup(client);
+xinerama_sleep:
for (i = 0; i < c->num_fpes; i++)
FreeFPE(c->fpe_list[i]);
free(c->reply);
@@ -1154,7 +1150,6 @@ StartListFontsWithInfo(ClientPtr client, int length, unsigned char *pattern,
c->current.private = 0;
c->savedNumFonts = 0;
c->haveSaved = FALSE;
- c->slept = FALSE;
c->savedName = 0;
doListFontsWithInfo(client, c);
return Success;
@@ -1181,7 +1176,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
fpe = c->pGC->font->fpe;
(*fpe_functions[fpe->type].client_died) ((pointer) client, fpe);
- if (c->slept)
+ if (ClientIsAsleep(client))
{
/* Client has died, but we cannot bail out right now. We
need to clean up after the work we did when going to
@@ -1198,7 +1193,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
}
/* Make sure our drawable hasn't disappeared while we slept. */
- if (c->slept && c->pDraw)
+ if (ClientIsAsleep(client) && c->pDraw)
{
DrawablePtr pDraw;
dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess);
@@ -1212,7 +1207,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
}
}
- client_state = c->slept ? SLEEPING : NEVER_SLEPT;
+ client_state = ClientIsAsleep(client) ? SLEEPING : NEVER_SLEPT;
while (c->endReq - c->pElt > TextEltHeader)
{
@@ -1295,7 +1290,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
if (lgerr == Suspended)
{
- if (!c->slept) {
+ if (!ClientIsAsleep(client)) {
int len;
GC *pGC;
PTclosurePtr new_closure;
@@ -1368,15 +1363,14 @@ doPolyText(ClientPtr client, PTclosurePtr c)
c->pGC = pGC;
ValidateGC(c->pDraw, c->pGC);
- c->slept = TRUE;
- ClientSleep(client,
- (ClientSleepProcPtr)doPolyText,
- (pointer) c);
+ ClientSleep(client, (ClientSleepProcPtr)doPolyText, c);
/* Set up to perform steps 3 and 4 */
client_state = START_SLEEP;
continue; /* on to steps 3 and 4 */
}
+ else
+ goto xinerama_sleep;
return TRUE;
}
else if (lgerr != Successful)
@@ -1419,9 +1413,10 @@ bail:
#endif
SendErrorToClient(c->client, c->reqType, 0, 0, err);
}
- if (c->slept)
+ if (ClientIsAsleep(client))
{
ClientWakeup(c->client);
+xinerama_sleep:
ChangeGC(NullClient, c->pGC, clearGCmask, clearGC);
/* Unreference the font from the scratch GC */
@@ -1460,7 +1455,6 @@ PolyText(ClientPtr client, DrawablePtr pDraw, GC *pGC, unsigned char *pElt,
local_closure.pGC = pGC;
local_closure.did = did;
local_closure.err = Success;
- local_closure.slept = FALSE;
(void) doPolyText(client, &local_closure);
return Success;
@@ -1485,7 +1479,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
}
/* Make sure our drawable hasn't disappeared while we slept. */
- if (c->slept && c->pDraw)
+ if (ClientIsAsleep(client) && c->pDraw)
{
DrawablePtr pDraw;
dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess);
@@ -1502,7 +1496,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
lgerr = LoadGlyphs(client, c->pGC->font, c->nChars, c->itemSize, c->data);
if (lgerr == Suspended)
{
- if (!c->slept) {
+ if (!ClientIsAsleep(client)) {
GC *pGC;
unsigned char *data;
ITclosurePtr new_closure;
@@ -1555,9 +1549,10 @@ doImageText(ClientPtr client, ITclosurePtr c)
c->pGC = pGC;
ValidateGC(c->pDraw, c->pGC);
- c->slept = TRUE;
- ClientSleep(client, (ClientSleepProcPtr)doImageText, (pointer) c);
+ ClientSleep(client, (ClientSleepProcPtr)doImageText, c);
}
+ else
+ goto xinerama_sleep;
return TRUE;
}
else if (lgerr != Successful)
@@ -1576,9 +1571,10 @@ bail:
if (err != Success && c->client != serverClient) {
SendErrorToClient(c->client, c->reqType, 0, 0, err);
}
- if (c->slept)
+ if (ClientIsAsleep(client))
{
ClientWakeup(c->client);
+xinerama_sleep:
ChangeGC(NullClient, c->pGC, clearGCmask, clearGC);
/* Unreference the font from the scratch GC */
@@ -1616,7 +1612,6 @@ ImageText(ClientPtr client, DrawablePtr pDraw, GC *pGC, int nChars,
local_closure.itemSize = 2;
}
local_closure.did = did;
- local_closure.slept = FALSE;
(void) doImageText(client, &local_closure);
return Success;
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index 3885cd771..559b20b55 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -652,8 +652,8 @@ clipValuators(DeviceIntPtr pDev, int first_valuator, int num_valuators,
* events if a DCCE was generated.
* @return The updated @events pointer.
*/
-static EventListPtr
-updateFromMaster(EventListPtr events, DeviceIntPtr dev, int type, int *num_events)
+EventListPtr
+UpdateFromMaster(EventListPtr events, DeviceIntPtr dev, int type, int *num_events)
{
DeviceIntPtr master;
@@ -929,7 +929,7 @@ GetKeyboardValuatorEvents(EventList *events, DeviceIntPtr pDev, int type,
num_events = 1;
- events = updateFromMaster(events, pDev, DEVCHANGE_KEYBOARD_EVENT, &num_events);
+ events = UpdateFromMaster(events, pDev, DEVCHANGE_KEYBOARD_EVENT, &num_events);
/* Handle core repeating, via press/release/press/release. */
if (type == KeyPress && key_is_down(pDev, key_code, KEY_POSTED)) {
@@ -1091,7 +1091,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
(type == MotionNotify && num_valuators <= 0))
return 0;
- events = updateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
+ events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
raw = (RawDeviceEvent*)events->event;
events++;
@@ -1206,7 +1206,7 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type,
(num_valuators + first_valuator) > pDev->valuator->numAxes)
return 0;
- events = updateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
+ events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
event = (DeviceEvent *) events->event;
init_event(pDev, event, GetTimeInMillis());
diff --git a/xorg-server/doc/xml/Xserver-spec.xml b/xorg-server/doc/xml/Xserver-spec.xml
index a457063bd..c8168f4f0 100644
--- a/xorg-server/doc/xml/Xserver-spec.xml
+++ b/xorg-server/doc/xml/Xserver-spec.xml
@@ -92,6 +92,13 @@
<authorinitials>efw</authorinitials>
<revremark>Revised for devPrivates changes</revremark>
</revision>
+ <revision>
+ <revnumber>3.5</revnumber>
+ <date>July 2010</date>
+ <authorinitials>ac</authorinitials>
+ <revremark>Revised for Xorg 1.9 devPrivates changes
+ and 1.8 CreateNewResourceType changes</revremark>
+ </revision>
</revhistory>
<legalnotice>
<para>Copyright &#xA9; 1994 X Consortium, Inc., 2004 X.org Foundation, Inc.</para>
@@ -3753,7 +3760,7 @@ Also included in each GC is support for dynamic devPrivates, which the
DDX can use for any purpose (see <xref linkend="wrappers_and_privates"/> below).</para>
<para>
The DIX routines available for manipulating GCs are
-CreateGC, ChangeGC, CopyGC, SetClipRects, SetDashes, and FreeGC.
+CreateGC, ChangeGC, ChangeGCXIDs, CopyGC, SetClipRects, SetDashes, and FreeGC.
<blockquote><programlisting>
GCPtr CreateGC(pDrawable, mask, pval, pStatus)
@@ -3762,10 +3769,17 @@ CreateGC, ChangeGC, CopyGC, SetClipRects, SetDashes, and FreeGC.
XID *pval;
int *pStatus;
- int ChangeGC(pGC, mask, pval)
+ int ChangeGC(client, pGC, mask, pUnion)
+ ClientPtr client;
GCPtr pGC;
BITS32 mask;
- XID *pval;
+ ChangeGCValPtr pUnion;
+
+ int ChangeGCXIDs(client, pGC, mask, pC32)
+ ClientPtr client;
+ GCPtr pGC;
+ BITS32 mask;
+ CARD32 *pC32;
int CopyGC(pgcSrc, pgcDst, mask)
GCPtr pgcSrc;
@@ -4808,32 +4822,68 @@ Two new extensibility concepts have been developed for release 4, Wrappers
and devPrivates. These replace the R3 GCInterest queues, which were not a
general enough mechanism for many extensions and only provided hooks into a
single data structure. devPrivates have been revised substantially for
-X.org X server relase 1.5.</para>
+X.Org X server release 1.5, and updated again for the 1.9 release.</para>
<section>
<title>devPrivates</title>
<para>
devPrivates provides a way to attach arbitrary private data to various server structures.
Any structure which contains a <structfield>devPrivates</structfield> field of
-type <type>PrivateRec</type> supports this mechanism. Private data can be allocated at
-any time during an object's life cycle and callbacks are available to initialize and clean
-up allocated space.</para>
+type <type>PrivateRec</type> supports this mechanism. Some structures allow
+allocating space for private data after some objects have been created, others
+require all space allocations be registered before any objects of that type
+are created. <filename class="headerfile">Xserver/include/privates.h</filename>
+lists which of these cases applies to each structure containing
+<structfield>devPrivates</structfield>.</para>
+
+<para>
+To request private space, use
+<blockquote><programlisting>
+ Bool dixRegisterPrivateKey(DevPrivateKey key, DevPrivateType type, unsigned size);
+</programlisting></blockquote>
+The first argument is a pointer to a <type>DevPrivateKeyRec</type> which
+will serve as the unique identifier for the private data. Typically this is
+the address of a static <type>DevPrivateKeyRec</type> in your code.
+The second argument is the class of objects for which this key will apply.
+The third argument is the size of the space being requested, or
+<constant>0</constant> to only allocate a pointer that the caller will manage.
+If space is requested, this space will be automatically freed when the object
+is destroyed. Note that a call to <function>dixSetPrivate</function>
+that changes the pointer value may cause the space to be unreachable by the caller, however it will still be automatically freed.
+The function returns <literal>TRUE</literal> unless memory allocation fails.
+If the function is called more than once on the same key, all calls must use
+the same value for <type>size</type> or the server will abort.</para>
+
+<para>
+To request private space and have the server manage the key, use
+<blockquote><programlisting>
+ DevPrivateKey dixCreatePrivateKey(DevPrivateType type, unsigned size);
+</programlisting></blockquote>
+The <parameter>type</parameter> and <parameter>size</parameter> arguments are
+the same as those to <function>dixRegisterPrivateKey</function> but this
+function allocates a <type>DevPrivateKeyRec</type> and returns a pointer to it
+instead of requiring the caller to pass a pointer to an existing structure.
+The server will free it automatically when the privates system is restarted
+at server reset time.</para>
+
<para>
To attach a piece of private data to an object, use:
<blockquote><programlisting>
- int dixSetPrivate(PrivateRec **privates, const DevPrivateKey key, pointer val)
+ void dixSetPrivate(PrivateRec **privates, const DevPrivateKey key, pointer val)
</programlisting></blockquote>
-The first argument is the address of the <structfield>devPrivates</structfield> field
-in the target structure. This field is managed privately by the DIX layer and
-should not be directly modified. The second argument is some address value which
-will serve as the unique identifier for the private data. Typically this is the address
-of some global variable in your code. Only one piece of data with a given key can be attached to an object. However, you
-can use the same key to store data in any object that supports the devPrivates mechanism. The third
-argument is the value to store.</para>
+The first argument is the address of the <structfield>devPrivates</structfield>
+field in the target structure. This field is managed privately by the DIX
+layer and should not be directly modified. The second argument is a pointer
+to the <type>DevPrivateKeyRec</type> which you registered with
+<function>dixRegisterPrivateKey</function> or allocated with
+<function>dixCreatePrivateKey</function>. Only one
+piece of data with a given key can be attached to an object, and in most cases
+each key is specific to the type of object it was registered for. (An
+exception is the PRIVATE_XSELINUX class which applies to multiple object types.)
+The third argument is the value to store.</para>
<para>
-If private data with the given key is already associated with the object, <function>dixSetPrivate</function> will
-overwrite the old value with the new one. Otherwise, new space will be allocated to hold the pointer value.
-The function returns <literal>TRUE</literal> unless memory allocation fails, but note that since memory allocation only
-occurs on the first reference to the private data, all subsequent calls are guaranteed to succeed.</para>
+If private data with the given key is already associated with the object,
+<function>dixSetPrivate</function> will overwrite the old value with the
+new one.</para>
<para>
To look up a piece of private data, use one of:
@@ -4842,56 +4892,22 @@ To look up a piece of private data, use one of:
pointer *dixLookupPrivateAddr(PrivateRec **privates, const DevPrivateKey key)
</programlisting></blockquote>
The first argument is the address of the <structfield>devPrivates</structfield> field
-in the target structure. The second argument is the key to look up. If private data with the given key is already associated
-with the object, <function>dixLookupPrivate</function> will return the stored pointer value while <function>dixLookupPrivateAddr</function>
-will return the address of the stored pointer. Otherwise, new space will be first allocated to hold the pointer value
-and it will be initialized to NULL. Both functions return <literal>NULL</literal> if memory allocation fails, but note that
-since memory allocation only occurs on the first reference to the private data, all subsequent calls are guaranteed to succeed.</para>
-
-<para>
-To request pre-allocated private space, use
-<blockquote><programlisting>
- int dixRequestPrivate(const DevPrivateKey key, unsigned size)
-</programlisting></blockquote>
-The first argument is the key for which space is being requested. The second argument is the size of the space being requested.
-After this function has been called,
-future calls to <function>dixLookupPrivate</function> or <function>dixLookupPrivateAddr</function> that cause the private pointer
-to be initially allocated will also allocate <varname>size</varname> bytes of space cleared to zero and initialize the private pointer to point
-to this space instead of <literal>NULL</literal>. This space will be automatically freed. Note that a call to <function>dixSetPrivate</function>
-that changes the pointer value may cause the space to be unreachable by the caller, however it will still be automatically freed.
-The function returns <literal>TRUE</literal> unless memory allocation fails. If the function is called more than once, the largest value
-of <type>size</type> is used.</para>
-
-<para>
-To set callbacks for initializing and cleaning up private space, use
-<blockquote><programlisting>
- typedef struct {
- DevPrivateKey key;
- pointer *value;
- } PrivateCallbackRec;
-
- int dixRegisterPrivateInitFunc(const DevPrivateKey key,
- CallbackProcPtr callback,
- pointer userdata)
- int dixRegisterPrivateDeleteFunc(const DevPrivateKey key,
- CallbackProcPtr callback,
- pointer userdata)
-</programlisting></blockquote>
-The first argument is the key for which the callbacks are being registered. The second argument is the callback function. The third argument
-will be passed as the user data argument to the callback function when it is called. The call data argument to the callback is a pointer to
-a structure of type <type>PrivateCallbackRec</type>.</para>
-<para>
-The init callback is called immediately after new private space has been allocated for the given key. The delete callback is called immediately
-before the private space is freed when the object is being destroyed. The <type>PrivateCallbackRec</type> structure contains the devPrivate key
-and the address of the private pointer. The init callback may be used to initialize any pre-allocated space requested by
-<function>dixRequestPrivate</function>, while the delete callback may be used to free any data stored there. However the callbacks are called even
-if no pre-allocated space was requested.</para>
-
-<para>
-When implementing new server resource objects that support devPrivates, there are three steps to perform:
-Declare a field of type <type>PrivateRec *</type> in your structure;
+in the target structure. The second argument is the key to look up.
+If a non-zero size was given when the key was registered, or if private data
+with the given key is already associated with the object, then
+<function>dixLookupPrivate</function> will return the pointer value
+while <function>dixLookupPrivateAddr</function>
+will return the address of the pointer.</para>
+
+<para>
+When implementing new server resource objects that support devPrivates, there
+are four steps to perform:
+Add a type value to the <type>DevPrivateType</type> enum in
+<filename class="headerfile">Xserver/include/privates.h</filename>,
+declare a field of type <type>PrivateRec *</type> in your structure;
initialize this field to <literal>NULL</literal> when creating any objects; and
-call the <function>dixFreePrivates</function> function, passing in the field value, when freeing any objects.</para>
+when freeing any objects call the <function>dixFreePrivates</function> or
+<function>dixFreeObjectWithPrivates</function> function.</para>
</section>
<section>
<title>Wrappers</title>
diff --git a/xorg-server/doc/xml/xmlrules.in b/xorg-server/doc/xml/xmlrules.in
index 667cc2ebb..1222bb5af 100644
--- a/xorg-server/doc/xml/xmlrules.in
+++ b/xorg-server/doc/xml/xmlrules.in
@@ -48,10 +48,12 @@ xorg.css: $(STYLESHEET_SRCDIR)/xorg.css
endif
if HAVE_XMLTO
+if HAVE_XMLTO_TEXT
BUILT_DOC_FILES += $(TXT_FILES)
.xml.txt:
@rm -f $@
$(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
+endif
BUILT_DOC_FILES += $(HTML_FILES)
.xml.html:
diff --git a/xorg-server/fb/fbpict.c b/xorg-server/fb/fbpict.c
index d6dc30d2c..9e2c35c4b 100644
--- a/xorg-server/fb/fbpict.c
+++ b/xorg-server/fb/fbpict.c
@@ -332,8 +332,11 @@ create_bits_picture (PicturePtr pict,
return image;
}
+static pixman_image_t *
+image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map);
+
static void
-set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
{
pixman_repeat_t repeat;
pixman_filter_t filter;
@@ -382,10 +385,13 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
pixman_image_set_repeat (image, repeat);
- if (pict->alphaMap)
+ /* Fetch alpha map unless 'pict' is being used
+ * as the alpha map for this operation
+ */
+ if (pict->alphaMap && !is_alpha_map)
{
int alpha_xoff, alpha_yoff;
- pixman_image_t *alpha_map = image_from_pict (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff);
+ pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff, TRUE);
pixman_image_set_alpha_map (
image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
@@ -417,8 +423,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
pixman_image_set_source_clipping (image, TRUE);
}
-pixman_image_t *
-image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+static pixman_image_t *
+image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
{
pixman_image_t *image = NULL;
@@ -452,11 +458,17 @@ image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
}
if (image)
- set_image_properties (image, pict, has_clip, xoff, yoff);
+ set_image_properties (image, pict, has_clip, xoff, yoff, is_alpha_map);
return image;
}
+pixman_image_t *
+image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+{
+ return image_from_pict_internal (pict, has_clip, xoff, yoff, FALSE);
+}
+
void
free_pixman_pict (PicturePtr pict, pixman_image_t *image)
{
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.c b/xorg-server/hw/xfree86/common/xf86Xinput.c
index 845bde87a..8ea50aa94 100644
--- a/xorg-server/hw/xfree86/common/xf86Xinput.c
+++ b/xorg-server/hw/xfree86/common/xf86Xinput.c
@@ -264,9 +264,6 @@ ApplyAccelerationSettings(DeviceIntPtr dev){
if (i >= 0)
dev->ptrfeed->ctrl.threshold = i;
- /* mostly a no-op anyway */
- (*dev->ptrfeed->CtrlProc)(dev, &dev->ptrfeed->ctrl);
-
xf86Msg(X_CONFIG, "%s: (accel) acceleration factor: %.3f\n",
local->name, ((float)dev->ptrfeed->ctrl.num)/
((float)dev->ptrfeed->ctrl.den));
diff --git a/xorg-server/hw/xfree86/parser/Input.c b/xorg-server/hw/xfree86/parser/Input.c
index 8adbee9ae..739e49ba4 100644
--- a/xorg-server/hw/xfree86/parser/Input.c
+++ b/xorg-server/hw/xfree86/parser/Input.c
@@ -59,6 +59,7 @@
#include <xorg-config.h>
#endif
+#include "os.h"
#include "xf86Parser.h"
#include "xf86tokens.h"
#include "Configint.h"
@@ -102,8 +103,10 @@ xf86parseInputSection (void)
case DRIVER:
if (xf86getSubToken (&(ptr->inp_comment)) != STRING)
Error (QUOTE_MSG, "Driver");
- if (strcmp(val.str, "keyboard") == 0)
- ptr->inp_driver = "kbd";
+ if (strcmp(val.str, "keyboard") == 0) {
+ ptr->inp_driver = strdup("kbd");
+ free(val.str);
+ }
else
ptr->inp_driver = val.str;
break;
diff --git a/xorg-server/hw/xfree86/parser/InputClass.c b/xorg-server/hw/xfree86/parser/InputClass.c
index 85161c38a..ddf344a0f 100644
--- a/xorg-server/hw/xfree86/parser/InputClass.c
+++ b/xorg-server/hw/xfree86/parser/InputClass.c
@@ -111,8 +111,10 @@ xf86parseInputClassSection(void)
case DRIVER:
if (xf86getSubToken(&(ptr->comment)) != STRING)
Error(QUOTE_MSG, "Driver");
- if (strcmp(val.str, "keyboard") == 0)
- ptr->driver = "kbd";
+ if (strcmp(val.str, "keyboard") == 0) {
+ ptr->driver = strdup("kbd");
+ free(val.str);
+ }
else
ptr->driver = val.str;
break;
diff --git a/xorg-server/hw/xwin/glx/indirect.c b/xorg-server/hw/xwin/glx/indirect.c
index 8bc289172..d2ed16e7c 100644
--- a/xorg-server/hw/xwin/glx/indirect.c
+++ b/xorg-server/hw/xwin/glx/indirect.c
@@ -375,10 +375,12 @@ static __GLXscreen *glxWinScreenProbe(ScreenPtr pScreen);
static __GLXcontext *glxWinCreateContext(__GLXscreen *screen,
__GLXconfig *modes,
__GLXcontext *baseShareContext);
-static __GLXdrawable *glxWinCreateDrawable(__GLXscreen *screen,
+static __GLXdrawable *glxWinCreateDrawable(ClientPtr client,
+ __GLXscreen *screen,
DrawablePtr pDraw,
- int type,
XID drawId,
+ int type,
+ XID glxDrawId,
__GLXconfig *conf);
static Bool glxWinRealizeWindow(WindowPtr pWin);
@@ -901,10 +903,12 @@ glxWinDrawableDestroy(__GLXdrawable *base)
}
static __GLXdrawable *
-glxWinCreateDrawable(__GLXscreen *screen,
+glxWinCreateDrawable(ClientPtr client,
+ __GLXscreen *screen,
DrawablePtr pDraw,
- int type,
XID drawId,
+ int type,
+ XID glxDrawId,
__GLXconfig *conf)
{
__GLXWinDrawable *glxPriv;
@@ -916,7 +920,7 @@ glxWinCreateDrawable(__GLXscreen *screen,
memset(glxPriv, 0, sizeof *glxPriv);
- if(!__glXDrawableInit(&glxPriv->base, screen, pDraw, type, drawId, conf)) {
+ if(!__glXDrawableInit(&glxPriv->base, screen, pDraw, type, glxDrawId, conf)) {
free(glxPriv);
return NULL;
}
diff --git a/xorg-server/include/closestr.h b/xorg-server/include/closestr.h
index 2cd67b1d3..a64798608 100644
--- a/xorg-server/include/closestr.h
+++ b/xorg-server/include/closestr.h
@@ -1,156 +1,151 @@
-/*
-
-Copyright 1991, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-
-#ifndef CLOSESTR_H
-#define CLOSESTR_H
-
-#include <X11/Xproto.h>
-#include "closure.h"
-#include "dix.h"
-#include "misc.h"
-#include "gcstruct.h"
-
-/* closure structures */
-
-/* OpenFont */
-
-typedef struct _OFclosure {
- ClientPtr client;
- short current_fpe;
- short num_fpes;
- FontPathElementPtr *fpe_list;
- Mask flags;
- Bool slept;
-
-/* XXX -- get these from request buffer instead? */
- char *origFontName;
- int origFontNameLen;
- XID fontid;
- char *fontname;
- int fnamelen;
- FontPtr non_cachable_font;
-} OFclosureRec;
-
-/* ListFontsWithInfo */
-
-#define XLFDMAXFONTNAMELEN 256
-typedef struct _LFWIstate {
- char pattern[XLFDMAXFONTNAMELEN];
- int patlen;
- int current_fpe;
- int max_names;
- Bool list_started;
- pointer private;
-} LFWIstateRec, *LFWIstatePtr;
-
-typedef struct _LFWIclosure {
- ClientPtr client;
- int num_fpes;
- FontPathElementPtr *fpe_list;
- xListFontsWithInfoReply *reply;
- int length;
- LFWIstateRec current;
- LFWIstateRec saved;
- int savedNumFonts;
- Bool haveSaved;
- Bool slept;
- char *savedName;
-} LFWIclosureRec;
-
-/* ListFonts */
-
-typedef struct _LFclosure {
- ClientPtr client;
- int num_fpes;
- FontPathElementPtr *fpe_list;
- FontNamesPtr names;
- LFWIstateRec current;
- LFWIstateRec saved;
- Bool haveSaved;
- Bool slept;
- char *savedName;
- int savedNameLen;
-} LFclosureRec;
-
-/* PolyText */
-
-typedef
- int (* PolyTextPtr)(
- DrawablePtr /* pDraw */,
- GCPtr /* pGC */,
- int /* x */,
- int /* y */,
- int /* count */,
- void * /* chars or shorts */
- );
-
-typedef struct _PTclosure {
- ClientPtr client;
- DrawablePtr pDraw;
- GC *pGC;
- unsigned char *pElt;
- unsigned char *endReq;
- unsigned char *data;
- int xorg;
- int yorg;
- CARD8 reqType;
- PolyTextPtr polyText;
- int itemSize;
- XID did;
- int err;
- Bool slept;
-} PTclosureRec;
-
-/* ImageText */
-
-typedef
- void (* ImageTextPtr)(
- DrawablePtr /* pDraw */,
- GCPtr /* pGC */,
- int /* x */,
- int /* y */,
- int /* count */,
- void * /* chars or shorts */
- );
-
-typedef struct _ITclosure {
- ClientPtr client;
- DrawablePtr pDraw;
- GC *pGC;
- BYTE nChars;
- unsigned char *data;
- int xorg;
- int yorg;
- CARD8 reqType;
- ImageTextPtr imageText;
- int itemSize;
- XID did;
- Bool slept;
-} ITclosureRec;
-#endif /* CLOSESTR_H */
+/*
+
+Copyright 1991, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from The Open Group.
+
+*/
+
+
+#ifndef CLOSESTR_H
+#define CLOSESTR_H
+
+#include <X11/Xproto.h>
+#include "closure.h"
+#include "dix.h"
+#include "misc.h"
+#include "gcstruct.h"
+
+/* closure structures */
+
+/* OpenFont */
+
+typedef struct _OFclosure {
+ ClientPtr client;
+ short current_fpe;
+ short num_fpes;
+ FontPathElementPtr *fpe_list;
+ Mask flags;
+
+/* XXX -- get these from request buffer instead? */
+ char *origFontName;
+ int origFontNameLen;
+ XID fontid;
+ char *fontname;
+ int fnamelen;
+ FontPtr non_cachable_font;
+} OFclosureRec;
+
+/* ListFontsWithInfo */
+
+#define XLFDMAXFONTNAMELEN 256
+typedef struct _LFWIstate {
+ char pattern[XLFDMAXFONTNAMELEN];
+ int patlen;
+ int current_fpe;
+ int max_names;
+ Bool list_started;
+ pointer private;
+} LFWIstateRec, *LFWIstatePtr;
+
+typedef struct _LFWIclosure {
+ ClientPtr client;
+ int num_fpes;
+ FontPathElementPtr *fpe_list;
+ xListFontsWithInfoReply *reply;
+ int length;
+ LFWIstateRec current;
+ LFWIstateRec saved;
+ int savedNumFonts;
+ Bool haveSaved;
+ char *savedName;
+} LFWIclosureRec;
+
+/* ListFonts */
+
+typedef struct _LFclosure {
+ ClientPtr client;
+ int num_fpes;
+ FontPathElementPtr *fpe_list;
+ FontNamesPtr names;
+ LFWIstateRec current;
+ LFWIstateRec saved;
+ Bool haveSaved;
+ char *savedName;
+ int savedNameLen;
+} LFclosureRec;
+
+/* PolyText */
+
+typedef
+ int (* PolyTextPtr)(
+ DrawablePtr /* pDraw */,
+ GCPtr /* pGC */,
+ int /* x */,
+ int /* y */,
+ int /* count */,
+ void * /* chars or shorts */
+ );
+
+typedef struct _PTclosure {
+ ClientPtr client;
+ DrawablePtr pDraw;
+ GC *pGC;
+ unsigned char *pElt;
+ unsigned char *endReq;
+ unsigned char *data;
+ int xorg;
+ int yorg;
+ CARD8 reqType;
+ PolyTextPtr polyText;
+ int itemSize;
+ XID did;
+ int err;
+} PTclosureRec;
+
+/* ImageText */
+
+typedef
+ void (* ImageTextPtr)(
+ DrawablePtr /* pDraw */,
+ GCPtr /* pGC */,
+ int /* x */,
+ int /* y */,
+ int /* count */,
+ void * /* chars or shorts */
+ );
+
+typedef struct _ITclosure {
+ ClientPtr client;
+ DrawablePtr pDraw;
+ GC *pGC;
+ BYTE nChars;
+ unsigned char *data;
+ int xorg;
+ int yorg;
+ CARD8 reqType;
+ ImageTextPtr imageText;
+ int itemSize;
+ XID did;
+} ITclosureRec;
+#endif /* CLOSESTR_H */
diff --git a/xorg-server/include/input.h b/xorg-server/include/input.h
index 33b94fd3e..1930a308b 100644
--- a/xorg-server/include/input.h
+++ b/xorg-server/include/input.h
@@ -439,6 +439,12 @@ extern void CreateClassesChangedEvent(EventListPtr event,
DeviceIntPtr master,
DeviceIntPtr slave,
int type);
+extern EventListPtr UpdateFromMaster(
+ EventListPtr events,
+ DeviceIntPtr pDev,
+ int type,
+ int *num_events);
+
extern _X_EXPORT int GetPointerEvents(
EventListPtr events,
DeviceIntPtr pDev,
diff --git a/xorg-server/include/privates.h b/xorg-server/include/privates.h
index 9b578e467..c2b7b43ec 100644
--- a/xorg-server/include/privates.h
+++ b/xorg-server/include/privates.h
@@ -81,10 +81,10 @@ typedef struct _DevPrivateKeyRec {
* you can get the address of the extra space and store whatever data you like
* there.
*
- * You may call dixRegisterPrivate more than once on the same key, but the
+ * You may call dixRegisterPrivateKey more than once on the same key, but the
* size and type must match or the server will abort.
*
- * dixRegisterPrivateIndex returns FALSE if it fails to allocate memory
+ * dixRegisterPrivateKey returns FALSE if it fails to allocate memory
* during its operation.
*/
extern _X_EXPORT Bool
diff --git a/xorg-server/miext/rootless/rootlessCommon.c b/xorg-server/miext/rootless/rootlessCommon.c
index e97a53725..4f059801b 100644
--- a/xorg-server/miext/rootless/rootlessCommon.c
+++ b/xorg-server/miext/rootless/rootlessCommon.c
@@ -92,6 +92,9 @@ IsFramedWindow(WindowPtr pWin)
{
WindowPtr top;
+ if (!dixPrivateKeyRegistered(&rootlessWindowPrivateKeyRec))
+ return FALSE;
+
if (!pWin->realized)
return FALSE;
top = TopLevelParent(pWin);
diff --git a/xorg-server/xkb/xkbActions.c b/xorg-server/xkb/xkbActions.c
index 24c7341ed..a60b20bbd 100644
--- a/xorg-server/xkb/xkbActions.c
+++ b/xorg-server/xkb/xkbActions.c
@@ -1332,35 +1332,53 @@ xkbStateNotify sn;
return;
}
+/*
+ * The event is injected into the event processing, not the EQ. Thus,
+ * ensure that we restore the master after the event sequence to the
+ * original set of classes. Otherwise, the master remains on the XTEST
+ * classes and drops events that don't fit into the XTEST layout (e.g.
+ * events with more than 2 valuators).
+ *
+ * FIXME: EQ injection in the processing stage is not designed for, so this
+ * is a rather awkward hack. The event list returned by GetPointerEvents()
+ * and friends is always prefixed with a DCE if the last _posted_ device was
+ * different. For normal events, this sequence then resets the master during
+ * the processing stage. Since we inject the PointerKey events in the
+ * processing stage though, we need to manually reset to restore the
+ * previous order, because the events already in the EQ must be sent for the
+ * right device.
+ * So we post-fix the event list we get from GPE with a DCE back to the
+ * previous slave device.
+ *
+ * First one on drinking island wins!
+ */
static void
-XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
+InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags, int num_valuators, int *valuators)
{
+ ScreenPtr pScreen;
EventListPtr events;
int nevents, i;
- DeviceIntPtr ptr;
- ScreenPtr pScreen;
+ DeviceIntPtr ptr, mpointer, lastSlave = NULL;
Bool saveWait;
- int gpe_flags = 0;
- if (IsMaster(dev))
- ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
- else if (!dev->u.master)
+ if (IsMaster(dev)) {
+ mpointer = GetMaster(dev, MASTER_POINTER);
+ lastSlave = mpointer->u.lastSlave;
+ ptr = GetXTestDevice(mpointer);
+ } else if (!dev->u.master)
ptr = dev;
else
return;
- if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
- gpe_flags = POINTER_ABSOLUTE;
- else
- gpe_flags = POINTER_RELATIVE;
- events = InitEventList(GetMaximumEventsNum());
+ events = InitEventList(GetMaximumEventsNum() + 1);
OsBlockSignals();
pScreen = miPointerGetScreen(ptr);
saveWait = miPointerSetWaitForUpdate(pScreen, FALSE);
- nevents = GetPointerEvents(events, ptr,
- MotionNotify, 0,
- gpe_flags, 0, 2, (int[]){x, y});
+ nevents = GetPointerEvents(events, ptr, type, button, flags, 0,
+ num_valuators, valuators);
+ if (IsMaster(dev) && (lastSlave && lastSlave != ptr))
+ UpdateFromMaster(&events[nevents], lastSlave, DEVCHANGE_POINTER_EVENT, &nevents);
miPointerSetWaitForUpdate(pScreen, saveWait);
OsReleaseSignals();
@@ -1368,14 +1386,31 @@ XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
FreeEventList(events, GetMaximumEventsNum());
+
+}
+
+static void
+XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
+{
+ int gpe_flags = 0;
+
+ /* ignore attached SDs */
+ if (!IsMaster(dev) && GetMaster(dev, MASTER_POINTER) != NULL)
+ return;
+
+ if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
+ gpe_flags = POINTER_ABSOLUTE;
+ else
+ gpe_flags = POINTER_RELATIVE;
+
+ InjectPointerKeyEvents(dev, MotionNotify, 0, gpe_flags, 2, (int[]){x, y});
}
void
XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
{
- EventListPtr events;
- int nevents, i;
DeviceIntPtr ptr;
+ int down;
/* If dev is a slave device, and the SD is attached, do nothing. If we'd
* post through the attached master pointer we'd get duplicate events.
@@ -1385,24 +1420,18 @@ XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
* if dev is a floating slave, post through the device itself.
*/
- if (IsMaster(dev))
- ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
- else if (!dev->u.master)
+ if (IsMaster(dev)) {
+ DeviceIntPtr mpointer = GetMaster(dev, MASTER_POINTER);
+ ptr = GetXTestDevice(mpointer);
+ } else if (!dev->u.master)
ptr = dev;
else
return;
- events = InitEventList(GetMaximumEventsNum());
- OsBlockSignals();
- nevents = GetPointerEvents(events, ptr,
- press ? ButtonPress : ButtonRelease, button,
- 0 /* flags */, 0 /* first */,
- 0 /* num_val */, NULL);
- OsReleaseSignals();
-
-
- for (i = 0; i < nevents; i++)
- mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
+ down = button_is_down(ptr, button, BUTTON_PROCESSED);
+ if (press == down)
+ return;
- FreeEventList(events, GetMaximumEventsNum());
+ InjectPointerKeyEvents(dev, press ? ButtonPress : ButtonRelease,
+ button, 0, 0, NULL);
}
diff --git a/xorg-server/xkeyboard-config/rules/base.extras.xml.in b/xorg-server/xkeyboard-config/rules/base.extras.xml.in
index a17205e54..ca4d42c49 100644
--- a/xorg-server/xkeyboard-config/rules/base.extras.xml.in
+++ b/xorg-server/xkeyboard-config/rules/base.extras.xml.in
@@ -81,6 +81,22 @@
</variant>
</variantList>
</layout>
+ <layout>
+ <configItem>
+ <name>ru</name>
+ <shortDescription>Rus</shortDescription>
+ <description>Russia</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>chu</name>
+ <description>Church Slavonic</description>
+ <languageList><iso639Id>chu</iso639Id></languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
</layoutList>
<optionList/>
</xkbConfigRegistry>
diff --git a/xorg-server/xkeyboard-config/rules/extras/variantsMapping.lst b/xorg-server/xkeyboard-config/rules/extras/variantsMapping.lst
index 36af488d1..fd0add719 100644
--- a/xorg-server/xkeyboard-config/rules/extras/variantsMapping.lst
+++ b/xorg-server/xkeyboard-config/rules/extras/variantsMapping.lst
@@ -1,4 +1,5 @@
rs combiningkeys extras/rs combiningkeys
+ru chu extras/ru chu
ir ave extras/ir ave
us alt-intl-unicode extras/us alt-intl-unicode
us crd extras/us crd
diff --git a/xorg-server/xkeyboard-config/symbols/extras/Makefile.am b/xorg-server/xkeyboard-config/symbols/extras/Makefile.am
index 7410ac24f..948060441 100644
--- a/xorg-server/xkeyboard-config/symbols/extras/Makefile.am
+++ b/xorg-server/xkeyboard-config/symbols/extras/Makefile.am
@@ -1,5 +1,5 @@
symbolsdir = $(xkb_base)/symbols/extras
dist_symbols_DATA = apl \
ir \
- rs \
+ rs ru \
us
diff --git a/xorg-server/xkeyboard-config/symbols/extras/ru b/xorg-server/xkeyboard-config/symbols/extras/ru
new file mode 100644
index 000000000..7e2404250
--- /dev/null
+++ b/xorg-server/xkeyboard-config/symbols/extras/ru
@@ -0,0 +1,59 @@
+// Church Slavonic language layout
+// based on
+// russian standard keyboard
+// Aleksandr Andreev and Yuri Shardt
+// Last Changes 2010/08/01. Contact <aleksandr.andreev@gmail.com>
+
+partial alphanumeric_keys
+xkb_symbols "chu"
+{
+ name[Group1]= "Russia - Church Slavonic";
+ key <TLDE> { [ U0457, U0407, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign
+ key <AE01> { [ U0461, U0460, U047D, U047C] }; // ѡ Ѡ ѽ Ѽ
+ key <AE02> { [ U0454, U0404, U0465, U0464] }; // є Є ѥ Ѥ
+ key <AE03> { [ U046F, U046E, U0469, U0468] }; // ѯ Ѯ ѩ Ѩ
+ key <AE04> { [ U0471, U0470, U046D, U046C] }; // ѱ Ѱ ѭ Ѭ
+ key <AE05> { [ U0473, U0472, Cyrillic_ya, Cyrillic_YA] }; // ѳ Ѳ я Я (WHERE Я IS I+A, NOT SMALL YUS)
+ key <AE06> { [ U0475, U0474, U0477, U0476] }; // ѵ Ѵ ѷ Ѷ
+ key <AE07> { [ U047B, U047A, UA64D, UA64C] }; // ѻ Ѻ ꙍ Ꙍ
+ key <AE08> { [ U047F, U047E, U046B, U046A] }; // ѿ Ѿ ѫ Ѫ
+ key <AE09> { [ U0455, U0405, parenleft, U002A ] }; // ѕ Ѕ ( *
+ key <AE10> { [ Cyrillic_u, Cyrillic_U, parenright, U0488 ] }; // у У ) NB: for diagraph Ouk, use Cyrillic_o + Cyrillic_u
+ key <AE11> { [ U0483, U0486, U0487, U005F] }; // а҃ а҆ а҇, _ (titlo, psili, pokrytie, underscore)
+ key <AE12> { [ U0301, U0300, U0484, UA67E] }; // а̀ а́ а҄ ꙾ (oxia, varia, kamora, kavyka)
+ key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, U0456 ] };
+ key <AD02> { [ Cyrillic_tse, Cyrillic_TSE, U2DF0 ] };
+ key <AD03> { [ UA64B, UA64A, U2DF9 ] }; // Cyrillic monograph Uk (not U)!
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA, U2DE6 ] };
+ key <AD05> { [ Cyrillic_ie, Cyrillic_IE, U2DF7 ] };
+ key <AD06> { [ Cyrillic_en, Cyrillic_EN, U2DE9 ] };
+ key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE, U2DE2 ] };
+ key <AD08> { [ Cyrillic_sha, Cyrillic_SHA, U2DF2 ] };
+ key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA, U2DF3 ] };
+ key <AD10> { [ Cyrillic_ze, Cyrillic_ZE, U2DE5 ] };
+ key <AD11> { [ Cyrillic_ha, Cyrillic_HA, U2DEF ] };
+ key <AD12> { [Cyrillic_hardsign,Cyrillic_HARDSIGN, UA67D ] }; // Payerok
+ key <BKSL> { [backslash, slash, colon, question] }; // \ / : ? (note, for Slavonic question use semicolon
+ key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AC03> { [ Cyrillic_ve, Cyrillic_VE, U2DE1 ] };
+ key <AC04> { [ Cyrillic_a, Cyrillic_A, U2DF6 ] };
+ key <AC05> { [ Cyrillic_pe, Cyrillic_PE, U2DEB ] };
+ key <AC06> { [ Cyrillic_er, Cyrillic_ER, U2DEC ] };
+ key <AC07> { [ Cyrillic_o, Cyrillic_O, U2DEA ] };
+ key <AC08> { [ Cyrillic_el, Cyrillic_EL, U2DE7 ] };
+ key <AC09> { [ Cyrillic_de, Cyrillic_DE, U2DE3 ] };
+ key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE, U2DE4 ] };
+ key <AC11> { [ U0463, U0462, U2DFA ] }; // Yat
+ key <AB01> { [ U0467, U0466, U2DFD ] }; // Small Yus
+ key <AB02> { [ Cyrillic_che, Cyrillic_CHE, U2DF1 ] };
+ key <AB03> { [ Cyrillic_es, Cyrillic_ES, U2DED ] };
+ key <AB04> { [ Cyrillic_em, Cyrillic_EM, U2DE8 ] };
+ key <AB05> { [ Cyrillic_i, Cyrillic_I ] };
+ key <AB06> { [ Cyrillic_te, Cyrillic_TE, U2DEE ] };
+ key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] };
+ key <AB08> { [ Cyrillic_be, Cyrillic_BE, U2DE0 ] };
+ key <AB09> { [ Cyrillic_yu, Cyrillic_YU, U2DFB ] };
+ key <AB10> { [ period, comma, semicolon, exclam ] };
+};
+
diff --git a/xorg-server/xkeyboard-config/symbols/inet b/xorg-server/xkeyboard-config/symbols/inet
index 0fd549f76..b3b155bca 100644
--- a/xorg-server/xkeyboard-config/symbols/inet
+++ b/xorg-server/xkeyboard-config/symbols/inet
@@ -216,7 +216,10 @@ xkb_symbols "evdev" {
key <FK13> { [ XF86Tools ] };
key <FK14> { [ XF86Launch5 ] };
- key <FK15> { [ XF86MenuKB ] };
+ key <FK15> { [ XF86Launch6 ] };
+ key <FK16> { [ XF86Launch7 ] };
+ key <FK17> { [ XF86Launch8 ] };
+ key <FK18> { [ XF86Launch9 ] };
};