Compiler avec GCC sur Sam440 :Comment optimiser?

3 sujets de 31 à 33 (sur un total de 33)

  • thellier

      #158722

      C sur aminet/cow3d.lha

      AmiDARK

        #158723

        Merci :)

        Vais y jeter un oeil :p

        @ +

        AmiDARK

        thellier

          #158724

          Pour revenir sur mes optimisations…

          Et notamment les fonctions PixelsOutxxx qui convertissait un buffer de pixels RGBA (=fragments) vers un format écran comme BGRA,RGB16,etc.. et surtout ARGB qui est celui de la Sam440

          Voilà j’ai compilé mon dernier Wazp3D52 avec -S et obtenu l’ASM ppc

          Je trouve que cette fois les fonctions PixelsOutARGB sont pas mal :-) en ASM en comparaison du C original

          Cas general : 2 fragments sont convertis/écris en seulement 13 instructions ASM

          Cas ou la couleur est plate/unie/inchangée: 4 fragments sont convertis/écris en seulement 9 instructions ASM

          Ce dernier cas est utile dans Blender qui trace les menus d’une couleur unie … et ça ce ressent

          /*=============================================================*/

          void PixelsOutARGB(struct SOFT3D_context *SC)

          {

          /* Convert ARGB <- buffer */ register struct fragbuffer3D *Frag=SC->FragBuffer;

          register ULONG size=SC->FragSize2;

          register union rgba3D Color0;

          register union rgba3D Color1;

          while(0>8));

          Color1.L.RGBA32=((Color1.B.RGBA[3]<<24)+(Color1.L.RGBA32>>8));

          COLOR32(Frag[0].Image8)=Color0.L.RGBA32;

          COLOR32(Frag[1].Image8)=Color1.L.RGBA32;

          Frag+=2;

          }

          }

          /*=============================================================*/

          PixelsOutARGB:

          addis %r9,%r3,0xc

          lwz %r0,-10616(%r9)

          cmpwi %cr7,%r0,0

          beqlr- %cr7

          addis %r9,%r3,0xa

          mtctr %r0

          addi %r3,%r9,22144

          .while1:

          lwz %r0,12(%r3)

          lwz %r9,36(%r3)

          slwi %r11,%r0,24

          lwz %r8,0(%r3)

          srwi %r0,%r0,8

          slwi %r10,%r9,24

          lwz %r7,24(%r3)

          srwi %r9,%r9,8

          add %r0,%r0,%r11

          add %r9,%r9,%r10

          stw %r0,0(%r8)

          addi %r3,%r3,48

          stw %r9,0(%r7)

          bdnz .while1

          blr

          /*=============================================================*/

          void PixelsOutARGB_Flat(struct SOFT3D_context *SC)

          {

          /* Convert ARGB <- buffer */ register struct fragbuffer3D *Frag=SC->FragBuffer;

          register ULONG size4=SC->FragSize2/2;

          register union rgba3D Color0;

          Color0.L.RGBA32=COLOR32(Frag[0].BufferRGBA);

          Color0.L.RGBA32=((Color0.B.RGBA[3]<<24)+(Color0.L.RGBA32>>8));

          while(0

        3 sujets de 31 à 33 (sur un total de 33)

        • Vous devez être connecté pour répondre à ce sujet.

        Forums AmigaOS, MorphOS et AROS Développement Compiler avec GCC sur Sam440 :Comment optimiser?

        Amiga Impact