[cc65] Optimizing C code

Date view Thread view Subject view

From: Shawn Jefferson (sjefferson_at_sd62.bc.ca)
Date: 2003-09-03 21:57:12


I have a routine that plots pixels on a memory bitmap and am making an attempt to optimize it.  I'm hoping some of you C wizards can help.

The routine is passed a structure called bmp, which contains a pointer to the memory area and the graphics mode.  The function, and the memory bitmap can be arbitrary lengths of y and x.  Anyway, here is my attempt at optimizing it a little using some lookup tables:

const unsigned char plot4cmask[4]  = {0xC0,0x30,0x0C,0x03};
const unsigned char plot4cshift[4] = {6,4,2,0};



/* plot_4colmode_nc
 *
 * Plots a point on the bitmap using the passed in color register.  This
 * function does no clipping, so you have to watch the parameters you pass
 * in.
 */
void __fastcall__ plot_4colmode_nc(BITMAP *bmp, int x, int y, unsigned char creg)
{
  unsigned char byte, bit, mask;
  unsigned char data;
  unsigned int index;


  byte = (x / 4);
  bit  = (x % 4);
  index = ((BYTES_PER_LINE(bmp) * y) + byte);

  data = bmp->dat[index];

  //mask = 3 << (6 - (bit * 2));                  // clear the pixel first 
  data &= ~plot4cmask[bit];

  if (creg != BAKCOL(bmp->mode)) {              // not background color?
    creg++;                                     // creg 0->01, 1->10, 2->11
    //mask = creg << (6 - (bit * 2));
    mask = creg << plot4cshift[bit];
    data |= mask;
  }

  bmp->dat[index] = data;
  return;
}

¯
Shawn Jefferson


----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.


Date view Thread view Subject view

This archive was generated by hypermail 2.1.3 : 2003-09-03 21:58:48 CEST