Advertisement
Guest User

Untitled

a guest
Jun 26th, 2015
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         %macro      sincosps        3
  2.        ;{
  3.             ;===================================================================================================.
  4.             ; Name    : sincosps (xmm sin, xmm cos, xmm angle_rad)                                              |
  5.             ; Purpose : Compute the sine/cosine of 4 * 32-bit floating-point elements in a expressed            |
  6.             ;           in radians.                                                                             |
  7.             ; Input   : sin - cos - angle_rad                                                                   |
  8.             ; Output  : sin - cos                                                                               |
  9.             ; Destoy  : None                                                                                    |
  10.             ; Data    : Stack                                                                                   |
  11.                         %define     STACK_PARAM      (E128 * 3)                   ; cos/sin/angle_rad           |
  12.                         %define     STACK_REG        (E128 * 1)                   ; xmm0/xmm1                   |
  13.                         %define     STACK_SIZE       (STACK_PARAM + STACK_REG)                                 ;|
  14.             ;                                                                                                  ;|
  15.                         %define     COS              (rsp - STACK_SIZE) + (E128 * 0)                           ;|
  16.                         %define     SIN              (rsp - STACK_SIZE) + (E128 * 1)                           ;|
  17.                         %define     ANGLE_RAD        (rsp - STACK_SIZE) + (E128 * 2)                           ;|
  18.             ;                                                                                                  ;|
  19.                         %define     REG1             (rsp - STACK_SIZE) + STACK_PARAM + (E128 * 0)             ;|
  20.             ;===================================================================================================.
  21.            ;{
  22.                 ; Store function's param in stack
  23.                     vmovups     [ANGLE_RAD], %3
  24.  
  25.                 ; Store function's reg in stack
  26.                     vmovups     [REG1], xmm0
  27.  
  28.                 ; Store function's param in function's reg
  29.                     vmovups     xmm0, [ANGLE_RAD]
  30.  
  31.                 ; Function's core
  32.                     ; Change angle degree to radian
  33.                         vmulps      xmm0, xmm0, [pi_180]
  34.                         vmovups     [ANGLE_RAD], xmm0
  35.  
  36.                     fld     i32 [ANGLE_RAD + _1ps]
  37.                     fsincos
  38.                         fstp    i32 [COS + _1ps]
  39.                         fstp    i32 [SIN + _1ps]
  40.  
  41.                     fld     i32 [ANGLE_RAD + _2ps]
  42.                     fsincos
  43.                         fstp    i32 [COS + _2ps]
  44.                         fstp    i32 [SIN + _2ps]
  45.  
  46.                     fld     i32 [ANGLE_RAD + _3ps]
  47.                     fsincos
  48.                         fstp    i32 [COS + _3ps]
  49.                         fstp    i32 [SIN + _3ps]
  50.  
  51.                     fld     i32 [ANGLE_RAD + _4ps]
  52.                     fsincos
  53.                         fstp    i32 [COS + _4ps]
  54.                         fstp    i32 [SIN + _4ps]
  55.  
  56.                    ;{
  57.                         %ifidni  %1, xmm0
  58.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  59.                         %elifidni  %1, xmm1
  60.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  61.                         %elifidni  %1, xmm2
  62.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  63.                         %elifidni  %1, xmm3
  64.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  65.                         %elifidni  %1, xmm4
  66.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  67.                         %elifidni  %1, xmm5
  68.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  69.                         %elifidni  %1, xmm6
  70.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  71.                         %elifidni  %1, xmm7
  72.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  73.                         %elifidni  %1, xmm8
  74.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  75.                         %elifidni  %1, xmm9
  76.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  77.                         %elifidni  %1, xmm10
  78.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  79.                         %elifidni  %1, xmm11
  80.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  81.                         %elifidni  %1, xmm12
  82.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  83.                         %elifidni  %1, xmm13
  84.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  85.                         %elifidni  %1, xmm14
  86.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  87.                         %elifidni  %1, xmm15
  88.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  89.                         %elifidni  %1, xmm16
  90.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  91.                         %elifidni  %1, xmm17
  92.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  93.                         %elifidni  %1, xmm18
  94.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  95.                         %elifidni  %1, xmm19
  96.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  97.                         %elifidni  %1, xmm20
  98.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  99.                         %elifidni  %1, xmm21
  100.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  101.                         %elifidni  %1, xmm22
  102.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  103.                         %elifidni  %1, xmm23
  104.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  105.                         %elifidni  %1, xmm24
  106.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  107.                         %elifidni  %1, xmm25
  108.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  109.                         %elifidni  %1, xmm26
  110.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  111.                         %elifidni  %1, xmm27
  112.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  113.                         %elifidni  %1, xmm28
  114.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  115.                         %elifidni  %1, xmm29
  116.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  117.                         %elifidni  %1, xmm30
  118.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  119.                         %elifidni  %1, xmm31
  120.                             _{vmovups     %1, [COS]}, {vmovups  xmm0, [REG1]}
  121.                    ;}
  122.                     %else
  123.                    ;{
  124.                         vmovups     xmm0, [COS]
  125.                         vmovups     %1, xmm0
  126.  
  127.                         ; Retore function's reg from stack
  128.                             vmovups     xmm0, [REG1]
  129.                    ;}
  130.                     %endif
  131.  
  132.                    ;{
  133.                         %ifidni  %2, xmm0
  134.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  135.                         %elifidni  %2, xmm1
  136.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  137.                         %elifidni  %2, xmm2
  138.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  139.                         %elifidni  %2, xmm3
  140.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  141.                         %elifidni  %2, xmm4
  142.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  143.                         %elifidni  %2, xmm5
  144.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  145.                         %elifidni  %2, xmm6
  146.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  147.                         %elifidni  %2, xmm7
  148.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  149.                         %elifidni  %2, xmm8
  150.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  151.                         %elifidni  %2, xmm9
  152.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  153.                         %elifidni  %2, xmm10
  154.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  155.                         %elifidni  %2, xmm11
  156.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  157.                         %elifidni  %2, xmm12
  158.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  159.                         %elifidni  %2, xmm13
  160.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  161.                         %elifidni  %2, xmm14
  162.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  163.                         %elifidni  %2, xmm15
  164.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  165.                         %elifidni  %2, xmm16
  166.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  167.                         %elifidni  %2, xmm17
  168.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  169.                         %elifidni  %2, xmm18
  170.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  171.                         %elifidni  %2, xmm19
  172.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  173.                         %elifidni  %2, xmm20
  174.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  175.                         %elifidni  %2, xmm21
  176.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  177.                         %elifidni  %2, xmm22
  178.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  179.                         %elifidni  %2, xmm23
  180.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  181.                         %elifidni  %2, xmm24
  182.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  183.                         %elifidni  %2, xmm25
  184.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  185.                         %elifidni  %2, xmm26
  186.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  187.                         %elifidni  %2, xmm27
  188.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  189.                         %elifidni  %2, xmm28
  190.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  191.                         %elifidni  %2, xmm29
  192.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  193.                         %elifidni  %2, xmm30
  194.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  195.                         %elifidni  %2, xmm31
  196.                             _{vmovups     %2, [SIN]}, {vmovups  xmm0, [REG1]}
  197.                    ;}
  198.                     %else
  199.                    ;{
  200.                         vmovups     xmm0, [SIN]
  201.                         vmovups     %1, xmm0
  202.  
  203.                         ; Retore function's reg from stack
  204.                             vmovups     xmm0, [REG1]
  205.                    ;}
  206.                     %endif
  207.  
  208.            ;}
  209.             ;===================================================================================================.
  210.             ; / sincosps                                                                                        |
  211.             ;===================================================================================================.
  212.        ;}
  213.         %endmacro
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement