Hmm, scheint tatsächlich so üblich zu sein, AND- und OR-Verknüpfungen durch jede Menge Jumps zu berechnen. Das wird ja nicht nur in diesem Fall mit dem if so gemacht, sondern auch bei einem "int x = (i == 5 || (i > 3 && i < 7))".
Ich habe dasselbe nochmal kurz mit FreePascal probiert, da kommt auch so etwas ähnliches raus:
# [3] if (i = 5) or ((i > 3) and (i < 7)) then begin
cmpl $5,%eax
je .L3
jmp .L5
.L5:
cmpl $3,%eax
jg .L6
jmp .L4
.L6:
cmpl $7,%eax
jl .L3
jmp .L4
.L3:
# then-Zweig
.L4:
# else-Zweig