Hi,

thanks for all the input!
Leon, this really is a cool function. It will go to my collection ;-).

Though I used your version, Steve. Worked out of the box!
Why does it say "+r" ?
And, perhaps you could add the "gcc manual hint" to the 1.ยง in chapter 6 (didn't even had the idea to look there, too).

Greetz and thanks,

        Georg


Steve Underwood wrote:
Hi Georg,

I haven't tested this, but to embed the assembly language you need something like the following. If you look in the mspgcc documentation you will find some information about this. If you look in the GNU GCC documentation you will find some more. However, this area is not as well documented as it might be, with clear examples, etc. Figuring out exactly how to use those dependency fields is not easy.

Regards,
Steve

unsigned char reverse(unsigned char b)
{
 unsigned char tmp = 0;

 for( i=0; i<8; i++ )
 {
   __asm__ (
           " rrc.b  %[b] \n"
           " rrl.b   %[tmp] \n"
       : [tmp] "+r"(tmp)
       : [b] "r"(b));
 }
   return tmp;
}

Georg Ritter wrote:

Good morning!

I'm looking for a proper implementation of a bitwisereverse function of a byte (1010 0001 becomes: 1000 0101). I want to replace an ugly and clumpsy function I used in testing.

I would like to write smth like:

unsigned char reverse(unsigned char b)
{
  unsigned char tmp=0;
  for( i=0; i<8; i++ )
  {
    // RRC.B of b
    // RRL.B into tmp
  }
    return tmp;
}

There's no real "C" way of doing it, isn't it? So what could the inline asmbly line for that look like. I never used it before, and it's tricky and documents didn't enlighten my too much. So my versions either didn't compile or didn't work.

Or is there a smaller (in terms of code size) way of doing the reversion (hacker contest ;-) )?
..



Reply via email to