home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Meia / source / a64_predict_sse2.asm < prev    next >
Encoding:
Assembly Source File  |  2009-09-14  |  13.0 KB  |  700 lines

  1. ;    VirtualDub - Video processing and capture application
  2. ;    Copyright (C) 1998-2001 Avery Lee
  3. ;
  4. ;    This program is free software; you can redistribute it and/or modify
  5. ;    it under the terms of the GNU General Public License as published by
  6. ;    the Free Software Foundation; either version 2 of the License, or
  7. ;    (at your option) any later version.
  8. ;
  9. ;    This program is distributed in the hope that it will be useful,
  10. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ;    GNU General Public License for more details.
  13. ;
  14. ;    You should have received a copy of the GNU General Public License    
  15. ;    along with this program; if not, write to the Free Software
  16. ;    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18.     default    rel
  19.  
  20.     segment    .rdata, align=16
  21.  
  22.     align 16
  23.  
  24. SSE2_02b        dq    00202020202020202h,00202020202020202h
  25. SSE2_fcb        dq    0fcfcfcfcfcfcfcfch,0fcfcfcfcfcfcfcfch
  26.  
  27.         global g_VDMPEGPredict_sse2    
  28.  
  29. g_VDMPEGPredict_sse2    dq    predict_Y_normal_SSE2
  30.                         dq    predict_Y_halfpelX_SSE2
  31.                         dq    predict_Y_halfpelY_SSE2
  32.                         dq    predict_Y_quadpel_SSE2
  33.                         dq    predict_C_normal_SSE2
  34.                         dq    predict_C_halfpelX_SSE2
  35.                         dq    predict_C_halfpelY_SSE2
  36.                         dq    predict_C_quadpel_SSE2
  37.                         dq    predict_add_Y_normal_SSE2
  38.                         dq    predict_add_Y_halfpelX_SSE2
  39.                         dq    predict_add_Y_halfpelY_SSE2
  40.                         dq    predict_add_Y_quadpel_SSE2
  41.                         dq    predict_add_C_normal_SSE2
  42.                         dq    predict_add_C_halfpelX_SSE2
  43.                         dq    predict_add_C_halfpelY_SSE2
  44.                         dq    predict_add_C_quadpel_SSE2
  45.  
  46.     segment    .text
  47.  
  48. %macro PREDICT_START 0
  49.         mov        rax, r8
  50. %endmacro
  51.  
  52. %macro PREDICT_END 0
  53. %endmacro
  54.  
  55.  
  56. ;*********************************************************
  57. ;*
  58. ;*    Luminance - quadpel
  59. ;*
  60. ;*********************************************************
  61.  
  62.     align 16
  63.  
  64. predict_Y_quadpel_SSE2:
  65.     PREDICT_START
  66.     movlhps    xmm14, xmm6
  67.     movlhps    xmm15, xmm7
  68.  
  69.     movdqa    xmm6, oword [SSE2_02b]
  70.     movdqa    xmm7, oword [SSE2_fcb]
  71.     mov    r9,16
  72.     
  73.     movdqu    xmm0,[rdx]
  74.     movdqu    xmm1,[rdx+1]
  75.     add    rdx,rax
  76.     
  77.     movdqa    xmm3,xmm7
  78.     pandn    xmm3,xmm0
  79.     movdqa    xmm5,xmm7
  80.     pandn    xmm5,xmm1
  81.  
  82.     paddb    xmm3,xmm5
  83.     paddb    xmm3,xmm6
  84.     
  85.     pand    xmm0,xmm7
  86.     pand    xmm1,xmm7
  87.     pavgb    xmm0,xmm1
  88.     
  89.     ;entry:
  90.     ; xmm0: last row high sum
  91.     ; xmm3: last row low sum + rounder
  92.     
  93. predict_Y_quadpel_SSE2.loop:
  94.     movdqu    xmm1,[rdx]    ;xmm1 = p3
  95.     movdqu    xmm2,[rdx+1]    ;xmm2 = p4
  96.     add        rdx,rax
  97.     
  98.     movdqa    xmm4,xmm7
  99.     pandn    xmm4,xmm1    ;xmm4 = p3 low bits
  100.     movdqa    xmm5,xmm7
  101.     pandn    xmm5,xmm2    ;xmm5 = p4 low bits
  102.     pand    xmm1,xmm7    ;xmm1 = p3 high bits
  103.     pand    xmm2,xmm7    ;xmm2 = p4 high bits
  104.     pavgb    xmm1,xmm2    ;xmm1 = p3+p4 high bits
  105.     paddb    xmm4,xmm5
  106.     
  107.     pavgb    xmm0,xmm1    ;xmm0 = pout high bits
  108.     paddb    xmm3,xmm4    ;xmm3 = (pout low bits << 2) + rounder
  109.     
  110.     psrlq    xmm3,2
  111.     paddb    xmm4,xmm6    ;xmm4 = next loop low sum    
  112.  
  113.     movdqa    xmm5,xmm7
  114.     pandn    xmm5,xmm3
  115.     paddb    xmm0,xmm5
  116.     movdqa    xmm3,xmm4    ;xmm3 = next loop low sum
  117.     movdqa    [rcx],xmm0
  118.     movdqa    xmm0,xmm1    ;xmm0 = next loop high sum
  119.  
  120.     add        rcx,rax
  121.  
  122.     sub        r9,1
  123.     jne        predict_Y_quadpel_SSE2.loop
  124.  
  125.     movhlps    xmm6, xmm14
  126.     movhlps    xmm7, xmm15
  127.     PREDICT_END
  128.     ret
  129.  
  130.  
  131. ;*********************************************************
  132. ;*
  133. ;*    Luminance - half-pel Y
  134. ;*
  135. ;*********************************************************
  136.  
  137.     align 16
  138. predict_Y_halfpelY_SSE2:
  139.     PREDICT_START
  140.     mov        r9, 8
  141.     movdqu    xmm0, [rdx]
  142.     add        r8, r8
  143. predict_Y_halfpelY_SSE2.loop:
  144.     movdqu    xmm2, [rdx+rax]
  145.  
  146.     movdqu    xmm4, [rdx+r8]
  147.     pavgb    xmm0, xmm2
  148.  
  149.     movdqa    [rcx], xmm0
  150.     pavgb    xmm2, xmm4
  151.  
  152.     movdqa    [rcx+rax], xmm2
  153.     movdqa    xmm0, xmm4
  154.  
  155.     add        rdx, r8
  156.     add        rcx, r8
  157.     
  158.     sub        r9, 1
  159.     jne        predict_Y_halfpelY_SSE2.loop
  160.  
  161.     PREDICT_END
  162.     ret
  163.  
  164. ;*********************************************************
  165. ;*
  166. ;*    Luminance - half-pel X
  167. ;*
  168. ;*********************************************************
  169.  
  170.     align 16
  171. predict_Y_halfpelX_SSE2:
  172.     PREDICT_START
  173.     mov        r9,8
  174.     add        r8,r8
  175.  
  176. predict_Y_halfpelX_SSE2.loop:
  177.     movdqu    xmm0,[rdx]
  178.     movdqu    xmm1,[rdx+1]
  179.     movdqu    xmm2,[rdx+rax]
  180.     movdqu    xmm3,[rdx+rax+1]
  181.     pavgb    xmm0,xmm1
  182.     pavgb    xmm2,xmm3
  183.     movdqa    [rcx],xmm0
  184.     movdqa    [rcx+rax],xmm2
  185.     
  186.     add        rcx,r8
  187.     add        rdx,r8
  188.  
  189.     sub        r9, 1
  190.     jne        predict_Y_halfpelX_SSE2.loop
  191.  
  192.     PREDICT_END
  193.     ret
  194.  
  195. ;*********************************************************
  196. ;*
  197. ;*    Luminance - normal
  198. ;*
  199. ;*********************************************************
  200.  
  201.     align 16
  202. predict_Y_normal_SSE2:
  203.     PREDICT_START
  204.     mov        r9, 8
  205.     add        r8, r8
  206.  
  207. predict_Y_normal_SSE2.loop:
  208.     movdqu    xmm0,[rdx]
  209.     movdqu    xmm2,[rdx+rax]
  210.     movdqa    [rcx],xmm0
  211.     movdqa    [rcx+rax],xmm2
  212.     add        rdx,r8
  213.     add        rcx,r8
  214.     sub        r9, 1
  215.     jne        predict_Y_normal_SSE2.loop
  216.  
  217.     PREDICT_END
  218.     ret
  219.  
  220.  
  221.  
  222. ;*********************************************************
  223. ;*
  224. ;*    Chrominance - quadpel
  225. ;*
  226. ;*********************************************************
  227.  
  228.     align 16
  229. predict_C_quadpel_SSE2:
  230.     PREDICT_START
  231.  
  232.     pxor        xmm5,xmm5
  233.     mov            r9,8
  234. predict_C_quadpel_SSE2.loop:
  235.     movq        xmm0,qword [rdx]
  236.     movd        xmm1,dword [rdx+8]
  237.     movq        xmm4,xmm0
  238.     psrlq        xmm4,8
  239.     psllq        xmm1,56
  240.     por            xmm1,xmm4
  241.  
  242.     movq        xmm2,qword [rdx+rax]
  243.     movd        xmm3,dword [rdx+rax+8]
  244.     movq        xmm4,xmm2
  245.     psrlq        xmm4,8
  246.     psllq        xmm3,56
  247.     por            xmm3,xmm4
  248.  
  249.     punpcklbw    xmm0,xmm5
  250.     punpcklbw    xmm1,xmm5
  251.  
  252.     paddw        xmm0,xmm1
  253.  
  254.     punpcklbw    xmm2,xmm5
  255.     punpcklbw    xmm3,xmm5
  256.  
  257.     paddw        xmm2,xmm3
  258.  
  259.     paddw        xmm0,xmm2
  260.  
  261.     psrlw        xmm0, 1
  262.     pavgw        xmm0, xmm5
  263.  
  264.     packuswb    xmm0,xmm0
  265.  
  266.     movq        qword [rcx],xmm0
  267.  
  268.     add            rcx,rax
  269.     add            rdx,rax
  270.  
  271.     sub            r9, 1
  272.     jne            predict_C_quadpel_SSE2.loop
  273.  
  274.     PREDICT_END
  275.     ret
  276.  
  277.  
  278. ;*********************************************************
  279. ;*
  280. ;*    Chrominance - half-pel Y
  281. ;*
  282. ;*********************************************************
  283.  
  284.     align 16
  285. predict_C_halfpelY_SSE2:
  286.     PREDICT_START
  287.     movq    xmm0, qword [rdx]
  288.     mov        r9, 4
  289.     add        r8, r8
  290.  
  291. predict_C_halfpelY_SSE2.loop:
  292.     movq    xmm2, qword [rdx+rax]
  293.     movq    xmm4, qword [rdx+r8]
  294.  
  295.     pavgb    xmm0, xmm2
  296.     pavgb    xmm2, xmm4
  297.  
  298.     movq    qword [rcx], xmm0
  299.     movq    xmm0,xmm4
  300.  
  301.     movq    qword [rcx+rax],xmm2
  302.  
  303.     add        rdx, r8
  304.     add        rcx, r8
  305.     sub        r9, 1
  306.     jne        predict_C_halfpelY_SSE2.loop
  307.     PREDICT_END
  308.     ret
  309.  
  310. ;*********************************************************
  311. ;*
  312. ;*    Chrominance - half-pel X
  313. ;*
  314. ;*********************************************************
  315.  
  316.     align 16
  317. predict_C_halfpelX_SSE2:
  318.     PREDICT_START
  319.     mov        r9,4
  320.     add        r8,r8
  321. predict_C_halfpelX_SSE2.loop:
  322.     movq    xmm0, qword [rdx]
  323.     movq    xmm1, qword [rdx+1]
  324.     movq    xmm2, qword [rdx+rax]
  325.     movq    xmm3, qword [rdx+rax+1]
  326.  
  327.     pavgb    xmm0, xmm1
  328.     pavgb    xmm2, xmm3
  329.  
  330.     movq    qword [rcx], xmm0
  331.     movq    qword [rcx+rax], xmm2
  332.  
  333.     add        rdx, r8
  334.     add        rcx, r8
  335.     sub        r9, 1
  336.  
  337.     jne    predict_C_halfpelX_SSE2.loop
  338.  
  339.     PREDICT_END
  340.     ret
  341.  
  342. ;*********************************************************
  343. ;*
  344. ;*    Chrominance - normal
  345. ;*
  346. ;*********************************************************
  347.  
  348.     align 16
  349. predict_C_normal_SSE2:
  350.     PREDICT_START
  351.     add        r8, r8
  352.  
  353.     mov        r10, [rdx]
  354.     mov        r11, [rdx+rax]
  355.     mov        [rcx], r10
  356.     mov        [rcx+rax], r11
  357.     add        rcx, r8
  358.     add        rdx, r8
  359.     mov        r10, [rdx]
  360.     mov        r11, [rdx+rax]
  361.     mov        [rcx], r10
  362.     mov        [rcx+rax], r11
  363.     add        rcx, r8
  364.     add        rdx, r8
  365.     mov        r10, [rdx]
  366.     mov        r11, [rdx+rax]
  367.     mov        [rcx], r10
  368.     mov        [rcx+rax], r11
  369.     add        rcx, r8
  370.     add        rdx, r8
  371.     mov        r10, [rdx]
  372.     mov        r11, [rdx+rax]
  373.     mov        [rcx], r10
  374.     mov        [rcx+rax], r11
  375.     add        rcx, r8
  376.     add        rdx, r8
  377.  
  378.     PREDICT_END
  379.     ret
  380.  
  381.  
  382. ;**************************************************************************
  383. ;*
  384. ;*
  385. ;*
  386. ;*  Addition predictors
  387. ;*
  388. ;*
  389. ;*
  390. ;**************************************************************************
  391.  
  392. ;*********************************************************
  393. ;*
  394. ;*    Luminance - quadpel
  395. ;*
  396. ;*********************************************************
  397.  
  398.     align 16
  399.  
  400.     
  401. predict_add_Y_quadpel_SSE2:
  402.     PREDICT_START
  403.     movlhps    xmm14, xmm6
  404.     movlhps    xmm15, xmm7
  405.  
  406.     movdqa    xmm6, oword [SSE2_02b]
  407.     movdqa    xmm7, oword [SSE2_fcb]
  408.     mov        r9,16
  409.     
  410.     movdqu    xmm0,[rdx]
  411.     movdqu    xmm1,[rdx+1]
  412.     add        rdx,rax
  413.     
  414.     movdqa    xmm3,xmm7
  415.     pandn    xmm3,xmm0
  416.     movdqa    xmm5,xmm7
  417.     pandn    xmm5,xmm1
  418.  
  419.     paddb    xmm3,xmm5
  420.     paddb    xmm3,xmm6
  421.     
  422.     pand    xmm0,xmm7
  423.     pand    xmm1,xmm7
  424.     pavgb    xmm0,xmm1
  425.     
  426.     ;entry:
  427.     ; xmm0: last row high sum
  428.     ; xmm3: last row low sum + rounder
  429.     
  430. add_Y_quadpel_SSE2.loop:
  431.     movdqu    xmm1,[rdx]    ;xmm1 = p3
  432.     movdqu    xmm2,[rdx+1]    ;xmm2 = p4
  433.     add        rdx,rax
  434.     
  435.     movdqa    xmm4,xmm7
  436.     pandn    xmm4,xmm1    ;xmm4 = p3 low bits
  437.     movdqa    xmm5,xmm7
  438.     pandn    xmm5,xmm2    ;xmm5 = p4 low bits
  439.     pand    xmm1,xmm7    ;xmm1 = p3 high bits
  440.     pand    xmm2,xmm7    ;xmm2 = p4 high bits
  441.     pavgb    xmm1,xmm2    ;xmm1 = p3+p4 high bits
  442.     paddb    xmm4,xmm5
  443.     
  444.     pavgb    xmm0,xmm1    ;xmm0 = pout high bits
  445.     paddb    xmm3,xmm4    ;xmm3 = (pout low bits << 2) + rounder
  446.     
  447.     psrlq    xmm3,2
  448.     paddb    xmm4,xmm6    ;xmm4 = next loop low sum    
  449.  
  450.     movdqa    xmm5,xmm7
  451.     pandn    xmm5,xmm3
  452.     paddb    xmm0,xmm5
  453.     pavgb    xmm0,[rcx]
  454.     movdqa    xmm3,xmm4    ;xmm3 = next loop low sum
  455.     movdqa    [rcx],xmm0
  456.     movdqa    xmm0,xmm1    ;xmm0 = next loop high sum
  457.  
  458.     add        rcx,rax
  459.  
  460.     sub        r9, 1
  461.     jne        add_Y_quadpel_SSE2.loop
  462.     
  463.     movhlps    xmm6, xmm14
  464.     movhlps    xmm7, xmm15
  465.     PREDICT_END
  466.     ret
  467.     
  468. ;*********************************************************
  469. ;*
  470. ;*    Luminance - half-pel Y
  471. ;*
  472. ;*********************************************************
  473.  
  474.     align 16
  475. predict_add_Y_halfpelY_SSE2:
  476.     PREDICT_START
  477.     movdqu    xmm0,[rdx]
  478.     add        rdx,rax
  479.     add        r8, r8
  480.     mov        r9, 8
  481. predict_add_Y_halfpelY_SSE2.loop:
  482.     movdqu    xmm1,[rdx]
  483.     movdqu    xmm2,[rdx+rax]
  484.     pavgb    xmm0,xmm1
  485.     pavgb    xmm1,xmm2
  486.     pavgb    xmm0,[rcx]
  487.     pavgb    xmm1,[rcx+rax]
  488.         
  489.     add        rdx,r8
  490.  
  491.     movdqa    [rcx],xmm0
  492.     movdqa    [rcx+rax],xmm1
  493.     add        rcx,r8
  494.     movdqa    xmm0,xmm2
  495.     sub        r9, 1
  496.     jne        predict_add_Y_halfpelY_SSE2.loop
  497.  
  498.     PREDICT_END
  499.     ret
  500.  
  501. ;*********************************************************
  502. ;*
  503. ;*    Luminance - half-pel X
  504. ;*
  505. ;*********************************************************
  506.  
  507.     align 16
  508. predict_add_Y_halfpelX_SSE2:
  509.     PREDICT_START
  510.     mov        r9,8
  511.     add        r8,r8
  512. predict_add_Y_halfpelX_SSE2.loop:
  513.     movdqu    xmm0,[rdx]
  514.     movdqu    xmm2,[rdx+rax]
  515.     movdqu    xmm1,[rdx+1]
  516.     movdqu    xmm3,[rdx+rax+1]
  517.     pavgb    xmm0,xmm1
  518.     pavgb    xmm2,xmm3
  519.     pavgb    xmm0,[rcx]
  520.     pavgb    xmm2,[rcx+rax]
  521.  
  522.     add        rdx,r8
  523.     movdqa    [rcx],xmm0
  524.     movdqa    [rcx+rax],xmm2
  525.     add        rcx,r8
  526.     sub        r9, 1
  527.     jne        predict_add_Y_halfpelX_SSE2.loop
  528.  
  529.     PREDICT_END
  530.     ret
  531.  
  532.  
  533.  
  534. ;*********************************************************
  535. ;*
  536. ;*    Luminance - normal
  537. ;*
  538. ;*********************************************************
  539.  
  540.     align 16
  541. predict_add_Y_normal_SSE2:
  542.     PREDICT_START
  543.     mov        r9,8
  544.     add        r8,r8
  545.  
  546. add_Y_normal_SSE2.loop:
  547.     movdqu    xmm0,[rdx]
  548.     movdqu    xmm2,[rdx+rax]
  549.     pavgb    xmm0,[rcx]
  550.     pavgb    xmm2,[rcx+rax]
  551.     movdqa    [rcx],xmm0
  552.     movdqa    [rcx+rax],xmm2
  553.  
  554.     add        rdx, r8
  555.     add        rcx, r8
  556.  
  557.     sub        r9, 1
  558.     jne        add_Y_normal_SSE2.loop
  559.  
  560.     PREDICT_END
  561.     ret
  562.  
  563.  
  564. ;*********************************************************
  565. ;*
  566. ;*    Chrominance - quadpel
  567. ;*
  568. ;*********************************************************
  569.  
  570.     align 16
  571. predict_add_C_quadpel_SSE2:
  572.     PREDICT_START
  573.  
  574.     pxor    xmm5, xmm5
  575.     mov        r9, 8
  576. add_C_quadpel_SSE2.loop:
  577.     movq        xmm0, qword [rdx]
  578.     movd        xmm1, dword [rdx+8]
  579.     movq        xmm2, xmm0
  580.     psrlq        xmm2, 8
  581.     psllq        xmm1, 56
  582.     por            xmm1, xmm2
  583.  
  584.     movq        xmm2, qword [rdx+rax]
  585.     movd        xmm3, dword [rdx+rax+8]
  586.     movq        xmm4, xmm2
  587.     psrlq        xmm4, 8
  588.     psllq        xmm3, 56
  589.     por            xmm3, xmm4
  590.  
  591.     punpcklbw    xmm0, xmm5
  592.     punpcklbw    xmm1, xmm5
  593.  
  594.     paddw        xmm0, xmm1
  595.  
  596.     punpcklbw    xmm2, xmm5
  597.     punpcklbw    xmm3, xmm5
  598.  
  599.     paddw        xmm2, xmm3
  600.  
  601.     movq        xmm3, qword [rcx]
  602.     paddw        xmm0, xmm2
  603.  
  604.     psrlw        xmm0, 1
  605.     pavgw        xmm0, xmm5
  606.  
  607.     packuswb    xmm0, xmm0
  608.     pavgb        xmm0, xmm3
  609.  
  610.     movq        qword [rcx],xmm0
  611.  
  612.     add            rdx, rax
  613.     add            rcx, rax
  614.  
  615.     sub            r9, 1
  616.     jne            add_C_quadpel_SSE2.loop
  617.  
  618.     PREDICT_END
  619.     ret
  620.  
  621. ;*********************************************************
  622. ;*
  623. ;*    Chrominance - half-pel Y
  624. ;*
  625. ;*********************************************************
  626.  
  627.     align 16
  628. predict_add_C_halfpelY_SSE2:
  629.     PREDICT_START
  630.     mov        r9,8
  631. predict_add_C_halfpelY_SSE2.loop:
  632.     movq    xmm0, qword [rdx]
  633.     movq    xmm1, qword [rdx+rax]
  634.     movq    xmm2, qword [rcx]
  635.     pavgb    xmm0, xmm1
  636.     pavgb    xmm0, xmm2
  637.     movq    qword [rcx], xmm0
  638.     add        rdx, rax
  639.     add        rcx, rax
  640.     sub        r9,1
  641.     jne    predict_add_C_halfpelY_SSE2.loop
  642.     PREDICT_END
  643.     ret
  644.  
  645. ;*********************************************************
  646. ;*
  647. ;*    Chrominance - half-pel X
  648. ;*
  649. ;*********************************************************
  650.  
  651.     align 16
  652. predict_add_C_halfpelX_SSE2:
  653.     PREDICT_START
  654.     mov        r9,8
  655. predict_add_C_halfpelX_SSE2.loop:
  656.     movq    xmm0, qword [rdx]
  657.     movq    xmm1, qword [rdx+1]
  658.     movq    xmm2, qword [rcx]
  659.     pavgb    xmm0, xmm1
  660.     pavgb    xmm0, xmm2
  661.     movq    qword [rcx], xmm0
  662.     add        rdx,rax
  663.     add        rcx,rax
  664.     sub        r9, 1
  665.     jne        predict_add_C_halfpelX_SSE2.loop
  666.     PREDICT_END
  667.     ret
  668.  
  669.  
  670.  
  671. ;*********************************************************
  672. ;*
  673. ;*    Chrominance - normal
  674. ;*
  675. ;*********************************************************
  676.  
  677.     align 16
  678. predict_add_C_normal_SSE2:
  679.     PREDICT_START
  680.     add        r8, r8
  681.  
  682.     %rep    4
  683.     movq    xmm0, qword [rdx]
  684.     movq    xmm1, qword [rcx]
  685.     movq    xmm2, qword [rdx+rax]
  686.     movq    xmm3, qword [rcx+rax]
  687.     pavgb    xmm0, xmm1
  688.     pavgb    xmm2, xmm3
  689.     movq    qword [rcx], xmm0
  690.     movq    qword [rcx+rax], xmm2
  691.     add        rcx, r8
  692.     add        rdx, r8
  693.     %endrep
  694.  
  695.     PREDICT_END
  696.     ret
  697.  
  698.  
  699.     end
  700.