Цитата(dxp @ Nov 29 2010, 08:20)

Посмотрел по ссылке. Красиво. И реализация, и результат.

Можно проще и на чистом си:
Код
inline void unroll_out(uint8_t count, uint8_t value)
{
PORTB = value;
value <<= 1;
if(count) unroll_out(count-1, value);
}
void foo(uint8_t v)
{
unroll_out(8, v);
}
Результат:
Код
00000014 <foo>:
14: 88 bb out 0x18, r24; 24
16: 88 0f add r24, r24
18: 88 bb out 0x18, r24; 24
1a: 88 0f add r24, r24
1c: 88 bb out 0x18, r24; 24
1e: 88 0f add r24, r24
20: 88 bb out 0x18, r24; 24
22: 88 0f add r24, r24
24: 88 bb out 0x18, r24; 24
26: 88 0f add r24, r24
28: 88 bb out 0x18, r24; 24
2a: 88 0f add r24, r24
2c: 88 bb out 0x18, r24; 24
2e: 88 0f add r24, r24
30: 88 bb out 0x18, r24; 24
32: 88 0f add r24, r24
34: 88 bb out 0x18, r24; 24
36: 08 95 ret