[PATCH] Mark highly predictable branches as likely/unlikely

Dave Airlie airlied at redhat.com
Wed Apr 7 16:15:28 PDT 2010


On Wed, 2010-04-07 at 18:49 -0400, Matt Turner wrote:
> Highly predicatble branches include
>  - unlikely: error conditions, such as those leading to
> 	- RADEON_FALLBACK
> 	- goto fail
> 	- return FALSE (as an error
>  - likely: if (info->useEXA)

Can we limit these to fastpaths?

i.e. no need in atombios or drmmode code or anywhere like that.

I expect you just want it in the accel/exa/xv codepaths.

Dave.

> 
> gtkperf scores on a Radeon 4650, original->new
> GtkEntry - time:  0.05->0.05
> GtkComboBox - time:  1.07->1.09
> GtkComboBoxEntry - time:  0.80->0.80
> GtkSpinButton - time:  0.37->0.35
> GtkProgressBar - time:  0.31->0.30
> GtkToggleButton - time:  0.32->0.31
> GtkCheckButton - time:  0.21->0.20
> GtkRadioButton - time:  0.28->0.28
> GtkTextView - Add text - time:  0.74->0.72
> GtkTextView - Scroll - time:  0.28->0.27
> GtkDrawingArea - Lines - time:  0.92->0.93
> GtkDrawingArea - Circles - time:  1.77->1.69
> GtkDrawingArea - Text - time:  1.40->1.34
> GtkDrawingArea - Pixbufs - time:  0.13->1.3
> ---
> Total time:  8.67->8.46
> 
> Idea from Obscene_CNN.
> 
> Signed-off-by: Matt Turner <mattst88 at gmail.com>
> ---
>  src/atombios_output.c            |    2 +-
>  src/drmmode_display.c            |    6 +-
>  src/r600_exa.c                   |  144 ++++++++++++++++------------------
>  src/r600_textured_videofuncs.c   |    4 +-
>  src/r6xx_accel.c                 |    4 +-
>  src/radeon.h                     |   12 +++-
>  src/radeon_accel.c               |    8 +-
>  src/radeon_commonfuncs.c         |    2 +-
>  src/radeon_dri.c                 |    8 +-
>  src/radeon_dri2.c                |    6 +-
>  src/radeon_driver.c              |   12 ++--
>  src/radeon_exa.c                 |   20 +++---
>  src/radeon_exa_funcs.c           |   44 +++++-----
>  src/radeon_exa_render.c          |  160 ++++++++++++++++---------------------
>  src/radeon_kms.c                 |   12 ++--
>  src/radeon_legacy_memory.c       |    4 +-
>  src/radeon_macros.h              |    2 +-
>  src/radeon_textured_video.c      |   10 +-
>  src/radeon_textured_videofuncs.c |   24 +++---
>  src/radeon_vbo.h                 |    2 +-
>  20 files changed, 233 insertions(+), 253 deletions(-)
> 
> diff --git a/src/atombios_output.c b/src/atombios_output.c
> index 0a54657..14aef14 100644
> --- a/src/atombios_output.c
> +++ b/src/atombios_output.c
> @@ -2189,7 +2189,7 @@ void RADEON_DP_GetDPCD(xf86OutputPtr output)
>      int ret;
>  
>      ret = atom_dp_aux_native_read(output, DP_DPCD_REV, 0, 8, msg);
> -    if (ret) {
> +    if (unlikely(ret)) {
>  	memcpy(radeon_output->dpcd, msg, 8);
>  	if (0) {
>  	    int i;
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index 399a6a7..a55c387 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -328,7 +328,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
>  		}
>  		ret = drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
>  				     fb_id, x, y, output_ids, output_count, &kmode);
> -		if (ret)
> +		if (unlikely(ret))
>  			xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR,
>  				   "failed to set mode: %s", strerror(-ret));
>  		else
> @@ -440,7 +440,7 @@ drmmode_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
>  			   crtc->scrn->bitsPerPixel, rotate_pitch,
>  			   rotate_bo->handle,
>  			   &drmmode_crtc->rotate_fb_id);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  		ErrorF("failed to add rotate fb\n");
>  	}
>  
> @@ -1092,7 +1092,7 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
>  			   scrn->bitsPerPixel, pitch * cpp,
>  			   info->front_bo->handle,
>  			   &drmmode->fb_id);
> -	if (ret)
> +	if (unlikely(ret))
>  		goto fail;
>  
>  	if (!info->r600_shadow_fb) {
> diff --git a/src/r600_exa.c b/src/r600_exa.c
> index 26b59d8..9468b54 100644
> --- a/src/r600_exa.c
> +++ b/src/r600_exa.c
> @@ -209,25 +209,25 @@ R600SetAccelState(ScrnInfoPtr pScrn,
>      accel_state->planemask = planemask;
>  
>      /* bad pitch */
> -    if (accel_state->src_obj[0].pitch & 7)
> +    if (unlikely(accel_state->src_obj[0].pitch & 7))
>  	RADEON_FALLBACK(("Bad src pitch 0x%08x\n", accel_state->src_obj[0].pitch));
>  
>      /* bad offset */
> -    if (accel_state->src_obj[0].offset & 0xff)
> +    if (unlikely(accel_state->src_obj[0].offset & 0xff))
>  	RADEON_FALLBACK(("Bad src offset 0x%08x\n", accel_state->src_obj[0].offset));
>  
>      /* bad pitch */
> -    if (accel_state->src_obj[1].pitch & 7)
> +    if (unlikely(accel_state->src_obj[1].pitch & 7))
>  	RADEON_FALLBACK(("Bad src pitch 0x%08x\n", accel_state->src_obj[1].pitch));
>  
>      /* bad offset */
> -    if (accel_state->src_obj[1].offset & 0xff)
> +    if (unlikely(accel_state->src_obj[1].offset & 0xff))
>  	RADEON_FALLBACK(("Bad src offset 0x%08x\n", accel_state->src_obj[1].offset));
>  
> -    if (accel_state->dst_obj.pitch & 7)
> +    if (unlikely(accel_state->dst_obj.pitch & 7))
>  	RADEON_FALLBACK(("Bad dst pitch 0x%08x\n", accel_state->dst_obj.pitch));
>  
> -    if (accel_state->dst_obj.offset & 0xff)
> +    if (unlikely(accel_state->dst_obj.offset & 0xff))
>  	RADEON_FALLBACK(("Bad dst offset 0x%08x\n", accel_state->dst_obj.offset));
>  
>      accel_state->vs_size = 512;
> @@ -250,7 +250,7 @@ R600SetAccelState(ScrnInfoPtr pScrn,
>  	    radeon_cs_space_add_persistent_bo(info->cs, accel_state->dst_obj.bo,
>  					      0, accel_state->dst_obj.domain);
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret)
> +	if (unlikely(ret))
>  	    RADEON_FALLBACK(("Not enough RAM to hw accel operation\n"));
>  
>      } else
> @@ -294,9 +294,9 @@ R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
>      float ps_alu_consts[4];
>      struct r600_accel_object dst;
>  
> -    if (!R600CheckBPP(pPix->drawable.bitsPerPixel))
> +    if (unlikely(!R600CheckBPP(pPix->drawable.bitsPerPixel)))
>  	RADEON_FALLBACK(("R600CheckDatatype failed\n"));
> -    if (!R600ValidPM(pm, pPix->drawable.bitsPerPixel))
> +    if (unlikely(!R600ValidPM(pm, pPix->drawable.bitsPerPixel)))
>  	RADEON_FALLBACK(("invalid planemask\n"));
>  
>  #if defined(XF86DRM_MODE)
> @@ -316,12 +316,12 @@ R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
>      dst.bpp = pPix->drawable.bitsPerPixel;
>      dst.domain = RADEON_GEM_DOMAIN_VRAM;
>  	
> -    if (!R600SetAccelState(pScrn,
> +    if (unlikely(!R600SetAccelState(pScrn,
>  			   NULL,
>  			   NULL,
>  			   &dst,
>  			   accel_state->solid_vs_offset, accel_state->solid_ps_offset,
> -			   alu, pm))
> +			   alu, pm)))
>  	return FALSE;
>  
>      CLEAR (cb_conf);
> @@ -713,11 +713,11 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
>      struct radeon_accel_state *accel_state = info->accel_state;
>      struct r600_accel_object src_obj, dst_obj;
>  
> -    if (!R600CheckBPP(pSrc->drawable.bitsPerPixel))
> +    if (unlikely(!R600CheckBPP(pSrc->drawable.bitsPerPixel)))
>  	RADEON_FALLBACK(("R600CheckDatatype src failed\n"));
> -    if (!R600CheckBPP(pDst->drawable.bitsPerPixel))
> +    if (unlikely(!R600CheckBPP(pDst->drawable.bitsPerPixel)))
>  	RADEON_FALLBACK(("R600CheckDatatype dst failed\n"));
> -    if (!R600ValidPM(planemask, pDst->drawable.bitsPerPixel))
> +    if (unlikely(!R600ValidPM(planemask, pDst->drawable.bitsPerPixel)))
>  	RADEON_FALLBACK(("Invalid planemask\n"));
>  
>      dst_obj.pitch = exaGetPixmapPitch(pDst) / (pDst->drawable.bitsPerPixel / 8);
> @@ -754,12 +754,12 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
>      dst_obj.bpp = pDst->drawable.bitsPerPixel;
>      dst_obj.domain = RADEON_GEM_DOMAIN_VRAM;
>  
> -    if (!R600SetAccelState(pScrn,
> +    if (unlikely(!R600SetAccelState(pScrn,
>  			   &src_obj,
>  			   NULL,
>  			   &dst_obj,
>  			   accel_state->copy_vs_offset, accel_state->copy_ps_offset,
> -			   rop, planemask))
> +			   rop, planemask)))
>  	return FALSE;
>  
>      if (accel_state->same_surface == TRUE) {
> @@ -774,12 +774,12 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
>  	    accel_state->copy_area_bo = radeon_bo_open(info->bufmgr, 0, size, 0,
>  						       RADEON_GEM_DOMAIN_VRAM,
>  						       0);
> -	    if (accel_state->copy_area_bo == NULL)
> +	    if (unlikely(accel_state->copy_area_bo == NULL))
>  		RADEON_FALLBACK(("temp copy surface alloc failed\n"));
>  
>  	    radeon_cs_space_add_persistent_bo(info->cs, accel_state->copy_area_bo,
>  					      RADEON_GEM_DOMAIN_VRAM, RADEON_GEM_DOMAIN_VRAM);
> -	    if (radeon_cs_space_check(info->cs)) {
> +	    if (unlikely(radeon_cs_space_check(info->cs))) {
>  		radeon_bo_unref(accel_state->copy_area_bo);
>  		accel_state->copy_area_bo = NULL;
>  		return FALSE;
> @@ -793,7 +793,7 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
>  		accel_state->copy_area = NULL;
>  	    }
>  	    accel_state->copy_area = exaOffscreenAlloc(pDst->drawable.pScreen, size, 256, TRUE, NULL, NULL);
> -	    if (!accel_state->copy_area)
> +	    if (unlikely(!accel_state->copy_area))
>  		RADEON_FALLBACK(("temp copy surface alloc failed\n"));
>  	}
>      } else
> @@ -1018,19 +1018,18 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict,
>      max_tex_w = 8192;
>      max_tex_h = 8192;
>  
> -    if ((w > max_tex_w) || (h > max_tex_h))
> +    if (unlikely((w > max_tex_w) || (h > max_tex_h)))
>  	RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
>  
>      for (i = 0; i < sizeof(R600TexFormats) / sizeof(R600TexFormats[0]); i++) {
>  	if (R600TexFormats[i].fmt == pPict->format)
>  	    break;
>      }
> -    if (i == sizeof(R600TexFormats) / sizeof(R600TexFormats[0]))
> +    if (unlikely(i == sizeof(R600TexFormats) / sizeof(R600TexFormats[0])))
>  	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
>  			 (int)pPict->format));
>  
> -    if (pPict->filter != PictFilterNearest &&
> -	pPict->filter != PictFilterBilinear)
> +    if (unlikely(pPict->filter != PictFilterNearest && pPict->filter != PictFilterBilinear))
>  	RADEON_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
>  
>      /* for REPEAT_NONE, Render semantics are that sampling outside the source
> @@ -1043,7 +1042,7 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict,
>       */
>      /* FIXME R6xx */
>      if (pPict->transform != 0 && repeatType == RepeatNone && PICT_FORMAT_A(pPict->format) == 0) {
> -	if (!(((op == PictOpSrc) || (op == PictOpClear)) && (PICT_FORMAT_A(pDstPict->format) == 0)))
> +	if (unlikely(!(((op == PictOpSrc) || (op == PictOpClear)) && (PICT_FORMAT_A(pDstPict->format) == 0))))
>  	    RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
>      }
>  
> @@ -1295,10 +1294,10 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      int max_tex_w, max_tex_h, max_dst_w, max_dst_h;
>  
>      /* Check for unsupported compositing operations. */
> -    if (op >= (int) (sizeof(R600BlendOp) / sizeof(R600BlendOp[0])))
> +    if (unlikely(op >= (int)(sizeof(R600BlendOp) / sizeof(R600BlendOp[0]))))
>  	RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
>  
> -    if (!pSrcPicture->pDrawable)
> +    if (unlikely(!pSrcPicture->pDrawable))
>  	RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>      pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
> @@ -1308,8 +1307,7 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      max_dst_w = 8192;
>      max_dst_h = 8192;
>  
> -    if (pSrcPixmap->drawable.width >= max_tex_w ||
> -	pSrcPixmap->drawable.height >= max_tex_h) {
> +    if (unlikely(pSrcPixmap->drawable.width >= max_tex_w || pSrcPixmap->drawable.height >= max_tex_h)) {
>  	RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
>  			 pSrcPixmap->drawable.width,
>  			 pSrcPixmap->drawable.height));
> @@ -1317,8 +1315,7 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  
>      pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
>  
> -    if (pDstPixmap->drawable.width >= max_dst_w ||
> -	pDstPixmap->drawable.height >= max_dst_h) {
> +    if (unlikely(pDstPixmap->drawable.width >= max_dst_w || pDstPixmap->drawable.height >= max_dst_h)) {
>  	RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
>  			 pDstPixmap->drawable.width,
>  			 pDstPixmap->drawable.height));
> @@ -1327,13 +1324,12 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      if (pMaskPicture) {
>  	PixmapPtr pMaskPixmap;
>  
> -	if (!pMaskPicture->pDrawable)
> +	if (unlikely(!pMaskPicture->pDrawable))
>  	    RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>  	pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
>  
> -	if (pMaskPixmap->drawable.width >= max_tex_w ||
> -	    pMaskPixmap->drawable.height >= max_tex_h) {
> +	if (unlikely(pMaskPixmap->drawable.width >= max_tex_w || pMaskPixmap->drawable.height >= max_tex_h)) {
>  	    RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
>  			     pMaskPixmap->drawable.width,
>  			     pMaskPixmap->drawable.height));
> @@ -1344,22 +1340,20 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  	     * on the source value.  We can only get one of those into the
>  	     * single source value that we get to blend with.
>  	     */
> -	    if (R600BlendOp[op].src_alpha &&
> -		(R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) !=
> -		(BLEND_ZERO << COLOR_SRCBLEND_shift)) {
> +	    if (unlikely(R600BlendOp[op].src_alpha && (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != (BLEND_ZERO << COLOR_SRCBLEND_shift))) {
>  		RADEON_FALLBACK(("Component alpha not supported with source "
>  				 "alpha and source value blending.\n"));
>  	    }
>  	}
>  
> -	if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1))
> +	if (unlikely(!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)))
>  	    return FALSE;
>      }
>  
> -    if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0))
> +    if (unlikely(!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)))
>  	return FALSE;
>  
> -    if (!R600GetDestFormat(pDstPicture, &tmp1))
> +    if (unlikely(!R600GetDestFormat(pDstPicture, &tmp1)))
>  	return FALSE;
>  
>      return TRUE;
> @@ -1378,7 +1372,7 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>      shader_config_t vs_conf, ps_conf;
>      struct r600_accel_object src_obj, mask_obj, dst_obj;
>  
> -    if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8)
> +    if (unlikely(pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8))
>  	return FALSE;
>  
>  #if defined(XF86DRM_MODE)
> @@ -1426,12 +1420,12 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>  	mask_obj.bpp = pMask->drawable.bitsPerPixel;
>  	mask_obj.domain = RADEON_GEM_DOMAIN_VRAM | RADEON_GEM_DOMAIN_GTT;
>  
> -	if (!R600SetAccelState(pScrn,
> +	if (unlikely(!R600SetAccelState(pScrn,
>  			       &src_obj,
>  			       &mask_obj,
>  			       &dst_obj,
>  			       accel_state->comp_vs_offset, accel_state->comp_mask_ps_offset,
> -			       3, 0xffffffff))
> +			       3, 0xffffffff)))
>  	    return FALSE;
>  
>  	accel_state->msk_pic = pMaskPicture;
> @@ -1446,12 +1440,12 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>  	    accel_state->src_alpha = FALSE;
>  	}
>      } else {
> -	if (!R600SetAccelState(pScrn,
> +	if (unlikely(!R600SetAccelState(pScrn,
>  			       &src_obj,
>  			       NULL,
>  			       &dst_obj,
>  			       accel_state->comp_vs_offset, accel_state->comp_ps_offset,
> -			       3, 0xffffffff))
> +			       3, 0xffffffff)))
>  	    return FALSE;
>  
>  	accel_state->msk_pic = NULL;
> @@ -1459,7 +1453,7 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>  	accel_state->src_alpha = FALSE;
>      }
>  
> -    if (!R600GetDestFormat(pDstPicture, &dst_format))
> +    if (unlikely(!R600GetDestFormat(pDstPicture, &dst_format)))
>  	return FALSE;
>  
>      CLEAR (cb_conf);
> @@ -1479,14 +1473,14 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>      set_screen_scissor(pScrn, accel_state->ib, 0, 0, accel_state->dst_obj.width, accel_state->dst_obj.height);
>      set_window_scissor(pScrn, accel_state->ib, 0, 0, accel_state->dst_obj.width, accel_state->dst_obj.height);
>  
> -    if (!R600TextureSetup(pSrcPicture, pSrc, 0)) {
> +    if (unlikely(!R600TextureSetup(pSrcPicture, pSrc, 0))) {
>          R600IBDiscard(pScrn, accel_state->ib);
>          r600_vb_discard(pScrn);
>          return FALSE;
>      }
>  
>      if (pMask) {
> -        if (!R600TextureSetup(pMaskPicture, pMask, 1)) {
> +        if (unlikely(!R600TextureSetup(pMaskPicture, pMask, 1))) {
>              R600IBDiscard(pScrn, accel_state->ib);
>              r600_vb_discard(pScrn);
>              return FALSE;
> @@ -1719,14 +1713,14 @@ R600CopyToVRAM(ScrnInfoPtr pScrn,
>      drmBufPtr scratch;
>      struct r600_accel_object scratch_obj, dst_obj;
>  
> -    if (dst_pitch & 7)
> +    if (unlikely(dst_pitch & 7))
>  	return FALSE;
>  
> -    if (dst_mc_addr & 0xff)
> +    if (unlikely(dst_mc_addr & 0xff))
>  	return FALSE;
>  
>      scratch = RADEONCPGetBuffer(pScrn);
> -    if (scratch == NULL)
> +    if (unlikely(scratch == NULL))
>  	return FALSE;
>  
>      scratch_mc_addr = info->gartLocation + info->dri->bufStart + (scratch->idx * scratch->total);
> @@ -1749,12 +1743,12 @@ R600CopyToVRAM(ScrnInfoPtr pScrn,
>      dst_obj.bpp = bpp;
>      dst_obj.domain = RADEON_GEM_DOMAIN_VRAM;
>  
> -    if (!R600SetAccelState(pScrn,
> +    if (unlikely(!R600SetAccelState(pScrn,
>  			   &scratch_obj,
>  			   NULL,
>  			   &dst_obj,
>  			   accel_state->copy_vs_offset, accel_state->copy_ps_offset,
> -			   3, 0xffffffff))
> +			   3, 0xffffffff)))
>  	return FALSE;
>  
>      /* memcopy from sys to scratch */
> @@ -1834,16 +1828,16 @@ R600DownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h,
>      struct r600_accel_object scratch_obj, src_obj;
>  
>      /* bad pipe setup in drm prior to 1.32 */
> -    if (info->dri->pKernelDRMVersion->version_minor < 32) {
> +    if (unlikely(info->dri->pKernelDRMVersion->version_minor < 32)) {
>  	    if ((info->ChipFamily == CHIP_FAMILY_RV740) && (w < 32 || h < 32))
>  		    return FALSE;
>      }
>  
> -    if (src_pitch & 7)
> +    if (unlikely(src_pitch & 7))
>  	return FALSE;
>  
>      scratch = RADEONCPGetBuffer(pScrn);
> -    if (scratch == NULL)
> +    if (unlikely(scratch == NULL))
>  	return FALSE;
>  
>      scratch_mc_addr = info->gartLocation + info->dri->bufStart + (scratch->idx * scratch->total);
> @@ -1865,12 +1859,12 @@ R600DownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h,
>      scratch_obj.domain = RADEON_GEM_DOMAIN_GTT;
>      scratch_obj.bo = NULL;
>  
> -    if (!R600SetAccelState(pScrn,
> +    if (unlikely(!R600SetAccelState(pScrn,
>  			   &src_obj,
>  			   NULL,
>  			   &scratch_obj,
>  			   accel_state->copy_vs_offset, accel_state->copy_ps_offset,
> -			   3, 0xffffffff))
> +			   3, 0xffffffff)))
>  	return FALSE;
>  
>      /* blit from vram to scratch */
> @@ -1933,19 +1927,19 @@ R600UploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
>      int i;
>      struct r600_accel_object src_obj, dst_obj;
>  
> -    if (bpp < 8)
> +    if (unlikely(bpp < 8))
>  	return FALSE;
>  
>      driver_priv = exaGetPixmapDriverPrivate(pDst);
>  
>      /* If we know the BO won't be busy, don't bother */
> -    if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs) &&
> -	!radeon_bo_is_busy(driver_priv->bo, &dst_domain))
> +    if (unlikely(!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs) &&
> +	!radeon_bo_is_busy(driver_priv->bo, &dst_domain)))
>  	return FALSE;
>  
>      size = scratch_pitch * h;
>      scratch = radeon_bo_open(info->bufmgr, 0, size, 0, RADEON_GEM_DOMAIN_GTT, 0);
> -    if (scratch == NULL) {
> +    if (unlikely(scratch == NULL)) {
>  	return FALSE;
>      }
>  
> @@ -1976,7 +1970,7 @@ R600UploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
>      }
>  
>      r = radeon_bo_map(scratch, 0);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -2019,7 +2013,7 @@ R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>      Bool r;
>      struct r600_accel_object src_obj, dst_obj;
>  
> -    if (bpp < 8)
> +    if (unlikely(bpp < 8))
>  	return FALSE;
>  
>      driver_priv = exaGetPixmapDriverPrivate(pSrc);
> @@ -2035,12 +2029,12 @@ R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>      if (!src_domain)
>  	radeon_bo_is_busy(driver_priv->bo, &src_domain);
>  
> -    if (src_domain != RADEON_GEM_DOMAIN_VRAM)
> +    if (unlikely(src_domain != RADEON_GEM_DOMAIN_VRAM))
>  	return FALSE;
>  
>      size = scratch_pitch * h;
>      scratch = radeon_bo_open(info->bufmgr, 0, size, 0, RADEON_GEM_DOMAIN_GTT, 0);
> -    if (scratch == NULL) {
> +    if (unlikely(scratch == NULL)) {
>  	return FALSE;
>      }
>      radeon_cs_space_reset_bos(info->cs);
> @@ -2051,7 +2045,7 @@ R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>      accel_state->dst_obj.domain = RADEON_GEM_DOMAIN_GTT;
>      radeon_cs_space_add_persistent_bo(info->cs, scratch, 0, accel_state->dst_obj.domain);
>      r = radeon_cs_space_check(info->cs);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -2091,7 +2085,7 @@ R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>  	radeon_cs_flush_indirect(pScrn);
>  
>      r = radeon_bo_map(scratch, 0);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -2156,7 +2150,7 @@ R600AllocShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen)
>      if (info->cs) {
>  	accel_state->shaders_bo = radeon_bo_open(info->bufmgr, 0, size, 0,
>  						 RADEON_GEM_DOMAIN_VRAM, 0);
> -	if (accel_state->shaders_bo == NULL) {
> +	if (unlikely(accel_state->shaders_bo == NULL)) {
>  	    ErrorF("Allocating shader failed\n");
>  	    return FALSE;
>  	}
> @@ -2168,7 +2162,7 @@ R600AllocShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen)
>  	accel_state->shaders = exaOffscreenAlloc(pScreen, size, 256,
>  						 TRUE, NULL, NULL);
>  
> -	if (accel_state->shaders == NULL)
> +	if (unlikely(accel_state->shaders == NULL))
>  	    return FALSE;
>      }
>  
> @@ -2188,7 +2182,7 @@ R600LoadShaders(ScrnInfoPtr pScrn)
>  
>      if (info->cs) {
>  	ret = radeon_bo_map(accel_state->shaders_bo, 1);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  	    FatalError("failed to map shader %d\n", ret);
>  	    return FALSE;
>  	}
> @@ -2276,7 +2270,7 @@ R600DrawInit(ScreenPtr pScreen)
>      ScrnInfoPtr pScrn =  xf86Screens[pScreen->myNum];
>      RADEONInfoPtr info   = RADEONPTR(pScrn);
>  
> -    if (info->accel_state->exa == NULL) {
> +    if (unlikely(info->accel_state->exa == NULL)) {
>  	xf86DrvMsg(pScreen->myNum, X_ERROR, "Memory map not set up\n");
>  	return FALSE;
>      }
> @@ -2359,7 +2353,7 @@ R600DrawInit(ScreenPtr pScreen)
>      } else
>  	info->accel_state->vsync = FALSE;
>  
> -    if (!exaDriverInit(pScreen, info->accel_state->exa)) {
> +    if (unlikely(!exaDriverInit(pScreen, info->accel_state->exa))) {
>  	xfree(info->accel_state->exa);
>  	return FALSE;
>      }
> @@ -2369,7 +2363,7 @@ R600DrawInit(ScreenPtr pScreen)
>      if (!info->cs)
>  #endif
>  #endif
> -	if (!info->gartLocation)
> +	if (unlikely(!info->gartLocation))
>  	    return FALSE;
>  
>      info->accel_state->XInited3D = FALSE;
> @@ -2385,10 +2379,10 @@ R600DrawInit(ScreenPtr pScreen)
>      radeon_vbo_init_lists(pScrn);
>  #endif
>  
> -    if (!R600AllocShaders(pScrn, pScreen))
> +    if (unlikely(!R600AllocShaders(pScrn, pScreen)))
>  	return FALSE;
>  
> -    if (!R600LoadShaders(pScrn))
> +    if (unlikely(!R600LoadShaders(pScrn)))
>  	return FALSE;
>  
>      exaMarkSync(pScreen);
> diff --git a/src/r600_textured_videofuncs.c b/src/r600_textured_videofuncs.c
> index 2a86df3..e71c70a 100644
> --- a/src/r600_textured_videofuncs.c
> +++ b/src/r600_textured_videofuncs.c
> @@ -189,12 +189,12 @@ R600DisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>      dst_obj.bpp = pPixmap->drawable.bitsPerPixel;
>      dst_obj.domain = RADEON_GEM_DOMAIN_VRAM;
>  
> -    if (!R600SetAccelState(pScrn,
> +    if (unlikely(!R600SetAccelState(pScrn,
>  			   &src_obj,
>  			   NULL,
>  			   &dst_obj,
>  			   accel_state->xv_vs_offset, accel_state->xv_ps_offset,
> -			   3, 0xffffffff))
> +			   3, 0xffffffff)))
>  	return;
>  
>  #ifdef COMPOSITE
> diff --git a/src/r6xx_accel.c b/src/r6xx_accel.c
> index a835d71..56d6c35 100644
> --- a/src/r6xx_accel.c
> +++ b/src/r6xx_accel.c
> @@ -107,7 +107,7 @@ void R600IBDiscard(ScrnInfoPtr pScrn, drmBufPtr ib)
>  	}
>  	radeon_cs_erase(info->cs);
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret)
> +	if (unlikely(ret))
>  	    ErrorF("space check failed in flush\n");
>  	if (info->dri2.enabled) {
>  		info->accel_state->XInited3D = FALSE;
> @@ -336,7 +336,7 @@ void cp_wait_vline_sync(ScrnInfoPtr pScrn, drmBufPtr ib, PixmapPtr pPix,
>  	    return;
>      } else {
>  #ifdef USE_EXA
> -	if (info->useEXA)
> +	if (likely(info->useEXA))
>  	    offset = exaGetPixmapOffset(pPix);
>  	else
>  #endif
> diff --git a/src/radeon.h b/src/radeon.h
> index 88f1516..e310c4e 100644
> --- a/src/radeon.h
> +++ b/src/radeon.h
> @@ -145,6 +145,14 @@
>  # define __FUNCTION__ __func__		/* C99 */
>  #endif
>  
> +#if __GNUC__ >= 3
> +# define likely(x)	__builtin_expect (!!(x), 1)
> +# define unlikely(x)	__builtin_expect (!!(x), 0)
> +#else
> +# define likely(x)	(x)
> +# define unlikely(x)	(x)
> +#endif
> +
>  #ifndef HAVE_XF86MODEBANDWIDTH
>  extern unsigned int xf86ModeBandwidth(DisplayModePtr mode, int depth);
>  #define MODE_BANDWIDTH MODE_BAD
> @@ -1647,7 +1655,7 @@ do {									\
>  static __inline__ void RADEON_MARK_SYNC(RADEONInfoPtr info, ScrnInfoPtr pScrn)
>  {
>  #ifdef USE_EXA
> -    if (info->useEXA)
> +    if (likely(info->useEXA))
>  	exaMarkSync(pScrn->pScreen);
>  #endif
>  #ifdef USE_XAA
> @@ -1659,7 +1667,7 @@ static __inline__ void RADEON_MARK_SYNC(RADEONInfoPtr info, ScrnInfoPtr pScrn)
>  static __inline__ void RADEON_SYNC(RADEONInfoPtr info, ScrnInfoPtr pScrn)
>  {
>  #ifdef USE_EXA
> -    if (info->useEXA && pScrn->pScreen)
> +    if (likely(info->useEXA && pScrn->pScreen))
>  	exaWaitSync(pScrn->pScreen);
>  #endif
>  #ifdef USE_XAA
> diff --git a/src/radeon_accel.c b/src/radeon_accel.c
> index 0250d91..38bc6f6 100644
> --- a/src/radeon_accel.c
> +++ b/src/radeon_accel.c
> @@ -562,7 +562,7 @@ uint32_t radeonGetPixmapOffset(PixmapPtr pPix)
>      if (info->cs)
>  	return 0;
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	offset = exaGetPixmapOffset(pPix);
>      } else
>  #endif
> @@ -1059,14 +1059,14 @@ Bool RADEONAccelInit(ScreenPtr pScreen)
>      RADEONInfoPtr  info  = RADEONPTR(pScrn);
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  # ifdef XF86DRI
>  	if (info->directRenderingEnabled) {
>  	    if (info->ChipFamily >= CHIP_FAMILY_R600) {
> -		if (!R600DrawInit(pScreen))
> +		if (unlikely(!R600DrawInit(pScreen)))
>  		    return FALSE;
>  	    } else {
> -		if (!RADEONDrawInitCP(pScreen))
> +		if (unlikely(!RADEONDrawInitCP(pScreen)))
>  		    return FALSE;
>  	    }
>  	} else
> diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
> index 8c46235..c87327f 100644
> --- a/src/radeon_commonfuncs.c
> +++ b/src/radeon_commonfuncs.c
> @@ -847,7 +847,7 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix,
>  	    return;
>      } else {
>  #ifdef USE_EXA
> -	if (info->useEXA)
> +	if (likely(info->useEXA))
>  	    offset = exaGetPixmapOffset(pPix);
>  	else
>  #endif
> diff --git a/src/radeon_dri.c b/src/radeon_dri.c
> index ee62e95..85798f3 100644
> --- a/src/radeon_dri.c
> +++ b/src/radeon_dri.c
> @@ -558,7 +558,7 @@ static void RADEONDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
>      int            dy       = pParent->drawable.y - ptOldOrg.y;
>  
>      /* XXX: Fix in EXA case. */
> -    if (info->useEXA)
> +    if (likely(info->useEXA))
>  	return;
>  
>      /* If the copy will overlap in Y, reverse the order */
> @@ -1677,7 +1677,7 @@ Bool RADEONDRIScreenInit(ScreenPtr pScreen)
>      pDRIInfo->createDummyCtxPriv = FALSE;
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  #if DRIINFO_MAJOR_VERSION == 5 && DRIINFO_MINOR_VERSION >= 3
>         int major, minor, patch;
>  
> @@ -2070,7 +2070,7 @@ static void RADEONDRIRefreshArea(ScrnInfoPtr pScrn, RegionPtr pReg)
>      /* pretty much a hack. */
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	uint32_t src_pitch_offset, dst_pitch_offset, datatype;
>  
>  	RADEONGetPixmapOffsetPitch(pPix, &src_pitch_offset);
> @@ -2103,7 +2103,7 @@ static void RADEONDRIRefreshArea(ScrnInfoPtr pScrn, RegionPtr pReg)
>  
>  	if (xa <= xb && ya <= yb) {
>  #ifdef USE_EXA
> -	    if (info->useEXA) {
> +	    if (likely(info->useEXA)) {
>  		RADEONCopyCP(pPix, xa, ya, xa, ya, xb - xa + 1, yb - ya + 1);
>  	    }
>  #endif
> diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
> index 103972f..728c762 100644
> --- a/src/radeon_dri2.c
> +++ b/src/radeon_dri2.c
> @@ -127,7 +127,7 @@ radeon_dri2_create_buffers(DrawablePtr drawable,
>  	info->exa_force_create = FALSE;
>          driver_priv = exaGetPixmapDriverPrivate(pixmap);
>  	r = radeon_gem_get_kernel_name(driver_priv->bo, &buffers[i].name);
> -	if (r)
> +	if (unlikely(r))
>  		return r;
>  
>          buffers[i].attachment = attachments[i];
> @@ -209,7 +209,7 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
>      info->exa_force_create = FALSE;
>      driver_priv = exaGetPixmapDriverPrivate(pixmap);
>      r = radeon_gem_get_kernel_name(driver_priv->bo, &buffers->name);
> -    if (r)
> +    if (unlikely(r))
>  	    return NULL;
>  
>      buffers->attachment = attachment;
> @@ -331,7 +331,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
>      RADEONInfoPtr info = RADEONPTR(pScrn);
>      DRI2InfoRec dri2_info = { 0 };
>  
> -    if (!info->useEXA) {
> +    if (unlikely(!info->useEXA)) {
>          xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DRI2 requires EXA\n");
>          return FALSE;
>      }
> diff --git a/src/radeon_driver.c b/src/radeon_driver.c
> index b627637..da2d174 100644
> --- a/src/radeon_driver.c
> +++ b/src/radeon_driver.c
> @@ -429,7 +429,7 @@ static Bool RADEONMapMMIO(ScrnInfoPtr pScrn)
>  				   PCI_DEV_MAP_FLAG_WRITABLE,
>  				   result);
>  
> -    if (err) {
> +    if (unlikely(err)) {
>  	xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
>                      "Unable to map MMIO aperture. %s (%d)\n",
>                      strerror (err), err);
> @@ -497,7 +497,7 @@ static Bool RADEONMapFB(ScrnInfoPtr pScrn)
>  				   PCI_DEV_MAP_FLAG_WRITE_COMBINE,
>  				   &info->FB);
>  
> -    if (err) {
> +    if (unlikely(err)) {
>  	xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
>                      "Unable to map FB aperture. %s (%d)\n",
>                      strerror (err), err);
> @@ -2208,7 +2208,7 @@ static Bool RADEONPreInitAccel(ScrnInfoPtr pScrn)
>  		       "Will attempt to use R6xx/R7xx EXA support if DRI is enabled.\n");
>  
>  #ifdef USE_EXA
> -	if (info->useEXA) {
> +	if (likely(info->useEXA)) {
>  	    info->exaReq.majorversion = EXA_VERSION_MAJOR;
>  	    info->exaReq.minorversion = EXA_VERSION_MINOR;
>  
> @@ -3552,9 +3552,9 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
>  		   "Setting up accel memmap\n");
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  #ifdef XF86DRI
> -	if (hasDRI) {
> +	if (likely(hasDRI)) {
>  	    info->accelDFS = xf86ReturnOptValBool(info->Options, OPTION_ACCEL_DFS,
>  						  info->cardType != CARD_AGP);
>  
> @@ -6004,7 +6004,7 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
>      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
>  		   "Disposing accel...\n");
>  #ifdef USE_EXA
> -    if (info->accel_state->exa) {
> +    if (likely(info->accel_state->exa)) {
>  	exaDriverFini(pScreen);
>  	xfree(info->accel_state->exa);
>  	info->accel_state->exa = NULL;
> diff --git a/src/radeon_exa.c b/src/radeon_exa.c
> index 217a0fe..c8e6d33 100644
> --- a/src/radeon_exa.c
> +++ b/src/radeon_exa.c
> @@ -175,10 +175,10 @@ static Bool RADEONGetOffsetPitch(PixmapPtr pPix, int bpp, uint32_t *pitch_offset
>  {
>  	RINFO_FROM_SCREEN(pPix->drawable.pScreen);
>  
> -	if (pitch > 16320 || pitch % info->accel_state->exa->pixmapPitchAlign != 0)
> +	if (unlikely(pitch > 16320 || pitch % info->accel_state->exa->pixmapPitchAlign != 0))
>  		RADEON_FALLBACK(("Bad pitch 0x%08x\n", pitch));
>  
> -	if (offset % info->accel_state->exa->pixmapOffsetAlign != 0)
> +	if (unlikely(offset % info->accel_state->exa->pixmapOffsetAlign != 0))
>  		RADEON_FALLBACK(("Bad offset 0x%08x\n", offset));
>  
>  	pitch = pitch >> 6;
> @@ -256,7 +256,7 @@ static Bool RADEONPrepareAccess_BE(PixmapPtr pPix, int index)
>  
>          rc = drmCommandWrite(info->dri->drmFD, DRM_RADEON_SURF_ALLOC,
>  			     &drmsurfalloc, sizeof(drmsurfalloc));
> -	if (rc < 0) {
> +	if (unlikely(rc < 0)) {
>  	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
>  		       "drm: could not allocate surface for access"
>  		       " swapper, err: %d!\n", rc);
> @@ -325,7 +325,7 @@ Bool RADEONPrepareAccess_CS(PixmapPtr pPix, int index)
>  #endif
>  
>      driver_priv = exaGetPixmapDriverPrivate(pPix);
> -    if (!driver_priv)
> +    if (unlikely(!driver_priv))
>        return FALSE;
>  
>      /* if we have more refs than just the BO then flush */
> @@ -334,7 +334,7 @@ Bool RADEONPrepareAccess_CS(PixmapPtr pPix, int index)
>      
>      /* flush IB */
>      ret = radeon_bo_map(driver_priv->bo, 1);
> -    if (ret) {
> +    if (unlikely(ret)) {
>        FatalError("failed to map pixmap %d\n", ret);
>        return FALSE;
>      }
> @@ -365,7 +365,7 @@ void *RADEONEXACreatePixmap(ScreenPtr pScreen, int size, int align)
>      struct radeon_exa_pixmap_priv *new_priv;
>  
>  #ifdef EXA_MIXED_PIXMAPS
> -    if (info->accel_state->exa->flags & EXA_MIXED_PIXMAPS) {
> +    if (likely(info->accel_state->exa->flags & EXA_MIXED_PIXMAPS)) {
>          if (size != 0 && !info->exa_force_create &&
>  	    info->exa_pixmaps == FALSE)
>              return NULL;
> @@ -404,7 +404,7 @@ void *RADEONEXACreatePixmap2(ScreenPtr pScreen, int width, int height,
>      int pixmap_align;
>  
>  #ifdef EXA_MIXED_PIXMAPS
> -    if (info->accel_state->exa->flags & EXA_MIXED_PIXMAPS) {
> +    if (likely(info->accel_state->exa->flags & EXA_MIXED_PIXMAPS)) {
>  	if (width != 0 && height != 0 && !info->exa_force_create &&
>  	    info->exa_pixmaps == FALSE)
>              return NULL;
> @@ -492,7 +492,7 @@ Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix)
>  
>      driver_priv = exaGetPixmapDriverPrivate(pPix);
>  
> -    if (!driver_priv)
> +    if (unlikely(!driver_priv))
>         return FALSE;
>      if (driver_priv->bo)
>         return TRUE;
> @@ -565,12 +565,12 @@ Bool RADEONSetupMemEXA (ScreenPtr pScreen)
>      int screen_size;
>      int byteStride = pScrn->displayWidth * cpp;
>  
> -    if (info->accel_state->exa != NULL) {
> +    if (unlikely(info->accel_state->exa != NULL)) {
>  	xf86DrvMsg(pScreen->myNum, X_ERROR, "Memory map already initialized\n");
>  	return FALSE;
>      }
>      info->accel_state->exa = exaDriverAlloc();
> -    if (info->accel_state->exa == NULL)
> +    if (unlikely(info->accel_state->exa == NULL))
>  	return FALSE;
>  
>      /* Need to adjust screen size for 16 line tiles, and then make it align to.
> diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
> index cdc0edb..dfd1098 100644
> --- a/src/radeon_exa_funcs.c
> +++ b/src/radeon_exa_funcs.c
> @@ -155,11 +155,11 @@ FUNC_NAME(RADEONPrepareSolid)(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
>  
>      TRACE;
>  
> -    if (pPix->drawable.bitsPerPixel == 24)
> +    if (unlikely(pPix->drawable.bitsPerPixel == 24))
>  	RADEON_FALLBACK(("24bpp unsupported\n"));
> -    if (!RADEONGetDatatypeBpp(pPix->drawable.bitsPerPixel, &datatype))
> +    if (unlikely(!RADEONGetDatatypeBpp(pPix->drawable.bitsPerPixel, &datatype)))
>  	RADEON_FALLBACK(("RADEONGetDatatypeBpp failed\n"));
> -    if (!RADEONGetPixmapOffsetPitch(pPix, &dst_pitch_offset))
> +    if (unlikely(!RADEONGetPixmapOffsetPitch(pPix, &dst_pitch_offset)))
>  	RADEON_FALLBACK(("RADEONGetPixmapOffsetPitch failed\n"));
>  
>      RADEON_SWITCH_TO_2D();
> @@ -175,7 +175,7 @@ FUNC_NAME(RADEONPrepareSolid)(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
>  	radeon_cs_space_add_persistent_bo(info->cs, driver_priv->bo, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret)
> +	if (unlikely(ret))
>  	    RADEON_FALLBACK(("Not enough RAM to hw accel solid operation\n"));
>  
>  	driver_priv = exaGetPixmapDriverPrivate(pPix);
> @@ -277,13 +277,13 @@ FUNC_NAME(RADEONPrepareCopy)(PixmapPtr pSrc,   PixmapPtr pDst,
>      uint32_t datatype, src_pitch_offset, dst_pitch_offset;
>      TRACE;
>  
> -    if (pDst->drawable.bitsPerPixel == 24)
> +    if (unlikely(pDst->drawable.bitsPerPixel == 24))
>  	RADEON_FALLBACK(("24bpp unsupported"));
> -    if (!RADEONGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype))
> +    if (unlikely(!RADEONGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype)))
>  	RADEON_FALLBACK(("RADEONGetDatatypeBpp failed\n"));
> -    if (!RADEONGetPixmapOffsetPitch(pSrc, &src_pitch_offset))
> +    if (unlikely(!RADEONGetPixmapOffsetPitch(pSrc, &src_pitch_offset)))
>  	RADEON_FALLBACK(("RADEONGetPixmapOffsetPitch source failed\n"));
> -    if (!RADEONGetPixmapOffsetPitch(pDst, &dst_pitch_offset))
> +    if (unlikely(!RADEONGetPixmapOffsetPitch(pDst, &dst_pitch_offset)))
>  	RADEON_FALLBACK(("RADEONGetPixmapOffsetPitch dest failed\n"));
>  
>      RADEON_SWITCH_TO_2D();
> @@ -304,7 +304,7 @@ FUNC_NAME(RADEONPrepareCopy)(PixmapPtr pSrc,   PixmapPtr pDst,
>  	info->state_2d.dst_bo = driver_priv->bo;
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret)
> +	if (unlikely(ret))
>  	    RADEON_FALLBACK(("Not enough RAM to hw accel copy operation\n"));
>      }
>  #endif
> @@ -373,7 +373,7 @@ RADEONUploadToScreenCP(PixmapPtr pDst, int x, int y, int w, int h,
>  
>      TRACE;
>  
> -    if (bpp < 8)
> +    if (unlikely(bpp < 8))
>  	return FALSE;
>  
>      if (info->directRenderingEnabled &&
> @@ -471,11 +471,11 @@ RADEONUploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
>      Bool r;
>      int i;
>  
> -    if (bpp < 8)
> +    if (unlikely(bpp < 8))
>  	return FALSE;
>  
>      driver_priv = exaGetPixmapDriverPrivate(pDst);
> -    if (!driver_priv || !driver_priv->bo)
> +    if (unlikely(!driver_priv || !driver_priv->bo))
>  	return FALSE;
>  
>  #if X_BYTE_ORDER == X_BIG_ENDIAN
> @@ -506,14 +506,14 @@ RADEONUploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
>  
>      size = scratch_pitch * h;
>      scratch = radeon_bo_open(info->bufmgr, 0, size, 0, RADEON_GEM_DOMAIN_GTT, 0);
> -    if (scratch == NULL) {
> +    if (unlikely(scratch == NULL)) {
>  	return FALSE;
>      }
>      radeon_cs_space_reset_bos(info->cs);
>      radeon_add_pixmap(info->cs, pDst, 0, RADEON_GEM_DOMAIN_VRAM);
>      radeon_cs_space_add_persistent_bo(info->cs, scratch, RADEON_GEM_DOMAIN_GTT, 0);
>      r = radeon_cs_space_check(info->cs);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -522,7 +522,7 @@ RADEONUploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
>  copy:
>  #endif
>      r = radeon_bo_map(scratch, 0);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -569,11 +569,11 @@ RADEONDownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>      uint32_t swap = RADEON_HOST_DATA_SWAP_NONE;
>      Bool r;
>  
> -    if (bpp < 8)
> +    if (unlikely(bpp < 8))
>  	return FALSE;
>  
>      driver_priv = exaGetPixmapDriverPrivate(pSrc);
> -    if (!driver_priv || !driver_priv->bo)
> +    if (unlikely(!driver_priv || !driver_priv->bo))
>  	return FALSE;
>  
>  #if X_BYTE_ORDER == X_BIG_ENDIAN
> @@ -612,14 +612,14 @@ RADEONDownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>  
>      size = scratch_pitch * h;
>      scratch = radeon_bo_open(info->bufmgr, 0, size, 0, RADEON_GEM_DOMAIN_GTT, 0);
> -    if (scratch == NULL) {
> +    if (unlikely(scratch == NULL)) {
>  	return FALSE;
>      }
>      radeon_cs_space_reset_bos(info->cs);
>      radeon_add_pixmap(info->cs, pSrc, RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM, 0);
>      radeon_cs_space_add_persistent_bo(info->cs, scratch, 0, RADEON_GEM_DOMAIN_GTT);
>      r = radeon_cs_space_check(info->cs);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -637,7 +637,7 @@ RADEONDownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
>  copy:
>  #endif
>      r = radeon_bo_map(scratch, 0);
> -    if (r) {
> +    if (unlikely(r)) {
>          r = FALSE;
>          goto out;
>      }
> @@ -775,7 +775,7 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen)
>  {
>      RINFO_FROM_SCREEN(pScreen);
>  
> -    if (info->accel_state->exa == NULL) {
> +    if (unlikely(info->accel_state->exa == NULL)) {
>  	xf86DrvMsg(pScreen->myNum, X_ERROR, "Memory map not set up\n");
>  	return FALSE;
>      }
> @@ -903,7 +903,7 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen)
>  
>      RADEONEngineInit(pScrn);
>  
> -    if (!exaDriverInit(pScreen, info->accel_state->exa)) {
> +    if (unlikely(!exaDriverInit(pScreen, info->accel_state->exa))) {
>  	xfree(info->accel_state->exa);
>  	return FALSE;
>      }
> diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
> index e68faff..1919936 100644
> --- a/src/radeon_exa_render.c
> +++ b/src/radeon_exa_render.c
> @@ -245,9 +245,7 @@ static Bool RADEONCheckTexturePOT(PicturePtr pPict, Bool canTile)
>      int h = pPict->pDrawable->height;
>      unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
>  
> -    if ((repeatType == RepeatNormal || repeatType == RepeatReflect) &&
> -	((w & (w - 1)) != 0 || (h & (h - 1)) != 0) &&
> -	!(repeatType == RepeatNormal && !pPict->transform && canTile))
> +    if (unlikely((repeatType == RepeatNormal || repeatType == RepeatReflect) && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0) && !(repeatType == RepeatNormal && !pPict->transform && canTile)))
>  	RADEON_FALLBACK(("NPOT repeating %s unsupported (%dx%d), transform=%d\n",
>  			 canTile ? "source" : "mask", w, h, pPict->transform != 0));
>  
> @@ -303,16 +301,14 @@ static Bool RADEONSetupSourceTile(PicturePtr pPict,
>  	int h = pPict->pDrawable->height;
>  	
>  	if (pPict->transform) {
> -	    if (badPitch)
> +	    if (unlikely(badPitch))
>  		RADEON_FALLBACK(("Width %d and pitch %u not compatible for repeat\n",
>  				 w, (unsigned)exaGetPixmapPitch(pPix)));
>  	} else {
>  	    info->accel_state->need_src_tile_x = (w & (w - 1)) != 0 || badPitch;
>  	    info->accel_state->need_src_tile_y = (h & (h - 1)) != 0;
>  
> -	    if ((info->accel_state->need_src_tile_x ||
> -		 info->accel_state->need_src_tile_y) &&
> -		repeatType != RepeatNormal)
> +	    if (unlikely((info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y) && repeatType != RepeatNormal))
>  		RADEON_FALLBACK(("Can only tile RepeatNormal at this time\n"));
>  
>  	    if (!canTile1d)
> @@ -342,22 +338,21 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict, int unit)
>       * see 197a62704742a4a19736c2637ac92d1dc5ab34ed
>       */
>  
> -    if ((w > 2047) || (h > 2047))
> +    if (unlikely((w > 2047) || (h > 2047)))
>  	RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
>  
>      for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++) {
>  	if (R100TexFormats[i].fmt == pPict->format)
>  	    break;
>      }
> -    if (i == sizeof(R100TexFormats) / sizeof(R100TexFormats[0]))
> +    if (unlikely(i == sizeof(R100TexFormats) / sizeof(R100TexFormats[0])))
>  	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
>  			(int)pPict->format));
>  
> -    if (!RADEONCheckTexturePOT(pPict, unit == 0))
> +    if (unlikely(!RADEONCheckTexturePOT(pPict, unit == 0)))
>  	return FALSE;
>  
> -    if (pPict->filter != PictFilterNearest &&
> -	pPict->filter != PictFilterBilinear)
> +    if (unlikely(pPict->filter != PictFilterNearest && pPict->filter != PictFilterBilinear))
>      {
>  	RADEON_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
>      }
> @@ -386,7 +381,7 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
>  
>      CHECK_OFFSET(pPix, 0x1f, "texture");
>  
> -    if ((txpitch & 0x1f) != 0)
> +    if (unlikely((txpitch & 0x1f) != 0))
>  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
>  
>      for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++)
> @@ -399,7 +394,7 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
>  	txoffset |= RADEON_TXO_MACRO_TILE;
>  
>      if (repeat) {
> -	if (!RADEONPitchMatches(pPix))
> +	if (unlikely(!RADEONPitchMatches(pPix)))
>  	    RADEON_FALLBACK(("Width %d and pitch %u not compatible for repeat\n",
>  			     w, (unsigned)txpitch));
>  
> @@ -495,10 +490,10 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
>      uint32_t tmp1;
>  
>      /* Check for unsupported compositing operations. */
> -    if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
> +    if (unlikely(op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])))
>  	RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
>  
> -    if (!pSrcPicture->pDrawable)
> +    if (unlikely(!pSrcPicture->pDrawable))
>  	RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>      /* r100 limit should be 2048, there are issues with 2048
> @@ -507,8 +502,7 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
>  
>      pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
>  
> -    if (pSrcPixmap->drawable.width > 2047 ||
> -	pSrcPixmap->drawable.height > 2047) {
> +    if (unlikely(pSrcPixmap->drawable.width > 2047 || pSrcPixmap->drawable.height > 2047)) {
>  	RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
>  			 pSrcPixmap->drawable.width,
>  			 pSrcPixmap->drawable.height));
> @@ -516,8 +510,7 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
>  
>      pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
>  
> -    if (pDstPixmap->drawable.width > 2047 ||
> -	pDstPixmap->drawable.height > 2047) {
> +    if (unlikely(pDstPixmap->drawable.width > 2047 || pDstPixmap->drawable.height > 2047)) {
>  	RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
>  			 pDstPixmap->drawable.width,
>  			 pDstPixmap->drawable.height));
> @@ -526,13 +519,12 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
>      if (pMaskPicture) {
>  	PixmapPtr pMaskPixmap;
>  
> -	if (!pMaskPicture->pDrawable)
> +	if (unlikely(!pMaskPicture->pDrawable))
>  	    RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>  	pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
>  
> -	if (pMaskPixmap->drawable.width > 2047 ||
> -	    pMaskPixmap->drawable.height > 2047) {
> +	if (unlikely(pMaskPixmap->drawable.width > 2047 || pMaskPixmap->drawable.height > 2047)) {
>  	    RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
>  			     pMaskPixmap->drawable.width,
>  			     pMaskPixmap->drawable.height));
> @@ -543,22 +535,20 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
>  	     * on the source value.  We can only get one of those into the
>  	     * single source value that we get to blend with.
>  	     */
> -	    if (RadeonBlendOp[op].src_alpha &&
> -		(RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) !=
> -		RADEON_SRC_BLEND_GL_ZERO) {
> +	    if (unlikely(RadeonBlendOp[op].src_alpha && (RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) != RADEON_SRC_BLEND_GL_ZERO)) {
>  		RADEON_FALLBACK(("Component alpha not supported with source "
>  				 "alpha and source value blending.\n"));
>  	    }
>  	}
>  
> -	if (!R100CheckCompositeTexture(pMaskPicture, 1))
> +	if (unlikely(!R100CheckCompositeTexture(pMaskPicture, 1)))
>  	    return FALSE;
>      }
>  
> -    if (!R100CheckCompositeTexture(pSrcPicture, 0))
> +    if ((!R100CheckCompositeTexture(pSrcPicture, 0)))
>  	return FALSE;
>  
> -    if (!RADEONGetDestFormat(pDstPicture, &tmp1))
> +    if ((!RADEONGetDestFormat(pDstPicture, &tmp1)))
>  	return FALSE;
>  
>      return TRUE;
> @@ -594,7 +584,7 @@ RADEONPrepareCompositeCS(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture
>  	radeon_add_pixmap(info->cs, pDst, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret)
> +	if (unlikely(ret))
>  	    RADEON_FALLBACK(("Not enough RAM to hw accel composite operation\n"));
>      }
>  #endif
> @@ -621,10 +611,10 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
>  
>      TRACE;
>  
> -    if (!RADEONGetDestFormat(pDstPicture, &dst_format))
> +    if (unlikely(!RADEONGetDestFormat(pDstPicture, &dst_format)))
>  	return FALSE;
>  
> -    if (pDstPicture->format == PICT_a8 && RadeonBlendOp[op].dst_alpha)
> +    if (unlikely(pDstPicture->format == PICT_a8 && RadeonBlendOp[op].dst_alpha))
>  	RADEON_FALLBACK(("Can't dst alpha blend A8\n"));
>  
>      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
> @@ -636,10 +626,10 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
>  
>      CHECK_OFFSET(pDst, 0x0f, "destination");
>  
> -    if (((dst_pitch >> pixel_shift) & 0x7) != 0)
> +    if (unlikely(((dst_pitch >> pixel_shift) & 0x7) != 0))
>  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
>  
> -    if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
> +    if (unlikely(!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)))
>  	return FALSE;
>  
>      RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
> @@ -648,12 +638,12 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
>      /* switch to 3D after doing buffer space checks as the latter may flush */
>      RADEON_SWITCH_TO_3D();
>  
> -    if (!FUNC_NAME(R100TextureSetup)(pSrcPicture, pSrc, 0))
> +    if (unlikely(!FUNC_NAME(R100TextureSetup)(pSrcPicture, pSrc, 0)))
>  	return FALSE;
>      pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
>  
>      if (pMask != NULL) {
> -	if (!FUNC_NAME(R100TextureSetup)(pMaskPicture, pMask, 1))
> +	if (unlikely(!FUNC_NAME(R100TextureSetup)(pMaskPicture, pMask, 1)))
>  	    return FALSE;
>  	pp_cntl |= RADEON_TEX_1_ENABLE;
>      } else {
> @@ -733,7 +723,7 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, int unit)
>       * see bug 19269
>       */
>  
> -    if ((w > 2047) || (h > 2047))
> +    if (unlikely((w > 2047) || (h > 2047)))
>  	RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
>  
>      for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++)
> @@ -741,15 +731,14 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, int unit)
>  	if (R200TexFormats[i].fmt == pPict->format)
>  	    break;
>      }
> -    if (i == sizeof(R200TexFormats) / sizeof(R200TexFormats[0]))
> +    if (unlikely(i == sizeof(R200TexFormats) / sizeof(R200TexFormats[0])))
>  	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
>  			 (int)pPict->format));
>  
> -    if (!RADEONCheckTexturePOT(pPict, unit == 0))
> +    if (unlikely(!RADEONCheckTexturePOT(pPict, unit == 0)))
>  	return FALSE;
>  
> -    if (pPict->filter != PictFilterNearest &&
> -	pPict->filter != PictFilterBilinear)
> +    if (unlikely(pPict->filter != PictFilterNearest && pPict->filter != PictFilterBilinear))
>  	RADEON_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
>  
>      return TRUE;
> @@ -776,7 +765,7 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
>      txoffset = 0;
>      CHECK_OFFSET(pPix, 0x1f, "texture");
>  
> -    if ((txpitch & 0x1f) != 0)
> +    if (unlikely((txpitch & 0x1f) != 0))
>  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
>  
>      for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++)
> @@ -789,7 +778,7 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
>  	txoffset |= R200_TXO_MACRO_TILE;
>  
>      if (repeat) {
> -	if (!RADEONPitchMatches(pPix))
> +	if (unlikely(!RADEONPitchMatches(pPix)))
>  	    RADEON_FALLBACK(("Width %d and pitch %u not compatible for repeat\n",
>  			     w, (unsigned)txpitch));
>  
> @@ -876,10 +865,10 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      TRACE;
>  
>      /* Check for unsupported compositing operations. */
> -    if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
> +    if (unlikely(op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])))
>  	RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
>  
> -    if (!pSrcPicture->pDrawable)
> +    if (unlikely(!pSrcPicture->pDrawable))
>  	RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>      /* r200 limit should be 2048, there are issues with 2048
> @@ -888,8 +877,7 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  
>      pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
>  
> -    if (pSrcPixmap->drawable.width > 2047 ||
> -	pSrcPixmap->drawable.height > 2047) {
> +    if (unlikely(pSrcPixmap->drawable.width > 2047 || pSrcPixmap->drawable.height > 2047)) {
>  	RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
>  			 pSrcPixmap->drawable.width,
>  			 pSrcPixmap->drawable.height));
> @@ -897,8 +885,7 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  
>      pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
>  
> -    if (pDstPixmap->drawable.width > 2047 ||
> -	pDstPixmap->drawable.height > 2047) {
> +    if (unlikely(pDstPixmap->drawable.width > 2047 || pDstPixmap->drawable.height > 2047)) {
>  	RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
>  			 pDstPixmap->drawable.width,
>  			 pDstPixmap->drawable.height));
> @@ -907,13 +894,12 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      if (pMaskPicture) {
>  	PixmapPtr pMaskPixmap;
>  
> -	if (!pMaskPicture->pDrawable)
> +	if (unlikely(!pMaskPicture->pDrawable))
>  	    RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>  	pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
>  
> -	if (pMaskPixmap->drawable.width > 2047 ||
> -	    pMaskPixmap->drawable.height > 2047) {
> +	if (unlikely(pMaskPixmap->drawable.width > 2047 || pMaskPixmap->drawable.height > 2047)) {
>  	    RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
>  			     pMaskPixmap->drawable.width,
>  			     pMaskPixmap->drawable.height));
> @@ -924,22 +910,20 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  	     * on the source value.  We can only get one of those into the
>  	     * single source value that we get to blend with.
>  	     */
> -	    if (RadeonBlendOp[op].src_alpha &&
> -		(RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) !=
> -		RADEON_SRC_BLEND_GL_ZERO) {
> +	    if (unlikely(RadeonBlendOp[op].src_alpha && (RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) != RADEON_SRC_BLEND_GL_ZERO)) {
>  		RADEON_FALLBACK(("Component alpha not supported with source "
>  				 "alpha and source value blending.\n"));
>  	    }
>  	}
>  
> -	if (!R200CheckCompositeTexture(pMaskPicture, 1))
> +	if (unlikely(!R200CheckCompositeTexture(pMaskPicture, 1)))
>  	    return FALSE;
>      }
>  
> -    if (!R200CheckCompositeTexture(pSrcPicture, 0))
> +    if (unlikely(!R200CheckCompositeTexture(pSrcPicture, 0)))
>  	return FALSE;
>  
> -    if (!RADEONGetDestFormat(pDstPicture, &tmp1))
> +    if (unlikely(!RADEONGetDestFormat(pDstPicture, &tmp1)))
>  	return FALSE;
>  
>      return TRUE;
> @@ -959,10 +943,10 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
>  
>      TRACE;
>  
> -    if (!RADEONGetDestFormat(pDstPicture, &dst_format))
> +    if (unlikely(!RADEONGetDestFormat(pDstPicture, &dst_format)))
>  	return FALSE;
>  
> -    if (pDstPicture->format == PICT_a8 && RadeonBlendOp[op].dst_alpha)
> +    if (unlikely(pDstPicture->format == PICT_a8 && RadeonBlendOp[op].dst_alpha))
>  	RADEON_FALLBACK(("Can't dst alpha blend A8\n"));
>  
>      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
> @@ -974,10 +958,10 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
>  
>      CHECK_OFFSET(pDst, 0xf, "destination");
>  
> -    if (((dst_pitch >> pixel_shift) & 0x7) != 0)
> +    if (unlikely(((dst_pitch >> pixel_shift) & 0x7) != 0))
>  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
>  
> -    if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
> +    if (unlikely(!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)))
>  	return FALSE;
>  
>      RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
> @@ -986,12 +970,12 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
>      /* switch to 3D after doing buffer space checks as it may flush */
>      RADEON_SWITCH_TO_3D();
>  
> -    if (!FUNC_NAME(R200TextureSetup)(pSrcPicture, pSrc, 0))
> +    if (unlikely(!FUNC_NAME(R200TextureSetup)(pSrcPicture, pSrc, 0)))
>  	return FALSE;
>      pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
>  
>      if (pMask != NULL) {
> -	if (!FUNC_NAME(R200TextureSetup)(pMaskPicture, pMask, 1))
> +	if (unlikely(!FUNC_NAME(R200TextureSetup)(pMaskPicture, pMask, 1)))
>  	    return FALSE;
>  	pp_cntl |= RADEON_TEX_1_ENABLE;
>      } else {
> @@ -1095,7 +1079,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
>  	max_tex_h = 2048;
>      }
>  
> -    if ((w > max_tex_w) || (h > max_tex_h))
> +    if (unlikely((w > max_tex_w) || (h > max_tex_h)))
>  	RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
>  
>      for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++)
> @@ -1103,12 +1087,12 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
>  	if (R300TexFormats[i].fmt == pPict->format)
>  	    break;
>      }
> -    if (i == sizeof(R300TexFormats) / sizeof(R300TexFormats[0]))
> +    if (unlikely(i == sizeof(R300TexFormats) / sizeof(R300TexFormats[0])))
>  	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
>  			 (int)pPict->format));
>  
>      if (!RADEONCheckTexturePOT(pPict, unit == 0)) {
> -	if (info->cs) {
> +	if (likely(info->cs)) {
>      		struct radeon_exa_pixmap_priv *driver_priv;
>  		PixmapPtr pPix;
>  
> @@ -1119,8 +1103,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
>  	return FALSE;
>      }
>  
> -    if (pPict->filter != PictFilterNearest &&
> -	pPict->filter != PictFilterBilinear)
> +    if (unlikely(pPict->filter != PictFilterNearest && pPict->filter != PictFilterBilinear))
>  	RADEON_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
>  
>      /* for REPEAT_NONE, Render semantics are that sampling outside the source
> @@ -1132,7 +1115,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
>       * clipping.
>       */
>      if (pPict->transform != 0 && repeatType == RepeatNone && PICT_FORMAT_A(pPict->format) == 0) {
> -	if (!(((op == PictOpSrc) || (op == PictOpClear)) && (PICT_FORMAT_A(pDstPict->format) == 0)))
> +	if (unlikely(!(((op == PictOpSrc) || (op == PictOpClear)) && (PICT_FORMAT_A(pDstPict->format) == 0))))
>  	    RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
>      }
>  
> @@ -1160,7 +1143,7 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
>  
>      CHECK_OFFSET(pPix, 0x1f, "texture");
>  
> -    if ((txpitch & 0x1f) != 0)
> +    if (unlikely((txpitch & 0x1f) != 0))
>  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
>  
>      /* TXPITCH = pixels (texels) per line - 1 */
> @@ -1332,10 +1315,10 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      TRACE;
>  
>      /* Check for unsupported compositing operations. */
> -    if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
> +    if (unlikely(op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])))
>  	RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
>  
> -    if (!pSrcPicture->pDrawable)
> +    if (unlikely(!pSrcPicture->pDrawable))
>  	RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>      pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
> @@ -1357,8 +1340,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  	}
>      }
>  
> -    if (pSrcPixmap->drawable.width > max_tex_w ||
> -	pSrcPixmap->drawable.height > max_tex_h) {
> +    if (unlikely(pSrcPixmap->drawable.width > max_tex_w || pSrcPixmap->drawable.height > max_tex_h)) {
>  	RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
>  			 pSrcPixmap->drawable.width,
>  			 pSrcPixmap->drawable.height));
> @@ -1366,8 +1348,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  
>      pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
>  
> -    if (pDstPixmap->drawable.width > max_dst_w ||
> -	pDstPixmap->drawable.height > max_dst_h) {
> +    if (unlikely(pDstPixmap->drawable.width > max_dst_w || pDstPixmap->drawable.height > max_dst_h)) {
>  	RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
>  			 pDstPixmap->drawable.width,
>  			 pDstPixmap->drawable.height));
> @@ -1376,13 +1357,12 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>      if (pMaskPicture) {
>  	PixmapPtr pMaskPixmap;
>  
> -	if (!pMaskPicture->pDrawable)
> +	if (unlikely(!pMaskPicture->pDrawable))
>  	    RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
>  
>  	pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
>  
> -	if (pMaskPixmap->drawable.width > max_tex_w ||
> -	    pMaskPixmap->drawable.height > max_tex_h) {
> +	if (unlikely(pMaskPixmap->drawable.width > max_tex_w || pMaskPixmap->drawable.height > max_tex_h)) {
>  	    RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
>  			     pMaskPixmap->drawable.width,
>  			     pMaskPixmap->drawable.height));
> @@ -1393,22 +1373,20 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
>  	     * on the source value.  We can only get one of those into the
>  	     * single source value that we get to blend with.
>  	     */
> -	    if (RadeonBlendOp[op].src_alpha &&
> -		(RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) !=
> -		RADEON_SRC_BLEND_GL_ZERO) {
> +	    if (unlikely(RadeonBlendOp[op].src_alpha && (RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) != RADEON_SRC_BLEND_GL_ZERO)) {
>  		RADEON_FALLBACK(("Component alpha not supported with source "
>  				 "alpha and source value blending.\n"));
>  	    }
>  	}
>  
> -	if (!R300CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1, IS_R500_3D))
> +	if (unlikely(!R300CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1, IS_R500_3D)))
>  	    return FALSE;
>      }
>  
> -    if (!R300CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0, IS_R500_3D))
> +    if (unlikely(!R300CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0, IS_R500_3D)))
>  	return FALSE;
>  
> -    if (!R300GetDestFormat(pDstPicture, &tmp1))
> +    if (unlikely(!R300GetDestFormat(pDstPicture, &tmp1)))
>  	return FALSE;
>  
>      return TRUE;
> @@ -1431,7 +1409,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
>      ACCEL_PREAMBLE();
>      TRACE;
>  
> -    if (!R300GetDestFormat(pDstPicture, &dst_format))
> +    if (unlikely(!R300GetDestFormat(pDstPicture, &dst_format)))
>  	return FALSE;
>  
>      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
> @@ -1446,10 +1424,10 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
>  
>      CHECK_OFFSET(pDst, 0x0f, "destination");
>  
> -    if (((dst_pitch >> pixel_shift) & 0x7) != 0)
> +    if (unlikely(((dst_pitch >> pixel_shift) & 0x7) != 0))
>  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
>  
> -    if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE))
> +    if (unlikely(!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE)))
>  	return FALSE;
>  
>      RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
> @@ -1458,12 +1436,12 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
>      /* have to execute switch after doing buffer sizing check as the latter flushes */
>      RADEON_SWITCH_TO_3D();
>  
> -    if (!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0))
> +    if (unlikely(!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0)))
>  	return FALSE;
>      txenable = R300_TEX_0_ENABLE;
>  
>      if (pMask != NULL) {
> -	if (!FUNC_NAME(R300TextureSetup)(pMaskPicture, pMask, 1))
> +	if (unlikely(!FUNC_NAME(R300TextureSetup)(pMaskPicture, pMask, 1)))
>  	    return FALSE;
>  	txenable |= R300_TEX_1_ENABLE;
>      } else {
> diff --git a/src/radeon_kms.c b/src/radeon_kms.c
> index 15e5e3f..841ca8b 100644
> --- a/src/radeon_kms.c
> +++ b/src/radeon_kms.c
> @@ -100,7 +100,7 @@ void radeon_cs_flush_indirect(ScrnInfoPtr pScrn)
>      ret = radeon_cs_space_check_with_bo(info->cs,
>  					accel_state->vb_bo,
>  					RADEON_GEM_DOMAIN_GTT, 0);
> -    if (ret)
> +    if (unlikely(ret))
>        ErrorF("space check failed in flush\n");
>  
>      if (info->reemit_current2d && info->state_2d.op)
> @@ -204,7 +204,7 @@ static Bool RADEONIsAccelWorking(ScrnInfoPtr pScrn)
>      ginfo.request = 0x3;
>      ginfo.value = (uintptr_t)&tmp;
>      r = drmCommandWriteRead(info->dri->drmFD, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
> -    if (r) {
> +    if (unlikely(r)) {
>          /* If kernel is too old before 2.6.32 than assume accel is working */
>          if (r == -EINVAL) {
>              xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Kernel too old missing accel "
> @@ -252,7 +252,7 @@ static Bool RADEONPreInitAccel_KMS(ScrnInfoPtr pScrn)
>  
>      info->useEXA = TRUE;
>  
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	int errmaj = 0, errmin = 0;
>  	info->exaReq.majorversion = EXA_VERSION_MAJOR;
>  	info->exaReq.minorversion = EXA_VERSION_MINOR;
> @@ -604,7 +604,7 @@ static Bool RADEONCloseScreen_KMS(int scrnIndex, ScreenPtr pScreen)
>      if (info->cs)
>        radeon_cs_flush_indirect(pScrn);
>  
> -    if (info->accel_state->exa) {
> +    if (likely(info->accel_state->exa)) {
>  	exaDriverFini(pScreen);
>  	xfree(info->accel_state->exa);
>  	info->accel_state->exa = NULL;
> @@ -662,7 +662,7 @@ Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
>      miSetPixmapDepths ();
>  
>      ret = drmSetMaster(info->dri->drmFD);
> -    if (ret) {
> +    if (unlikely(ret)) {
>          ErrorF("Unable to retrieve master\n");
>          return FALSE;
>      }
> @@ -880,7 +880,7 @@ Bool RADEONEnterVT_KMS(int scrnIndex, int flags)
>  
> 
>      ret = drmSetMaster(info->dri->drmFD);
> -    if (ret)
> +    if (unlikely(ret))
>  	ErrorF("Unable to retrieve master\n");
>      info->accel_state->XInited3D = FALSE;
>      info->accel_state->engineMode = EXA_ENGINEMODE_UNKNOWN;
> diff --git a/src/radeon_legacy_memory.c b/src/radeon_legacy_memory.c
> index 3e75291..07cff0d 100644
> --- a/src/radeon_legacy_memory.c
> +++ b/src/radeon_legacy_memory.c
> @@ -37,7 +37,7 @@ radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,
>      }
>  #endif
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	ExaOffscreenArea *area = *mem_struct;
>  
>  	if (area != NULL) {
> @@ -120,7 +120,7 @@ radeon_legacy_free_memory(ScrnInfoPtr pScrn,
>  #ifdef USE_EXA
>      ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
>  
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	ExaOffscreenArea *area = mem_struct;
>  
>  	if (area != NULL)
> diff --git a/src/radeon_macros.h b/src/radeon_macros.h
> index 26d9825..b7d5c41 100644
> --- a/src/radeon_macros.h
> +++ b/src/radeon_macros.h
> @@ -168,7 +168,7 @@ do {									\
>  #define CHECK_OFFSET(pPix, mask, type) do {	\
>      if (!info->cs) {			       \
>  	uint32_t _pix_offset = radeonGetPixmapOffset(pPix);	\
> -	if ((_pix_offset & mask) != 0)					\
> +	if (unlikely((_pix_offset & mask) != 0))			\
>  	    RADEON_FALLBACK(("Bad %s offset 0x%x\n", type, (int)_pix_offset)); \
>      }									\
>      } while(0)
> diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c
> index 1490ccb..2db850b 100644
> --- a/src/radeon_textured_video.c
> +++ b/src/radeon_textured_video.c
> @@ -68,7 +68,7 @@ RADEONTilingEnabled(ScrnInfoPtr pScrn, PixmapPtr pPix)
>      RADEONInfoPtr info = RADEONPTR(pScrn);
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	if (info->tilingEnabled && exaGetPixmapOffset(pPix) == 0)
>  	    return TRUE;
>  	else
> @@ -344,7 +344,7 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn,
>  	pPriv->pPixmap = (PixmapPtr)pDraw;
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	/* Force the pixmap into framebuffer so we can draw to it. */
>  	info->exa_force_create = TRUE;
>  	exaMoveInPixmap(pPriv->pPixmap);
> @@ -376,7 +376,7 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn,
>  	src_bo = pPriv->src_bo[pPriv->currentBuffer];
>  
>  	ret = radeon_bo_map(src_bo, 1);
> -	if (ret)
> +	if (unlikely(ret))
>  	    return BadAlloc;
>  
>  	pPriv->src_addr = src_bo->ptr;
> @@ -713,7 +713,7 @@ Bool radeon_load_bicubic_texture(ScrnInfoPtr pScrn)
>  							 &info->bicubic_memory,
>  							 sizeof(bicubic_tex_512), 64,
>  							 RADEON_GEM_DOMAIN_VRAM);
> -    if (info->bicubic_offset == 0)
> +    if (unlikely(info->bicubic_offset == 0))
>  	return FALSE;
>  
>      if (info->cs)
> @@ -725,7 +725,7 @@ Bool radeon_load_bicubic_texture(ScrnInfoPtr pScrn)
>  	int ret;
>  	if (info->cs) {
>  	    ret = radeon_bo_map(info->bicubic_bo, 1);
> -	    if (ret)
> +	    if (unlikely(ret))
>  		return FALSE;
>  
>  	    bicubic_addr = info->bicubic_bo->ptr;
> diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
> index f967331..9bc1499 100644
> --- a/src/radeon_textured_videofuncs.c
> +++ b/src/radeon_textured_videofuncs.c
> @@ -117,7 +117,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
>  	radeon_cs_space_add_persistent_bo(info->cs, driver_priv->bo, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  	    ErrorF("Not enough RAM to hw accel xv operation\n");
>  	    return;
>  	}
> @@ -128,7 +128,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
>  
>      
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	dst_pitch = exaGetPixmapPitch(pPixmap);
>      } else
>  #endif
> @@ -145,7 +145,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
>  #endif
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	RADEON_SWITCH_TO_3D();
>      } else
>  #endif
> @@ -513,7 +513,7 @@ FUNC_NAME(R200DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  	radeon_cs_space_add_persistent_bo(info->cs, driver_priv->bo, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  	    ErrorF("Not enough RAM to hw accel xv operation\n");
>  	    return;
>  	}
> @@ -523,7 +523,7 @@ FUNC_NAME(R200DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>      pixel_shift = pPixmap->drawable.bitsPerPixel >> 4;
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	dst_pitch = exaGetPixmapPitch(pPixmap);
>      } else
>  #endif
> @@ -540,7 +540,7 @@ FUNC_NAME(R200DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  #endif
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	RADEON_SWITCH_TO_3D();
>      } else
>  #endif
> @@ -1062,7 +1062,7 @@ FUNC_NAME(R300DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  	radeon_cs_space_add_persistent_bo(info->cs, driver_priv->bo, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  	    ErrorF("Not enough RAM to hw accel xv operation\n");
>  	    return;
>  	}
> @@ -1072,7 +1072,7 @@ FUNC_NAME(R300DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>      pixel_shift = pPixmap->drawable.bitsPerPixel >> 4;
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	dst_pitch = exaGetPixmapPitch(pPixmap);
>      } else
>  #endif
> @@ -1089,7 +1089,7 @@ FUNC_NAME(R300DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  #endif
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	RADEON_SWITCH_TO_3D();
>      } else
>  #endif
> @@ -2520,7 +2520,7 @@ FUNC_NAME(R500DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  	radeon_cs_space_add_persistent_bo(info->cs, driver_priv->bo, 0, RADEON_GEM_DOMAIN_VRAM);
>  
>  	ret = radeon_cs_space_check(info->cs);
> -	if (ret) {
> +	if (unlikely(ret)) {
>  	    ErrorF("Not enough RAM to hw accel xv operation\n");
>  	    return;
>  	}
> @@ -2530,7 +2530,7 @@ FUNC_NAME(R500DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>      pixel_shift = pPixmap->drawable.bitsPerPixel >> 4;
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	dst_pitch = exaGetPixmapPitch(pPixmap);
>      } else
>  #endif
> @@ -2547,7 +2547,7 @@ FUNC_NAME(R500DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
>  #endif
>  
>  #ifdef USE_EXA
> -    if (info->useEXA) {
> +    if (likely(info->useEXA)) {
>  	RADEON_SWITCH_TO_3D();
>      } else
>  #endif
> diff --git a/src/radeon_vbo.h b/src/radeon_vbo.h
> index a8c70b3..43fde05 100644
> --- a/src/radeon_vbo.h
> +++ b/src/radeon_vbo.h
> @@ -39,7 +39,7 @@ radeon_vbo_space(ScrnInfoPtr pScrn, int vert_size)
>  
>  	if (!bo->ptr) {
>  	    ret = radeon_bo_map(bo, 1);
> -	    if (ret) {
> +	    if (unlikely(ret)) {
>  		FatalError("Failed to map vb %d\n", ret);
>  		return NULL;
>  	    }




More information about the xorg-driver-ati mailing list