On Mon, Dec 17, 2007 at 06:55:57PM +0100, Eric Dumazet wrote: > long *mid(long *a, long *b) > { > return ((a - b) / 2 + a); > } ... is not actually a middle (you'd want b-a, not a-b there), but anyway > It gave : > mid: > movq %rdi, %rdx > subq %rsi, %rdx > sarq $3, %rdx > movq %rdx, %rax > shrq $63, %rax > addq %rdx, %rax > sarq %rax > leaq (%rdi,%rax,8), %rax > ret > > while > > long *mid(long *a, long *b) > { > return ((a - b) / 2u + a); > } ... undefined behaviour if a < b > and while : > > long *mid(long *a, long *b) > { > return (((unsigned long)(a - b)) / 2 + a); > } undefined behaviour, again. - To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html