Hi Min, This still generates wrong code for case ymm, xmm (as %ifidni %2,xm will be false always). How about the below code ?
%macro vpbroadcastd 2-3 ;; incresed one argument for case ymm, xmm %ifid %3 ; case vpbroadcastd ymm, ymm, xmm vpbroadcastd %1, %3 %elifid %2 movd %1 %+ xmm, %2 ; case vpbroadcastd ymm, rN vpbroadcastd %1, %1 %+ xmm %else vpbroadcastd %1, %2 ; case vpbroadcastd ymm, [memory addr] %endif %endmacro Thanks, Dnyaneshwar G On Thu, Aug 13, 2015 at 8:52 AM, Min Chen <chenm...@163.com> wrote: > # HG changeset patch > # User Min Chen <chenm...@163.com> > # Date 1439424913 25200 > # Node ID caf9562dc947f93e8ee237574575e9b67d494fc8 > # Parent 09846d1566428a73d70d2fcf2d50324c0dfbbb7f > asm: fix bug in macro vpbroadcastd for case ymm,xmm > --- > source/common/x86/x86inc.asm | 6 ++++-- > 1 files changed, 4 insertions(+), 2 deletions(-) > > diff -r 09846d156642 -r caf9562dc947 source/common/x86/x86inc.asm > --- a/source/common/x86/x86inc.asm Wed Aug 12 16:46:57 2015 -0700 > +++ b/source/common/x86/x86inc.asm Wed Aug 12 17:15:13 2015 -0700 > @@ -1486,10 +1486,12 @@ > > ; workaround: vpbroadcastd with register, the yasm will generate wrong > code > %macro vpbroadcastd 2 > - %ifid %2 > + %ifidni %2,xm ; case ymm,xmm > + vpbroadcastd %1, %2 > + %elifid %2 ; case ymm,rN > movd %1 %+ xmm, %2 > vpbroadcastd %1, %1 %+ xmm > %else > - vpbroadcastd %1, %2 > + vpbroadcastd %1, %2 ; case ymm,[address] > %endif > %endmacro > > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel