asm("pushl %edi\n" "pushl %edx\n" ); asm("movl %0, %%edi\n" "movl $3, %%edx\n" : :"m"(rp) ); asm(".byte 0x0F, 0xA7, 0xC0\n"); asm("movl %%edi, %0\n" "andl $0x0000000F, %%eax\n" "subl %%eax, %1\n" :"=m"(rp), "=m"(rand_len) : ); asm("popl %edx\n" "popl %edi\n" );