Advertisement
MSM

Fast pow algorithm

MSM
Jul 10th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global _uberpow
  2.  
  3. section .code use32
  4.  
  5. _uberpow:
  6. ; argumenty:
  7. ;   podstawa w [esp + 4] (float)
  8. ;   wykladnik w [esp + 8] (int)
  9. ; zwracana wartość w st0
  10.     mov eax, [esp + 8]
  11.     fld dword [esp + 4]
  12.  
  13. .internal_begin:
  14.     test eax, eax
  15.     jl .when_less
  16.     cmp eax, 10
  17.     jg .when_more
  18.     jmp [.calltable + eax * 4]
  19.  
  20. .when_less:
  21.     neg eax
  22.     call .internal_begin
  23.     fld1
  24.     fdivr
  25.     ret
  26.  
  27. .calltable:
  28.     dd .when0
  29.     dd .when1
  30.     dd .when2
  31.     dd .when3
  32.     dd .when4
  33.     dd .when5
  34.     dd .when6
  35.     dd .when7
  36.     dd .when8
  37.     dd .when9
  38.     dd .when10
  39.  
  40. .when0:
  41.     fstp st0
  42.     fld1
  43.     ret
  44.  
  45. .when1:
  46.     ret
  47.  
  48. .when2:
  49.     fld st0
  50.     fmul
  51.     ret
  52.  
  53. .when3:
  54.     fld st0
  55.     fld st0
  56.     fmul
  57.     fmul
  58.     ret
  59.  
  60. .when4:
  61.     fld st0
  62.     fmul
  63.     fld st0
  64.     fmul
  65.     ret
  66.  
  67. .when5:
  68.     fld st0
  69.     fld st0
  70.     fmul
  71.     fld st0
  72.     fmul
  73.     fmul
  74.     ret
  75.  
  76. .when6:
  77.     fld st0
  78.     fmul
  79.     fld st0
  80.     fld st0
  81.     fmul
  82.     fmul
  83.     ret
  84.  
  85. .when7:
  86.     fld st0
  87.     fld st0
  88.     fld st0
  89.     fld st0
  90.     fmul
  91.     fmul
  92.     fld st0
  93.     fmul
  94.     fmul
  95.     ret
  96.  
  97. .when8:
  98.     fld st0
  99.     fmul
  100.     fld st0
  101.     fmul
  102.     fld st0
  103.     fmul
  104.     ret
  105.  
  106. .when9:
  107.     fld st0
  108.     fld st0
  109.     fmul
  110.     fmul
  111.     fld st0
  112.     fld st0
  113.     fmul
  114.     fmul
  115.     ret
  116.  
  117. .when10:
  118.     fld st0
  119.     fmul
  120.     fld st0
  121.     fld st0
  122.     fmul
  123.     fld st0
  124.     fmul
  125.     fmul
  126.     ret
  127.  
  128. .when_more:
  129.     fld1
  130.     fxch st1
  131.     fyl2x
  132.     fild dword [esp + 8]
  133.     fmulp st1, st0
  134.     fst st1
  135.     frndint
  136.     fld1
  137.     fscale
  138.     fxch st1
  139.     fsubr st0, st2
  140.     f2xm1
  141.     fld1
  142.     faddp st1, st0
  143.     fmulp st1, st0
  144.     fstp st1
  145.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement