363Fermer365
nullLe 17/02/2004 à 20:26
Voici avec ton optimisation :
while(n--)         {                  short mask
	jbra .L21
	.even
.L24:
#L1449	= x_&7;
	move.w %d3,%d1
	and.w #7,%d1
#L1456	*(pointeur++) |=*(pic)>>(mask);
	clr.w %d0
	move.b (%a1),%d0
	asr.w %d1,%d0
	or.b (%a0),%d0
	move.b %d0,(%a0)+
#L1472	*(pointeur) |=*(pic++)<<(8-mask);          //*(pointeur+1) |=*(pic)<<(8-mask);          //*(pointeur++) |=*(pic++)>>(mask);          //*(pointeur++) |=((x_>0)?(*(pic)>>(mask)):0);            //*(pointeur) |=((x_<152)?(*(pic++)<<(8-mask)):0);
	clr.w %d0
	move.b (%a1)+,%d0
	moveq.l #8,%d6
	sub.w %d1,%d6
	lsl.w %d6,%d0
	or.b %d0,(%a0)
#L1498	x_=x_+8;                          }
	addq.w #8,%d3
.L21:
	dbra %d2,.L24
#L1508	y ...
	add.w #256,%d4
	add.w #16,%d5
#L1366	; ...
	addq.w #1,%d7
.L17:
	cmp.w %a2,%d7
	jblt .L25
#L1514	}      //*((char*)LCD_MEM+addr)=x&7;    void _main(void)  {
	movm.l (%sp)+,#0x3cf8
	unlk %a6
	rts


et voici sans :
while(n--)         {                  short mask
	jbra .L21
	.even
.L24:
#L1449	= x_&7;         //*(pointeur++) |=*(pic)>>(mask);         //*(pointeur) |=*(pic++)<<(8-mask);
	move.w %d4,%d2
	and.w #7,%d2
#L1460	*(pointeur+1) |=*(pic)<<(8-mask);
	clr.w %d0
	move.b (%a1),%d0
	moveq.l #8,%d1
	sub.w %d2,%d1
	lsl.w %d1,%d0
	or.b %d0,1(%a0)
#L1479	*(pointeur++) |=*(pic++)>>(mask);          //*(pointeur++) |=((x_>0)?(*(pic)>>(mask)):0);            //*(pointeur) |=((x_<152)?(*(pic++)<<(8-mask)):0);
	clr.w %d0
	move.b (%a1)+,%d0
	asr.w %d2,%d0
	or.b (%a0),%d0
	move.b %d0,(%a0)+
#L1500	x_=x_+8;                          }
	addq.w #8,%d4
.L21:
	dbra %d3,.L24
#L1510	y ...
	add.w #256,%d5
	add.w #16,%d6
#L1366	; ...
	addq.w #1,%a2
.L17:
	move.w %a3,%d0
	cmp.w %a2,%d0
	jbgt .L25
#L1516	}      //*((char*)LCD_MEM+addr)=x&7;    void _main(void)  {
	movm.l (%sp)+,#0x3cf8
	unlk %a6
	rts


Et sinon pour le clipping ça marche très bien comme ceci :

}
       while(n--)
       {
  	     
  	     short mask = x_&7;
  	
  	    *(pointeur+1) |=((x_<232)?(*(pic)<<(8-mask)):0);
  	    *(pointeur) |=((x_>-1)?(*(pic)>>(mask)):0);
            *pic++;
            *pointeur++;
  	     x_=x_+8;
  	     
      
 


Donc les optimisation précédantes ne servent pas à grand chose pour une routine clippée. a moins qu'il y ait des optimisation à faire mais là je n'en vois aucune.