Ah - thanks :) Jeg havde lavet det hele som inline assembler indtil jeg fandt ud af, at
1) Det var enormt bøvlet at overføre en 32bit int, som skal lægges til en (64bit) pointer. Jeg fik det til at virke, men kun ved at bruge eksplicitte registernavne (dvs %%rax, %%eax og ikke %1) 2) Der er ikke nogen 16bit unsigned, 16bit signed gangeoperation (og slet ikke 32bit x 32 bit) i SSE2. Så jeg skulle skrive det hele om alligevel, så kunne jeg lige så godt prøve gcc-intrinsics af. Og den gør det rent faktisk rigtig godt med registerallokeringen, og alt andet - jeg tror faktisk kun jeg fandt en enkelt unødvending movaps. Den laver også en ret fin instruction pairing, så den shuffler rundt på instruktionerne for at undgå de værste stalls - selv om det efterhånden kun er nødvendigt på Atom-processorer. Til gengæld er det rigtig åndsvagt, at den skelner mellem _m128 og _m128i. Regards, Klaus Post http://www.klauspost.com On Mon, Sep 21, 2009 at 1:34 PM, Anders Brander <[email protected]> wrote: > Author: abrander > Date: 2009-09-21 13:34:13 +0200 (Mon, 21 Sep 2009) > New Revision: 2637 > > Modified: > trunk/plugins/resample/resample.c > Log: > Re-enabled RSResample for non-SSE2 archs. > > Modified: trunk/plugins/resample/resample.c > =================================================================== > --- trunk/plugins/resample/resample.c 2009-09-20 21:07:39 UTC (rev 2636) > +++ trunk/plugins/resample/resample.c 2009-09-21 11:34:13 UTC (rev 2637) > @@ -21,7 +21,9 @@ > > #include <rawstudio.h> > #include <math.h> > +#if defined (__SSE2__) > #include <emmintrin.h> > +#endif /* __SSE2__ */ > > > #define RS_TYPE_RESAMPLE (rs_resample_type) > > > _______________________________________________ > Rawstudio-commit mailing list > [email protected] > http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit > _______________________________________________ Rawstudio-commit mailing list [email protected] http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit
