Ну если уж очень хочется извратиться, то можно так
CODE
#define ONE_NOP(NAME,NEXT_NAME)\
static void delay_##NEXT_NAME(char

;\
static void delay_##NAME(char

\
{\
__no_operation();\
delay_##NEXT_NAME(

;\
}\
ONE_NOP(4,3)
ONE_NOP(3,2)
ONE_NOP(2,1)
ONE_NOP(1,0)
#pragma optimize=no_inline
static void delay_0(char

{
PORTB=b;
}
void delay_x(char b, char c)
{
char __flash *p=(char __flash *)delay_4;
p+=c;
((void(*)(char))p)(

;
}
с вот таким результатом
CODE
\ In segment CODE, align 2, keep-with-next
11 ONE_NOP(4,3)
\ delay_4:
\ 00000000 0000 NOP
\ 00000002 0000 NOP
\ 00000004 0000 NOP
\ 00000006 0000 NOP
\ 00000008 REQUIRE delay_0
\ 00000008 ; // Fall through to label delay_0
12 ONE_NOP(3,2)
13 ONE_NOP(2,1)
14 ONE_NOP(1,0)
15
16 #pragma optimize=no_inline
\ In segment CODE, align 2, keep-with-next
17 static void delay_0(char

\ delay_0:
18 {
19 PORTB=b;
\ 00000000 B905 OUT 0x05, R16
20 }
\ 00000002 9508 RET
\ 00000004 REQUIRE _A_PORTB
21
\ In segment CODE, align 2, keep-with-next
22 void delay_x(char b, char c)
\ delay_x:
23 {
24 char __flash *p=(char __flash *)delay_4;
25 p+=c;
26 ((void(*)(char))p)(

;
\ 00000000 .... LDI R30, LOW(delay_4/2)
\ 00000002 .... LDI R31, (delay_4/2) >> 8
\ 00000004 E030 LDI R19, 0
\ 00000006 0FE1 ADD R30, R17
\ 00000008 1FF3 ADC R31, R19
\ 0000000A 9409 IJMP
27 }
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин