Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2258 lines
66 KiB

  1. ; Copyright (C) 1985-2000 Intel Corporation.
  2. ;
  3. ; The information and source code contained herein is the exclusive property
  4. ; of Intel Corporation and may not be disclosed, examined, or reproduced in
  5. ; whole or in part without explicit written authorization from the Company.
  6. ;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8. ;
  9. ; pow_p4.asm
  10. ;
  11. ; double pow(double,double);
  12. ;
  13. ; Initial version: 01/10/2001
  14. ; Update (bug fixes): 02/26/2001
  15. ; Updated the underflow/overflow path
  16. ; to restore edi, esi in the correct order: 03/07/2001
  17. ;
  18. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  19. ;;
  20. ;; x=2^k*1.b1 b2...b6 b7 .. b52 x1=1.b1..b52
  21. ;; f1=(b1 b2 ..b7 +1)/2
  22. ;; x2=x1*rcp_t1[f1]=b'0.b'1 b'2 ... b'52 b'53 (b'53=0 if b'0=1)
  23. ;; f2=(b'7 ..b'14 +1)/2
  24. ;; x3=x2*rcp_t2[f2]=b"0.b"1 b"2 ... b"52 b"53 (b"53=0 if b"0=1)
  25. ;; f3=(b"13 ..b"21+1)/2
  26. ;; R=x3*rcp_t3[f3]
  27. ;; rcp=rcp_t1[f1]*rcp_t2[f2]*rcp_t3[f3] (exact multiplication)
  28. ;; E=exact_mul(rcp*x1)-R
  29. ;; R'=RN(R+E)
  30. ;;
  31. ;; H=RN(RN(k+T1[f1]+T2[f2]+T3[f3]+R)+E) (high part of log2(x) approximation)
  32. ;; Rl+El=exact(k+T1[f1]+T2[f2]+T3[f3]+R+E)-H
  33. ;;
  34. ;; Exponential evaluation started with approximate argument yH*HH (exact
  35. ;; product of the most significant 26 bits of y and H)
  36. ;; Correction added to exponential reduced argument:
  37. ;; yH*HL+yL*HH+yL*HL+y*(D1+D2+D3+(Rl+El)+Pl14),
  38. ;; where Pl14=cl1*R'+...+cl4*R'^4
  39. ;;
  40. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  41. .686P
  42. .387
  43. .XMM
  44. .MODEL FLAT,C
  45. EXTRN C __libm_error_support : NEAR
  46. CONST SEGMENT PARA PUBLIC USE32 'CONST'
  47. ALIGN 16
  48. rcp_t1 DQ 03ff0000000000000H, 03fefc08000000000H
  49. DQ 03fef820000000000H, 03fef448000000000H
  50. DQ 03fef07c000000000H, 03feecc0000000000H
  51. DQ 03fee914000000000H, 03fee574000000000H
  52. DQ 03fee1e0000000000H, 03fede5c000000000H
  53. DQ 03fedae8000000000H, 03fed77c000000000H
  54. DQ 03fed41c000000000H, 03fed0cc000000000H
  55. DQ 03fecd84000000000H, 03feca4c000000000H
  56. DQ 03fec71c000000000H, 03fec3f8000000000H
  57. DQ 03fec0e0000000000H, 03febdd4000000000H
  58. DQ 03febad0000000000H, 03feb7d8000000000H
  59. DQ 03feb4e8000000000H, 03feb204000000000H
  60. DQ 03feaf28000000000H, 03feac58000000000H
  61. DQ 03fea990000000000H, 03fea6d0000000000H
  62. DQ 03fea41c000000000H, 03fea16c000000000H
  63. DQ 03fe9ec8000000000H, 03fe9c2c000000000H
  64. DQ 03fe9998000000000H, 03fe9710000000000H
  65. DQ 03fe948c000000000H, 03fe9210000000000H
  66. DQ 03fe8f9c000000000H, 03fe8d30000000000H
  67. DQ 03fe8acc000000000H, 03fe8870000000000H
  68. DQ 03fe8618000000000H, 03fe83c8000000000H
  69. DQ 03fe8180000000000H, 03fe7f40000000000H
  70. DQ 03fe7d04000000000H, 03fe7ad4000000000H
  71. DQ 03fe78a4000000000H, 03fe767c000000000H
  72. DQ 03fe745c000000000H, 03fe7244000000000H
  73. DQ 03fe7030000000000H, 03fe6e20000000000H
  74. DQ 03fe6c18000000000H, 03fe6a14000000000H
  75. DQ 03fe6818000000000H, 03fe6620000000000H
  76. DQ 03fe642c000000000H, 03fe6240000000000H
  77. DQ 03fe6058000000000H, 03fe5e74000000000H
  78. DQ 03fe5c98000000000H, 03fe5ac0000000000H
  79. DQ 03fe58ec000000000H, 03fe5720000000000H
  80. DQ 03fe5554000000000H, 03fe5390000000000H
  81. DQ 03fe51d0000000000H, 03fe5014000000000H
  82. DQ 03fe4e60000000000H, 03fe4cac000000000H
  83. DQ 03fe4afc000000000H, 03fe4954000000000H
  84. DQ 03fe47b0000000000H, 03fe460c000000000H
  85. DQ 03fe4470000000000H, 03fe42d8000000000H
  86. DQ 03fe4140000000000H, 03fe3fb0000000000H
  87. DQ 03fe3e24000000000H, 03fe3c98000000000H
  88. DQ 03fe3b14000000000H, 03fe3990000000000H
  89. DQ 03fe3814000000000H, 03fe3698000000000H
  90. DQ 03fe3520000000000H, 03fe33b0000000000H
  91. DQ 03fe3240000000000H, 03fe30d0000000000H
  92. DQ 03fe2f68000000000H, 03fe2e04000000000H
  93. DQ 03fe2ca0000000000H, 03fe2b40000000000H
  94. DQ 03fe29e4000000000H, 03fe288c000000000H
  95. DQ 03fe2734000000000H, 03fe25e4000000000H
  96. DQ 03fe2494000000000H, 03fe2344000000000H
  97. DQ 03fe21fc000000000H, 03fe20b4000000000H
  98. DQ 03fe1f70000000000H, 03fe1e30000000000H
  99. DQ 03fe1cf0000000000H, 03fe1bb4000000000H
  100. DQ 03fe1a7c000000000H, 03fe1944000000000H
  101. DQ 03fe1810000000000H, 03fe16e0000000000H
  102. DQ 03fe15b0000000000H, 03fe1484000000000H
  103. DQ 03fe135c000000000H, 03fe1234000000000H
  104. DQ 03fe1110000000000H, 03fe0ff0000000000H
  105. DQ 03fe0ed0000000000H, 03fe0db4000000000H
  106. DQ 03fe0c98000000000H, 03fe0b80000000000H
  107. DQ 03fe0a68000000000H, 03fe0954000000000H
  108. DQ 03fe0844000000000H, 03fe0734000000000H
  109. DQ 03fe0624000000000H, 03fe0518000000000H
  110. DQ 03fe0410000000000H, 03fe0308000000000H
  111. DQ 03fe0204000000000H, 03fe0100000000000H
  112. DQ 03fe0000000000000H, 0
  113. log2_t1 DQ 0, 0
  114. DQ 03f86fdf461d20000H, 03d3c9efc46d9f6f7H
  115. DQ 03f96e625317a0000H, 03d453f0e645614dbH
  116. DQ 03fa11a6297920000H, 03d4d925cd7d436d6H
  117. DQ 03fa6bb01a01f0000H, 03d3c995e7439db70H
  118. DQ 03fac4eb3635c8000H, 03d4a8192bdcad609H
  119. DQ 03fb0ea8b80338000H, 03d4e1797942f1be5H
  120. DQ 03fb3a9f062a90000H, 03d3011ef2e155a44H
  121. DQ 03fb665684ff80000H, 03d3084f28da93fafH
  122. DQ 03fb919bc335d0000H, 03d246082ed03fe7fH
  123. DQ 03fbbc6b9d7c04000H, 03d45b7e842652658H
  124. DQ 03fbe7272e1dc8000H, 03d4a2ea92333a25cH
  125. DQ 03fc08cd7820ec000H, 03d3543c511b40206H
  126. DQ 03fc1dc8f3a33c000H, 03d45598cab6d744cH
  127. DQ 03fc32b7a27af4000H, 03d07aba1fd6522b1H
  128. DQ 03fc476564c740000H, 03d4dc39f249b8f70H
  129. DQ 03fc5c04864906000H, 03d28c5d47e5f3668H
  130. DQ 03fc707a4ef786000H, 03d4f86ea591de6f8H
  131. DQ 03fc84c59fac38000H, 03d435cd351b14a77H
  132. DQ 03fc98e556aacc000H, 03d341c88d156ee10H
  133. DQ 03fcacf30032be000H, 03d2e3733debf9165H
  134. DQ 03fcc0d3213ae6000H, 03d4b15bcb18be2edH
  135. DQ 03fcd49f9d6d66000H, 03d30b557c2a12d29H
  136. DQ 03fce83c98a2d0000H, 03d442af5d10d18f2H
  137. DQ 03fcfbc44e396e000H, 03d47b3f928665437H
  138. DQ 03fd078d40936e000H, 03d38f1f608125902H
  139. DQ 03fd112ce25b29000H, 03d3c851c0f45bae5H
  140. DQ 03fd1ac0b77e3f000H, 03d3f97100b047ea3H
  141. DQ 03fd243a590d2b000H, 03d3c9b75e8e9d45dH
  142. DQ 03fd2db57ad935000H, 03cf934f5238ac23eH
  143. DQ 03fd37158be940000H, 03d4a16d142e3f4deH
  144. DQ 03fd40684445fb000H, 03d469ba14bfbfc6dH
  145. DQ 03fd49ad4a118d000H, 03d45cd377302cca5H
  146. DQ 03fd52d5be2114000H, 03d3a83640f883e4bH
  147. DQ 03fd5bfe367828000H, 03d49755c3dea7d5aH
  148. DQ 03fd6517e94738000H, 03d4e8a28223a67c4H
  149. DQ 03fd6e22792ef1000H, 03d314f240e7e9039H
  150. DQ 03fd771d87fd10000H, 03d258aaf31d36edbH
  151. DQ 03fd8008b6b297000H, 03d1605b88ccad976H
  152. DQ 03fd88e3a58a56000H, 03d2097ff572e71dfH
  153. DQ 03fd91bd19e695000H, 03d4dbb3ee4f6c667H
  154. DQ 03fd9a85babbe1000H, 03d4d889a0a61b2d6H
  155. DQ 03fda33d25fcb1000H, 03d4f5875d92c8dd6H
  156. DQ 03fdabe2f8ec96000H, 03d3c773190e2cc83H
  157. DQ 03fdb4865273ed000H, 03d4ab54a099e1f60H
  158. DQ 03fdbd07e0e781000H, 03d268ac21c0dcf20H
  159. DQ 03fdc5960ba6e1000H, 03d43b4bd96cb81feH
  160. DQ 03fdce1168b913000H, 03d2fada3055d19e2H
  161. DQ 03fdd679920231000H, 03d18ed5096e87504H
  162. DQ 03fddece20dffc000H, 03d43e26c2ced8aaaH
  163. DQ 03fde71ebad35f000H, 03d011609e08e95e1H
  164. DQ 03fdef6b3d3444000H, 03d40b35b2d1614faH
  165. DQ 03fdf7a349e747000H, 03d4a6e7081d99120H
  166. DQ 03fdffd6c9e8cc000H, 03cfa67452e86699dH
  167. DQ 03fe03fa97e79f000H, 03d275e12e74f8beeH
  168. DQ 03fe080748d542800H, 03d3b8c3b78ce0adbH
  169. DQ 03fe0c11650cf0000H, 03d461752eb1152a5H
  170. DQ 03fe1010826b18000H, 03d4ea3c98a07d258H
  171. DQ 03fe140ccdd4ae800H, 03d1fcada197ed2c1H
  172. DQ 03fe180633d744800H, 03d22551707e07a41H
  173. DQ 03fe1bf426e8e9800H, 03d376aff6c055f55H
  174. DQ 03fe1fdef5db3a000H, 03d4442de8501d871H
  175. DQ 03fe23c68c8201000H, 03d270c749129a57aH
  176. DQ 03fe27a23a05a8000H, 03d4cb0ea30b214a6H
  177. DQ 0bfda8f9d1c354000H, 0bd4604f54f4f9853H
  178. DQ 0bfda1506aee3b000H, 0bd44ff93dbb28c80H
  179. DQ 0bfd99ae48aa53000H, 0bd0e6ed7003dfdf5H
  180. DQ 0bfd9213957df2000H, 0bd3e186ac01b3f7fH
  181. DQ 0bfd8a9228a043000H, 0bd49bc20cf8dd883H
  182. DQ 0bfd8306ebf51c000H, 0bd45c8266e480596H
  183. DQ 0bfd7b83a057f9000H, 0bd35f4f79f443745H
  184. DQ 0bfd741a637fca000H, 0bd4025f49ff0180dH
  185. DQ 0bfd6cb99e7aa4000H, 0bd412b5ad5a7002aH
  186. DQ 0bfd654f5e853d000H, 0bd44c7008c4a72a7H
  187. DQ 0bfd5dfff91d34000H, 0bd3f544ed390ba95H
  188. DQ 0bfd56b9933779000H, 0bd391dc031bae772H
  189. DQ 0bfd4f69f5d830000H, 0bd38f36dd24bae46H
  190. DQ 0bfd483602143d000H, 0bce09c599a327931H
  191. DQ 0bfd410b98a0d4000H, 0bd156a3c28e8042aH
  192. DQ 0bfd39d83e4060000H, 0bd447f1643c10456H
  193. DQ 0bfd32c15f8b57000H, 0bd0d6ee2e01d9231H
  194. DQ 0bfd2ba1c0891f000H, 0bd3795076c3da632H
  195. DQ 0bfd249f2ada03000H, 0bd2a7809feb5964fH
  196. DQ 0bfd1d9406c900000H, 0bd4546d73ea7c032H
  197. DQ 0bfd16935d34fb000H, 0bd2151c6348d84a4H
  198. DQ 0bfd0fb093a3fd000H, 0bd2bacac000943a5H
  199. DQ 0bfd08c588cda7000H, 0bd43c72c4f78dfa1H
  200. DQ 0bfd01d228cf40000H, 0bd3c6972c813e541H
  201. DQ 0bfcf5faa7e71a000H, 0bd3d157620c552c1H
  202. DQ 0bfce867e093dc000H, 0bd366fa6f3fffcc0H
  203. DQ 0bfcdac50fe6d4000H, 0bd2b6484bb8f2009H
  204. DQ 0bfccd398e83e8000H, 0bd05f5cde492c839H
  205. DQ 0bfcbfc5c1d5be000H, 0bd2784900e42b538H
  206. DQ 0bfcb26a0fb83e000H, 0bd4a5b99e91f69b7H
  207. DQ 0bfca4fed5abba000H, 0bd45976e8062c61fH
  208. DQ 0bfc97d45e2448000H, 0bd401c636755cd02H
  209. DQ 0bfc8a9ad0948a000H, 0bd4c89ba64f25a55H
  210. DQ 0bfc7d520a4220000H, 0bd216a44d008a53dH
  211. DQ 0bfc704b6c17f0000H, 0bd413a806d56d6eeH
  212. DQ 0bfc633609cb64000H, 0bd33f125177ec11cH
  213. DQ 0bfc563adff6b0000H, 0bd4d0837079422c3H
  214. DQ 0bfc495a582ff2000H, 0bd3ebd9313709ef4H
  215. DQ 0bfc3c6b62529a000H, 0bd42d2b08296bf5cH
  216. DQ 0bfc2f9786ad2e000H, 0bd3b5188c2483623H
  217. DQ 0bfc22df302746000H, 0bd3048e3c2505d3dH
  218. DQ 0bfc1618c543b8000H, 0bd45b8d6a3b61bd1H
  219. DQ 0bfc096e5a2260000H, 0bd4bde98232d61f6H
  220. DQ 0bfbf9c0b5c568000H, 0bd4d3483b7a56256H
  221. DQ 0bfbe089492ee4000H, 0bd405589fcd57f86H
  222. DQ 0bfbc78bae5580000H, 0bd35351d0387c197H
  223. DQ 0bfbaec8bfaf64000H, 0bd3d13cbabea0e44H
  224. DQ 0bfb95eb24969c000H, 0bd3727fab299d747H
  225. DQ 0bfb7d49341a08000H, 0bd4eeef8bcf7aa55H
  226. DQ 0bfb64e3caa930000H, 0bd31aad2031e3ecaH
  227. DQ 0bfb4c647d2ea8000H, 0bceb43c4115c4fb7H
  228. DQ 0bfb3422b94a24000H, 0bd421b493a67e318H
  229. DQ 0bfb1bc75cf5a4000H, 0bd4d7db2139e8397H
  230. DQ 0bfb03aa8f8dc8000H, 0bd153121e9af5428H
  231. DQ 0bfad6e8ef48f8000H, 0bd38293c51765dbcH
  232. DQ 0bfaa6fbed7680000H, 0bd2b1c66db7cd724H
  233. DQ 0bfa778fdc1828000H, 0bd34378af2af5332H
  234. DQ 0bfa47f2e22550000H, 0bd2a424693c56dcdH
  235. DQ 0bfa18249a5368000H, 0bd441b0d5fdf534bH
  236. DQ 0bf9d1b35ee200000H, 0bd431fb72db4f24dH
  237. DQ 0bf97427d317a0000H, 0bd4700f14b03b093H
  238. DQ 0bf9163d20d100000H, 0bd46e8b9664fe33fH
  239. DQ 0bf872c1f4cf00000H, 0bd2b4934580fe573H
  240. DQ 0bf7709c46d780000H, 0bd4563ba56cde924H
  241. DQ 0H, 0H
  242. rcp_t2 DQ 03ff0000000000000H, 03fefff4000000000H
  243. DQ 03feffe4000000000H, 03feffd4000000000H
  244. DQ 03feffc4000000000H, 03feffb4000000000H
  245. DQ 03feffa4000000000H, 03feff94000000000H
  246. DQ 03feff84000000000H, 03feff74000000000H
  247. DQ 03feff64000000000H, 03feff54000000000H
  248. DQ 03feff44000000000H, 03feff34000000000H
  249. DQ 03feff24000000000H, 03feff14000000000H
  250. DQ 03feff04000000000H, 03fefef4000000000H
  251. DQ 03fefee4000000000H, 03fefed4000000000H
  252. DQ 03fefec4000000000H, 03fefeb4000000000H
  253. DQ 03fefea4000000000H, 03fefe94000000000H
  254. DQ 03fefe84000000000H, 03fefe74000000000H
  255. DQ 03fefe64000000000H, 03fefe54000000000H
  256. DQ 03fefe44000000000H, 03fefe34000000000H
  257. DQ 03fefe24000000000H, 03fefe14000000000H
  258. DQ 03fefe04000000000H, 03fefdf4000000000H
  259. DQ 03fefde4000000000H, 03fefdd4000000000H
  260. DQ 03fefdc4000000000H, 03fefdb4000000000H
  261. DQ 03fefda4000000000H, 03fefd94000000000H
  262. DQ 03fefd84000000000H, 03fefd74000000000H
  263. DQ 03fefd64000000000H, 03fefd54000000000H
  264. DQ 03fefd44000000000H, 03fefd34000000000H
  265. DQ 03fefd28000000000H, 03fefd18000000000H
  266. DQ 03fefd08000000000H, 03fefcf8000000000H
  267. DQ 03fefce8000000000H, 03fefcd8000000000H
  268. DQ 03fefcc8000000000H, 03fefcb8000000000H
  269. DQ 03fefca8000000000H, 03fefc98000000000H
  270. DQ 03fefc88000000000H, 03fefc78000000000H
  271. DQ 03fefc68000000000H, 03fefc58000000000H
  272. DQ 03fefc48000000000H, 03fefc38000000000H
  273. DQ 03fefc28000000000H, 03fefc18000000000H
  274. DQ 03ff0100000000000H, 03ff00fc000000000H
  275. DQ 03ff00f8000000000H, 03ff00f4000000000H
  276. DQ 03ff00f0000000000H, 03ff00ec000000000H
  277. DQ 03ff00e8000000000H, 03ff00e4000000000H
  278. DQ 03ff00e0000000000H, 03ff00dc000000000H
  279. DQ 03ff00d8000000000H, 03ff00d4000000000H
  280. DQ 03ff00d0000000000H, 03ff00cc000000000H
  281. DQ 03ff00c8000000000H, 03ff00c4000000000H
  282. DQ 03ff00c0000000000H, 03ff00bc000000000H
  283. DQ 03ff00b8000000000H, 03ff00b4000000000H
  284. DQ 03ff00b0000000000H, 03ff00ac000000000H
  285. DQ 03ff00a8000000000H, 03ff00a4000000000H
  286. DQ 03ff00a0000000000H, 03ff009c000000000H
  287. DQ 03ff0098000000000H, 03ff0094000000000H
  288. DQ 03ff0090000000000H, 03ff008c000000000H
  289. DQ 03ff0088000000000H, 03ff0084000000000H
  290. DQ 03ff0080000000000H, 03ff007c000000000H
  291. DQ 03ff0078000000000H, 03ff0074000000000H
  292. DQ 03ff0070000000000H, 03ff006c000000000H
  293. DQ 03ff0068000000000H, 03ff0064000000000H
  294. DQ 03ff0060000000000H, 03ff005c000000000H
  295. DQ 03ff0058000000000H, 03ff0054000000000H
  296. DQ 03ff0050000000000H, 03ff004c000000000H
  297. DQ 03ff0048000000000H, 03ff0044000000000H
  298. DQ 03ff0040000000000H, 03ff003c000000000H
  299. DQ 03ff0038000000000H, 03ff0034000000000H
  300. DQ 03ff0030000000000H, 03ff002c000000000H
  301. DQ 03ff0028000000000H, 03ff0024000000000H
  302. DQ 03ff0020000000000H, 03ff001c000000000H
  303. DQ 03ff0018000000000H, 03ff0014000000000H
  304. DQ 03ff0010000000000H, 03ff000c000000000H
  305. DQ 03ff0008000000000H, 03ff0004000000000H
  306. DQ 03ff0000000000000H, 0
  307. log2_t2 DQ 0, 0
  308. DQ 03f2150297c800000H, 03d210909f6306155H
  309. DQ 03f34332be0000000H, 03d09518ce032f41dH
  310. DQ 03f3fbe9f60c00000H, 03d4ac9bc570c3b37H
  311. DQ 03f45a537a3600000H, 03d4325006127af86H
  312. DQ 03f4b6b4dcbc00000H, 03d3c621fbc9e2ad6H
  313. DQ 03f5098c916300000H, 03d3f7aec2cad082aH
  314. DQ 03f537c0264100000H, 03d4bdf2754a94bbeH
  315. DQ 03f565f52d1000000H, 03d46f089976214ecH
  316. DQ 03f5942ba5e700000H, 03d2645f4fefad48aH
  317. DQ 03f5c26390dc00000H, 03d394ecb87dff47fH
  318. DQ 03f5f09cee0700000H, 03d415d326245addfH
  319. DQ 03f60f6bdebf80000H, 03d492366d5b7121cH
  320. DQ 03f62689ffae00000H, 03d3360481790324fH
  321. DQ 03f63da8d9da00000H, 03d31fe61b7973265H
  322. DQ 03f654c86d4f00000H, 03d4d5202bf82be32H
  323. DQ 03f66be8ba1980000H, 03d3a5f8d1a33f641H
  324. DQ 03f68309c04400000H, 03d4f65693283bc5bH
  325. DQ 03f69a2b7fdb00000H, 03d4b05a072311cdeH
  326. DQ 03f6b14df8ea00000H, 03d2da3ce84a38084H
  327. DQ 03f6c8712b7c00000H, 03d385b88ccf9e4bcH
  328. DQ 03f6df95179d00000H, 03d4138577c1eb13eH
  329. DQ 03f6f6b9bd5880000H, 03d4eb2dd71123ec2H
  330. DQ 03f706ef8e5d40000H, 03d4d0d7b6d01207aH
  331. DQ 03f712829ae740000H, 03d44fe53f52c6d10H
  332. DQ 03f71e16045000000H, 03d3f031f657d9491H
  333. DQ 03f729a9ca9d40000H, 03d45d9663a7e7da0H
  334. DQ 03f7353dedd500000H, 03d418e26d5dfd1bfH
  335. DQ 03f740d26dfd00000H, 03d38dc829af0262cH
  336. DQ 03f74c674b1b00000H, 03d408e4eb4d165e5H
  337. DQ 03f757fc853500000H, 03d3092346f3f705eH
  338. DQ 03f763921c5080000H, 03d4e3fa9e85711eeH
  339. DQ 03f76f281073c0000H, 03d4d59479023862bH
  340. DQ 03f77abe61a480000H, 03d40c38980430771H
  341. DQ 03f786550fe880000H, 03d1f92db260b1230H
  342. DQ 03f791ec1b4580000H, 03d150038c4b502c5H
  343. DQ 03f79d8383c140000H, 03d48cd3d7b281721H
  344. DQ 03f7a91b496200000H, 03d42c11f472c64baH
  345. DQ 03f7b4b36c2d40000H, 03d4d0945eaf29dd2H
  346. DQ 03f7c04bec2940000H, 03d21e7318833be77H
  347. DQ 03f7cbe4c95b40000H, 03d462d58105ef8bfH
  348. DQ 03f7d77e03c980000H, 03d4f85219e901c30H
  349. DQ 03f7e3179b7a00000H, 03d3c51fbafc4227cH
  350. DQ 03f7eeb1907240000H, 03d400766896bf3baH
  351. DQ 03f7fa4be2b840000H, 03d43558362ba179cH
  352. DQ 03f802f3492900000H, 03d2a3ccb5f4b8d2aH
  353. DQ 03f8074d69a3c0000H, 03d490b788dcc06d5H
  354. DQ 03f80d1b1320e0000H, 03d2b412556cf5977H
  355. DQ 03f812e8eb4fc0000H, 03d45c237732b1f78H
  356. DQ 03f818b6f23380000H, 03d45669defd365c1H
  357. DQ 03f81e8527cf00000H, 03d4589b8de73054bH
  358. DQ 03f824538c2540000H, 03d28fab914103d9cH
  359. DQ 03f82a221f3900000H, 03d47df970829f58aH
  360. DQ 03f82ff0e10d60000H, 03d4b0d87d80e4623H
  361. DQ 03f835bfd1a560000H, 03cf61343d497e17fH
  362. DQ 03f83b8ef103a0000H, 03d49f7f4ef56f96bH
  363. DQ 03f8415e3f2b60000H, 03d4859d5f817f2faH
  364. DQ 03f8472dbc1f80000H, 03d3b2734e7bf7114H
  365. DQ 03f84cfd67e2e0000H, 03d3753903d1eeba1H
  366. DQ 03f852cd427880000H, 03d23a058a8f8ba37H
  367. DQ 03f8589d4be340000H, 03d37c2ec6bdcca43H
  368. DQ 03f85e6d842620000H, 03d43701d45acf2c4H
  369. DQ 03f8643deb4420000H, 03d3d6b197832ab27H
  370. DQ 03f86a0e814020000H, 03d411a9b5557b8ccH
  371. DQ 0bf7709c46d780000H, 0bd4563ba56cde924H
  372. DQ 0bf76adca91cc0000H, 0bd37a1a05bc6b74bH
  373. DQ 0bf7651cf479c0000H, 0bd461bfa6c8b2465H
  374. DQ 0bf75f5d28ee00000H, 0bd48fc8fd49e79d0H
  375. DQ 0bf7599d4678c0000H, 0bd4925a3c7b88c7cH
  376. DQ 0bf753dd4d1940000H, 0bd4b4606033fb2beH
  377. DQ 0bf74e1d3ccf00000H, 0bd20210971a52753H
  378. DQ 0bf7485d1598c0000H, 0bd4812a07c384c12H
  379. DQ 0bf7429cd77640000H, 0bd4c07239b769baaH
  380. DQ 0bf73cdc8266c0000H, 0bd44838a3ea90181H
  381. DQ 0bf7371c166980000H, 0bd288537c7f77e67H
  382. DQ 0bf7315b937d80000H, 0bd4575a30536968cH
  383. DQ 0bf72b9af9a280000H, 0bd2c45e11e2e7675H
  384. DQ 0bf725da48d740000H, 0bd4f8176c38b4ce6H
  385. DQ 0bf72019811bc0000H, 0bd1a700bd79ac8a3H
  386. DQ 0bf71a58a26e80000H, 0bd46fb3522850043H
  387. DQ 0bf71497accf40000H, 0bd4f08e7ddd3e76fH
  388. DQ 0bf70ed6a03d40000H, 0bd4ff2a8fb0fa804H
  389. DQ 0bf709157cb7c0000H, 0bd4e2fc0aec80d04H
  390. DQ 0bf70354423e00000H, 0bd4e332fcfabff4fH
  391. DQ 0bf6fb25e19f00000H, 0bd21aebe490c8214H
  392. DQ 0bf6efa310d600000H, 0bd4543b144a21404H
  393. DQ 0bf6e420122080000H, 0bd45215e0a197589H
  394. DQ 0bf6d89ce57d00000H, 0bd30cd2d2dbef9ddH
  395. DQ 0bf6cd198ae980000H, 0bd4370f2ebb44e84H
  396. DQ 0bf6c196026500000H, 0bd4a99c21180f792H
  397. DQ 0bf6b6124bee80000H, 0bd11b04ea788b3a9H
  398. DQ 0bf6aa8e678380000H, 0bd3d2d0d040e5bb2H
  399. DQ 0bf69f0a552380000H, 0bd201eaa7eae8a79H
  400. DQ 0bf6938614cc80000H, 0bd2b467aacd98f5bH
  401. DQ 0bf68801a67d00000H, 0bd4b3840d3f33c6bH
  402. DQ 0bf67c7d0a3480000H, 0bd25ec92da83377dH
  403. DQ 0bf670f83ff080000H, 0bd33ab2631d4676dH
  404. DQ 0bf6657347b000000H, 0bd38fd1349b69dfeH
  405. DQ 0bf659ee217180000H, 0bd41a8baa44fb97dH
  406. DQ 0bf64e68cd3380000H, 0bd4d828cbc5c5ff3H
  407. DQ 0bf642e34af500000H, 0bd44361aa8b3c316H
  408. DQ 0bf6375d9ab400000H, 0bd49e932f704de99H
  409. DQ 0bf62bd7bc6f80000H, 0bd42bd57c254b5e3H
  410. DQ 0bf62051b02600000H, 0bd167df372942ee0H
  411. DQ 0bf614cb75d580000H, 0bd3c729ec54d36cdH
  412. DQ 0bf609450d7d00000H, 0bd490ea5c63bcdf1H
  413. DQ 0bf5fb7cee3700000H, 0bd2d803cea0e76a9H
  414. DQ 0bf5e46f655d00000H, 0bd4d398b96b4f4d5H
  415. DQ 0bf5cd61806b00000H, 0bd4ea2cca3058bbdH
  416. DQ 0bf5b6533f5e00000H, 0bd3f3e6ba7bbdd88H
  417. DQ 0bf59f44a23200000H, 0bd442ddc05082614H
  418. DQ 0bf58835a8e500000H, 0bd40498534d8fe6dH
  419. DQ 0bf57126537400000H, 0bd2fa2a0fd4fca1cH
  420. DQ 0bf55a16a1db00000H, 0bd4efd6c9949b49bH
  421. DQ 0bf54306941900000H, 0bd4975aa0b715781H
  422. DQ 0bf52bf62a2a00000H, 0bd4b3ae86d7c16e7H
  423. DQ 0bf514e5640c00000H, 0bd3064bec2477c3fH
  424. DQ 0bf4fba8837600000H, 0bd20f3d834ceb438H
  425. DQ 0bf4cd85866800000H, 0bd433742d88c7aa2H
  426. DQ 0bf49f61d0ea00000H, 0bd48f98b25223470H
  427. DQ 0bf4713d62f600000H, 0bd4957c30af53ad3H
  428. DQ 0bf443183c8600000H, 0bd48218d1305b92fH
  429. DQ 0bf414f25d9400000H, 0bd492239f241b9b9H
  430. DQ 0bf3cd978c3800000H, 0bcd0642236ea2a75H
  431. DQ 0bf37148ec2800000H, 0bd40dfe447087803H
  432. DQ 0bf314f8daf400000H, 0bd3e3bcf284f9cb2H
  433. DQ 0bf2714eb11800000H, 0bd4e94d8dd523885H
  434. DQ 0bf1715193b000000H, 0bd17d35d328b2afeH
  435. DQ 0, 0
  436. rcp_t3 DQ 03ff7154740000000H, 03ff71545c0000000H
  437. DQ 03ff7154440000000H, 03ff7154300000000H
  438. DQ 03ff7154180000000H, 03ff7154000000000H
  439. DQ 03ff7153e80000000H, 03ff7153d40000000H
  440. DQ 03ff7153bc0000000H, 03ff7153a40000000H
  441. DQ 03ff71538c0000000H, 03ff7153780000000H
  442. DQ 03ff7153600000000H, 03ff7153480000000H
  443. DQ 03ff7153300000000H, 03ff7153180000000H
  444. DQ 03ff7153040000000H, 03ff7152ec0000000H
  445. DQ 03ff7152d40000000H, 03ff7152bc0000000H
  446. DQ 03ff7152a80000000H, 03ff7152900000000H
  447. DQ 03ff7152780000000H, 03ff7152600000000H
  448. DQ 03ff71524c0000000H, 03ff7152340000000H
  449. DQ 03ff71521c0000000H, 03ff7152040000000H
  450. DQ 03ff7151ec0000000H, 03ff7151d80000000H
  451. DQ 03ff7151c00000000H, 03ff7151a80000000H
  452. DQ 03ff7151900000000H, 03ff71517c0000000H
  453. DQ 03ff7151640000000H, 03ff71514c0000000H
  454. DQ 03ff7151340000000H, 03ff71511c0000000H
  455. DQ 03ff7151080000000H, 03ff7150f00000000H
  456. DQ 03ff7150d80000000H, 03ff7150c00000000H
  457. DQ 03ff7150ac0000000H, 03ff7150940000000H
  458. DQ 03ff71507c0000000H, 03ff7150640000000H
  459. DQ 03ff7150500000000H, 03ff7150380000000H
  460. DQ 03ff7150200000000H, 03ff7150080000000H
  461. DQ 03ff714ff00000000H, 03ff714fdc0000000H
  462. DQ 03ff714fc40000000H, 03ff714fac0000000H
  463. DQ 03ff714f940000000H, 03ff714f800000000H
  464. DQ 03ff714f680000000H, 03ff714f500000000H
  465. DQ 03ff714f380000000H, 03ff714f240000000H
  466. DQ 03ff714f0c0000000H, 03ff714ef40000000H
  467. DQ 03ff714edc0000000H, 03ff714ec40000000H
  468. DQ 03ff714eb00000000H, 03ff714e980000000H
  469. DQ 03ff714e800000000H, 03ff714e680000000H
  470. DQ 03ff714e540000000H, 03ff714e3c0000000H
  471. DQ 03ff714e240000000H, 03ff714e0c0000000H
  472. DQ 03ff714df80000000H, 03ff714de00000000H
  473. DQ 03ff714dc80000000H, 03ff714db00000000H
  474. DQ 03ff714d980000000H, 03ff714d840000000H
  475. DQ 03ff714d6c0000000H, 03ff714d540000000H
  476. DQ 03ff714d3c0000000H, 03ff714d280000000H
  477. DQ 03ff714d100000000H, 03ff714cf80000000H
  478. DQ 03ff714ce00000000H, 03ff714ccc0000000H
  479. DQ 03ff714cb40000000H, 03ff714c9c0000000H
  480. DQ 03ff714c840000000H, 03ff714c6c0000000H
  481. DQ 03ff714c580000000H, 03ff714c400000000H
  482. DQ 03ff714c280000000H, 03ff714c100000000H
  483. DQ 03ff714bfc0000000H, 03ff714be40000000H
  484. DQ 03ff714bcc0000000H, 03ff714bb40000000H
  485. DQ 03ff714ba00000000H, 03ff714b880000000H
  486. DQ 03ff714b700000000H, 03ff714b580000000H
  487. DQ 03ff714b400000000H, 03ff714b2c0000000H
  488. DQ 03ff714b140000000H, 03ff714afc0000000H
  489. DQ 03ff714ae40000000H, 03ff714ad00000000H
  490. DQ 03ff714ab80000000H, 03ff714aa00000000H
  491. DQ 03ff714a880000000H, 03ff714a740000000H
  492. DQ 03ff714a5c0000000H, 03ff714a440000000H
  493. DQ 03ff714a2c0000000H, 03ff714a140000000H
  494. DQ 03ff714a000000000H, 03ff7149e80000000H
  495. DQ 03ff7149d00000000H, 03ff7149b80000000H
  496. DQ 03ff7149a40000000H, 03ff71498c0000000H
  497. DQ 03ff7149740000000H, 03ff71495c0000000H
  498. DQ 03ff7149480000000H, 03ff7149300000000H
  499. DQ 03ff7149180000000H, 03ff7149000000000H
  500. DQ 03ff715a380000000H, 03ff715a2c0000000H
  501. DQ 03ff715a240000000H, 03ff715a180000000H
  502. DQ 03ff715a0c0000000H, 03ff715a000000000H
  503. DQ 03ff7159f40000000H, 03ff7159e80000000H
  504. DQ 03ff7159dc0000000H, 03ff7159d00000000H
  505. DQ 03ff7159c40000000H, 03ff7159bc0000000H
  506. DQ 03ff7159b00000000H, 03ff7159a40000000H
  507. DQ 03ff7159980000000H, 03ff71598c0000000H
  508. DQ 03ff7159800000000H, 03ff7159740000000H
  509. DQ 03ff7159680000000H, 03ff7159600000000H
  510. DQ 03ff7159540000000H, 03ff7159480000000H
  511. DQ 03ff71593c0000000H, 03ff7159300000000H
  512. DQ 03ff7159240000000H, 03ff7159180000000H
  513. DQ 03ff71590c0000000H, 03ff7159000000000H
  514. DQ 03ff7158f80000000H, 03ff7158ec0000000H
  515. DQ 03ff7158e00000000H, 03ff7158d40000000H
  516. DQ 03ff7158c80000000H, 03ff7158bc0000000H
  517. DQ 03ff7158b00000000H, 03ff7158a40000000H
  518. DQ 03ff7158980000000H, 03ff7158900000000H
  519. DQ 03ff7158840000000H, 03ff7158780000000H
  520. DQ 03ff71586c0000000H, 03ff7158600000000H
  521. DQ 03ff7158540000000H, 03ff7158480000000H
  522. DQ 03ff71583c0000000H, 03ff7158300000000H
  523. DQ 03ff7158280000000H, 03ff71581c0000000H
  524. DQ 03ff7158100000000H, 03ff7158040000000H
  525. DQ 03ff7157f80000000H, 03ff7157ec0000000H
  526. DQ 03ff7157e00000000H, 03ff7157d40000000H
  527. DQ 03ff7157cc0000000H, 03ff7157c00000000H
  528. DQ 03ff7157b40000000H, 03ff7157a80000000H
  529. DQ 03ff71579c0000000H, 03ff7157900000000H
  530. DQ 03ff7157840000000H, 03ff7157780000000H
  531. DQ 03ff71576c0000000H, 03ff7157640000000H
  532. DQ 03ff7157580000000H, 03ff71574c0000000H
  533. DQ 03ff7157400000000H, 03ff7157340000000H
  534. DQ 03ff7157280000000H, 03ff71571c0000000H
  535. DQ 03ff7157100000000H, 03ff7157040000000H
  536. DQ 03ff7156fc0000000H, 03ff7156f00000000H
  537. DQ 03ff7156e40000000H, 03ff7156d80000000H
  538. DQ 03ff7156cc0000000H, 03ff7156c00000000H
  539. DQ 03ff7156b40000000H, 03ff7156a80000000H
  540. DQ 03ff7156a00000000H, 03ff7156940000000H
  541. DQ 03ff7156880000000H, 03ff71567c0000000H
  542. DQ 03ff7156700000000H, 03ff7156640000000H
  543. DQ 03ff7156580000000H, 03ff71564c0000000H
  544. DQ 03ff7156400000000H, 03ff7156380000000H
  545. DQ 03ff71562c0000000H, 03ff7156200000000H
  546. DQ 03ff7156140000000H, 03ff7156080000000H
  547. DQ 03ff7155fc0000000H, 03ff7155f00000000H
  548. DQ 03ff7155e40000000H, 03ff7155d80000000H
  549. DQ 03ff7155d00000000H, 03ff7155c40000000H
  550. DQ 03ff7155b80000000H, 03ff7155ac0000000H
  551. DQ 03ff7155a00000000H, 03ff7155940000000H
  552. DQ 03ff7155880000000H, 03ff71557c0000000H
  553. DQ 03ff7155700000000H, 03ff7155680000000H
  554. DQ 03ff71555c0000000H, 03ff7155500000000H
  555. DQ 03ff7155440000000H, 03ff7155380000000H
  556. DQ 03ff71552c0000000H, 03ff7155200000000H
  557. DQ 03ff7155140000000H, 03ff71550c0000000H
  558. DQ 03ff7155000000000H, 03ff7154f40000000H
  559. DQ 03ff7154e80000000H, 03ff7154dc0000000H
  560. DQ 03ff7154d00000000H, 03ff7154c40000000H
  561. DQ 03ff7154b80000000H, 03ff7154ac0000000H
  562. DQ 03ff7154a40000000H, 03ff7154980000000H
  563. DQ 03ff71548c0000000H, 03ff7154800000000H
  564. DQ 03ff7154740000000H, 0
  565. log2_t3 DQ 0, 0
  566. DQ 03eb80000c0000000H, 03d4722f0009be959H
  567. DQ 03ec80001a0000000H, 03d45e6576cb6dc2eH
  568. DQ 03ed10001a0000000H, 03d480762a98bdb6aH
  569. DQ 03ed7000300000000H, 03d231a4c495ec799H
  570. DQ 03edd0004b0000000H, 03d4926846928cda3H
  571. DQ 03ee1800368000000H, 03d4527509fdde667H
  572. DQ 03ee4000470000000H, 03d44fbd1292ae6daH
  573. DQ 03ee70005d8000000H, 03d4ef91cb226fd03H
  574. DQ 03eea000778000000H, 03d40978c9dc43b2eH
  575. DQ 03eed000948000000H, 03d33ae75bbe97951H
  576. DQ 03eef800af0000000H, 03d2d81b9a1639c05H
  577. DQ 03ef140068c000000H, 03d3d3aa4a1dd8452H
  578. DQ 03ef2c007b8000000H, 03d4d7bbe110bfb09H
  579. DQ 03ef4400900000000H, 03d43fbcb9ab61086H
  580. DQ 03ef5c00a60000000H, 03d421d94dff79062H
  581. DQ 03ef7000b98000000H, 03d43b8e9647408a2H
  582. DQ 03ef8800d24000000H, 03d4fd8ce39e1fdd4H
  583. DQ 03efa000ecc000000H, 03d439ab84e20bc42H
  584. DQ 03efb80108c000000H, 03d3dfd83269c6ac2H
  585. DQ 03efcc01214000000H, 03d3ca32ecd8004e0H
  586. DQ 03efe401400000000H, 03d47b472936c6005H
  587. DQ 03effc01608000000H, 03d31736ce8ef8e21H
  588. DQ 03f00a00c14000000H, 03d0617cfc138ccabH
  589. DQ 03f01400cfe000000H, 03d4e6d11d620108aH
  590. DQ 03f02000e26000000H, 03d2451827455b88dH
  591. DQ 03f02c00f58000000H, 03d435e7b8e426950H
  592. DQ 03f03801098000000H, 03d3296f937d77647H
  593. DQ 03f044011e4000000H, 03d2b6df6e16cae71H
  594. DQ 03f04e01302000000H, 03d2ff9376a2ea421H
  595. DQ 03f05a01464000000H, 03d438ebd204c10d2H
  596. DQ 03f066015d4000000H, 03d2b09d7e2fc6debH
  597. DQ 03f07201750000000H, 03d099925641f4f35H
  598. DQ 03f07c01896000000H, 03cedfbf4f07288e3H
  599. DQ 03f08801a28000000H, 03d32a0616748ca2aH
  600. DQ 03f09401bc6000000H, 03d49cc1e9cba43abH
  601. DQ 03f0a001d72000000H, 03d41ebd38173f5dbH
  602. DQ 03f0ac01f2a000000H, 03d41af6954471a92H
  603. DQ 03f0b6020a2000000H, 03d44a88bd59f4b89H
  604. DQ 03f0c202272000000H, 03d137160b27044e6H
  605. DQ 03f0ce0244c000000H, 03d47d7f6c97ef2fcH
  606. DQ 03f0da02634000000H, 03d44e605e1bb0db2H
  607. DQ 03f0e4027d4000000H, 03d459d8417d4ebcfH
  608. DQ 03f0f0029d4000000H, 03cf5ca7f05f05027H
  609. DQ 03f0fc02bde000000H, 03d4363b1c234f566H
  610. DQ 03f104016fb000000H, 03d3b7b6ed1035771H
  611. DQ 03f109017df000000H, 03d38699e204367efH
  612. DQ 03f10f018f6000000H, 03d44924bd9581118H
  613. DQ 03f11501a14000000H, 03d2252e80eb13b47H
  614. DQ 03f11b01b37000000H, 03d4c3c3381ce38a0H
  615. DQ 03f12101c61000000H, 03d4b88d24672a90dH
  616. DQ 03f12601d5e000000H, 03d4e1fc955055fefH
  617. DQ 03f12c01e94000000H, 03d36e18a547f3bc2H
  618. DQ 03f13201fd0000000H, 03ce9cbf2c6119ad4H
  619. DQ 03f13802111000000H, 03d4d03232a579871H
  620. DQ 03f13d02222000000H, 03d4d5c820ab96aa1H
  621. DQ 03f14302370000000H, 03d2ff6235a37497cH
  622. DQ 03f149024c3000000H, 03d4a4461e61bb95eH
  623. DQ 03f14f0261d000000H, 03d4431272c3ec2f0H
  624. DQ 03f15402742000000H, 03d424e2b9e3a8113H
  625. DQ 03f15a028a7000000H, 03d4a40baad7a3180H
  626. DQ 03f16002a13000000H, 03d33b2fef1b1988bH
  627. DQ 03f16602b85000000H, 03d01893f34559377H
  628. DQ 03f16c02cfc000000H, 03d4ffe120fb3ef44H
  629. DQ 03f17102e3b000000H, 03d120082c162d124H
  630. DQ 03f17702fbe000000H, 03d3e587c5b282967H
  631. DQ 03f17d03148000000H, 03d1df8f956673eacH
  632. DQ 03f183032d7000000H, 03d4ff8cd42de4f13H
  633. DQ 03f1880342a000000H, 03c83f84104915062H
  634. DQ 03f18e035c5000000H, 03d3484a765ad0e81H
  635. DQ 03f19403766000000H, 03d4c2a7e827b5b7cH
  636. DQ 03f19a0390e000000H, 03d45b9d9e619a5feH
  637. DQ 03f19f03a74000000H, 03d4389fde2d65d47H
  638. DQ 03f1a503c27000000H, 03d4b2175bb6d7bccH
  639. DQ 03f1ab03de1000000H, 03d34c0cf5c760a80H
  640. DQ 03f1b103fa1000000H, 03d046edae6d3e9a5H
  641. DQ 03f1b704166000000H, 03d4fd521af377bfcH
  642. DQ 03f1bc042e6000000H, 03d0cf59fe6ab1bfdH
  643. DQ 03f1c2044b7000000H, 03d3ccd20cc753db5H
  644. DQ 03f1c80468f000000H, 03d152df2a92669ccH
  645. DQ 03f1ce0486c000000H, 03d4e8cfdbe6ff5d7H
  646. DQ 03f1d3049ff000000H, 03d4e51b637245449H
  647. DQ 03f1d904be9000000H, 03d30855ccdda9dd0H
  648. DQ 03f1df04dd8000000H, 03d49dc0197d07430H
  649. DQ 03f1e504fce000000H, 03d431dc9bd27e20aH
  650. DQ 03f1ea05175000000H, 03d40ae402534fea4H
  651. DQ 03f1f005376000000H, 03d47fa77710aad2aH
  652. DQ 03f1f60557e000000H, 03d2bbdb4e113204bH
  653. DQ 03f1fc0578b000000H, 03d4d8d3b6e50d246H
  654. DQ 03f20102ccf800000H, 03d4bd3fc06a15de9H
  655. DQ 03f20382daf800000H, 03d4d93a1498ec6c9H
  656. DQ 03f20682ebf800000H, 03d33cb6df935a7f0H
  657. DQ 03f20982fd2000000H, 03d4de1089920cfdaH
  658. DQ 03f20c830e8000000H, 03d4985b012a6b1acH
  659. DQ 03f20f031d2000000H, 03d4913e1b9ba2290H
  660. DQ 03f212032ee000000H, 03d1624a57980edbcH
  661. DQ 03f2150340c800000H, 03d441ee709125ff3H
  662. DQ 03f2180352e800000H, 03d3a45e575f48b5dH
  663. DQ 03f21a83622800000H, 03d3501dd1e238a6cH
  664. DQ 03f21d8374a000000H, 03d4191bc1ea6aa2cH
  665. DQ 03f22083875000000H, 03ce323237921f7b0H
  666. DQ 03f223839a2800000H, 03d46b179d0781ff4H
  667. DQ 03f22683ad3800000H, 03d44c09dda134362H
  668. DQ 03f22903bd4000000H, 03d4652e31de50175H
  669. DQ 03f22c03d0b000000H, 03d137d77dcd68a32H
  670. DQ 03f22f03e44800000H, 03d4636fb2840cc02H
  671. DQ 03f23203f81800000H, 03d41a8e1979c27f4H
  672. DQ 03f2348408c000000H, 03d410dbf84163334H
  673. DQ 03f237841ce800000H, 03d4a8e042a7d4e75H
  674. DQ 03f23a84314800000H, 03d3772593772be29H
  675. DQ 03f23d8445d800000H, 03d223d4b2e8c031dH
  676. DQ 03f24004572000000H, 03d0c8072ca9dad06H
  677. DQ 03f243046c0800000H, 03d315a83ee313d33H
  678. DQ 03f24604812000000H, 03d473dc4088b7c68H
  679. DQ 03f24904967000000H, 03d3af34ea9dceae1H
  680. DQ 03f24c04abf000000H, 03d36c20ba0653485H
  681. DQ 03f24e84be0000000H, 03d39a63c847be3ffH
  682. DQ 03f25184d3d800000H, 03d48ca7750a55975H
  683. DQ 03f25484e9e800000H, 03d38db2a2d1381bbH
  684. DQ 03f25785002800000H, 03d2ef2461fbe7983H
  685. DQ 03f25a0512d800000H, 03d2c153bc40c395cH
  686. DQ 03f25d05297000000H, 03d4064fc5a39c232H
  687. DQ 03f26005404000000H, 03d070d1f7c4b597eH
  688. DQ 03f26305573800000H, 03d4a28e9bdbbc457H
  689. DQ 03f265856a8800000H, 03d474989ecc252f3H
  690. DQ 03f2688581e000000H, 03d4e13090fc01d57H
  691. DQ 03f26b85997000000H, 03d391227c8678403H
  692. DQ 03f26e85b13000000H, 03d155e22f244140dH
  693. DQ 0bf170fd210000000H, 0bd24caa429329aeeH
  694. DQ 0bf16dfd2ce000000H, 0bd4cb96d8562dc37H
  695. DQ 0bf16bfd34d000000H, 0bd2813e19b9dbfb8H
  696. DQ 0bf168fd409000000H, 0bd34c1a453011cc5H
  697. DQ 0bf165fd4c3000000H, 0bd4cd61ac43e09bcH
  698. DQ 0bf162fd57c000000H, 0bd4d64cef90ca8baH
  699. DQ 0bf15ffd634000000H, 0bd3819d713b1c267H
  700. DQ 0bf15cfd6ea000000H, 0bd319cda711db032H
  701. DQ 0bf159fd79e000000H, 0bd43a950c71a6171H
  702. DQ 0bf156fd851000000H, 0bd393b25eece00b9H
  703. DQ 0bf153fd902000000H, 0bd43ab308b5fe712H
  704. DQ 0bf151fd977000000H, 0bd4ca5e736256734H
  705. DQ 0bf14efda26000000H, 0bd40886b3b9c924dH
  706. DQ 0bf14bfdad3000000H, 0bd428441ff31aa38H
  707. DQ 0bf148fdb7f000000H, 0bd14cb421675c431H
  708. DQ 0bf145fdc29000000H, 0bcf8fb590baebb8dH
  709. DQ 0bf142fdcd1000000H, 0bd3a1f2ca38e93f3H
  710. DQ 0bf13ffdd78000000H, 0bd2dc25e83d52ed1H
  711. DQ 0bf13cfde1d000000H, 0bd3fd5b6efa081f3H
  712. DQ 0bf13afde8a000000H, 0bd49d89dd4f2bf07H
  713. DQ 0bf137fdf2d000000H, 0bd3e4f3d5d3a13b4H
  714. DQ 0bf134fdfce000000H, 0bd428fd96a5f7723H
  715. DQ 0bf131fe06e000000H, 0bd20452b288690a5H
  716. DQ 0bf12efe10c000000H, 0bd1d5f7c7e56ea2dH
  717. DQ 0bf12bfe1a8000000H, 0bd415fc47d421debH
  718. DQ 0bf128fe243000000H, 0bd3a598ca8dc214bH
  719. DQ 0bf125fe2dc000000H, 0bd4712f1d7350f14H
  720. DQ 0bf122fe374000000H, 0bd3e24878efa43e1H
  721. DQ 0bf120fe3d8000000H, 0bd48adffee23f9f0H
  722. DQ 0bf11dfe46d000000H, 0bd4d81e00aec2d96H
  723. DQ 0bf11afe501000000H, 0bd406eddef9956b1H
  724. DQ 0bf117fe593000000H, 0bd4174f65e105551H
  725. DQ 0bf114fe624000000H, 0bcf284c306b71311H
  726. DQ 0bf111fe6b2000000H, 0bd4dcc69dfedbec3H
  727. DQ 0bf10efe740000000H, 0bd323b7cee38aa4bH
  728. DQ 0bf10bfe7cc000000H, 0bd144104fd28c140H
  729. DQ 0bf108fe856000000H, 0bd34171a36d6a695H
  730. DQ 0bf106fe8b1000000H, 0bd4354a0acea06cdH
  731. DQ 0bf103fe939000000H, 0bd2eb1b1fae67526H
  732. DQ 0bf100fe9bf000000H, 0bd343a73fc467e03H
  733. DQ 0bf0fbfd486000000H, 0bd4aa705ed090ecaH
  734. DQ 0bf0f5fd58c000000H, 0bd4949cd0d4cde8eH
  735. DQ 0bf0effd690000000H, 0bd2816308340bd3dH
  736. DQ 0bf0e9fd790000000H, 0bcfb47fd2e8624a6H
  737. DQ 0bf0e3fd88c000000H, 0bd338fca5233867dH
  738. DQ 0bf0ddfd986000000H, 0bcf9cf14342e7c21H
  739. DQ 0bf0d9fda2a000000H, 0bd3388827d84b6e0H
  740. DQ 0bf0d3fdb1e000000H, 0bd3b3e0a6d6a2247H
  741. DQ 0bf0cdfdc0e000000H, 0bd4f92aec1df2a86H
  742. DQ 0bf0c7fdcfc000000H, 0bd4f9f3aa2200d30H
  743. DQ 0bf0c1fdde8000000H, 0bd3b894b32ad9b9fH
  744. DQ 0bf0bbfded0000000H, 0bd3405d8d2c46051H
  745. DQ 0bf0b5fdfb4000000H, 0bd445a0bd420a715H
  746. DQ 0bf0affe096000000H, 0bd39940136e0a90fH
  747. DQ 0bf0abfe12a000000H, 0bd46b0a6f2af86bbH
  748. DQ 0bf0a5fe206000000H, 0bd4bf4a2ca335408H
  749. DQ 0bf09ffe2e0000000H, 0bd3ea2d6b12e4d93H
  750. DQ 0bf099fe3b6000000H, 0bd40c6fd5fb7f840H
  751. DQ 0bf093fe48a000000H, 0bce555685c9c3116H
  752. DQ 0bf08dfe558000000H, 0bd4dfc70dfa2e7c3H
  753. DQ 0bf087fe626000000H, 0bd337897b84ac785H
  754. DQ 0bf081fe6f0000000H, 0bd1ca71ac6acd2d7H
  755. DQ 0bf07bfe7b6000000H, 0bd370c682f1de078H
  756. DQ 0bf077fe838000000H, 0bd45185d76c79d4cH
  757. DQ 0bf071fe8fa000000H, 0bd33bb0cdd985699H
  758. DQ 0bf06bfe9b8000000H, 0bd3976c00642b301H
  759. DQ 0bf065fea72000000H, 0bd4db1e6f5a163e7H
  760. DQ 0bf05ffeb2a000000H, 0bd4cc11808263596H
  761. DQ 0bf059febe0000000H, 0bd33d1dff912d171H
  762. DQ 0bf053fec92000000H, 0bd24a5ae52911a3aH
  763. DQ 0bf04dfed40000000H, 0bd3d050f249f8edcH
  764. DQ 0bf047fedec000000H, 0bd27d102dd924b0eH
  765. DQ 0bf043fee5c000000H, 0bd3e62957baad081H
  766. DQ 0bf03dfef02000000H, 0bd4376ad4524f2a0H
  767. DQ 0bf037fefa6000000H, 0bd2752913877e949H
  768. DQ 0bf031ff046000000H, 0bd292cb26a5ff847H
  769. DQ 0bf02bff0e2000000H, 0bd44da42ec6a2baeH
  770. DQ 0bf025ff17c000000H, 0bd4181e4056b600bH
  771. DQ 0bf01fff212000000H, 0bd4c420ca7722725H
  772. DQ 0bf019ff2a6000000H, 0bd451ab99454bc09H
  773. DQ 0bf015ff306000000H, 0bd4f4702fac61211H
  774. DQ 0bf00fff396000000H, 0bd23ccbf691e23e3H
  775. DQ 0bf009ff420000000H, 0bd48b7d85ede8a3bH
  776. DQ 0bf003ff4a8000000H, 0bd4a94f94a602836H
  777. DQ 0beffbfea5c000000H, 0bd35151ebd4248b6H
  778. DQ 0befeffeb60000000H, 0bd31312ebaebde60H
  779. DQ 0befe3fec5c000000H, 0bd44bf0e08b2a851H
  780. DQ 0befd7fed54000000H, 0bd3dfbe044563cddH
  781. DQ 0befcbfee44000000H, 0bd47553a6bb2cf4dH
  782. DQ 0befc3feee4000000H, 0bd02b3272c9e1514H
  783. DQ 0befb7fefc8000000H, 0bd4655cdd79568b8H
  784. DQ 0befabff0a8000000H, 0bd4998c8c6a29955H
  785. DQ 0bef9fff184000000H, 0bd35e84003879074H
  786. DQ 0bef93ff258000000H, 0bd34cfa09595f318H
  787. DQ 0bef87ff324000000H, 0bd47f3d66389e086H
  788. DQ 0bef7bff3ec000000H, 0bd43982f0dd1df79H
  789. DQ 0bef6fff4ac000000H, 0bd4d54d70b7407c7H
  790. DQ 0bef63ff568000000H, 0bd4529cb1e4119e9H
  791. DQ 0bef5bff5e0000000H, 0bd4ea8cf63b0e57aH
  792. DQ 0bef4fff694000000H, 0bd1a872dd1f9867bH
  793. DQ 0bef43ff73c000000H, 0bd46113f80238647H
  794. DQ 0bef37ff7e0000000H, 0bd46e9d9772d7da6H
  795. DQ 0bef2bff880000000H, 0bd276ac184b1770cH
  796. DQ 0bef1fff918000000H, 0bd171e07ff78e451H
  797. DQ 0bef13ff9a8000000H, 0bd3c0a102a88bdf6H
  798. DQ 0bef07ffa34000000H, 0bd2cfa098be9e4a8H
  799. DQ 0beef7ff570000000H, 0bd3d205955bedc7eH
  800. DQ 0beee7ff618000000H, 0bd47b79acbd1c3d4H
  801. DQ 0beecfff710000000H, 0bd37b870ff9b8582H
  802. DQ 0beeb7ff7f8000000H, 0bd3c31fb1038dd6dH
  803. DQ 0bee9fff8d0000000H, 0bd4e6de6a68aa227H
  804. DQ 0bee87ff9a0000000H, 0bd4cdaf09ce4e699H
  805. DQ 0bee6fffa68000000H, 0bd32c03059eee94bH
  806. DQ 0bee57ffb20000000H, 0bd1fead0c4719fccH
  807. DQ 0bee3fffbc8000000H, 0bd39656642e976adH
  808. DQ 0bee2fffc30000000H, 0bd46c7329db21925H
  809. DQ 0bee17ffcc8000000H, 0bd389eab4517a5ceH
  810. DQ 0bedffffaa0000000H, 0bd3fdf0e3da560d7H
  811. DQ 0bedcfffba0000000H, 0bd0a7c3d4511fbcbH
  812. DQ 0bed9fffc80000000H, 0bd0780884d13df75H
  813. DQ 0bed6fffd40000000H, 0bd3ec0a3e439ae99H
  814. DQ 0bed3fffdf0000000H, 0bd36c139bbface01H
  815. DQ 0bed0fffe80000000H, 0bd4578e60a3c176bH
  816. DQ 0becbfffe00000000H, 0bd3b5254714383f2H
  817. DQ 0bec7fffe80000000H, 0bd4764e185e2f8bbH
  818. DQ 0bec1ffff20000000H, 0bd4c67c0d84712a6H
  819. DQ 0beb7ffff40000000H, 0bd3f05250dd0685fH
  820. DQ 0bea7ffff80000000H, 0bd40b553538e0e0cH
  821. DQ 0, 0
  822. ; log2 polynomial coefficients
  823. clv DQ 03fc47fd462b3b816H, 03e79c3a6966457eeH ; c1|c3
  824. DQ 0bfb550472a8bb463H, 0bfd62e4346694107H ; c2|c4
  825. ;-------Table T, D so that movapd gives [ D | T ]
  826. ;-------Note that the exponent field of T is set to 000 (instead of 3ffH)
  827. exp2_tbl DQ 03ff0000000000000H, 00000000000000000H
  828. DQ 03ff0163da9fb3335H, 03c9b61299ab8cdb7H
  829. DQ 03ff02c9a3e778061H, 0bc719083535b085dH
  830. DQ 03ff04315e86e7f85H, 0bc90a31c1977c96eH
  831. DQ 03ff059b0d3158574H, 03c8d73e2a475b465H
  832. DQ 03ff0706b29ddf6deH, 0bc8c91dfe2b13c26H
  833. DQ 03ff0874518759bc8H, 03c6186be4bb284ffH
  834. DQ 03ff09e3ecac6f383H, 03c91487818316135H
  835. DQ 03ff0b5586cf9890fH, 03c98a62e4adc610aH
  836. DQ 03ff0cc922b7247f7H, 03c901edc16e24f71H
  837. DQ 03ff0e3ec32d3d1a2H, 03c403a1727c57b52H
  838. DQ 03ff0fb66affed31bH, 0bc6b9bedc44ebd7bH
  839. DQ 03ff11301d0125b51H, 0bc96c51039449b39H
  840. DQ 03ff12abdc06c31ccH, 0bc51b514b36ca5c7H
  841. DQ 03ff1429aaea92de0H, 0bc932fbf9af1369eH
  842. DQ 03ff15a98c8a58e51H, 03c82406ab9eeab09H
  843. DQ 03ff172b83c7d517bH, 0bc819041b9d78a75H
  844. DQ 03ff18af9388c8deaH, 0bc911023d1970f6bH
  845. DQ 03ff1a35beb6fcb75H, 03c8e5b4c7b4968e4H
  846. DQ 03ff1bbe084045cd4H, 0bc995386352ef607H
  847. DQ 03ff1d4873168b9aaH, 03c9e016e00a2643cH
  848. DQ 03ff1ed5022fcd91dH, 0bc91df98027bb78bH
  849. DQ 03ff2063b88628cd6H, 03c8dc775814a8494H
  850. DQ 03ff21f49917ddc96H, 03c82a97e9494a5edH
  851. DQ 03ff2387a6e756238H, 03c99b07eb6c70572H
  852. DQ 03ff251ce4fb2a63fH, 03c8ac155bef4f4a4H
  853. DQ 03ff26b4565e27cddH, 03c82bd339940e9d9H
  854. DQ 03ff284dfe1f56381H, 0bc9a4c3a8c3f0d7dH
  855. DQ 03ff29e9df51fdee1H, 03c8612e8afad1255H
  856. DQ 03ff2b87fd0dad990H, 0bc410adcd6381aa3H
  857. DQ 03ff2d285a6e4030bH, 03c90024754db41d4H
  858. DQ 03ff2ecafa93e2f56H, 03c71ca0f45d52383H
  859. DQ 03ff306fe0a31b715H, 03c86f46ad23182e4H
  860. DQ 03ff32170fc4cd831H, 03c8a9ce78e18047cH
  861. DQ 03ff33c08b26416ffH, 03c932721843659a5H
  862. DQ 03ff356c55f929ff1H, 0bc8b5cee5c4e4628H
  863. DQ 03ff371a7373aa9cbH, 0bc963aeabf42eae1H
  864. DQ 03ff38cae6d05d866H, 0bc9e958d3c9904bcH
  865. DQ 03ff3a7db34e59ff7H, 0bc75e436d661f5e2H
  866. DQ 03ff3c32dc313a8e5H, 0bc9efff8375d29c3H
  867. DQ 03ff3dea64c123422H, 03c8ada0911f09ebbH
  868. DQ 03ff3fa4504ac801cH, 0bc97d023f956f9f3H
  869. DQ 03ff4160a21f72e2aH, 0bc5ef3691c309278H
  870. DQ 03ff431f5d950a897H, 0bc81c7dde35f7998H
  871. DQ 03ff44e086061892dH, 03c489b7a04ef80cfH
  872. DQ 03ff46a41ed1d0057H, 03c9c944bd1648a76H
  873. DQ 03ff486a2b5c13cd0H, 03c73c1a3b69062f0H
  874. DQ 03ff4a32af0d7d3deH, 03c99cb62f3d1be56H
  875. DQ 03ff4bfdad5362a27H, 03c7d4397afec42e2H
  876. DQ 03ff4dcb299fddd0dH, 03c98ecdbbc6a7833H
  877. DQ 03ff4f9b2769d2ca7H, 0bc94b309d25957e3H
  878. DQ 03ff516daa2cf6642H, 0bc8f768569bd93eeH
  879. DQ 03ff5342b569d4f82H, 0bc807abe1db13cacH
  880. DQ 03ff551a4ca5d920fH, 0bc8d689cefede59aH
  881. DQ 03ff56f4736b527daH, 03c99bb2c011d93acH
  882. DQ 03ff58d12d497c7fdH, 03c8295e15b9a1de7H
  883. DQ 03ff5ab07dd485429H, 03c96324c054647acH
  884. DQ 03ff5c9268a5946b7H, 03c3c4b1b816986a2H
  885. DQ 03ff5e76f15ad2148H, 03c9ba6f93080e65dH
  886. DQ 03ff605e1b976dc09H, 0bc93e2429b56de47H
  887. DQ 03ff6247eb03a5585H, 0bc9383c17e40b496H
  888. DQ 03ff6434634ccc320H, 0bc8c483c759d8932H
  889. DQ 03ff6623882552225H, 0bc9bb60987591c33H
  890. DQ 03ff68155d44ca973H, 03c6038ae44f73e64H
  891. DQ 03ff6a09e667f3bcdH, 0bc9bdd3413b26455H
  892. DQ 03ff6c012750bdabfH, 0bc72895667ff0b0cH
  893. DQ 03ff6dfb23c651a2fH, 0bc6bbe3a683c88aaH
  894. DQ 03ff6ff7df9519484H, 0bc883c0f25860ef6H
  895. DQ 03ff71f75e8ec5f74H, 0bc816e4786887a99H
  896. DQ 03ff73f9a48a58174H, 0bc90a8d96c65d53bH
  897. DQ 03ff75feb564267c9H, 0bc90245957316dd3H
  898. DQ 03ff780694fde5d3fH, 03c9866b80a02162cH
  899. DQ 03ff7a11473eb0187H, 0bc841577ee04992fH
  900. DQ 03ff7c1ed0130c132H, 03c9f124cd1164dd5H
  901. DQ 03ff7e2f336cf4e62H, 03c705d02ba15797eH
  902. DQ 03ff80427543e1a12H, 0bc927c86626d972aH
  903. DQ 03ff82589994cce13H, 0bc9d4c1dd41532d7H
  904. DQ 03ff8471a4623c7adH, 0bc88d684a341cdfbH
  905. DQ 03ff868d99b4492edH, 0bc9fc6f89bd4f6baH
  906. DQ 03ff88ac7d98a6699H, 03c9994c2f37cb53aH
  907. DQ 03ff8ace5422aa0dbH, 03c96e9f156864b26H
  908. DQ 03ff8cf3216b5448cH, 0bc70d55e32e9e3aaH
  909. DQ 03ff8f1ae99157736H, 03c85cc13a2e3976cH
  910. DQ 03ff9145b0b91ffc6H, 0bc9dd6792e582523H
  911. DQ 03ff93737b0cdc5e5H, 0bc675fc781b57ebbH
  912. DQ 03ff95a44cbc8520fH, 0bc764b7c96a5f039H
  913. DQ 03ff97d829fde4e50H, 0bc9d185b7c1b85d0H
  914. DQ 03ff9a0f170ca07baH, 0bc9173bd91cee632H
  915. DQ 03ff9c49182a3f090H, 03c7c7c46b071f2beH
  916. DQ 03ff9e86319e32323H, 03c7824ca78e64c6eH
  917. DQ 03ffa0c667b5de565H, 0bc9359495d1cd532H
  918. DQ 03ffa309bec4a2d33H, 03c96305c7ddc36abH
  919. DQ 03ffa5503b23e255dH, 0bc9d2f6edb8d41e1H
  920. DQ 03ffa799e1330b358H, 03c9bcb7ecac563c6H
  921. DQ 03ffa9e6b5579fdbfH, 03c90fac90ef7fd31H
  922. DQ 03ffac36bbfd3f37aH, 0bc8f9234cae76cd0H
  923. DQ 03ffae89f995ad3adH, 03c97a1cd345dcc81H
  924. DQ 03ffb0e07298db666H, 0bc9bdef54c80e424H
  925. DQ 03ffb33a2b84f15fbH, 0bc62805e3084d707H
  926. DQ 03ffb59728de5593aH, 0bc9c71dfbbba6de3H
  927. DQ 03ffb7f76f2fb5e47H, 0bc75584f7e54ac3aH
  928. DQ 03ffba5b030a1064aH, 0bc9efcd30e54292eH
  929. DQ 03ffbcc1e904bc1d2H, 03c823dd07a2d9e84H
  930. DQ 03ffbf2c25bd71e09H, 0bc9efdca3f6b9c72H
  931. DQ 03ffc199bdd85529cH, 03c811065895048ddH
  932. DQ 03ffc40ab5fffd07aH, 03c9b4537e083c60aH
  933. DQ 03ffc67f12e57d14bH, 03c92884dff483cacH
  934. DQ 03ffc8f6d9406e7b5H, 03c71acbc48805c44H
  935. DQ 03ffcb720dcef9069H, 03c7503cbd1e949dbH
  936. DQ 03ffcdf0b555dc3faH, 0bc8dd83b53829d72H
  937. DQ 03ffd072d4a07897cH, 0bc9cbc3743797a9cH
  938. DQ 03ffd2f87080d89f2H, 0bc9d487b719d8577H
  939. DQ 03ffd5818dcfba487H, 03c82ed02d75b3706H
  940. DQ 03ffd80e316c98398H, 0bc911ec18beddfe8H
  941. DQ 03ffda9e603db3285H, 03c9c2300696db532H
  942. DQ 03ffdd321f301b460H, 03c92da5778f018c2H
  943. DQ 03ffdfc97337b9b5fH, 0bc91a5cd4f184b5bH
  944. DQ 03ffe264614f5a129H, 0bc97b627817a1496H
  945. DQ 03ffe502ee78b3ff6H, 03c839e8980a9cc8fH
  946. DQ 03ffe7a51fbc74c83H, 03c92d522ca0c8de1H
  947. DQ 03ffea4afa2a490daH, 0bc9e9c23179c2893H
  948. DQ 03ffecf482d8e67f1H, 0bc9c93f3b411ad8cH
  949. DQ 03ffefa1bee615a27H, 03c9dc7f486a4b6b0H
  950. DQ 03fff252b376bba97H, 03c93a1a5bf0d8e43H
  951. DQ 03fff50765b6e4540H, 03c99d3e12dd8a18aH
  952. DQ 03fff7bfdad9cbe14H, 0bc9dbb12d0063509H
  953. DQ 03fffa7c1819e90d8H, 03c874853f3a5931eH
  954. DQ 03fffd3c22b8f71f1H, 03c62eb74966579e7H
  955. Shifter DQ 04338000000000000H, 04338000000000000H ; 2^52+2^51|2^52+2^51
  956. SIGMASK DQ 0000fffffffffffffH, 0000fffffffffffffH
  957. ONEMASK DQ 03ff0000000000000H, 03ff0000000000000H
  958. ABSVALMASK DQ 7fffffffffffffffH, 7fffffffffffffffH
  959. ; exponential polynomial coefficients
  960. cev DQ 03f55d87fe78a6731H, 03fac6b08d704a0bfH ; c3|c5
  961. DQ 03f83b2ab6fba4e77H, 03fcebfbdff82c58eH ; c2|c4
  962. DQ 03fe62e42fefa39efH ; c1
  963. HALFSIG DQ 0fffffffff8000000H
  964. LHN DQ 0bff7154740000000H ; -log2(e) rounded to 27 bits
  965. sNaN DQ 07ff0000000000001H
  966. INF DQ 07ff0000000000000H
  967. NEG_INF DQ 0fff0000000000000H
  968. NEG_ZERO DQ 08000000000000000H
  969. EMIN DQ 00010000000000000H
  970. QIND DQ 0fff8000000000000H ; QNAN indefinite
  971. ALIGN 16
  972. CONST ENDS
  973. $movsd MACRO op1, op2
  974. LOCAL begin_movsd, end_movsd
  975. begin_movsd:
  976. movupd op1, op2
  977. end_movsd:
  978. org begin_movsd
  979. db 0F2h
  980. org end_movsd
  981. ENDM
  982. _TEXT SEGMENT PARA PUBLIC USE32 'CODE'
  983. ALIGN 16
  984. PUBLIC _pow_pentium4, _CIpow_pentium4
  985. _CIpow_pentium4 PROC NEAR
  986. push ebp
  987. mov ebp,esp
  988. sub esp,16 ; prepare place for argument
  989. and esp,0fffffff0h
  990. fxch st(1)
  991. fstp qword ptr [esp] ; base
  992. fstp qword ptr [esp+8] ; exponent
  993. call _pow_pentium4
  994. leave
  995. ret
  996. _pow_pentium4 label proc
  997. ; load first argument
  998. movlpd xmm0, QWORD PTR [esp+4]
  999. ; load constants
  1000. movlpd xmm7, QWORD PTR [SIGMASK]
  1001. movlpd xmm2, QWORD PTR [ONEMASK]
  1002. andpd xmm7, xmm0
  1003. $movsd xmm4, xmm0
  1004. psrlq xmm0, 64-12-8
  1005. ; get first 7 bits after leading 1
  1006. pextrw eax, xmm0, 0
  1007. ; xmm7=first argument, with exponent set to 0+bias
  1008. orpd xmm7, xmm2
  1009. ; extract sign/exponent + next 4 bits
  1010. pextrw ecx, xmm4, 3
  1011. and eax, 0ffH
  1012. add eax, 1
  1013. and eax, 1feH
  1014. ; get r1=x*rcp_t1
  1015. mulsd xmm7, QWORD PTR [rcp_t1+eax*4]
  1016. ; load first reciprocal value (based on first 7 bits)
  1017. movlpd xmm5, QWORD PTR [rcp_t1+eax*4]
  1018. add eax, eax
  1019. ; load first log2_table values (high, low) in xmm6
  1020. movapd xmm6, QWORD PTR [log2_t1+eax*4]
  1021. ; check sign/exponent of x
  1022. mov edx, 7fefH
  1023. ; x infinity/NaN or negative ?
  1024. sub edx, ecx
  1025. ; x denormal ?
  1026. sub ecx, 0010H
  1027. or ecx, edx
  1028. cmp ecx, 80000000H
  1029. jae SPECIAL_X
  1030. mov ecx, 0
  1031. ; set xmm1=2^8*(bias-0.5-2^{-8})
  1032. mov edx, 3fe7fH
  1033. BACK_MAIN:
  1034. BACK_DENORMAL:
  1035. movd xmm1, edx
  1036. ; get k (exponent) + j (j=0 if mantissa<1.5, 1 otherwise)
  1037. psubq xmm0, xmm1
  1038. psrlq xmm0, 8
  1039. ; convert to DP format
  1040. cvtdq2pd xmm0, xmm0
  1041. ; xmm1=mask for splitting argments in high/low parts
  1042. movlpd xmm1, QWORD PTR [HALFSIG]
  1043. ; copy r1 to xmm3, set exponent to 0+bias
  1044. $movsd xmm3, xmm7 ;andpd xmm3, xmm7
  1045. ; extract bits 7..14
  1046. psrlq xmm7, 64-12-14
  1047. pextrw eax, xmm7, 0
  1048. ; set exponent of argument to 0+bias
  1049. andpd xmm4, QWORD PTR [SIGMASK]
  1050. and eax, 0ffH
  1051. add eax, 1
  1052. and eax, 1feH
  1053. ; load second reciprocal value (based on 7 bit index)
  1054. ; get r2=x*rcp_t1*rcp_t2
  1055. mulsd xmm3, QWORD PTR [rcp_t2+eax*4]
  1056. ; rcp_t1*rcp_t2 (exact multiplication)
  1057. mulsd xmm5, QWORD PTR [rcp_t2+eax*4]
  1058. add eax, eax
  1059. ; load next log2_table values (high, low) to xmm6
  1060. addpd xmm6, QWORD PTR [log2_t2+eax*4]
  1061. orpd xmm4, QWORD PTR [ONEMASK]
  1062. ; add k
  1063. addsd xmm6, xmm0
  1064. ; get xH = high part of x
  1065. andpd xmm1, xmm4
  1066. ; copy r2 to xmm2
  1067. $movsd xmm2, xmm3
  1068. ; extract bits 13...21
  1069. psrlq xmm3, 64-12-21
  1070. pextrw eax, xmm3, 0
  1071. ; xmm0 = mask for splitting term in high/low parts
  1072. movlpd xmm0, QWORD PTR [HALFSIG]
  1073. ; get xL = low part of x
  1074. subsd xmm4, xmm1
  1075. ; xmm7=-log2(e) in double precision (scaling factor for reduced argument)
  1076. movlpd xmm7, QWORD PTR [LHN]
  1077. and eax, 1ffH
  1078. add eax, 1
  1079. and eax, 3feH
  1080. ; load third reciprocal value (based on 8 bit index)
  1081. ; get rcp_t1*rcp_t2*rcp_t3 (exact multiplication)
  1082. mulsd xmm5, QWORD PTR [rcp_t3+eax*4]
  1083. ; get r3=x*rcp_t1*rcp_t2*rcp_t3
  1084. mulsd xmm2, QWORD PTR [rcp_t3+eax*4]
  1085. ; load next log2_table values (high, low) to xmm6
  1086. addpd xmm6, QWORD PTR [log2_t3+eax*8]
  1087. ; xmm0=rcp_H
  1088. andpd xmm0, xmm5
  1089. ; xmm5=rcp_L
  1090. subsd xmm5, xmm0
  1091. ; reduced argument
  1092. addsd xmm7, xmm2
  1093. ; copy rcp_H
  1094. $movsd xmm3, xmm0
  1095. ; rcp_H*xH
  1096. mulsd xmm0, xmm1
  1097. ; xH*rcp_L
  1098. mulsd xmm1, xmm5
  1099. ; rcp_H*xL
  1100. mulsd xmm3, xmm4
  1101. ; calculate rounding error for reduced argument: R-rcp_H*xH
  1102. subsd xmm2, xmm0
  1103. ; rcp_L*xL
  1104. mulsd xmm4, xmm5
  1105. ; copy xmm6=D1+D2+D3|k+T1+T2+T3
  1106. $movsd xmm0, xmm6
  1107. ; R-rcp_H*xH-rcp_L*xH
  1108. subsd xmm2, xmm1
  1109. ; add reduced argument to high order term: xmm6=D1+D2+D3|k+T1+T2+T3+Rh
  1110. addsd xmm6, xmm7
  1111. ; load y
  1112. movlpd xmm1, QWORD PTR [esp+12]
  1113. ; get sign/exponent
  1114. pextrw eax, xmm1, 3
  1115. ; R-rcp_H*xH-rcp_L*xH-rcp_H*xL
  1116. subsd xmm2, xmm3
  1117. ; get -Rh
  1118. subsd xmm0, xmm6
  1119. ; xmm3=HALFSIG mask
  1120. movlpd xmm3, QWORD PTR [HALFSIG]
  1121. ; get exponent for log2(x)
  1122. pextrw edx, xmm6, 3
  1123. ; E=R-rcp_H*xH-rcp_L*xH-rcp_H*xL-rcp_L*xL
  1124. subsd xmm2, xmm4
  1125. ; xmm4=k+T1+T2+T3+Rh
  1126. $movsd xmm4, xmm6
  1127. ; get Rl=R-Rh
  1128. addsd xmm0, xmm7
  1129. ; R=R-E
  1130. subsd xmm7, xmm2
  1131. ; xmm6=D1+D2+D3|k+T1+T2+T3+Rh+Eh
  1132. subsd xmm6, xmm2
  1133. ; xmm7=R|R
  1134. unpcklpd xmm7, xmm7
  1135. ; check if y is infinity/NaN
  1136. and eax, 7ff0H
  1137. cmp eax, 7ff0H
  1138. jae SPECIAL_Y
  1139. and edx, 7ff0H
  1140. sub eax, 3ff0H
  1141. add eax, edx
  1142. ; y*log2(x)>=2^{11} ? (i.e. 2^{11}-eps-x<0)
  1143. mov edx, 40a0H
  1144. sub edx, eax
  1145. ; avoid underflow on intermediate calculations (|y*log2(x)|<2^{-56} ?)
  1146. sub eax, 3c70H
  1147. or edx, eax
  1148. cmp edx, 80000000H
  1149. ; small input or UF/OF
  1150. jae RETURN_ONE
  1151. BACK_XY_CHECK:
  1152. ; -Eh
  1153. subsd xmm4, xmm6
  1154. ; -El
  1155. subsd xmm2, xmm4
  1156. ; xmm4=HALFSIG mask
  1157. movlpd xmm4, QWORD PTR [HALFSIG]
  1158. ; yH
  1159. andpd xmm3, xmm1
  1160. ; HH (high part of k+T1+T2+T3+Rh+Eh)
  1161. andpd xmm4, xmm6
  1162. ; add correction to reduced argument: Rl+El
  1163. subsd xmm0, xmm2
  1164. xorpd xmm2, xmm2
  1165. mov edx, 4060H ;70H
  1166. pinsrw xmm2, edx, 3
  1167. ; copy yH
  1168. $movsd xmm5, xmm3
  1169. ; yH*HH
  1170. mulsd xmm3, xmm4
  1171. ; HL
  1172. subsd xmm6, xmm4
  1173. ; yL
  1174. subsd xmm1, xmm5
  1175. ; get 2^7*(yH*HH)
  1176. mulsd xmm3, xmm2 ;paddd xmm3, xmm2
  1177. ; yH*HL
  1178. mulsd xmm5, xmm6
  1179. ; xmm2=cl1|cl3
  1180. movapd xmm2, QWORD PTR [clv]
  1181. ; HH*yL
  1182. mulsd xmm4, xmm1
  1183. ; get int(2^7*H)
  1184. cvtsd2si eax, xmm3
  1185. ; HL*yL
  1186. mulsd xmm6, xmm1
  1187. ; xmm1=cl2|cl4
  1188. movapd xmm1, QWORD PTR [clv+16]
  1189. ; yH*HL+yL*HH
  1190. addsd xmm5, xmm4
  1191. ; get D1+D2+D3
  1192. pshufd xmm4, xmm6, 0eeH
  1193. ; yH*HL+yL*HH+yL*HL
  1194. addsd xmm5, xmm6
  1195. ; underflow/possible overflow condition ?
  1196. mov edx, 1ff7fH
  1197. ; eax>=(2^10-1)*2^7
  1198. sub edx, eax
  1199. ; eax+bias*2^7<=59*2^7 ?
  1200. add eax, 1e1ffH
  1201. or edx, eax
  1202. ; restore eax value
  1203. sub eax, 1e1ffH
  1204. ; check sign bit
  1205. cmp edx, 0
  1206. jle UF_OF_CASES
  1207. ; get table index, and exponent of result
  1208. ; ecx contains expected sign of the result, scaled by 2^11
  1209. add ecx, eax
  1210. and eax, 7fH
  1211. ; get exponent of result (scaled by 2^7)
  1212. and ecx, 0ffffff80h
  1213. ; add exponent bias*2^7
  1214. add ecx, 1ff80h
  1215. ; D1+D2+D3+(Rl+El)
  1216. addsd xmm4, xmm0
  1217. ; xmm0=xmm3=2^7*H
  1218. $movsd xmm0, xmm3
  1219. ; (2^7)*H+Shifter (to round to integer)
  1220. addsd xmm3, QWORD PTR [Shifter]
  1221. ; cl1*R|cl3*R
  1222. mulpd xmm2, xmm7
  1223. ; int((2^7)*H)=((2^7)*H+Shifter)-Shifter
  1224. subsd xmm3, QWORD PTR [Shifter]
  1225. ; R^2|R^2
  1226. mulpd xmm7, xmm7
  1227. ; R_exp_h'=R_exp_h*(2^7)=(2^7)*H-int((2^7)*H)
  1228. subsd xmm0, xmm3
  1229. ; load table values
  1230. add eax, eax
  1231. add eax, eax
  1232. add eax, eax
  1233. add eax, eax
  1234. ; D|T
  1235. movapd xmm3, QWORD PTR [exp2_tbl+eax]
  1236. ; load ce3|ce5
  1237. movapd xmm6, QWORD PTR [cev]
  1238. ; cl2*R^2|cl4*R^2
  1239. mulpd xmm1, xmm7
  1240. ; cl1*R+cl2*R^2|cl3*R+cl4*R^2
  1241. addpd xmm2, xmm1
  1242. ; unpack cl1*R+cl2*R^2
  1243. pshufd xmm1, xmm2, 0eeh
  1244. ; *|cl3*R^3+cl4*R^4
  1245. mulsd xmm2, xmm7
  1246. ; xmm7=0
  1247. xorpd xmm7, xmm7
  1248. mov edx, 3f80H
  1249. ; Pl14
  1250. addsd xmm2, xmm1
  1251. ; xmm7=scaling constant
  1252. pinsrw xmm7, edx, 3
  1253. ; low part of log2(x): D1+D2+D3+(Rl+E)+P14
  1254. addsd xmm2, xmm4
  1255. ; load ce1
  1256. movlpd xmm4, QWORD PTR [cev+32]
  1257. ; load 2^k
  1258. movd xmm1, ecx
  1259. UF_BACK:
  1260. ; y*(D1+D2+D3+(Rl+E)+P14)
  1261. mulsd xmm2, QWORD PTR [esp+12]
  1262. ; get R_exp_h=2^{-7}*R_exp_h'
  1263. mulsd xmm0, xmm7
  1264. psllq xmm1, 52-7
  1265. ; xmm1=2^k|2^k
  1266. pshufd xmm1, xmm1, 044h
  1267. ; load ce2|ce4
  1268. movapd xmm7, QWORD PTR [cev+16]
  1269. ; low part of y*log2(x): yH*HL+yL*HH+yL*HL+y*(D1+D2+D3+(Rl+E)+P14)
  1270. addsd xmm5, xmm2
  1271. ; get D*2^k|T*2^k
  1272. mulpd xmm3, xmm1
  1273. ; get R_exp=R_exp_h+yH*HL+yL*HH+yL*HL+y*(D1+D2+D3+(Rl+E)+P14)
  1274. addsd xmm0, xmm5
  1275. ; xmm0=R_exp|R_exp
  1276. unpcklpd xmm0, xmm0
  1277. ; ce3*R_exp|ce5*R_exp
  1278. mulpd xmm6, xmm0
  1279. ; ce1*R_exp
  1280. mulsd xmm4, xmm0
  1281. ; R_exp^2|R_exp^2
  1282. mulpd xmm0, xmm0
  1283. ; ce2+ce3*R_exp|ce4+ce5*R_exp
  1284. addpd xmm7, xmm6
  1285. ; R_exp^2*(ce2+ce3*R_exp)|R_exp^2*(ce4+ce5*R_exp)
  1286. mulpd xmm7, xmm0
  1287. ; R_exp^2*(T*2^k)
  1288. mulsd xmm0, xmm3
  1289. ; unpack R_exp^2*(ce2+ce3*R_exp)
  1290. pshufd xmm6, xmm7, 0eeh
  1291. ; R_exp^4*(T*2^k)*(ce4+ce5*R_exp)
  1292. mulsd xmm0, xmm7
  1293. ; unpack D*2^k
  1294. pshufd xmm5, xmm3, 0eeh
  1295. ; R_exp^2*(T*2^k)*(ce2+ce3*R_exp)
  1296. mulsd xmm6, xmm3
  1297. ; ce1*(T*2^k)*R_exp
  1298. mulsd xmm4, xmm3
  1299. ; P45*(T*2^k)+D*2^k
  1300. addsd xmm0, xmm5
  1301. sub esp, 16
  1302. ; P25*(T*2^k)+D*2^k
  1303. addsd xmm0, xmm6
  1304. ; P15*(T*2^k)+D*2^k
  1305. addsd xmm0, xmm4
  1306. ; T+P15*(T*2^k)+D*2^k
  1307. addsd xmm0, xmm3
  1308. movlpd QWORD PTR [esp+4], xmm0 ; return result
  1309. fld QWORD PTR [esp+4] ;
  1310. add esp, 16
  1311. ret
  1312. SPECIAL_X:
  1313. ; load y
  1314. movlpd xmm1, QWORD PTR [esp+12]
  1315. movlpd xmm3, QWORD PTR [ABSVALMASK]
  1316. ; load low half of y in eax
  1317. movd eax, xmm1
  1318. $movsd xmm2, xmm1
  1319. ; eliminate sign, load high half of y in ecx
  1320. andpd xmm1, xmm3
  1321. psrlq xmm1, 32
  1322. movd ecx, xmm1
  1323. ; y infinity/NaN ?
  1324. cmp ecx, 7ff00000H
  1325. jae Y_INF_NAN_CHECK_X
  1326. ; y=+/- 0?
  1327. or eax, ecx
  1328. cmp eax, 0
  1329. jz Y_ZERO
  1330. ; denormal, positive x ?
  1331. cmp edx, 0
  1332. jge DENORMAL_POS_X
  1333. ; reconstruct sign/expon from edx=7fefH-s/exp
  1334. neg edx
  1335. add edx, 7fefH
  1336. ; y integer ?
  1337. ; xmm3=0fff00..0
  1338. psllq xmm3,64-12
  1339. ; set exponent of y to all 1's
  1340. orpd xmm2, xmm3
  1341. ; load bias-12
  1342. mov ecx, 3ffH-12
  1343. movd xmm3, ecx
  1344. ; get exponent+64-52
  1345. psrlq xmm1, 32-12
  1346. psubd xmm1, xmm3
  1347. ; xmm3=0
  1348. pxor xmm3, xmm3
  1349. ; if exponent+12<0, set shift count to 0
  1350. pmaxsw xmm1, xmm3
  1351. ; get fractional tail of y
  1352. psllq xmm2, xmm1
  1353. ; fractional tail=0 ? (i.e. y integer ?)
  1354. pcmpeqd xmm2, xmm3
  1355. pmovmskb eax, xmm2
  1356. ; take absolute value of x
  1357. mov ecx, edx
  1358. and edx, 7fffH
  1359. ; check if x infinity/NaN
  1360. cmp edx, 7ff0H
  1361. jae INF_NAN_X
  1362. ; x negative, finite
  1363. ; y not integer ?
  1364. and eax, 0ffH
  1365. cmp eax, 0ffH
  1366. jnz RET_INVALID
  1367. ; y integer
  1368. ; y odd integer ?
  1369. movlpd xmm1, QWORD PTR [esp+12]
  1370. movlpd xmm2, QWORD PTR [esp+12]
  1371. ; load bias-11
  1372. mov ecx, 3ffH-11
  1373. movd xmm3, ecx
  1374. ; get exponent+64-53
  1375. andpd xmm1, QWORD PTR [ABSVALMASK]
  1376. psrlq xmm1, 64-12
  1377. psubd xmm1, xmm3
  1378. ; xmm3=100..0
  1379. movlpd xmm3, QWORD PTR [NEG_ZERO]
  1380. ; get last integer bit, fractional tail of y
  1381. psllq xmm2, xmm1
  1382. ; last int. bit=0 ? (i.e. y is an odd integer ?)
  1383. pcmpeqd xmm2, xmm3
  1384. pmovmskb eax, xmm2
  1385. and eax, 0ffH
  1386. ; if eax!=ffH, set ecx=2^11, else set ecx=0
  1387. mov ecx, 3ff01H
  1388. ; set ecx=2^11*2^7 if y is an odd integer
  1389. add ecx, eax
  1390. and ecx, 40000H
  1391. ; x denormal ?
  1392. cmp edx, 0010H
  1393. jb DENORMAL_X
  1394. ; set xmm1=2^8*(bias-0.5-2^{-8})
  1395. mov edx, 0bfe7fH
  1396. ; load constants, return to main path
  1397. movlpd xmm3, QWORD PTR [SIGMASK]
  1398. movlpd xmm2, QWORD PTR [ONEMASK]
  1399. jmp BACK_MAIN
  1400. Y_INF_NAN_CHECK_X:
  1401. ; x NaN?
  1402. movlpd xmm7, QWORD PTR [esp+4]
  1403. movlpd xmm4, QWORD PTR [esp+4]
  1404. movd edx, xmm7
  1405. psrlq xmm7, 32
  1406. movd eax, xmm7
  1407. mov ecx, eax
  1408. and eax, 7fffffffH
  1409. cmp eax, 7ff00000H
  1410. jb Y_INF_NAN
  1411. ja X_NAN
  1412. cmp edx, 0
  1413. ja X_NAN
  1414. jmp Y_INF_NAN
  1415. DENORMAL_POS_X:
  1416. mov ecx, 0
  1417. DENORMAL_X:
  1418. ; xmm0=2^64
  1419. xorpd xmm0, xmm0
  1420. mov eax, (3ffH+64)*16
  1421. pinsrw xmm0, eax, 3
  1422. ; load constants
  1423. movlpd xmm7, QWORD PTR [SIGMASK]
  1424. movlpd xmm2, QWORD PTR [ONEMASK]
  1425. ; scale x by 2^64
  1426. mulsd xmm0, xmm4
  1427. ; x=+/-0 ?
  1428. movd edx, xmm4
  1429. psrlq xmm4, 32
  1430. movd eax, xmm4
  1431. cmp edx, 0
  1432. jz ZERO_X
  1433. BACK_DEN:
  1434. andpd xmm7, xmm0
  1435. $movsd xmm4, xmm0
  1436. andpd xmm0, QWORD PTR [ABSVALMASK]
  1437. psrlq xmm0, 64-12-8
  1438. ; get first 7 bits after leading 1
  1439. pextrw eax, xmm0, 0
  1440. orpd xmm7, xmm2
  1441. and eax, 0ffH
  1442. add eax, 1
  1443. and eax, 1feH
  1444. ; get r1=x*rcp_t1
  1445. mulsd xmm7, QWORD PTR [rcp_t1+eax*4]
  1446. ; load first reciprocal value (based on first 7 bits)
  1447. movlpd xmm5, QWORD PTR [rcp_t1+eax*4]
  1448. add eax, eax
  1449. ; load first log2_table values (high, low) in xmm6
  1450. movapd xmm6, QWORD PTR [log2_t1+eax*4]
  1451. ; 2^8*(bias+64-0.5-2^{-8})
  1452. mov edx, 43e7fH
  1453. jmp BACK_DENORMAL
  1454. ZERO_X:
  1455. mov edx, eax
  1456. and edx, 7fffffffH
  1457. cmp edx, 0
  1458. jnz BACK_DEN
  1459. ; get sign of y
  1460. mov edx, DWORD PTR [esp+16]
  1461. and edx, 80000000H
  1462. cmp edx, 0
  1463. jz ZERO_X_POS_Y
  1464. ; return -infinity if (y odd and x=-0), +infinity otherwise
  1465. ; ecx=0 or 2^11*2^7
  1466. shl ecx, 20-7
  1467. ; eax=2^31 if (y odd and x=-0)
  1468. and eax, ecx
  1469. mov edx, 7ff00000H
  1470. ; set sign of infinity
  1471. or edx, eax
  1472. ; load result
  1473. movd xmm0, edx
  1474. psllq xmm0, 32
  1475. ; raise divide by zero
  1476. movlpd xmm1, QWORD PTR [ONEMASK]
  1477. movlpd xmm2, QWORD PTR [esp+4]
  1478. divsd xmm1, xmm2
  1479. mov edx, 27
  1480. jmp CALL_LIBM_ERROR
  1481. ZERO_X_POS_Y:
  1482. ; x=-0, and y odd integer ?
  1483. ; ecx=0 or 2^11*2^7
  1484. shl ecx, 20-7
  1485. ; eax=2^31 if (y odd and x=-0)
  1486. and eax, ecx
  1487. cmp eax, 0
  1488. jnz RET_NEG_ZERO
  1489. ; return +0
  1490. fldz
  1491. ret
  1492. INF_NAN_X:
  1493. ; y finite, not zero
  1494. ; x NaN ?
  1495. movlpd xmm3, QWORD PTR [SIGMASK]
  1496. xorpd xmm1, xmm1
  1497. ; get significand bits
  1498. andpd xmm3, xmm4
  1499. ; significand bits = 0 ?
  1500. pcmpeqd xmm1, xmm3
  1501. pmovmskb ecx, xmm1
  1502. and ecx, 0ffH
  1503. cmp ecx, 0ffH
  1504. jnz X_NAN
  1505. ; x=+infinity ?
  1506. pextrw ecx, xmm4, 3
  1507. and ecx, 8000H
  1508. cmp ecx,0
  1509. jz X_INF
  1510. ; x=-infinity
  1511. ; y integer ?
  1512. and eax, 0ffH
  1513. cmp eax, 0ffH
  1514. jnz X_NINF
  1515. ; y odd integer ?
  1516. movlpd xmm1, QWORD PTR [esp+12]
  1517. movlpd xmm2, QWORD PTR [esp+12]
  1518. ; load bias-11
  1519. mov ecx, 3ffH-11
  1520. movd xmm3, ecx
  1521. ; get exponent+64-53
  1522. andpd xmm1, QWORD PTR [ABSVALMASK]
  1523. psrlq xmm1, 64-12
  1524. psubd xmm1, xmm3
  1525. ; xmm3=0
  1526. pxor xmm3, xmm3
  1527. ; get last integer bit, fractional tail of y
  1528. psllq xmm2, xmm1
  1529. ; last int. bit=0 ? (i.e. y is an even integer ?)
  1530. pcmpeqd xmm2, xmm3
  1531. pmovmskb eax, xmm2
  1532. and eax, 0ffH
  1533. cmp eax, 0ffH
  1534. jz X_NINF
  1535. ; x=-infinity, y an odd integer
  1536. movlpd xmm1, QWORD PTR [esp+12]
  1537. pextrw eax, xmm1, 3
  1538. and eax, 8000H
  1539. cmp eax, 0
  1540. ; y>0 ?
  1541. jz RET_NINF
  1542. ; y<0, return -0
  1543. RET_NEG_ZERO:
  1544. fld [NEG_ZERO]
  1545. ret
  1546. RET_NINF:
  1547. fld [NEG_INF]
  1548. ret
  1549. X_NINF:
  1550. ; x=-infinity, y not an odd integer
  1551. movlpd xmm1, QWORD PTR [esp+12]
  1552. pextrw eax, xmm1, 3
  1553. and eax, 8000H
  1554. cmp eax, 0
  1555. ; y>0 ? (return infinity)
  1556. jz RET_INF
  1557. ; y<0, return 0
  1558. fldz
  1559. ret
  1560. X_INF:
  1561. ; y<0 ?
  1562. movlpd xmm1, QWORD PTR [esp+12]
  1563. pextrw eax, xmm1, 3
  1564. and eax, 8000H
  1565. cmp eax, 0
  1566. jz RET_INF
  1567. ; y<0, return 0
  1568. fldz
  1569. ret
  1570. X_NAN:
  1571. addsd xmm4, xmm4
  1572. ; sub esp, 16
  1573. ; movlpd QWORD PTR [esp+4], xmm4
  1574. ; fld QWORD PTR [esp+4]
  1575. ; add esp, 16
  1576. ; ret
  1577. $movsd xmm0, xmm4
  1578. mov edx, 1006
  1579. jmp CALL_LIBM_ERROR
  1580. RET_INVALID:
  1581. ; x=-0?
  1582. movlpd xmm2, QWORD PTR [esp+4]
  1583. movd eax, xmm2
  1584. psrlq xmm2, 32
  1585. movd edx, xmm2
  1586. and edx, 7fffffffH
  1587. or eax, edx
  1588. mov ecx, 0
  1589. cmp eax, 0
  1590. jz ZERO_X
  1591. ; raise INVALID exception
  1592. movlpd xmm1, QWORD PTR [sNaN]
  1593. movlpd xmm0, QWORD PTR [QIND]
  1594. mulsd xmm1, xmm1
  1595. mov edx, 28
  1596. jmp CALL_LIBM_ERROR
  1597. SPECIAL_Y:
  1598. ; load x, y
  1599. movlpd xmm4, QWORD PTR [esp+4]
  1600. movlpd xmm2, QWORD PTR [esp+12]
  1601. ; x=+/-1 ?
  1602. ; load lower bits of x
  1603. movd eax, xmm4
  1604. cmp eax, 0
  1605. jnz Y_INF_NAN
  1606. psrlq xmm4, 32
  1607. movd edx, xmm4
  1608. ; x=1 ?
  1609. cmp edx, 3ff00000H
  1610. jz RET_ONE
  1611. ; x=-1 ?
  1612. cmp edx, 0bff00000H
  1613. jnz Y_INF_NAN
  1614. ; y=NaN ? (xmm1 contains y)
  1615. movlpd xmm3, QWORD PTR [SIGMASK]
  1616. xorpd xmm1, xmm1
  1617. ; get significand bits, to determine if y=NaN
  1618. andpd xmm3, xmm2
  1619. ; significand bits = 0 ?
  1620. pcmpeqd xmm1, xmm3
  1621. pmovmskb eax, xmm1
  1622. cmp eax, 0ffH
  1623. jnz RET_Y_NAN
  1624. ; y=+/-infinity, return 1
  1625. fld1
  1626. ret
  1627. Y_INF_NAN:
  1628. movlpd xmm3, QWORD PTR [SIGMASK]
  1629. xorpd xmm1, xmm1
  1630. ; get significand bits, to determine if y=NaN
  1631. andpd xmm3, xmm2
  1632. ; significand bits = 0 ?
  1633. pcmpeqd xmm1, xmm3
  1634. pmovmskb eax, xmm1
  1635. and eax, 0ffH
  1636. cmp eax, 0ffH
  1637. jnz RET_Y_NAN
  1638. ; y infinity, get sign
  1639. pextrw eax, xmm2, 3
  1640. ; get x
  1641. movlpd xmm4, QWORD PTR [esp+4]
  1642. and eax, 8000H
  1643. ; x=-1 ? (ecx,edx=high, low parts of x)
  1644. xor ecx, 0bff00000H
  1645. or edx, ecx
  1646. cmp edx, 0
  1647. ; if x=-1, return 1
  1648. jz RET_ONE
  1649. cmp eax, 0
  1650. jz Y_INF
  1651. ; |x|<1 ? ( |x|=1 will not take this path)
  1652. pextrw eax, xmm4, 3
  1653. and eax, 7ff0H
  1654. cmp eax, 3ff0H
  1655. jb RET_INF
  1656. ; |x|>1, y=-infinity, return 0
  1657. fldz
  1658. ret
  1659. Y_INF:
  1660. ; y=+infinity
  1661. ; |x|>=1 ? ( |x|=1 will not take this path)
  1662. pextrw eax, xmm4, 3
  1663. and eax, 7ff0H
  1664. cmp eax, 3ff0H
  1665. jae RET_INF
  1666. ; |x|<1, return 0
  1667. fldz
  1668. ret
  1669. RET_INF:
  1670. fld QWORD PTR [INF]
  1671. ret
  1672. RET_Y_NAN:
  1673. addsd xmm2, xmm2
  1674. ; sub esp, 16
  1675. ; movlpd QWORD PTR [esp+4], xmm2
  1676. ; fld QWORD PTR [esp+4]
  1677. ; add esp, 16
  1678. ; ret
  1679. $movsd xmm0, xmm2
  1680. mov edx, 1006
  1681. jmp CALL_LIBM_ERROR
  1682. Y_ZERO:
  1683. ; x=0 ?
  1684. movd eax, xmm4
  1685. psrlq xmm4, 32
  1686. movd edx, xmm4
  1687. and edx, 7fffffffH
  1688. mov ecx, eax
  1689. or eax, edx
  1690. movlpd xmm0, QWORD PTR [ONEMASK]
  1691. mov edx, 26
  1692. cmp eax, 0
  1693. jz CALL_LIBM_ERROR
  1694. ; x=NaN ?
  1695. movd eax, xmm4
  1696. mov edx, 29
  1697. and eax, 7fffffffH
  1698. cmp eax, 7ff00000H
  1699. ; x=NaN
  1700. ja CALL_LIBM_ERROR
  1701. ; x!=NaN
  1702. jb Y_ZERO_RET
  1703. ; x=NaN ?
  1704. cmp ecx,0
  1705. ja CALL_LIBM_ERROR
  1706. Y_ZERO_RET:
  1707. ; return 1 for any x
  1708. sub esp, 16
  1709. movlpd QWORD PTR [esp+4], xmm0
  1710. fld QWORD PTR [esp+4]
  1711. add esp, 16
  1712. ret
  1713. RET_ONE:
  1714. ; used for x=+/-1, special y
  1715. ; fld1
  1716. ; ret
  1717. movlpd xmm1, QWORD PTR [QIND]
  1718. movlpd xmm0, QWORD PTR [esp+12]
  1719. ; set Invalid flag, if necessary
  1720. addsd xmm0, xmm1
  1721. mov edx, 28
  1722. ; jmp cALL_LIBM_ERROR
  1723. CALL_LIBM_ERROR:
  1724. ;call libm_error_support(void *arg1,void *arg2,void *retval,error_types input_tag)
  1725. sub esp, 28
  1726. movlpd QWORD PTR [esp+16], xmm0
  1727. mov DWORD PTR [esp+12],edx
  1728. mov edx, esp
  1729. add edx,16
  1730. mov DWORD PTR [esp+8],edx
  1731. add edx,16+8
  1732. mov DWORD PTR [esp+4],edx
  1733. sub edx, 8
  1734. mov DWORD PTR [esp],edx
  1735. call NEAR PTR __libm_error_support
  1736. ; movlpd xmm0, QWORD PTR [esp+16]
  1737. ; movlpd QWORD PTR [esp+16], xmm0 ; return result
  1738. fld QWORD PTR [esp+16] ;
  1739. add esp,28
  1740. ret
  1741. UF_OF_CASES:
  1742. cmp eax,0
  1743. jle UNDERFLOW_CASES
  1744. ; if eax>=2^11*2^7, oF occurs
  1745. cmp eax, 40000H
  1746. jae RET_INF_OF
  1747. push esi
  1748. ; overflow
  1749. ; get table index, and exponent of result
  1750. mov edx, eax
  1751. ; ecx contains expected sign of the result, scaled by 2^11
  1752. and eax, 7fH
  1753. ; add exponent (bias+bias)*2^7
  1754. add ecx, 3ff00h
  1755. ; edx+=(bias+(-bias)-1)*2^7 ; the same -1
  1756. sub edx, 128
  1757. and edx, 0ffffff80H
  1758. push edi
  1759. mov edi, 3ff0H
  1760. jmp OF_CONT
  1761. UNDERFLOW_CASES:
  1762. cmp eax, (2-1024)*256
  1763. jle RET_ZERO_UF
  1764. push esi
  1765. ; get table index, and exponent of result
  1766. mov edx, eax
  1767. ; ecx contains expected sign of the result, scaled by 2^11
  1768. and eax, 7fH
  1769. ; add exponent (bias+1-bias)*2^7
  1770. add ecx, 80h
  1771. ; edx=exponent*2^7
  1772. and edx, 0ffffff80H
  1773. ; edx+=(bias+bias-1)*2^7
  1774. add edx, 3fe80H
  1775. push edi
  1776. mov edi, 0
  1777. OF_CONT:
  1778. ; D1+D2+D3+(Rl+E)
  1779. addsd xmm4, xmm0
  1780. ; xmm0=xmm3=2^7*H
  1781. $movsd xmm0, xmm3
  1782. ; (2^7)*H+Shifter (to round to integer)
  1783. addsd xmm3, QWORD PTR [Shifter]
  1784. ; esi=edx-bias*2^7
  1785. mov esi, edx
  1786. sub esi, 1ff80H
  1787. ; cl1*R|cl3*R
  1788. mulpd xmm2, xmm7
  1789. ; int((2^7)*H)=((2^7)*H+Shifter)-Shifter
  1790. subsd xmm3, QWORD PTR [Shifter]
  1791. ; R^2|R^2
  1792. mulpd xmm7, xmm7
  1793. ; R_exp_h'=R_exp_h*(2^7)=(2^7)*H-int((2^7)*H)
  1794. subsd xmm0, xmm3
  1795. ; load table values
  1796. add eax, eax
  1797. add eax, eax
  1798. add eax, eax
  1799. add eax, eax
  1800. ; D|T
  1801. movapd xmm3, QWORD PTR [exp2_tbl+eax]
  1802. ; load ce3|ce5
  1803. movapd xmm6, QWORD PTR [cev]
  1804. ; cl2*R^2|cl4*R^2
  1805. mulpd xmm1, xmm7
  1806. ; cl1*R+cl2*R^2|cl3*R+cl4*R^2
  1807. addpd xmm2, xmm1
  1808. ; unpack cl1*R+cl2*R^2
  1809. pshufd xmm1, xmm2, 0eeh
  1810. ; *|cl3*R^3+cl4*R^4
  1811. mulsd xmm2, xmm7
  1812. ; Pl14
  1813. addsd xmm2, xmm1
  1814. ; low part of log2(x): D1+D2+D3+(Rl+E)+P14
  1815. addsd xmm2, xmm4
  1816. ; load ce1
  1817. movlpd xmm4, QWORD PTR [cev+32]
  1818. ; load 2^k2
  1819. movd xmm1, edx
  1820. ; edx=-(edx-bias*2^7)/2^7
  1821. sub edx, 1ff80H
  1822. neg edx
  1823. sar edx, 7
  1824. add edx, 2
  1825. ; if edx>=32, set edx to 64+
  1826. mov eax, edx
  1827. and eax, 32
  1828. add edx, eax
  1829. ; xmm7=0
  1830. xorpd xmm7, xmm7
  1831. mov eax, 3f80H
  1832. ; xmm7=scaling constant
  1833. pinsrw xmm7, eax, 3
  1834. ; y*(D1+D2+D3+(Rl+E)+P14)
  1835. mulsd xmm2, QWORD PTR [esp+12+4+4]
  1836. ; get R_exp_h=2^{-7}*R_exp_h'
  1837. mulsd xmm0, xmm7
  1838. psllq xmm1, 52-7
  1839. ; xmm1=2^k2|2^k2
  1840. pshufd xmm1, xmm1, 044h
  1841. ; load ce2|ce4
  1842. movapd xmm7, QWORD PTR [cev+16]
  1843. ; low part of y*log2(x): yH*HL+yL*HH+yL*HL+y*(D1+D2+D3+(Rl+E)+P14)
  1844. addsd xmm5, xmm2
  1845. ; get D*2^k|T*2^k
  1846. mulpd xmm3, xmm1
  1847. ; get R_exp=R_exp_h+yH*HL+yL*HH+yL*HL+y*(D1+D2+D3+(Rl+E)+P14)
  1848. addsd xmm0, xmm5
  1849. ; xmm0=R_exp|R_exp
  1850. unpcklpd xmm0, xmm0
  1851. ; ce3*R_exp|ce5*R_exp
  1852. mulpd xmm6, xmm0
  1853. ; ce1*R_exp
  1854. mulsd xmm4, xmm0
  1855. ; R_exp^2|R_exp^2
  1856. mulpd xmm0, xmm0
  1857. ; ce2+ce3*R_exp|ce4+ce5*R_exp
  1858. addpd xmm7, xmm6
  1859. ; R_exp^2*(ce2+ce3*R_exp)|R_exp^2*(ce4+ce5*R_exp)
  1860. mulpd xmm7, xmm0
  1861. ; R_exp^2*(T*2^k)
  1862. mulsd xmm0, xmm3
  1863. ; unpack R_exp^2*(ce2+ce3*R_exp)
  1864. pshufd xmm6, xmm7, 0eeh
  1865. ; R_exp^4*(T*2^k)*(ce4+ce5*R_exp)
  1866. mulsd xmm0, xmm7
  1867. ; unpack D*2^k
  1868. pshufd xmm5, xmm3, 0eeh
  1869. ; R_exp^2*(T*2^k)*(ce2+ce3*R_exp)
  1870. mulsd xmm6, xmm3
  1871. ; ce1*(T*2^k)*R_exp
  1872. mulsd xmm4, xmm3
  1873. ; xmm7=2^k'
  1874. movd xmm7, ecx
  1875. psllq xmm7, 52-7
  1876. movd xmm2, edx
  1877. pcmpeqd xmm1, xmm1
  1878. psllq xmm1, xmm2
  1879. ; P45*(T*2^k)+D*2^k
  1880. addsd xmm0, xmm5
  1881. ; P25*(T*2^k)+D*2^k
  1882. addsd xmm0, xmm6
  1883. ; Th
  1884. andpd xmm1, xmm3
  1885. ; P15*(T*2^k)+D*2^k
  1886. addsd xmm0, xmm4
  1887. ; xmm6=0
  1888. xorpd xmm6, xmm6
  1889. pcmpeqd xmm4, xmm4
  1890. psllq xmm4, xmm2
  1891. ; Tl
  1892. subsd xmm3, xmm1
  1893. ; xmm2=Th
  1894. $movsd xmm2, xmm1
  1895. ; (Th+(P15*(T*2^k)+D*2^k)_high)_high
  1896. addsd xmm1, xmm0
  1897. andpd xmm1, xmm4
  1898. ; xmm6=(possible OF)?1:0
  1899. pinsrw xmm6, edi, 3
  1900. pop edi
  1901. ; -(P15*(T*2^k)+D*2^k)_high
  1902. subsd xmm2, xmm1
  1903. ; (P15*(T*2^k)+D*2^k)_low
  1904. addsd xmm0, xmm2
  1905. ; Tl+(P15*(T*2^k)+D*2^k)_low
  1906. addsd xmm0, xmm3
  1907. cmp esi, 0
  1908. jg SCALE2
  1909. pop esi
  1910. ; final scaling by 2^k'
  1911. mulsd xmm0, xmm7
  1912. mulsd xmm1, xmm7
  1913. ; final addition
  1914. addsd xmm0, xmm1
  1915. mulsd xmm6, xmm0
  1916. addsd xmm0, xmm6
  1917. ; overflow, or underflow
  1918. pextrw eax, xmm0, 3
  1919. and eax, 7ff0H
  1920. mov edx, 24
  1921. cmp eax, 7ff0H
  1922. jz CALL_LIBM_ERROR
  1923. mov edx, 25
  1924. cmp eax, 0
  1925. jz CALL_LIBM_ERROR
  1926. sub esp, 16
  1927. movlpd QWORD PTR [esp+4], xmm0 ; return result
  1928. fld QWORD PTR [esp+4] ;
  1929. add esp, 16
  1930. ret
  1931. SCALE2:
  1932. pop esi
  1933. ; final addition
  1934. addsd xmm0, xmm1
  1935. ; final scaling by 2^k'
  1936. mulsd xmm0, xmm7
  1937. mulsd xmm6, xmm0
  1938. addsd xmm0, xmm6
  1939. ; overflow, or underflow
  1940. pextrw eax, xmm0, 3
  1941. and eax, 7ff0H
  1942. mov edx, 24
  1943. cmp eax, 7ff0H
  1944. jz CALL_LIBM_ERROR
  1945. mov edx, 25
  1946. cmp eax, 0
  1947. jz CALL_LIBM_ERROR
  1948. sub esp, 16
  1949. movlpd QWORD PTR [esp+4], xmm0 ; return result
  1950. fld QWORD PTR [esp+4] ;
  1951. add esp, 16
  1952. ret
  1953. RET_ZERO_UF:
  1954. movlpd xmm0, QWORD PTR [EMIN]
  1955. ; sign
  1956. movd xmm1, ecx
  1957. mulsd xmm0, xmm0
  1958. ; set sign
  1959. psllq xmm1, 63-18
  1960. orpd xmm0, xmm1
  1961. mov edx, 25
  1962. jmp CALL_LIBM_ERROR
  1963. RET_INF_OF:
  1964. mov edx, 24
  1965. ; check sign
  1966. cmp ecx, 0
  1967. jz RET_INF_OF2
  1968. movlpd xmm0, QWORD PTR [NEG_INF]
  1969. jmp CALL_LIBM_ERROR
  1970. RET_INF_OF2:
  1971. movlpd xmm0, QWORD PTR [INF]
  1972. jmp CALL_LIBM_ERROR
  1973. RETURN_ONE:
  1974. ; y|y
  1975. pshufd xmm4, xmm1, 44H
  1976. ; y*log2(x)_high
  1977. mulpd xmm4, xmm6
  1978. ; get exponent
  1979. pextrw eax, xmm4, 3
  1980. and eax, 7ff0H
  1981. ; y*log2(x)>=2^{11} ? (i.e. 2^{11}-eps-x<0)
  1982. mov edx, 40a0H
  1983. sub edx, eax
  1984. ; avoid underflow on intermediate calculations (|y*log2(x)|<2^{-56} ?)
  1985. sub eax, 3c70H
  1986. or edx, eax
  1987. cmp edx, 80000000H
  1988. ; if no OF/UF occurs, return to main path
  1989. jb BACK_XY_CHECK
  1990. CONT_OF_UF:
  1991. ; overflow/underflow ?
  1992. cmp eax, 80000000H
  1993. jb OF_UF
  1994. RET_ONE2:
  1995. ; return +/- 1
  1996. or ecx, 1ff80H
  1997. movd xmm0, ecx
  1998. psllq xmm0, 52-7
  1999. sub esp, 16
  2000. movlpd [esp+4], xmm0
  2001. fld QWORD PTR [esp+4]
  2002. add esp, 16
  2003. ret
  2004. OF_UF:
  2005. movlpd xmm4, [esp+4]
  2006. pextrw edx, xmm4, 3
  2007. and edx, 7ff0H
  2008. sub edx, 3ff0H
  2009. pextrw eax, xmm1, 3
  2010. xor eax, edx
  2011. and eax, 8000H
  2012. cmp eax, 0
  2013. jnz RET_ZERO_UF
  2014. jmp RET_INF_OF
  2015. _CIpow_pentium4 ENDP
  2016. ALIGN 16
  2017. _TEXT ENDS
  2018. END