Hello, Maybe I am too dumb to figure out where is the problem. I am implementing a large integer addition function, b = a + b, where a,b point to arrays with num 16-bit words, the function will return the carry value, either 0 or 1. The problem is that this simple function always causes wrong results, while a for loop (in C) simply does the job. I spent hours on it and could not figure our where is the problem. Any suggestion will be highly appreciated!
Thanks, haodong uint16_t addition(uint16_t *a, uint16_t *b, uint16_t num) { uint16_t carry = 0; asm volatile ( "1: \n" " rra %0 \n" " addc 0(%1), 0(%2) \n" " rlc %0 \n" " add #2, %1 \n" " add #2, %2 \n" " dec %3 \n" " jnz 1b \n" :"+r"(carry), "+r"(a), "+r"(b), "+r"(num) : ); return carry; }