Everytime I try to use the _lror_ it works fine several times... but if there's an overflow the variable is set to 0x00000000
//here's the test programm
void main(void) { unsigned long test = 0x80000000; test = _lror_(test,1); }
//to get it working I created my own lror but it's a lot more bigger than the intrinsic _lror_
unsigned long lror(unsigned long input, unsigned int count) {
unsigned int itmp1,itmp2; bit bit1,bit2;
while(count-->0) { itmp1 = input; input = input>>16; itmp2 = input; bit1 = itmp1 & 0x1; bit2 = itmp2 & 0x1; itmp1 &= 0xfffe; itmp2 &= 0xfffe; itmp1 |= bit2; itmp2 |= bit1; itmp1 = _iror_(itmp1,1); itmp2 = _iror_(itmp2,1); input = itmp2; input = input<<16; input |= itmp1; } return input; }
can anyone confirm my problem with the intrinsic _lror_
unsigned long test = 0x80000000;
while(1) { test = _lror_(test,1); }
I can confirm that this is a compiler problem. It will be solved in the next upcoming revision.
If you need a fix, send email to support.intl@keil.com
*** NOTE *** This forum is not a tools support forum. You MUST use the official support channels to report tool problems. See: http://www.keil.com/support/contact.asp