Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.         dct64_3dnowext: extended 3DNow optimized DCT64
  3.  
  4.         copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
  5.         see COPYING and AUTHORS files in distribution or http://mpg123.org
  6.  
  7.         Transformed back into standalone asm, with help of
  8.         gcc -S -DHAVE_CONFIG_H -I.  -march=k6-3 -O3 -Wall -pedantic -fno-strict-aliasing  -DREAL_IS_FLOAT -c -o dct64_3dnowext.{S,c}
  9.  
  10.         MPlayer comment follows.
  11. */
  12.  
  13. /*
  14. * This code was taken from http://www.mpg123.org
  15. * See ChangeLog of mpg123-0.59s-pre.1 for detail
  16. * Applied to mplayer by Nick Kurshev <nickols_k@mail.ru>
  17. * Partial 3dnowex-DSP! optimization by Nick Kurshev
  18. *
  19. * TODO: optimize scalar 3dnow! code
  20. * Warning: Phases 7 & 8 are not tested
  21. */
  22.  
  23. #include "mangle.h"
  24.  
  25.         .data
  26.         ALIGN4
  27.         /* .type        plus_1f, @object
  28.            .size        plus_1f, 4  */
  29. plus_1f:
  30.         .long   1065353216
  31.         ALIGN8
  32.         /* .type        x_plus_minus_3dnow, @object
  33.            .size        x_plus_minus_3dnow, 8 */
  34. x_plus_minus_3dnow:
  35.         .long   0
  36.         .long   -2147483648
  37.  
  38.         .text
  39.         ALIGN32
  40. .globl ASM_NAME(dct64_3dnowext)
  41.         /* .type        ASM_NAME(dct64_3dnowext), @function */
  42. ASM_NAME(dct64_3dnowext):
  43.         pushl   %ebp
  44.         movl    %esp, %ebp
  45.         pushl   %edi
  46.         pushl   %esi
  47.         pushl   %ebx
  48.         subl    $256, %esp
  49. /* APP */
  50.         movl 16(%ebp),%eax
  51.         leal 128+-268(%ebp),%edx
  52.         movl 8(%ebp),%esi
  53.         movl 12(%ebp),%edi
  54.         movl ASM_VALUE(costab_mmxsse),%ebx
  55.         leal -268(%ebp),%ecx
  56.         movq    (%eax), %mm0
  57.         movq    8(%eax), %mm4
  58.         movq    %mm0, %mm3
  59.         movq    %mm4, %mm7
  60.         pswapd  120(%eax), %mm1
  61.         pswapd  112(%eax), %mm5
  62.         pfadd   %mm1, %mm0
  63.         pfadd   %mm5, %mm4
  64.         movq    %mm0, (%edx)
  65.         movq    %mm4, 8(%edx)
  66.         pfsub   %mm1, %mm3
  67.         pfsub   %mm5, %mm7
  68.         pfmul   (%ebx), %mm3
  69.         pfmul   8(%ebx), %mm7
  70.         pswapd  %mm3, %mm3
  71.         pswapd  %mm7, %mm7
  72.         movq    %mm3, 120(%edx)
  73.         movq    %mm7, 112(%edx)
  74.         movq    16(%eax), %mm0
  75.         movq    24(%eax), %mm4
  76.         movq    %mm0, %mm3
  77.         movq    %mm4, %mm7
  78.         pswapd  104(%eax), %mm1
  79.         pswapd  96(%eax), %mm5
  80.         pfadd   %mm1, %mm0
  81.         pfadd   %mm5, %mm4
  82.         movq    %mm0, 16(%edx)
  83.         movq    %mm4, 24(%edx)
  84.         pfsub   %mm1, %mm3
  85.         pfsub   %mm5, %mm7
  86.         pfmul   16(%ebx), %mm3
  87.         pfmul   24(%ebx), %mm7
  88.         pswapd  %mm3, %mm3
  89.         pswapd  %mm7, %mm7
  90.         movq    %mm3, 104(%edx)
  91.         movq    %mm7, 96(%edx)
  92.         movq    32(%eax), %mm0
  93.         movq    40(%eax), %mm4
  94.         movq    %mm0, %mm3
  95.         movq    %mm4, %mm7
  96.         pswapd  88(%eax), %mm1
  97.         pswapd  80(%eax), %mm5
  98.         pfadd   %mm1, %mm0
  99.         pfadd   %mm5, %mm4
  100.         movq    %mm0, 32(%edx)
  101.         movq    %mm4, 40(%edx)
  102.         pfsub   %mm1, %mm3
  103.         pfsub   %mm5, %mm7
  104.         pfmul   32(%ebx), %mm3
  105.         pfmul   40(%ebx), %mm7
  106.         pswapd  %mm3, %mm3
  107.         pswapd  %mm7, %mm7
  108.         movq    %mm3, 88(%edx)
  109.         movq    %mm7, 80(%edx)
  110.         movq    48(%eax), %mm0
  111.         movq    56(%eax), %mm4
  112.         movq    %mm0, %mm3
  113.         movq    %mm4, %mm7
  114.         pswapd  72(%eax), %mm1
  115.         pswapd  64(%eax), %mm5
  116.         pfadd   %mm1, %mm0
  117.         pfadd   %mm5, %mm4
  118.         movq    %mm0, 48(%edx)
  119.         movq    %mm4, 56(%edx)
  120.         pfsub   %mm1, %mm3
  121.         pfsub   %mm5, %mm7
  122.         pfmul   48(%ebx), %mm3
  123.         pfmul   56(%ebx), %mm7
  124.         pswapd  %mm3, %mm3
  125.         pswapd  %mm7, %mm7
  126.         movq    %mm3, 72(%edx)
  127.         movq    %mm7, 64(%edx)
  128.         movq    (%edx), %mm0
  129.         movq    8(%edx), %mm4
  130.         movq    %mm0, %mm3
  131.         movq    %mm4, %mm7
  132.         pswapd  56(%edx), %mm1
  133.         pswapd  48(%edx), %mm5
  134.         pfadd   %mm1, %mm0
  135.         pfadd   %mm5, %mm4
  136.         movq    %mm0, (%ecx)
  137.         movq    %mm4, 8(%ecx)
  138.         pfsub   %mm1, %mm3
  139.         pfsub   %mm5, %mm7
  140.         pfmul   64(%ebx), %mm3
  141.         pfmul   72(%ebx), %mm7
  142.         pswapd  %mm3, %mm3
  143.         pswapd  %mm7, %mm7
  144.         movq    %mm3, 56(%ecx)
  145.         movq    %mm7, 48(%ecx)
  146.         movq    16(%edx), %mm0
  147.         movq    24(%edx), %mm4
  148.         movq    %mm0, %mm3
  149.         movq    %mm4, %mm7
  150.         pswapd  40(%edx), %mm1
  151.         pswapd  32(%edx), %mm5
  152.         pfadd   %mm1, %mm0
  153.         pfadd   %mm5, %mm4
  154.         movq    %mm0, 16(%ecx)
  155.         movq    %mm4, 24(%ecx)
  156.         pfsub   %mm1, %mm3
  157.         pfsub   %mm5, %mm7
  158.         pfmul   80(%ebx), %mm3
  159.         pfmul   88(%ebx), %mm7
  160.         pswapd  %mm3, %mm3
  161.         pswapd  %mm7, %mm7
  162.         movq    %mm3, 40(%ecx)
  163.         movq    %mm7, 32(%ecx)
  164.         movq    64(%edx), %mm0
  165.         movq    72(%edx), %mm4
  166.         movq    %mm0, %mm3
  167.         movq    %mm4, %mm7
  168.         pswapd  120(%edx), %mm1
  169.         pswapd  112(%edx), %mm5
  170.         pfadd   %mm1, %mm0
  171.         pfadd   %mm5, %mm4
  172.         movq    %mm0, 64(%ecx)
  173.         movq    %mm4, 72(%ecx)
  174.         pfsubr  %mm1, %mm3
  175.         pfsubr  %mm5, %mm7
  176.         pfmul   64(%ebx), %mm3
  177.         pfmul   72(%ebx), %mm7
  178.         pswapd  %mm3, %mm3
  179.         pswapd  %mm7, %mm7
  180.         movq    %mm3, 120(%ecx)
  181.         movq    %mm7, 112(%ecx)
  182.         movq    80(%edx), %mm0
  183.         movq    88(%edx), %mm4
  184.         movq    %mm0, %mm3
  185.         movq    %mm4, %mm7
  186.         pswapd  104(%edx), %mm1
  187.         pswapd  96(%edx), %mm5
  188.         pfadd   %mm1, %mm0
  189.         pfadd   %mm5, %mm4
  190.         movq    %mm0, 80(%ecx)
  191.         movq    %mm4, 88(%ecx)
  192.         pfsubr  %mm1, %mm3
  193.         pfsubr  %mm5, %mm7
  194.         pfmul   80(%ebx), %mm3
  195.         pfmul   88(%ebx), %mm7
  196.         pswapd  %mm3, %mm3
  197.         pswapd  %mm7, %mm7
  198.         movq    %mm3, 104(%ecx)
  199.         movq    %mm7, 96(%ecx)
  200.         movq    96(%ebx), %mm2
  201.         movq    104(%ebx), %mm6
  202.         movq    (%ecx), %mm0
  203.         movq    8(%ecx), %mm4
  204.         movq    %mm0, %mm3
  205.         movq    %mm4, %mm7
  206.         pswapd  24(%ecx), %mm1
  207.         pswapd  16(%ecx), %mm5
  208.         pfadd   %mm1, %mm0
  209.         pfadd   %mm5, %mm4
  210.         movq    %mm0, (%edx)
  211.         movq    %mm4, 8(%edx)
  212.         pfsub   %mm1, %mm3
  213.         pfsub   %mm5, %mm7
  214.         pfmul   %mm2, %mm3
  215.         pfmul   %mm6, %mm7
  216.         pswapd  %mm3, %mm3
  217.         pswapd  %mm7, %mm7
  218.         movq    %mm3, 24(%edx)
  219.         movq    %mm7, 16(%edx)
  220.         movq    32(%ecx), %mm0
  221.         movq    40(%ecx), %mm4
  222.         movq    %mm0, %mm3
  223.         movq    %mm4, %mm7
  224.         pswapd  56(%ecx), %mm1
  225.         pswapd  48(%ecx), %mm5
  226.         pfadd   %mm1, %mm0
  227.         pfadd   %mm5, %mm4
  228.         movq    %mm0, 32(%edx)
  229.         movq    %mm4, 40(%edx)
  230.         pfsubr  %mm1, %mm3
  231.         pfsubr  %mm5, %mm7
  232.         pfmul   %mm2, %mm3
  233.         pfmul   %mm6, %mm7
  234.         pswapd  %mm3, %mm3
  235.         pswapd  %mm7, %mm7
  236.         movq    %mm3, 56(%edx)
  237.         movq    %mm7, 48(%edx)
  238.         movq    64(%ecx), %mm0
  239.         movq    72(%ecx), %mm4
  240.         movq    %mm0, %mm3
  241.         movq    %mm4, %mm7
  242.         pswapd  88(%ecx), %mm1
  243.         pswapd  80(%ecx), %mm5
  244.         pfadd   %mm1, %mm0
  245.         pfadd   %mm5, %mm4
  246.         movq    %mm0, 64(%edx)
  247.         movq    %mm4, 72(%edx)
  248.         pfsub   %mm1, %mm3
  249.         pfsub   %mm5, %mm7
  250.         pfmul   %mm2, %mm3
  251.         pfmul   %mm6, %mm7
  252.         pswapd  %mm3, %mm3
  253.         pswapd  %mm7, %mm7
  254.         movq    %mm3, 88(%edx)
  255.         movq    %mm7, 80(%edx)
  256.         movq    96(%ecx), %mm0
  257.         movq    104(%ecx), %mm4
  258.         movq    %mm0, %mm3
  259.         movq    %mm4, %mm7
  260.         pswapd  120(%ecx), %mm1
  261.         pswapd  112(%ecx), %mm5
  262.         pfadd   %mm1, %mm0
  263.         pfadd   %mm5, %mm4
  264.         movq    %mm0, 96(%edx)
  265.         movq    %mm4, 104(%edx)
  266.         pfsubr  %mm1, %mm3
  267.         pfsubr  %mm5, %mm7
  268.         pfmul   %mm2, %mm3
  269.         pfmul   %mm6, %mm7
  270.         pswapd  %mm3, %mm3
  271.         pswapd  %mm7, %mm7
  272.         movq    %mm3, 120(%edx)
  273.         movq    %mm7, 112(%edx)
  274.         movq    112(%ebx), %mm2
  275.         movq    (%edx), %mm0
  276.         movq    16(%edx), %mm4
  277.         movq    %mm0, %mm3
  278.         movq    %mm4, %mm7
  279.         pswapd  8(%edx), %mm1
  280.         pswapd  24(%edx), %mm5
  281.         pfadd   %mm1, %mm0
  282.         pfadd   %mm5, %mm4
  283.         movq    %mm0, (%ecx)
  284.         movq    %mm4, 16(%ecx)
  285.         pfsub   %mm1, %mm3
  286.         pfsubr  %mm5, %mm7
  287.         pfmul   %mm2, %mm3
  288.         pfmul   %mm2, %mm7
  289.         pswapd  %mm3, %mm3
  290.         pswapd  %mm7, %mm7
  291.         movq    %mm3, 8(%ecx)
  292.         movq    %mm7, 24(%ecx)
  293.         movq    32(%edx), %mm0
  294.         movq    48(%edx), %mm4
  295.         movq    %mm0, %mm3
  296.         movq    %mm4, %mm7
  297.         pswapd  40(%edx), %mm1
  298.         pswapd  56(%edx), %mm5
  299.         pfadd   %mm1, %mm0
  300.         pfadd   %mm5, %mm4
  301.         movq    %mm0, 32(%ecx)
  302.         movq    %mm4, 48(%ecx)
  303.         pfsub   %mm1, %mm3
  304.         pfsubr  %mm5, %mm7
  305.         pfmul   %mm2, %mm3
  306.         pfmul   %mm2, %mm7
  307.         pswapd  %mm3, %mm3
  308.         pswapd  %mm7, %mm7
  309.         movq    %mm3, 40(%ecx)
  310.         movq    %mm7, 56(%ecx)
  311.         movq    64(%edx), %mm0
  312.         movq    80(%edx), %mm4
  313.         movq    %mm0, %mm3
  314.         movq    %mm4, %mm7
  315.         pswapd  72(%edx), %mm1
  316.         pswapd  88(%edx), %mm5
  317.         pfadd   %mm1, %mm0
  318.         pfadd   %mm5, %mm4
  319.         movq    %mm0, 64(%ecx)
  320.         movq    %mm4, 80(%ecx)
  321.         pfsub   %mm1, %mm3
  322.         pfsubr  %mm5, %mm7
  323.         pfmul   %mm2, %mm3
  324.         pfmul   %mm2, %mm7
  325.         pswapd  %mm3, %mm3
  326.         pswapd  %mm7, %mm7
  327.         movq    %mm3, 72(%ecx)
  328.         movq    %mm7, 88(%ecx)
  329.         movq    96(%edx), %mm0
  330.         movq    112(%edx), %mm4
  331.         movq    %mm0, %mm3
  332.         movq    %mm4, %mm7
  333.         pswapd  104(%edx), %mm1
  334.         pswapd  120(%edx), %mm5
  335.         pfadd   %mm1, %mm0
  336.         pfadd   %mm5, %mm4
  337.         movq    %mm0, 96(%ecx)
  338.         movq    %mm4, 112(%ecx)
  339.         pfsub   %mm1, %mm3
  340.         pfsubr  %mm5, %mm7
  341.         pfmul   %mm2, %mm3
  342.         pfmul   %mm2, %mm7
  343.         pswapd  %mm3, %mm3
  344.         pswapd  %mm7, %mm7
  345.         movq    %mm3, 104(%ecx)
  346.         movq    %mm7, 120(%ecx)
  347.         movd    plus_1f, %mm6
  348.         punpckldq 120(%ebx), %mm6
  349.         movq    x_plus_minus_3dnow, %mm7
  350.         movq    32(%ecx), %mm0
  351.         movq    64(%ecx), %mm2
  352.         movq    %mm0, %mm1
  353.         movq    %mm2, %mm3
  354.         pxor    %mm7, %mm1
  355.         pxor    %mm7, %mm3
  356.         pfacc   %mm1, %mm0
  357.         pfacc   %mm3, %mm2
  358.         pfmul   %mm6, %mm0
  359.         pfmul   %mm6, %mm2
  360.         movq    %mm0, 32(%edx)
  361.         movq    %mm2, 64(%edx)
  362.         movd    44(%ecx), %mm0
  363.         movd    40(%ecx), %mm2
  364.         movd    120(%ebx), %mm3
  365.         punpckldq 76(%ecx), %mm0
  366.         punpckldq 72(%ecx), %mm2
  367.         punpckldq %mm3, %mm3
  368.         movq    %mm0, %mm4
  369.         movq    %mm2, %mm5
  370.         pfsub   %mm2, %mm0
  371.         pfmul   %mm3, %mm0
  372.         movq    %mm0, %mm1
  373.         pfadd   %mm5, %mm0
  374.         pfadd   %mm4, %mm0
  375.         movq    %mm0, %mm2
  376.         punpckldq %mm1, %mm0
  377.         punpckhdq %mm1, %mm2
  378.         movq    %mm0, 40(%edx)
  379.         movq    %mm2, 72(%edx)
  380.         movd   48(%ecx), %mm3
  381.         movd   60(%ecx), %mm2
  382.         pfsub  52(%ecx), %mm3
  383.         pfsub  56(%ecx), %mm2
  384.         pfmul 120(%ebx), %mm3
  385.         pfmul 120(%ebx), %mm2
  386.         movq    %mm2, %mm1
  387.         pfadd  56(%ecx), %mm1
  388.         pfadd  60(%ecx), %mm1
  389.         movq    %mm1, %mm0
  390.         pfadd  48(%ecx), %mm0
  391.         pfadd  52(%ecx), %mm0
  392.         pfadd   %mm3, %mm1
  393.         punpckldq %mm2, %mm1
  394.         pfadd   %mm3, %mm2
  395.         punpckldq %mm2, %mm0
  396.         movq    %mm1, 56(%edx)
  397.         movq    %mm0, 48(%edx)
  398.         movd   92(%ecx), %mm1
  399.         pfsub  88(%ecx), %mm1
  400.         pfmul 120(%ebx), %mm1
  401.         movd   %mm1, 92(%edx)
  402.         pfadd  92(%ecx), %mm1
  403.         pfadd  88(%ecx), %mm1
  404.         movq   %mm1, %mm0
  405.         pfadd  80(%ecx), %mm0
  406.         pfadd  84(%ecx), %mm0
  407.         movd   %mm0, 80(%edx)
  408.         movd   80(%ecx), %mm0
  409.         pfsub  84(%ecx), %mm0
  410.         pfmul 120(%ebx), %mm0
  411.         pfadd  %mm0, %mm1
  412.         pfadd  92(%edx), %mm0
  413.         punpckldq %mm1, %mm0
  414.         movq   %mm0, 84(%edx)
  415.         movq    96(%ecx), %mm0
  416.         movq    %mm0, %mm1
  417.         pxor    %mm7, %mm1
  418.         pfacc   %mm1, %mm0
  419.         pfmul   %mm6, %mm0
  420.         movq    %mm0, 96(%edx)
  421.         movd  108(%ecx), %mm0
  422.         pfsub 104(%ecx), %mm0
  423.         pfmul 120(%ebx), %mm0
  424.         movd  %mm0, 108(%edx)
  425.         pfadd 104(%ecx), %mm0
  426.         pfadd 108(%ecx), %mm0
  427.         movd  %mm0, 104(%edx)
  428.         movd  124(%ecx), %mm1
  429.         pfsub 120(%ecx), %mm1
  430.         pfmul 120(%ebx), %mm1
  431.         movd  %mm1, 124(%edx)
  432.         pfadd 120(%ecx), %mm1
  433.         pfadd 124(%ecx), %mm1
  434.         movq  %mm1, %mm0
  435.         pfadd 112(%ecx), %mm0
  436.         pfadd 116(%ecx), %mm0
  437.         movd  %mm0, 112(%edx)
  438.         movd  112(%ecx), %mm0
  439.         pfsub 116(%ecx), %mm0
  440.         pfmul 120(%ebx), %mm0
  441.         pfadd %mm0,%mm1
  442.         pfadd 124(%edx), %mm0
  443.         punpckldq %mm1, %mm0
  444.         movq  %mm0, 116(%edx)
  445.         jnz .L01
  446.         movd      (%ecx), %mm0
  447.         pfadd    4(%ecx), %mm0
  448.         movd     %mm0, 1024(%esi)
  449.         movd      (%ecx), %mm0
  450.         pfsub    4(%ecx), %mm0
  451.         pfmul  120(%ebx), %mm0
  452.         movd      %mm0, (%esi)
  453.         movd      %mm0, (%edi)
  454.         movd   12(%ecx), %mm0
  455.         pfsub   8(%ecx), %mm0
  456.         pfmul 120(%ebx), %mm0
  457.         movd    %mm0, 512(%edi)
  458.         pfadd   12(%ecx), %mm0
  459.         pfadd   8(%ecx), %mm0
  460.         movd    %mm0, 512(%esi)
  461.         movd   16(%ecx), %mm0
  462.         pfsub  20(%ecx), %mm0
  463.         pfmul 120(%ebx), %mm0
  464.         movq    %mm0, %mm3
  465.         movd   28(%ecx), %mm0
  466.         pfsub  24(%ecx), %mm0
  467.         pfmul 120(%ebx), %mm0
  468.         movd    %mm0, 768(%edi)
  469.         movq    %mm0, %mm2
  470.         pfadd  24(%ecx), %mm0
  471.         pfadd  28(%ecx), %mm0
  472.         movq    %mm0, %mm1
  473.         pfadd  16(%ecx), %mm0
  474.         pfadd  20(%ecx), %mm0
  475.         movd   %mm0, 768(%esi)
  476.         pfadd  %mm3, %mm1
  477.         movd   %mm1, 256(%esi)
  478.         pfadd  %mm3, %mm2
  479.         movd   %mm2, 256(%edi)
  480.         movq   32(%edx), %mm0
  481.         movq   48(%edx), %mm1
  482.         pfadd  48(%edx), %mm0
  483.         pfadd  40(%edx), %mm1
  484.         movd   %mm0, 896(%esi)
  485.         movd   %mm1, 640(%esi)
  486.         psrlq  $32, %mm0
  487.         psrlq  $32, %mm1
  488.         movd   %mm0, 128(%edi)
  489.         movd   %mm1, 384(%edi)
  490.         movd   40(%edx), %mm0
  491.         pfadd  56(%edx), %mm0
  492.         movd   %mm0, 384(%esi)
  493.         movd   56(%edx), %mm0
  494.         pfadd  36(%edx), %mm0
  495.         movd   %mm0, 128(%esi)
  496.         movd   60(%edx), %mm0
  497.         movd   %mm0, 896(%edi)
  498.         pfadd  44(%edx), %mm0
  499.         movd   %mm0, 640(%edi)
  500.         movq   96(%edx), %mm0
  501.         movq   112(%edx), %mm2
  502.         movq   104(%edx), %mm4
  503.         pfadd  112(%edx), %mm0
  504.         pfadd  104(%edx), %mm2
  505.         pfadd  120(%edx), %mm4
  506.         movq   %mm0, %mm1
  507.         movq   %mm2, %mm3
  508.         movq   %mm4, %mm5
  509.         pfadd  64(%edx), %mm0
  510.         pfadd  80(%edx), %mm2
  511.         pfadd  72(%edx), %mm4
  512.         movd   %mm0, 960(%esi)
  513.         movd   %mm2, 704(%esi)
  514.         movd   %mm4, 448(%esi)
  515.         psrlq  $32, %mm0
  516.         psrlq  $32, %mm2
  517.         psrlq  $32, %mm4
  518.         movd   %mm0, 64(%edi)
  519.         movd   %mm2, 320(%edi)
  520.         movd   %mm4, 576(%edi)
  521.         pfadd  80(%edx), %mm1
  522.         pfadd  72(%edx), %mm3
  523.         pfadd  88(%edx), %mm5
  524.         movd   %mm1, 832(%esi)
  525.         movd   %mm3, 576(%esi)
  526.         movd   %mm5, 320(%esi)
  527.         psrlq  $32, %mm1
  528.         psrlq  $32, %mm3
  529.         psrlq  $32, %mm5
  530.         movd   %mm1, 192(%edi)
  531.         movd   %mm3, 448(%edi)
  532.         movd   %mm5, 704(%edi)
  533.         movd   120(%edx), %mm0
  534.         pfadd  100(%edx), %mm0
  535.         movq   %mm0, %mm1
  536.         pfadd  88(%edx), %mm0
  537.         movd   %mm0, 192(%esi)
  538.         pfadd  68(%edx), %mm1
  539.         movd   %mm1, 64(%esi)
  540.         movd  124(%edx), %mm0
  541.         movd  %mm0, 960(%edi)
  542.         pfadd  92(%edx), %mm0
  543.         movd  %mm0, 832(%edi)
  544.         jmp     .L_bye
  545. .L01:  
  546.         movq    (%ecx), %mm0
  547.         movq    %mm0, %mm1
  548.         pxor    %mm7, %mm1
  549.         pfacc   %mm1, %mm0
  550.         pfmul   %mm6, %mm0
  551.         pf2iw   %mm0, %mm0
  552.         movd    %mm0, %eax
  553.         movw    %ax, 512(%esi)
  554.         psrlq   $32, %mm0
  555.         movd    %mm0, %eax
  556.         movw    %ax, (%esi)
  557.         movd    12(%ecx), %mm0
  558.         pfsub    8(%ecx), %mm0
  559.         pfmul  120(%ebx), %mm0
  560.         pf2iw    %mm0, %mm7
  561.         movd     %mm7, %eax
  562.         movw     %ax, 256(%edi)
  563.         pfadd   12(%ecx), %mm0
  564.         pfadd    8(%ecx), %mm0
  565.         pf2iw    %mm0, %mm0
  566.         movd     %mm0, %eax
  567.         movw     %ax, 256(%esi)
  568.         movd   16(%ecx), %mm3
  569.         pfsub  20(%ecx), %mm3
  570.         pfmul  120(%ebx), %mm3
  571.         movq   %mm3, %mm2
  572.         movd   28(%ecx), %mm2
  573.         pfsub  24(%ecx), %mm2
  574.         pfmul 120(%ebx), %mm2
  575.         movq   %mm2, %mm1
  576.         pf2iw  %mm2, %mm7
  577.         movd   %mm7, %eax
  578.         movw   %ax, 384(%edi)
  579.         pfadd  24(%ecx), %mm1
  580.         pfadd  28(%ecx), %mm1
  581.         movq   %mm1, %mm0
  582.         pfadd  16(%ecx), %mm0
  583.         pfadd  20(%ecx), %mm0
  584.         pf2iw  %mm0, %mm0
  585.         movd   %mm0, %eax
  586.         movw   %ax, 384(%esi)
  587.         pfadd  %mm3, %mm1
  588.         pf2iw  %mm1, %mm1
  589.         movd   %mm1, %eax
  590.         movw   %ax, 128(%esi)
  591.         pfadd  %mm3, %mm2
  592.         pf2iw  %mm2, %mm2
  593.         movd   %mm2, %eax
  594.         movw   %ax, 128(%edi)
  595.         movq    32(%edx), %mm0
  596.         movq    48(%edx), %mm1
  597.         pfadd   48(%edx), %mm0
  598.         pfadd   40(%edx), %mm1
  599.         pf2iw   %mm0, %mm0
  600.         pf2iw   %mm1, %mm1
  601.         movd    %mm0, %eax
  602.         movd    %mm1, %ecx
  603.         movw    %ax, 448(%esi)
  604.         movw    %cx, 320(%esi)
  605.         psrlq   $32, %mm0
  606.         psrlq   $32, %mm1
  607.         movd    %mm0, %eax
  608.         movd    %mm1, %ecx
  609.         movw    %ax, 64(%edi)
  610.         movw    %cx, 192(%edi)
  611.         movd   40(%edx), %mm3
  612.         movd   56(%edx), %mm4
  613.         movd   60(%edx), %mm0
  614.         movd   44(%edx), %mm2
  615.         movd  120(%edx), %mm5
  616.         punpckldq %mm4, %mm3
  617.         punpckldq 124(%edx), %mm0
  618.         pfadd 100(%edx), %mm5
  619.         punpckldq 36(%edx), %mm4
  620.         punpckldq 92(%edx), %mm2
  621.         movq  %mm5, %mm6
  622.         pfadd  %mm4, %mm3
  623.         pf2iw  %mm0, %mm1
  624.         pf2iw  %mm3, %mm3
  625.         pfadd  88(%edx), %mm5
  626.         movd   %mm1, %eax
  627.         movd   %mm3, %ecx
  628.         movw   %ax, 448(%edi)
  629.         movw   %cx, 192(%esi)
  630.         pf2iw  %mm5, %mm5
  631.         psrlq  $32, %mm1
  632.         psrlq  $32, %mm3
  633.         movd   %mm5, %ebx
  634.         movd   %mm1, %eax
  635.         movd   %mm3, %ecx
  636.         movw   %bx, 96(%esi)
  637.         movw   %ax, 480(%edi)
  638.         movw   %cx, 64(%esi)
  639.         pfadd  %mm2, %mm0
  640.         pf2iw  %mm0, %mm0
  641.         movd   %mm0, %eax
  642.         pfadd  68(%edx), %mm6
  643.         movw   %ax, 320(%edi)
  644.         psrlq  $32, %mm0
  645.         pf2iw  %mm6, %mm6
  646.         movd   %mm0, %eax
  647.         movd   %mm6, %ebx
  648.         movw   %ax, 416(%edi)
  649.         movw   %bx, 32(%esi)
  650.         movq   96(%edx), %mm0
  651.         movq  112(%edx), %mm2
  652.         movq  104(%edx), %mm4
  653.         pfadd %mm2, %mm0
  654.         pfadd %mm4, %mm2
  655.         pfadd 120(%edx), %mm4
  656.         movq  %mm0, %mm1
  657.         movq  %mm2, %mm3
  658.         movq  %mm4, %mm5
  659.         pfadd  64(%edx), %mm0
  660.         pfadd  80(%edx), %mm2
  661.         pfadd  72(%edx), %mm4
  662.         pf2iw  %mm0, %mm0
  663.         pf2iw  %mm2, %mm2
  664.         pf2iw  %mm4, %mm4
  665.         movd   %mm0, %eax
  666.         movd   %mm2, %ecx
  667.         movd   %mm4, %ebx
  668.         movw   %ax, 480(%esi)
  669.         movw   %cx, 352(%esi)
  670.         movw   %bx, 224(%esi)
  671.         psrlq  $32, %mm0
  672.         psrlq  $32, %mm2
  673.         psrlq  $32, %mm4
  674.         movd   %mm0, %eax
  675.         movd   %mm2, %ecx
  676.         movd   %mm4, %ebx
  677.         movw   %ax, 32(%edi)
  678.         movw   %cx, 160(%edi)
  679.         movw   %bx, 288(%edi)
  680.         pfadd  80(%edx), %mm1
  681.         pfadd  72(%edx), %mm3
  682.         pfadd  88(%edx), %mm5
  683.         pf2iw  %mm1, %mm1
  684.         pf2iw  %mm3, %mm3
  685.         pf2iw  %mm5, %mm5
  686.         movd   %mm1, %eax
  687.         movd   %mm3, %ecx
  688.         movd   %mm5, %ebx
  689.         movw   %ax, 416(%esi)
  690.         movw   %cx, 288(%esi)
  691.         movw   %bx, 160(%esi)
  692.         psrlq  $32, %mm1
  693.         psrlq  $32, %mm3
  694.         psrlq  $32, %mm5
  695.         movd   %mm1, %eax
  696.         movd   %mm3, %ecx
  697.         movd   %mm5, %ebx
  698.         movw   %ax, 96(%edi)
  699.         movw   %cx, 224(%edi)
  700.         movw   %bx, 352(%edi)
  701.         movsw
  702. .L_bye:
  703.         femms
  704.        
  705. /* NO_APP */
  706.         addl    $256, %esp
  707.         popl    %ebx
  708.         popl    %esi
  709.         popl    %edi
  710.         leave
  711.         ret
  712.         /* .size        ASM_NAME(dct64_3dnowext), .-ASM_NAME(dct64_3dnowext) */
  713.  
  714. NONEXEC_STACK
  715.