"Ronald S. Bultje" <[email protected]> writes: > +#define testxmmclobbers(func, ctx, ...) \ > + uint64_t xmm[2][10 * 2]; \ > + int ret; \ > + __asm__ volatile( \ > + "movups %%xmm6 , 0x00(%0)\n\t" \ > + "movups %%xmm7 , 0x10(%0)\n\t" \ > + "movups %%xmm8 , 0x20(%0)\n\t" \ > + "movups %%xmm9 , 0x30(%0)\n\t" \ > + "movups %%xmm10, 0x40(%0)\n\t" \ > + "movups %%xmm11, 0x50(%0)\n\t" \ > + "movups %%xmm12, 0x60(%0)\n\t" \ > + "movups %%xmm13, 0x70(%0)\n\t" \ > + "movups %%xmm14, 0x80(%0)\n\t" \ > + "movups %%xmm15, 0x90(%0)\n\t" \ > + :: "r"(xmm[0]) : "memory"); \ > + ret = __real_ ## func(ctx, __VA_ARGS__); \ > + __asm__ volatile( \ > + "movups %%xmm6 , 0x00(%0)\n\t" \ > + "movups %%xmm7 , 0x10(%0)\n\t" \ > + "movups %%xmm8 , 0x20(%0)\n\t" \ > + "movups %%xmm9 , 0x30(%0)\n\t" \ > + "movups %%xmm10, 0x40(%0)\n\t" \ > + "movups %%xmm11, 0x50(%0)\n\t" \ > + "movups %%xmm12, 0x60(%0)\n\t" \ > + "movups %%xmm13, 0x70(%0)\n\t" \ > + "movups %%xmm14, 0x80(%0)\n\t" \ > + "movups %%xmm15, 0x90(%0)\n\t" \ > + :: "r"(xmm[1]) : "memory"); \
Come to think of it, these asm statements could be turned into a twice-called macro. -- Måns Rullgård [email protected] _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
