qt 4.6 안에 있는 코드..
매직아이 보듯이 보면 이상한 곳이 보일꺼임.
우주는 오묘하다..
강바닥이나 파자.
template <class T>
inline void qt_memfill(T *dest, T value, int count)
{
int n = (count + 7) / 8;
switch (count & 0x07)
{
case 0: do { *dest++ = value;
case 7: *dest++ = value;
case 6: *dest++ = value;
case 5: *dest++ = value;
case 4: *dest++ = value;
case 3: *dest++ = value;
case 2: *dest++ = value;
case 1: *dest++ = value;
} while (--n > 0);
}
}
illust 님의 제보로 더욱 자세한 사실을 알게 됨.
위키에서 풀어쓴 동치인 코드를 인용하면 이렇다. 이제 이해하기가 쉽다. 즉, 루프 깨기 (loop unrolling)를 하면서 패딩을 처리하는 것이다.
send(to, from, count)
register short *to, *from;
register count;
{
register n = (count + 7) / 8;
switch (count % 8) {
case 0: *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
}
while (--n > 0) {
*to = *from++;
*to = *from++;
*to = *from++;
*to = *from++;
*to = *from++;
*to = *from++;
*to = *from++;
*to = *from++;
}
}