[t:/]$ 지식_

신기한 swtich case (duff's device)

2009/12/14

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 님의 제보로 더욱 자세한 사실을 알게 됨.

http://en.wikipedia.org/wiki/Duff%27s_device

위키에서 풀어쓴 동치인 코드를 인용하면 이렇다. 이제 이해하기가 쉽다. 즉, 루프 깨기 (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++;
    }
}








[t:/] is not "technology - root". dawnsea, rss