batcher.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. // batcher.go - Constant time polynomial sampler.
  2. //
  3. // To the extent possible under law, Yawning Angel has waived all copyright
  4. // and related or neighboring rights to newhope, using the Creative
  5. // Commons "CC0" public domain dedication. See LICENSE or
  6. // <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
  7. package newhope
  8. func batcher84(x []uint16) {
  9. // In theory this should probably be inlined.
  10. compareAndSwap := func(x []uint16, i, j int) {
  11. const _5q = 5 * paramQ
  12. var c int32
  13. var t uint16
  14. c = _5q - 1 - int32(x[16*i])
  15. c >>= 31
  16. t = x[16*i] ^ x[16*j]
  17. t &= uint16(c)
  18. x[16*i] ^= t
  19. x[16*j] ^= t
  20. }
  21. compareAndSwap(x, 0, 1)
  22. compareAndSwap(x, 2, 3)
  23. compareAndSwap(x, 0, 2)
  24. compareAndSwap(x, 1, 3)
  25. compareAndSwap(x, 1, 2)
  26. compareAndSwap(x, 4, 5)
  27. compareAndSwap(x, 6, 7)
  28. compareAndSwap(x, 4, 6)
  29. compareAndSwap(x, 5, 7)
  30. compareAndSwap(x, 5, 6)
  31. compareAndSwap(x, 0, 4)
  32. compareAndSwap(x, 2, 6)
  33. compareAndSwap(x, 2, 4)
  34. compareAndSwap(x, 1, 5)
  35. compareAndSwap(x, 3, 7)
  36. compareAndSwap(x, 3, 5)
  37. compareAndSwap(x, 1, 2)
  38. compareAndSwap(x, 3, 4)
  39. compareAndSwap(x, 5, 6)
  40. compareAndSwap(x, 8, 9)
  41. compareAndSwap(x, 10, 11)
  42. compareAndSwap(x, 8, 10)
  43. compareAndSwap(x, 9, 11)
  44. compareAndSwap(x, 9, 10)
  45. compareAndSwap(x, 12, 13)
  46. compareAndSwap(x, 14, 15)
  47. compareAndSwap(x, 12, 14)
  48. compareAndSwap(x, 13, 15)
  49. compareAndSwap(x, 13, 14)
  50. compareAndSwap(x, 8, 12)
  51. compareAndSwap(x, 10, 14)
  52. compareAndSwap(x, 10, 12)
  53. compareAndSwap(x, 9, 13)
  54. compareAndSwap(x, 11, 15)
  55. compareAndSwap(x, 11, 13)
  56. compareAndSwap(x, 9, 10)
  57. compareAndSwap(x, 11, 12)
  58. compareAndSwap(x, 13, 14)
  59. compareAndSwap(x, 0, 8)
  60. compareAndSwap(x, 4, 12)
  61. compareAndSwap(x, 4, 8)
  62. compareAndSwap(x, 2, 10)
  63. compareAndSwap(x, 6, 14)
  64. compareAndSwap(x, 6, 10)
  65. compareAndSwap(x, 2, 4)
  66. compareAndSwap(x, 6, 8)
  67. compareAndSwap(x, 10, 12)
  68. compareAndSwap(x, 1, 9)
  69. compareAndSwap(x, 5, 13)
  70. compareAndSwap(x, 5, 9)
  71. compareAndSwap(x, 3, 11)
  72. compareAndSwap(x, 7, 15)
  73. compareAndSwap(x, 7, 11)
  74. compareAndSwap(x, 3, 5)
  75. compareAndSwap(x, 7, 9)
  76. compareAndSwap(x, 11, 13)
  77. compareAndSwap(x, 1, 2)
  78. compareAndSwap(x, 3, 4)
  79. compareAndSwap(x, 5, 6)
  80. compareAndSwap(x, 7, 8)
  81. compareAndSwap(x, 9, 10)
  82. compareAndSwap(x, 11, 12)
  83. compareAndSwap(x, 13, 14)
  84. compareAndSwap(x, 16, 17)
  85. compareAndSwap(x, 18, 19)
  86. compareAndSwap(x, 16, 18)
  87. compareAndSwap(x, 17, 19)
  88. compareAndSwap(x, 17, 18)
  89. compareAndSwap(x, 20, 21)
  90. compareAndSwap(x, 22, 23)
  91. compareAndSwap(x, 20, 22)
  92. compareAndSwap(x, 21, 23)
  93. compareAndSwap(x, 21, 22)
  94. compareAndSwap(x, 16, 20)
  95. compareAndSwap(x, 18, 22)
  96. compareAndSwap(x, 18, 20)
  97. compareAndSwap(x, 17, 21)
  98. compareAndSwap(x, 19, 23)
  99. compareAndSwap(x, 19, 21)
  100. compareAndSwap(x, 17, 18)
  101. compareAndSwap(x, 19, 20)
  102. compareAndSwap(x, 21, 22)
  103. compareAndSwap(x, 24, 25)
  104. compareAndSwap(x, 26, 27)
  105. compareAndSwap(x, 24, 26)
  106. compareAndSwap(x, 25, 27)
  107. compareAndSwap(x, 25, 26)
  108. compareAndSwap(x, 28, 29)
  109. compareAndSwap(x, 30, 31)
  110. compareAndSwap(x, 28, 30)
  111. compareAndSwap(x, 29, 31)
  112. compareAndSwap(x, 29, 30)
  113. compareAndSwap(x, 24, 28)
  114. compareAndSwap(x, 26, 30)
  115. compareAndSwap(x, 26, 28)
  116. compareAndSwap(x, 25, 29)
  117. compareAndSwap(x, 27, 31)
  118. compareAndSwap(x, 27, 29)
  119. compareAndSwap(x, 25, 26)
  120. compareAndSwap(x, 27, 28)
  121. compareAndSwap(x, 29, 30)
  122. compareAndSwap(x, 16, 24)
  123. compareAndSwap(x, 20, 28)
  124. compareAndSwap(x, 20, 24)
  125. compareAndSwap(x, 18, 26)
  126. compareAndSwap(x, 22, 30)
  127. compareAndSwap(x, 22, 26)
  128. compareAndSwap(x, 18, 20)
  129. compareAndSwap(x, 22, 24)
  130. compareAndSwap(x, 26, 28)
  131. compareAndSwap(x, 17, 25)
  132. compareAndSwap(x, 21, 29)
  133. compareAndSwap(x, 21, 25)
  134. compareAndSwap(x, 19, 27)
  135. compareAndSwap(x, 23, 31)
  136. compareAndSwap(x, 23, 27)
  137. compareAndSwap(x, 19, 21)
  138. compareAndSwap(x, 23, 25)
  139. compareAndSwap(x, 27, 29)
  140. compareAndSwap(x, 17, 18)
  141. compareAndSwap(x, 19, 20)
  142. compareAndSwap(x, 21, 22)
  143. compareAndSwap(x, 23, 24)
  144. compareAndSwap(x, 25, 26)
  145. compareAndSwap(x, 27, 28)
  146. compareAndSwap(x, 29, 30)
  147. compareAndSwap(x, 0, 16)
  148. compareAndSwap(x, 8, 24)
  149. compareAndSwap(x, 8, 16)
  150. compareAndSwap(x, 4, 20)
  151. compareAndSwap(x, 12, 28)
  152. compareAndSwap(x, 12, 20)
  153. compareAndSwap(x, 4, 8)
  154. compareAndSwap(x, 12, 16)
  155. compareAndSwap(x, 20, 24)
  156. compareAndSwap(x, 2, 18)
  157. compareAndSwap(x, 10, 26)
  158. compareAndSwap(x, 10, 18)
  159. compareAndSwap(x, 6, 22)
  160. compareAndSwap(x, 14, 30)
  161. compareAndSwap(x, 14, 22)
  162. compareAndSwap(x, 6, 10)
  163. compareAndSwap(x, 14, 18)
  164. compareAndSwap(x, 22, 26)
  165. compareAndSwap(x, 2, 4)
  166. compareAndSwap(x, 6, 8)
  167. compareAndSwap(x, 10, 12)
  168. compareAndSwap(x, 14, 16)
  169. compareAndSwap(x, 18, 20)
  170. compareAndSwap(x, 22, 24)
  171. compareAndSwap(x, 26, 28)
  172. compareAndSwap(x, 1, 17)
  173. compareAndSwap(x, 9, 25)
  174. compareAndSwap(x, 9, 17)
  175. compareAndSwap(x, 5, 21)
  176. compareAndSwap(x, 13, 29)
  177. compareAndSwap(x, 13, 21)
  178. compareAndSwap(x, 5, 9)
  179. compareAndSwap(x, 13, 17)
  180. compareAndSwap(x, 21, 25)
  181. compareAndSwap(x, 3, 19)
  182. compareAndSwap(x, 11, 27)
  183. compareAndSwap(x, 11, 19)
  184. compareAndSwap(x, 7, 23)
  185. compareAndSwap(x, 15, 31)
  186. compareAndSwap(x, 15, 23)
  187. compareAndSwap(x, 7, 11)
  188. compareAndSwap(x, 15, 19)
  189. compareAndSwap(x, 23, 27)
  190. compareAndSwap(x, 3, 5)
  191. compareAndSwap(x, 7, 9)
  192. compareAndSwap(x, 11, 13)
  193. compareAndSwap(x, 15, 17)
  194. compareAndSwap(x, 19, 21)
  195. compareAndSwap(x, 23, 25)
  196. compareAndSwap(x, 27, 29)
  197. compareAndSwap(x, 1, 2)
  198. compareAndSwap(x, 3, 4)
  199. compareAndSwap(x, 5, 6)
  200. compareAndSwap(x, 7, 8)
  201. compareAndSwap(x, 9, 10)
  202. compareAndSwap(x, 11, 12)
  203. compareAndSwap(x, 13, 14)
  204. compareAndSwap(x, 15, 16)
  205. compareAndSwap(x, 17, 18)
  206. compareAndSwap(x, 19, 20)
  207. compareAndSwap(x, 21, 22)
  208. compareAndSwap(x, 23, 24)
  209. compareAndSwap(x, 25, 26)
  210. compareAndSwap(x, 27, 28)
  211. compareAndSwap(x, 29, 30)
  212. compareAndSwap(x, 32, 33)
  213. compareAndSwap(x, 34, 35)
  214. compareAndSwap(x, 32, 34)
  215. compareAndSwap(x, 33, 35)
  216. compareAndSwap(x, 33, 34)
  217. compareAndSwap(x, 36, 37)
  218. compareAndSwap(x, 38, 39)
  219. compareAndSwap(x, 36, 38)
  220. compareAndSwap(x, 37, 39)
  221. compareAndSwap(x, 37, 38)
  222. compareAndSwap(x, 32, 36)
  223. compareAndSwap(x, 34, 38)
  224. compareAndSwap(x, 34, 36)
  225. compareAndSwap(x, 33, 37)
  226. compareAndSwap(x, 35, 39)
  227. compareAndSwap(x, 35, 37)
  228. compareAndSwap(x, 33, 34)
  229. compareAndSwap(x, 35, 36)
  230. compareAndSwap(x, 37, 38)
  231. compareAndSwap(x, 40, 41)
  232. compareAndSwap(x, 42, 43)
  233. compareAndSwap(x, 40, 42)
  234. compareAndSwap(x, 41, 43)
  235. compareAndSwap(x, 41, 42)
  236. compareAndSwap(x, 44, 45)
  237. compareAndSwap(x, 46, 47)
  238. compareAndSwap(x, 44, 46)
  239. compareAndSwap(x, 45, 47)
  240. compareAndSwap(x, 45, 46)
  241. compareAndSwap(x, 40, 44)
  242. compareAndSwap(x, 42, 46)
  243. compareAndSwap(x, 42, 44)
  244. compareAndSwap(x, 41, 45)
  245. compareAndSwap(x, 43, 47)
  246. compareAndSwap(x, 43, 45)
  247. compareAndSwap(x, 41, 42)
  248. compareAndSwap(x, 43, 44)
  249. compareAndSwap(x, 45, 46)
  250. compareAndSwap(x, 32, 40)
  251. compareAndSwap(x, 36, 44)
  252. compareAndSwap(x, 36, 40)
  253. compareAndSwap(x, 34, 42)
  254. compareAndSwap(x, 38, 46)
  255. compareAndSwap(x, 38, 42)
  256. compareAndSwap(x, 34, 36)
  257. compareAndSwap(x, 38, 40)
  258. compareAndSwap(x, 42, 44)
  259. compareAndSwap(x, 33, 41)
  260. compareAndSwap(x, 37, 45)
  261. compareAndSwap(x, 37, 41)
  262. compareAndSwap(x, 35, 43)
  263. compareAndSwap(x, 39, 47)
  264. compareAndSwap(x, 39, 43)
  265. compareAndSwap(x, 35, 37)
  266. compareAndSwap(x, 39, 41)
  267. compareAndSwap(x, 43, 45)
  268. compareAndSwap(x, 33, 34)
  269. compareAndSwap(x, 35, 36)
  270. compareAndSwap(x, 37, 38)
  271. compareAndSwap(x, 39, 40)
  272. compareAndSwap(x, 41, 42)
  273. compareAndSwap(x, 43, 44)
  274. compareAndSwap(x, 45, 46)
  275. compareAndSwap(x, 48, 49)
  276. compareAndSwap(x, 50, 51)
  277. compareAndSwap(x, 48, 50)
  278. compareAndSwap(x, 49, 51)
  279. compareAndSwap(x, 49, 50)
  280. compareAndSwap(x, 52, 53)
  281. compareAndSwap(x, 54, 55)
  282. compareAndSwap(x, 52, 54)
  283. compareAndSwap(x, 53, 55)
  284. compareAndSwap(x, 53, 54)
  285. compareAndSwap(x, 48, 52)
  286. compareAndSwap(x, 50, 54)
  287. compareAndSwap(x, 50, 52)
  288. compareAndSwap(x, 49, 53)
  289. compareAndSwap(x, 51, 55)
  290. compareAndSwap(x, 51, 53)
  291. compareAndSwap(x, 49, 50)
  292. compareAndSwap(x, 51, 52)
  293. compareAndSwap(x, 53, 54)
  294. compareAndSwap(x, 56, 57)
  295. compareAndSwap(x, 58, 59)
  296. compareAndSwap(x, 56, 58)
  297. compareAndSwap(x, 57, 59)
  298. compareAndSwap(x, 57, 58)
  299. compareAndSwap(x, 60, 61)
  300. compareAndSwap(x, 62, 63)
  301. compareAndSwap(x, 60, 62)
  302. compareAndSwap(x, 61, 63)
  303. compareAndSwap(x, 61, 62)
  304. compareAndSwap(x, 56, 60)
  305. compareAndSwap(x, 58, 62)
  306. compareAndSwap(x, 58, 60)
  307. compareAndSwap(x, 57, 61)
  308. compareAndSwap(x, 59, 63)
  309. compareAndSwap(x, 59, 61)
  310. compareAndSwap(x, 57, 58)
  311. compareAndSwap(x, 59, 60)
  312. compareAndSwap(x, 61, 62)
  313. compareAndSwap(x, 48, 56)
  314. compareAndSwap(x, 52, 60)
  315. compareAndSwap(x, 52, 56)
  316. compareAndSwap(x, 50, 58)
  317. compareAndSwap(x, 54, 62)
  318. compareAndSwap(x, 54, 58)
  319. compareAndSwap(x, 50, 52)
  320. compareAndSwap(x, 54, 56)
  321. compareAndSwap(x, 58, 60)
  322. compareAndSwap(x, 49, 57)
  323. compareAndSwap(x, 53, 61)
  324. compareAndSwap(x, 53, 57)
  325. compareAndSwap(x, 51, 59)
  326. compareAndSwap(x, 55, 63)
  327. compareAndSwap(x, 55, 59)
  328. compareAndSwap(x, 51, 53)
  329. compareAndSwap(x, 55, 57)
  330. compareAndSwap(x, 59, 61)
  331. compareAndSwap(x, 49, 50)
  332. compareAndSwap(x, 51, 52)
  333. compareAndSwap(x, 53, 54)
  334. compareAndSwap(x, 55, 56)
  335. compareAndSwap(x, 57, 58)
  336. compareAndSwap(x, 59, 60)
  337. compareAndSwap(x, 61, 62)
  338. compareAndSwap(x, 32, 48)
  339. compareAndSwap(x, 40, 56)
  340. compareAndSwap(x, 40, 48)
  341. compareAndSwap(x, 36, 52)
  342. compareAndSwap(x, 44, 60)
  343. compareAndSwap(x, 44, 52)
  344. compareAndSwap(x, 36, 40)
  345. compareAndSwap(x, 44, 48)
  346. compareAndSwap(x, 52, 56)
  347. compareAndSwap(x, 34, 50)
  348. compareAndSwap(x, 42, 58)
  349. compareAndSwap(x, 42, 50)
  350. compareAndSwap(x, 38, 54)
  351. compareAndSwap(x, 46, 62)
  352. compareAndSwap(x, 46, 54)
  353. compareAndSwap(x, 38, 42)
  354. compareAndSwap(x, 46, 50)
  355. compareAndSwap(x, 54, 58)
  356. compareAndSwap(x, 34, 36)
  357. compareAndSwap(x, 38, 40)
  358. compareAndSwap(x, 42, 44)
  359. compareAndSwap(x, 46, 48)
  360. compareAndSwap(x, 50, 52)
  361. compareAndSwap(x, 54, 56)
  362. compareAndSwap(x, 58, 60)
  363. compareAndSwap(x, 33, 49)
  364. compareAndSwap(x, 41, 57)
  365. compareAndSwap(x, 41, 49)
  366. compareAndSwap(x, 37, 53)
  367. compareAndSwap(x, 45, 61)
  368. compareAndSwap(x, 45, 53)
  369. compareAndSwap(x, 37, 41)
  370. compareAndSwap(x, 45, 49)
  371. compareAndSwap(x, 53, 57)
  372. compareAndSwap(x, 35, 51)
  373. compareAndSwap(x, 43, 59)
  374. compareAndSwap(x, 43, 51)
  375. compareAndSwap(x, 39, 55)
  376. compareAndSwap(x, 47, 63)
  377. compareAndSwap(x, 47, 55)
  378. compareAndSwap(x, 39, 43)
  379. compareAndSwap(x, 47, 51)
  380. compareAndSwap(x, 55, 59)
  381. compareAndSwap(x, 35, 37)
  382. compareAndSwap(x, 39, 41)
  383. compareAndSwap(x, 43, 45)
  384. compareAndSwap(x, 47, 49)
  385. compareAndSwap(x, 51, 53)
  386. compareAndSwap(x, 55, 57)
  387. compareAndSwap(x, 59, 61)
  388. compareAndSwap(x, 33, 34)
  389. compareAndSwap(x, 35, 36)
  390. compareAndSwap(x, 37, 38)
  391. compareAndSwap(x, 39, 40)
  392. compareAndSwap(x, 41, 42)
  393. compareAndSwap(x, 43, 44)
  394. compareAndSwap(x, 45, 46)
  395. compareAndSwap(x, 47, 48)
  396. compareAndSwap(x, 49, 50)
  397. compareAndSwap(x, 51, 52)
  398. compareAndSwap(x, 53, 54)
  399. compareAndSwap(x, 55, 56)
  400. compareAndSwap(x, 57, 58)
  401. compareAndSwap(x, 59, 60)
  402. compareAndSwap(x, 61, 62)
  403. compareAndSwap(x, 0, 32)
  404. compareAndSwap(x, 16, 48)
  405. compareAndSwap(x, 16, 32)
  406. compareAndSwap(x, 8, 40)
  407. compareAndSwap(x, 24, 56)
  408. compareAndSwap(x, 24, 40)
  409. compareAndSwap(x, 8, 16)
  410. compareAndSwap(x, 24, 32)
  411. compareAndSwap(x, 40, 48)
  412. compareAndSwap(x, 4, 36)
  413. compareAndSwap(x, 20, 52)
  414. compareAndSwap(x, 20, 36)
  415. compareAndSwap(x, 12, 44)
  416. compareAndSwap(x, 28, 60)
  417. compareAndSwap(x, 28, 44)
  418. compareAndSwap(x, 12, 20)
  419. compareAndSwap(x, 28, 36)
  420. compareAndSwap(x, 44, 52)
  421. compareAndSwap(x, 4, 8)
  422. compareAndSwap(x, 12, 16)
  423. compareAndSwap(x, 20, 24)
  424. compareAndSwap(x, 28, 32)
  425. compareAndSwap(x, 36, 40)
  426. compareAndSwap(x, 44, 48)
  427. compareAndSwap(x, 52, 56)
  428. compareAndSwap(x, 2, 34)
  429. compareAndSwap(x, 18, 50)
  430. compareAndSwap(x, 18, 34)
  431. compareAndSwap(x, 10, 42)
  432. compareAndSwap(x, 26, 58)
  433. compareAndSwap(x, 26, 42)
  434. compareAndSwap(x, 10, 18)
  435. compareAndSwap(x, 26, 34)
  436. compareAndSwap(x, 42, 50)
  437. compareAndSwap(x, 6, 38)
  438. compareAndSwap(x, 22, 54)
  439. compareAndSwap(x, 22, 38)
  440. compareAndSwap(x, 14, 46)
  441. compareAndSwap(x, 30, 62)
  442. compareAndSwap(x, 30, 46)
  443. compareAndSwap(x, 14, 22)
  444. compareAndSwap(x, 30, 38)
  445. compareAndSwap(x, 46, 54)
  446. compareAndSwap(x, 6, 10)
  447. compareAndSwap(x, 14, 18)
  448. compareAndSwap(x, 22, 26)
  449. compareAndSwap(x, 30, 34)
  450. compareAndSwap(x, 38, 42)
  451. compareAndSwap(x, 46, 50)
  452. compareAndSwap(x, 54, 58)
  453. compareAndSwap(x, 2, 4)
  454. compareAndSwap(x, 6, 8)
  455. compareAndSwap(x, 10, 12)
  456. compareAndSwap(x, 14, 16)
  457. compareAndSwap(x, 18, 20)
  458. compareAndSwap(x, 22, 24)
  459. compareAndSwap(x, 26, 28)
  460. compareAndSwap(x, 30, 32)
  461. compareAndSwap(x, 34, 36)
  462. compareAndSwap(x, 38, 40)
  463. compareAndSwap(x, 42, 44)
  464. compareAndSwap(x, 46, 48)
  465. compareAndSwap(x, 50, 52)
  466. compareAndSwap(x, 54, 56)
  467. compareAndSwap(x, 58, 60)
  468. compareAndSwap(x, 1, 33)
  469. compareAndSwap(x, 17, 49)
  470. compareAndSwap(x, 17, 33)
  471. compareAndSwap(x, 9, 41)
  472. compareAndSwap(x, 25, 57)
  473. compareAndSwap(x, 25, 41)
  474. compareAndSwap(x, 9, 17)
  475. compareAndSwap(x, 25, 33)
  476. compareAndSwap(x, 41, 49)
  477. compareAndSwap(x, 5, 37)
  478. compareAndSwap(x, 21, 53)
  479. compareAndSwap(x, 21, 37)
  480. compareAndSwap(x, 13, 45)
  481. compareAndSwap(x, 29, 61)
  482. compareAndSwap(x, 29, 45)
  483. compareAndSwap(x, 13, 21)
  484. compareAndSwap(x, 29, 37)
  485. compareAndSwap(x, 45, 53)
  486. compareAndSwap(x, 5, 9)
  487. compareAndSwap(x, 13, 17)
  488. compareAndSwap(x, 21, 25)
  489. compareAndSwap(x, 29, 33)
  490. compareAndSwap(x, 37, 41)
  491. compareAndSwap(x, 45, 49)
  492. compareAndSwap(x, 53, 57)
  493. compareAndSwap(x, 3, 35)
  494. compareAndSwap(x, 19, 51)
  495. compareAndSwap(x, 19, 35)
  496. compareAndSwap(x, 11, 43)
  497. compareAndSwap(x, 27, 59)
  498. compareAndSwap(x, 27, 43)
  499. compareAndSwap(x, 11, 19)
  500. compareAndSwap(x, 27, 35)
  501. compareAndSwap(x, 43, 51)
  502. compareAndSwap(x, 7, 39)
  503. compareAndSwap(x, 23, 55)
  504. compareAndSwap(x, 23, 39)
  505. compareAndSwap(x, 15, 47)
  506. compareAndSwap(x, 31, 63)
  507. compareAndSwap(x, 31, 47)
  508. compareAndSwap(x, 15, 23)
  509. compareAndSwap(x, 31, 39)
  510. compareAndSwap(x, 47, 55)
  511. compareAndSwap(x, 7, 11)
  512. compareAndSwap(x, 15, 19)
  513. compareAndSwap(x, 23, 27)
  514. compareAndSwap(x, 31, 35)
  515. compareAndSwap(x, 39, 43)
  516. compareAndSwap(x, 47, 51)
  517. compareAndSwap(x, 55, 59)
  518. compareAndSwap(x, 3, 5)
  519. compareAndSwap(x, 7, 9)
  520. compareAndSwap(x, 11, 13)
  521. compareAndSwap(x, 15, 17)
  522. compareAndSwap(x, 19, 21)
  523. compareAndSwap(x, 23, 25)
  524. compareAndSwap(x, 27, 29)
  525. compareAndSwap(x, 31, 33)
  526. compareAndSwap(x, 35, 37)
  527. compareAndSwap(x, 39, 41)
  528. compareAndSwap(x, 43, 45)
  529. compareAndSwap(x, 47, 49)
  530. compareAndSwap(x, 51, 53)
  531. compareAndSwap(x, 55, 57)
  532. compareAndSwap(x, 59, 61)
  533. compareAndSwap(x, 1, 2)
  534. compareAndSwap(x, 3, 4)
  535. compareAndSwap(x, 5, 6)
  536. compareAndSwap(x, 7, 8)
  537. compareAndSwap(x, 9, 10)
  538. compareAndSwap(x, 11, 12)
  539. compareAndSwap(x, 13, 14)
  540. compareAndSwap(x, 15, 16)
  541. compareAndSwap(x, 17, 18)
  542. compareAndSwap(x, 19, 20)
  543. compareAndSwap(x, 21, 22)
  544. compareAndSwap(x, 23, 24)
  545. compareAndSwap(x, 25, 26)
  546. compareAndSwap(x, 27, 28)
  547. compareAndSwap(x, 29, 30)
  548. compareAndSwap(x, 31, 32)
  549. compareAndSwap(x, 33, 34)
  550. compareAndSwap(x, 35, 36)
  551. compareAndSwap(x, 37, 38)
  552. compareAndSwap(x, 39, 40)
  553. compareAndSwap(x, 41, 42)
  554. compareAndSwap(x, 43, 44)
  555. compareAndSwap(x, 45, 46)
  556. compareAndSwap(x, 47, 48)
  557. compareAndSwap(x, 49, 50)
  558. compareAndSwap(x, 51, 52)
  559. compareAndSwap(x, 53, 54)
  560. compareAndSwap(x, 55, 56)
  561. compareAndSwap(x, 57, 58)
  562. compareAndSwap(x, 59, 60)
  563. compareAndSwap(x, 61, 62)
  564. compareAndSwap(x, 64, 65)
  565. compareAndSwap(x, 66, 67)
  566. compareAndSwap(x, 64, 66)
  567. compareAndSwap(x, 65, 67)
  568. compareAndSwap(x, 65, 66)
  569. compareAndSwap(x, 68, 69)
  570. compareAndSwap(x, 70, 71)
  571. compareAndSwap(x, 68, 70)
  572. compareAndSwap(x, 69, 71)
  573. compareAndSwap(x, 69, 70)
  574. compareAndSwap(x, 64, 68)
  575. compareAndSwap(x, 66, 70)
  576. compareAndSwap(x, 66, 68)
  577. compareAndSwap(x, 65, 69)
  578. compareAndSwap(x, 67, 71)
  579. compareAndSwap(x, 67, 69)
  580. compareAndSwap(x, 65, 66)
  581. compareAndSwap(x, 67, 68)
  582. compareAndSwap(x, 69, 70)
  583. compareAndSwap(x, 72, 73)
  584. compareAndSwap(x, 74, 75)
  585. compareAndSwap(x, 72, 74)
  586. compareAndSwap(x, 73, 75)
  587. compareAndSwap(x, 73, 74)
  588. compareAndSwap(x, 76, 77)
  589. compareAndSwap(x, 78, 79)
  590. compareAndSwap(x, 76, 78)
  591. compareAndSwap(x, 77, 79)
  592. compareAndSwap(x, 77, 78)
  593. compareAndSwap(x, 72, 76)
  594. compareAndSwap(x, 74, 78)
  595. compareAndSwap(x, 74, 76)
  596. compareAndSwap(x, 73, 77)
  597. compareAndSwap(x, 75, 79)
  598. compareAndSwap(x, 75, 77)
  599. compareAndSwap(x, 73, 74)
  600. compareAndSwap(x, 75, 76)
  601. compareAndSwap(x, 77, 78)
  602. compareAndSwap(x, 64, 72)
  603. compareAndSwap(x, 68, 76)
  604. compareAndSwap(x, 68, 72)
  605. compareAndSwap(x, 66, 74)
  606. compareAndSwap(x, 70, 78)
  607. compareAndSwap(x, 70, 74)
  608. compareAndSwap(x, 66, 68)
  609. compareAndSwap(x, 70, 72)
  610. compareAndSwap(x, 74, 76)
  611. compareAndSwap(x, 65, 73)
  612. compareAndSwap(x, 69, 77)
  613. compareAndSwap(x, 69, 73)
  614. compareAndSwap(x, 67, 75)
  615. compareAndSwap(x, 71, 79)
  616. compareAndSwap(x, 71, 75)
  617. compareAndSwap(x, 67, 69)
  618. compareAndSwap(x, 71, 73)
  619. compareAndSwap(x, 75, 77)
  620. compareAndSwap(x, 65, 66)
  621. compareAndSwap(x, 67, 68)
  622. compareAndSwap(x, 69, 70)
  623. compareAndSwap(x, 71, 72)
  624. compareAndSwap(x, 73, 74)
  625. compareAndSwap(x, 75, 76)
  626. compareAndSwap(x, 77, 78)
  627. compareAndSwap(x, 80, 81)
  628. compareAndSwap(x, 82, 83)
  629. compareAndSwap(x, 80, 82)
  630. compareAndSwap(x, 81, 83)
  631. compareAndSwap(x, 81, 82)
  632. compareAndSwap(x, 81, 82)
  633. compareAndSwap(x, 81, 82)
  634. compareAndSwap(x, 64, 80)
  635. compareAndSwap(x, 72, 80)
  636. compareAndSwap(x, 68, 72)
  637. compareAndSwap(x, 76, 80)
  638. compareAndSwap(x, 66, 82)
  639. compareAndSwap(x, 74, 82)
  640. compareAndSwap(x, 70, 74)
  641. compareAndSwap(x, 78, 82)
  642. compareAndSwap(x, 66, 68)
  643. compareAndSwap(x, 70, 72)
  644. compareAndSwap(x, 74, 76)
  645. compareAndSwap(x, 78, 80)
  646. compareAndSwap(x, 65, 81)
  647. compareAndSwap(x, 73, 81)
  648. compareAndSwap(x, 69, 73)
  649. compareAndSwap(x, 77, 81)
  650. compareAndSwap(x, 67, 83)
  651. compareAndSwap(x, 75, 83)
  652. compareAndSwap(x, 71, 75)
  653. compareAndSwap(x, 79, 83)
  654. compareAndSwap(x, 67, 69)
  655. compareAndSwap(x, 71, 73)
  656. compareAndSwap(x, 75, 77)
  657. compareAndSwap(x, 79, 81)
  658. compareAndSwap(x, 65, 66)
  659. compareAndSwap(x, 67, 68)
  660. compareAndSwap(x, 69, 70)
  661. compareAndSwap(x, 71, 72)
  662. compareAndSwap(x, 73, 74)
  663. compareAndSwap(x, 75, 76)
  664. compareAndSwap(x, 77, 78)
  665. compareAndSwap(x, 79, 80)
  666. compareAndSwap(x, 81, 82)
  667. compareAndSwap(x, 72, 80)
  668. compareAndSwap(x, 68, 72)
  669. compareAndSwap(x, 76, 80)
  670. compareAndSwap(x, 74, 82)
  671. compareAndSwap(x, 70, 74)
  672. compareAndSwap(x, 78, 82)
  673. compareAndSwap(x, 66, 68)
  674. compareAndSwap(x, 70, 72)
  675. compareAndSwap(x, 74, 76)
  676. compareAndSwap(x, 78, 80)
  677. compareAndSwap(x, 73, 81)
  678. compareAndSwap(x, 69, 73)
  679. compareAndSwap(x, 77, 81)
  680. compareAndSwap(x, 75, 83)
  681. compareAndSwap(x, 71, 75)
  682. compareAndSwap(x, 79, 83)
  683. compareAndSwap(x, 67, 69)
  684. compareAndSwap(x, 71, 73)
  685. compareAndSwap(x, 75, 77)
  686. compareAndSwap(x, 79, 81)
  687. compareAndSwap(x, 65, 66)
  688. compareAndSwap(x, 67, 68)
  689. compareAndSwap(x, 69, 70)
  690. compareAndSwap(x, 71, 72)
  691. compareAndSwap(x, 73, 74)
  692. compareAndSwap(x, 75, 76)
  693. compareAndSwap(x, 77, 78)
  694. compareAndSwap(x, 79, 80)
  695. compareAndSwap(x, 81, 82)
  696. compareAndSwap(x, 0, 64)
  697. compareAndSwap(x, 32, 64)
  698. compareAndSwap(x, 16, 80)
  699. compareAndSwap(x, 48, 80)
  700. compareAndSwap(x, 16, 32)
  701. compareAndSwap(x, 48, 64)
  702. compareAndSwap(x, 8, 72)
  703. compareAndSwap(x, 40, 72)
  704. compareAndSwap(x, 24, 40)
  705. compareAndSwap(x, 56, 72)
  706. compareAndSwap(x, 8, 16)
  707. compareAndSwap(x, 24, 32)
  708. compareAndSwap(x, 40, 48)
  709. compareAndSwap(x, 56, 64)
  710. compareAndSwap(x, 72, 80)
  711. compareAndSwap(x, 4, 68)
  712. compareAndSwap(x, 36, 68)
  713. compareAndSwap(x, 20, 36)
  714. compareAndSwap(x, 52, 68)
  715. compareAndSwap(x, 12, 76)
  716. compareAndSwap(x, 44, 76)
  717. compareAndSwap(x, 28, 44)
  718. compareAndSwap(x, 60, 76)
  719. compareAndSwap(x, 12, 20)
  720. compareAndSwap(x, 28, 36)
  721. compareAndSwap(x, 44, 52)
  722. compareAndSwap(x, 60, 68)
  723. compareAndSwap(x, 4, 8)
  724. compareAndSwap(x, 12, 16)
  725. compareAndSwap(x, 20, 24)
  726. compareAndSwap(x, 28, 32)
  727. compareAndSwap(x, 36, 40)
  728. compareAndSwap(x, 44, 48)
  729. compareAndSwap(x, 52, 56)
  730. compareAndSwap(x, 60, 64)
  731. compareAndSwap(x, 68, 72)
  732. compareAndSwap(x, 76, 80)
  733. compareAndSwap(x, 2, 66)
  734. compareAndSwap(x, 34, 66)
  735. compareAndSwap(x, 18, 82)
  736. compareAndSwap(x, 50, 82)
  737. compareAndSwap(x, 18, 34)
  738. compareAndSwap(x, 50, 66)
  739. compareAndSwap(x, 10, 74)
  740. compareAndSwap(x, 42, 74)
  741. compareAndSwap(x, 26, 42)
  742. compareAndSwap(x, 58, 74)
  743. compareAndSwap(x, 10, 18)
  744. compareAndSwap(x, 26, 34)
  745. compareAndSwap(x, 42, 50)
  746. compareAndSwap(x, 58, 66)
  747. compareAndSwap(x, 74, 82)
  748. compareAndSwap(x, 6, 70)
  749. compareAndSwap(x, 38, 70)
  750. compareAndSwap(x, 22, 38)
  751. compareAndSwap(x, 54, 70)
  752. compareAndSwap(x, 14, 78)
  753. compareAndSwap(x, 46, 78)
  754. compareAndSwap(x, 30, 46)
  755. compareAndSwap(x, 62, 78)
  756. compareAndSwap(x, 14, 22)
  757. compareAndSwap(x, 30, 38)
  758. compareAndSwap(x, 46, 54)
  759. compareAndSwap(x, 62, 70)
  760. compareAndSwap(x, 6, 10)
  761. compareAndSwap(x, 14, 18)
  762. compareAndSwap(x, 22, 26)
  763. compareAndSwap(x, 30, 34)
  764. compareAndSwap(x, 38, 42)
  765. compareAndSwap(x, 46, 50)
  766. compareAndSwap(x, 54, 58)
  767. compareAndSwap(x, 62, 66)
  768. compareAndSwap(x, 70, 74)
  769. compareAndSwap(x, 78, 82)
  770. compareAndSwap(x, 2, 4)
  771. compareAndSwap(x, 6, 8)
  772. compareAndSwap(x, 10, 12)
  773. compareAndSwap(x, 14, 16)
  774. compareAndSwap(x, 18, 20)
  775. compareAndSwap(x, 22, 24)
  776. compareAndSwap(x, 26, 28)
  777. compareAndSwap(x, 30, 32)
  778. compareAndSwap(x, 34, 36)
  779. compareAndSwap(x, 38, 40)
  780. compareAndSwap(x, 42, 44)
  781. compareAndSwap(x, 46, 48)
  782. compareAndSwap(x, 50, 52)
  783. compareAndSwap(x, 54, 56)
  784. compareAndSwap(x, 58, 60)
  785. compareAndSwap(x, 62, 64)
  786. compareAndSwap(x, 66, 68)
  787. compareAndSwap(x, 70, 72)
  788. compareAndSwap(x, 74, 76)
  789. compareAndSwap(x, 78, 80)
  790. compareAndSwap(x, 1, 65)
  791. compareAndSwap(x, 33, 65)
  792. compareAndSwap(x, 17, 81)
  793. compareAndSwap(x, 49, 81)
  794. compareAndSwap(x, 17, 33)
  795. compareAndSwap(x, 49, 65)
  796. compareAndSwap(x, 9, 73)
  797. compareAndSwap(x, 41, 73)
  798. compareAndSwap(x, 25, 41)
  799. compareAndSwap(x, 57, 73)
  800. compareAndSwap(x, 9, 17)
  801. compareAndSwap(x, 25, 33)
  802. compareAndSwap(x, 41, 49)
  803. compareAndSwap(x, 57, 65)
  804. compareAndSwap(x, 73, 81)
  805. compareAndSwap(x, 5, 69)
  806. compareAndSwap(x, 37, 69)
  807. compareAndSwap(x, 21, 37)
  808. compareAndSwap(x, 53, 69)
  809. compareAndSwap(x, 13, 77)
  810. compareAndSwap(x, 45, 77)
  811. compareAndSwap(x, 29, 45)
  812. compareAndSwap(x, 61, 77)
  813. compareAndSwap(x, 13, 21)
  814. compareAndSwap(x, 29, 37)
  815. compareAndSwap(x, 45, 53)
  816. compareAndSwap(x, 61, 69)
  817. compareAndSwap(x, 5, 9)
  818. compareAndSwap(x, 13, 17)
  819. compareAndSwap(x, 21, 25)
  820. compareAndSwap(x, 29, 33)
  821. compareAndSwap(x, 37, 41)
  822. compareAndSwap(x, 45, 49)
  823. compareAndSwap(x, 53, 57)
  824. compareAndSwap(x, 61, 65)
  825. compareAndSwap(x, 69, 73)
  826. compareAndSwap(x, 77, 81)
  827. compareAndSwap(x, 3, 67)
  828. compareAndSwap(x, 35, 67)
  829. compareAndSwap(x, 19, 83)
  830. compareAndSwap(x, 51, 83)
  831. compareAndSwap(x, 19, 35)
  832. compareAndSwap(x, 51, 67)
  833. compareAndSwap(x, 11, 75)
  834. compareAndSwap(x, 43, 75)
  835. compareAndSwap(x, 27, 43)
  836. compareAndSwap(x, 59, 75)
  837. compareAndSwap(x, 11, 19)
  838. compareAndSwap(x, 27, 35)
  839. compareAndSwap(x, 43, 51)
  840. compareAndSwap(x, 59, 67)
  841. compareAndSwap(x, 75, 83)
  842. compareAndSwap(x, 7, 71)
  843. compareAndSwap(x, 39, 71)
  844. compareAndSwap(x, 23, 39)
  845. compareAndSwap(x, 55, 71)
  846. compareAndSwap(x, 15, 79)
  847. compareAndSwap(x, 47, 79)
  848. compareAndSwap(x, 31, 47)
  849. compareAndSwap(x, 63, 79)
  850. compareAndSwap(x, 15, 23)
  851. compareAndSwap(x, 31, 39)
  852. compareAndSwap(x, 47, 55)
  853. compareAndSwap(x, 63, 71)
  854. compareAndSwap(x, 7, 11)
  855. compareAndSwap(x, 15, 19)
  856. compareAndSwap(x, 23, 27)
  857. compareAndSwap(x, 31, 35)
  858. compareAndSwap(x, 39, 43)
  859. compareAndSwap(x, 47, 51)
  860. compareAndSwap(x, 55, 59)
  861. compareAndSwap(x, 63, 67)
  862. compareAndSwap(x, 71, 75)
  863. compareAndSwap(x, 79, 83)
  864. compareAndSwap(x, 3, 5)
  865. compareAndSwap(x, 7, 9)
  866. compareAndSwap(x, 11, 13)
  867. compareAndSwap(x, 15, 17)
  868. compareAndSwap(x, 19, 21)
  869. compareAndSwap(x, 23, 25)
  870. compareAndSwap(x, 27, 29)
  871. compareAndSwap(x, 31, 33)
  872. compareAndSwap(x, 35, 37)
  873. compareAndSwap(x, 39, 41)
  874. compareAndSwap(x, 43, 45)
  875. compareAndSwap(x, 47, 49)
  876. compareAndSwap(x, 51, 53)
  877. compareAndSwap(x, 55, 57)
  878. compareAndSwap(x, 59, 61)
  879. compareAndSwap(x, 63, 65)
  880. compareAndSwap(x, 67, 69)
  881. compareAndSwap(x, 71, 73)
  882. compareAndSwap(x, 75, 77)
  883. compareAndSwap(x, 79, 81)
  884. compareAndSwap(x, 1, 2)
  885. compareAndSwap(x, 3, 4)
  886. compareAndSwap(x, 5, 6)
  887. compareAndSwap(x, 7, 8)
  888. compareAndSwap(x, 9, 10)
  889. compareAndSwap(x, 11, 12)
  890. compareAndSwap(x, 13, 14)
  891. compareAndSwap(x, 15, 16)
  892. compareAndSwap(x, 17, 18)
  893. compareAndSwap(x, 19, 20)
  894. compareAndSwap(x, 21, 22)
  895. compareAndSwap(x, 23, 24)
  896. compareAndSwap(x, 25, 26)
  897. compareAndSwap(x, 27, 28)
  898. compareAndSwap(x, 29, 30)
  899. compareAndSwap(x, 31, 32)
  900. compareAndSwap(x, 33, 34)
  901. compareAndSwap(x, 35, 36)
  902. compareAndSwap(x, 37, 38)
  903. compareAndSwap(x, 39, 40)
  904. compareAndSwap(x, 41, 42)
  905. compareAndSwap(x, 43, 44)
  906. compareAndSwap(x, 45, 46)
  907. compareAndSwap(x, 47, 48)
  908. compareAndSwap(x, 49, 50)
  909. compareAndSwap(x, 51, 52)
  910. compareAndSwap(x, 53, 54)
  911. compareAndSwap(x, 55, 56)
  912. compareAndSwap(x, 57, 58)
  913. compareAndSwap(x, 59, 60)
  914. compareAndSwap(x, 61, 62)
  915. compareAndSwap(x, 63, 64)
  916. compareAndSwap(x, 65, 66)
  917. compareAndSwap(x, 67, 68)
  918. compareAndSwap(x, 69, 70)
  919. compareAndSwap(x, 71, 72)
  920. compareAndSwap(x, 73, 74)
  921. compareAndSwap(x, 75, 76)
  922. compareAndSwap(x, 77, 78)
  923. compareAndSwap(x, 79, 80)
  924. compareAndSwap(x, 81, 82)
  925. }