<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2><FONT size=2>
<P>Caute!</P>
<P>Dostal sa mi do ruk kod,ktory ide skomilovat no v case ked zavola funkciu 
cableputline tak na vyznacenom mieste vyhlasi sgemetation fault - bez&nbsp;tohto 
kodu program nefunguje- t.j. nerobi co ma... Kedze mi C-cko sveci podstatne viac 
ako assembler, dovolujem si opytta sa Vas, ci neviet v com je problem? Ja tam 
vidim jedine riziko pretecenie esi.. Alebo je to nieco ine...</P>
<P>Vdaka za kazdu radu</P>
<P>Peto</P>
<P>P.S. tu je kod, co mi nebezi na Mandarke 9 s gcc verzie 3.2 na Celeron 1,2Ghz 
s 100Mhz FSB...</P>
<P>void cableputline(unsigned char *membase, unsigned char *surface)</P>
<P>{</P>
<P>unsigned char linebuf[2048];</P>
<P>unsigned char lumabuf[2048];</P>
<P>int polarity = 0;</P>
<P>fprintf(stderr,"som v cable put line\n");</P>
<P>__asm__ __volatile__ ("pushl %ebx\n"</P>
<P>"pushl %esi\n"</P>
<P>"pushl %edi");</P>
<P>fprintf(stderr,"po push-och\n");</P>
<P></P>
<P>__asm__ __volatile__ ("movl %0, %%esi" : : "m" (membase));</P>
<P>fprintf(stderr,"po mov 1\n");</P>
<P></P>
<P>__asm__ __volatile__ ("xorl %edx, %edx\n"</P>
<P>"xorl %eax, %eax\n"</P>
<P>"movl $32, %ecx");</P>
<P>fprintf(stderr,"po mov 2\n");</P>
<P>/*&nbsp;v nasledujucom useku amd kodu je chyba&nbsp; sposobujuca segmetation 
fault*/</P>
<P>__asm__ __volatile__ ("__detectburst:\n"</P>
<P>"movb (%esi), %al\n"</P>
<P>"incl %esi\n"</P>
<P>"addl %eax, %edx\n"</P>
<P>"decl %ecx\n"</P>
<P>"jnz __detectburst\n"</P>
<P>"movl $0x500, %eax\n"</P>
<P>"subl %edx, %eax\n"</P>
<P>"sarl $4, %eax\n"</P>
<P>"pushl %eax\n"</P>
<P>"addl $64, %esi");</P>
<P>fprintf(stderr,"po mov 3\n");</P>
<P></P>
<P>__asm__ __volatile__ ("movl %0, %%edi" : : "m" (lumabuf));</P>
<P>fprintf(stderr,"po Lumabuf\n");</P>
<P></P>
<P>__asm__ __volatile__ ("pushl %edi"); /* -O2 workaround */</P>
<P>fprintf(stderr,"po push");</P>
<P></P>
<P>__asm__ __volatile__ ("movl $1872, %ecx");</P>
<P>__asm__ __volatile__ ("__luma_filter1_loop:\n"</P>
<P>"xorl %eax, %eax\n"</P>
<P>"xorl %edx, %edx\n"</P>
<P>"movb (%esi), %al\n"</P>
<P>"movb 4(%esi), %dl\n"</P>
<P>"incl %esi\n"</P>
<P>"addl %edx, %eax\n"</P>
<P>"movb %al, (%edi)\n"</P>
<P>"incl %edi\n"</P>
<P>"decl %ecx\n"</P>
<P>"jnz __luma_filter1_loop\n");</P>
<P></P>
<P>__asm__ __volatile__ ("popl %esi"); /* -O2 workaround */</P>
<P></P>
<P>__asm__ __volatile__ ("popl %ebx\n"</P>
<P>"movl $357, %ecx\n");</P>
<P></P>
<P>/* __asm__ __volatile__ ("movl %0, %%esi" : : "m" (lumabuf)); */</P>
<P>__asm__ __volatile__ ("movl %0, %%edi" : : "m" (linebuf));</P>
<P></P>
<P>__asm__ __volatile__ ("pushl %edi"); /* -O2 workaround */</P>
<P>__asm__ __volatile__ ("__luma_filter2_loop:\n"</P>
<P>"xorl %edx, %edx\n"</P>
<P>"xorl %eax, %eax\n");</P>
<P>__asm__ __volatile__ ("movb 2(%esi), %dl\n");</P>
<P>__asm__ __volatile__ ("movb 1(%esi), %al\n");</P>
<P>__asm__ __volatile__ ("addl %eax, %edx\n"</P>
<P>"movb 3(%esi), %al\n"</P>
<P>"addl %eax, %edx\n"</P>
<P>"addl %edx, %edx\n"</P>
<P>"movb (%esi), %al\n"</P>
<P>"addl %eax, %edx\n"</P>
<P>"movb 4(%esi), %al\n"</P>
<P>"addl %edx, %eax\n"</P>
<P>"sarl $1, %edx\n"</P>
<P>"addl %ebx, %edx\n"</P>
<P>"sarl $1, %edx");</P>
<P>__asm__ __volatile__ ("movl %0, %%eax" : : "m" (polarity));</P>
<P>__asm__ __volatile__ ("addl $5, %esi\n"</P>
<P>"orl %eax, %eax\n"</P>
<P>"jz __nopolarity\n"</P>
<P>"negl %edx\n"</P>
<P>"addl $210, %edx");</P>
<P>__asm__ __volatile__ ("__nopolarity:\n"</P>
<P>"cmpl $256, %edx\n" </P>
<P>"jl __nocliphigh\n"</P>
<P>"movl $255, %edx\n"</P>
<P>"jmp __nocliplow");</P>
<P></P>
<P>__asm__ __volatile__ ("__nocliphigh:\n"</P>
<P>"cmpl $0, %edx\n"</P>
<P>"jge __nocliplow\n"</P>
<P>"movl $0, %edx");</P>
<P>__asm__ __volatile__ ("__nocliplow:\n"</P>
<P>"movb %dl, (%edi)\n"</P>
<P>"incl %edi\n"</P>
<P>"decl %ecx\n"</P>
<P>"jnz __luma_filter2_loop");</P>
<P>__asm__ __volatile__ ("movl %0, %%edi" : : "m" (surface));</P>
<P>__asm__ __volatile__ ("movl $357, %ecx");</P>
<P></P>
<P>/* __asm__ __volatile__ ("movl %0, %%esi" : : "m" (linebuf)); */</P>
<P>__asm__ __volatile__ ("popl %esi"); /* -O2 workaround */</P>
<P></P>
<P>__asm__ __volatile__ ("xorl %ebx, %ebx");</P>
<P></P>
<P>__asm__ __volatile__ ("__display_rgb8_loop:\n"</P>
<P>"pushl %edx\n"</P>
<P>"xorl %edx, %edx\n"</P>
<P>"xorl %eax, %eax\n"</P>
<P>"movb (%esi, %ebx), %al\n"</P>
<P>"shrb $3, %al\n"</P>
<P>"addw %ax, %dx\n"</P>
<P>"shlw $5, %dx\n"</P>
<P>"addw %ax, %dx\n"</P>
<P>"shlw $6, %dx\n"</P>
<P>"addw %ax, %dx\n"</P>
<P>"movw %dx, (%edi,%ebx,2)\n"</P>
<P>"popl %edx\n"</P>
<P>"incl %ebx\n"</P>
<P>"decl %ecx\n"</P>
<P>"jnz __display_rgb8_loop\n"</P>
<P>"popl %edi\n"</P>
<P>"popl %esi\n"</P>
<P>"popl %ebx");</P>
<P>}</P></FONT></FONT></DIV></BODY></HTML>