use of cast expressions as lvalues is deprecated
corey taylor
corey.taylor@gmail.com
Tue Feb 15 06:19:00 GMT 2005
Massimiliano,
Just as a follow-on, a typical enhancement to the memcpy routine is
to write an MMX based prelacement which can do up to 64-byte moves
using 8 mmx megisters (mm0 - mm7).
corey
On Mon, 14 Feb 2005 10:01:30 -0600, Eljay Love-Jensen <eljay@adobe.com> wrote:
> Hi Massimiliano,
>
> Your neglecting constness.
>
> Try this...
>
> void* qmemcpy(void* dst, void const* src, register long len)
> {
> // assert(dst != NULL);
> // assert(src != NULL);
> // assert(len > 0);
> register char* d = dst;
> register char const* s = src;
> for(; --len >= 0; *d++ = *s++)
> /*no body*/;
> return dst;
> }
>
> ...and remember: the optimizer is amazing, and works hard to eliminate
> inefficiencies and improve performance.
>
> Also, there are some tricks you could do that would improve the performance
> of the above as much as an order of magnitude by "tricky use of switch
> statement loop unrolling" and moving larger items at a time (with alignment
> constraints on certain platforms). Assuming that performance is important.
>
> Don't undervalue the standard memcpy routine. Some compilers have a nicely
> optimized memcpy.
>
> HTH,
> --Eljay
>
>
More information about the Gcc-help
mailing list