We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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