{"action":"created","comment":{"url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/comments/212828476","pull_request_review_id":149540476,"id":212828476,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMjgyODQ3Ng==","diff_hunk":"@@ -0,0 +1,2408 @@\n+// +build arm64,!noasm\n+\n+#include \"textflag.h\"\n+\n+TEXT ·fp751ConditionalSwap(SB), NOSPLIT, $0-17\n+\tMOVD\tx+0(FP), R0\n+\tMOVD\ty+8(FP), R1\n+\tMOVB\tchoice+16(FP), R2\n+\n+\t// Set flags\n+\t// If choice is not 0 or 1, this implementation will swap completely\n+\tCMP\t$0, R2\n+\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 0(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 0(R1)\n+\n+\tLDP\t16(R0), (R3, R4)\n+\tLDP\t16(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 16(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 16(R1)\n+\n+\tLDP\t32(R0), (R3, R4)\n+\tLDP\t32(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 32(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 32(R1)\n+\n+\tLDP\t48(R0), (R3, R4)\n+\tLDP\t48(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 48(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 48(R1)\n+\n+\tLDP\t64(R0), (R3, R4)\n+\tLDP\t64(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 64(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 64(R1)\n+\n+\tLDP\t80(R0), (R3, R4)\n+\tLDP\t80(R1), (R5, R6)\n+\tCSEL\tEQ, R3, R5, R7\n+\tCSEL\tEQ, R4, R6, R8\n+\tSTP\t(R7, R8), 80(R0)\n+\tCSEL\tNE, R3, R5, R9\n+\tCSEL\tNE, R4, R6, R10\n+\tSTP\t(R9, R10), 80(R1)\n+\n+\tRET\n+\n+TEXT ·fp751AddReduced(SB), NOSPLIT, $0-24\n+\tMOVD\tz+0(FP), R2\n+\tMOVD\tx+8(FP), R0\n+\tMOVD\ty+16(FP), R1\n+\n+\t// Load first summand into R3-R14\n+\t// Add first summand and second summand and store result in R3-R14\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R15, R16)\n+\tLDP\t16(R0), (R5, R6)\n+\tLDP\t16(R1), (R17, R19)\n+\tADDS\tR15, R3\n+\tADCS\tR16, R4\n+\tADCS\tR17, R5\n+\tADCS\tR19, R6\n+\n+\tLDP\t32(R0), (R7, R8)\n+\tLDP\t32(R1), (R15, R16)\n+\tLDP\t48(R0), (R9, R10)\n+\tLDP\t48(R1), (R17, R19)\n+\tADCS\tR15, R7\n+\tADCS\tR16, R8\n+\tADCS\tR17, R9\n+\tADCS\tR19, R10\n+\n+\tLDP\t64(R0), (R11, R12)\n+\tLDP\t64(R1), (R15, R16)\n+\tLDP\t80(R0), (R13, R14)\n+\tLDP\t80(R1), (R17, R19)\n+\tADCS\tR15, R11\n+\tADCS\tR16, R12\n+\tADCS\tR17, R13\n+\tADC\tR19, R14\n+\n+\t// Subtract 2 * p751 in R15-R24 from the result in R3-R14\n+\tLDP\t·p751x2+0(SB), (R15, R16)\n+\tSUBS\tR15, R3\n+\tSBCS\tR16, R4\n+\tLDP\t·p751x2+40(SB), (R17, R19)\n+\tSBCS\tR16, R5\n+\tSBCS\tR16, R6\n+\tSBCS\tR16, R7\n+\tLDP\t·p751x2+56(SB), (R20, R21)\n+\tSBCS\tR17, R8\n+\tSBCS\tR19, R9\n+\tLDP\t·p751x2+72(SB), (R22, R23)\n+\tSBCS\tR20, R10\n+\tSBCS\tR21, R11\n+\tMOVD\t·p751x2+88(SB), R24\n+\tSBCS\tR22, R12\n+\tSBCS\tR23, R13\n+\tSBCS\tR24, R14\n+\tSBC\tZR, ZR, R25\n+\n+\t// Add 2 * p751 back but anded with the mask in R25\n+\tAND\tR25, R15\n+\tAND\tR25, R16\n+\tAND \tR25, R17\n+\tAND\tR25, R19\n+\tAND\tR25, R20\n+\tAND\tR25, R21\n+\tAND \tR25, R22\n+\tAND\tR25, R23\n+\tAND\tR25, R24\n+\n+\tADDS\tR15, R3\n+\tADCS\tR16, R4\n+\tSTP\t(R3, R4), 0(R2)\n+\tADCS\tR16, R5\n+\tADCS\tR16, R6\n+\tSTP\t(R5, R6), 16(R2)\n+\tADCS\tR16, R7\n+\tADCS\tR17, R8\n+\tSTP\t(R7, R8), 32(R2)\n+\tADCS\tR19, R9\n+\tADCS\tR20, R10\n+\tSTP\t(R9, R10), 48(R2)\n+\tADCS\tR21, R11\n+\tADCS\tR22, R12\n+\tSTP\t(R11, R12), 64(R2)\n+\tADCS\tR23, R13\n+\tADC\tR24, R14\n+\tSTP\t(R13, R14), 80(R2)\n+\n+\tRET\n+\n+TEXT ·fp751SubReduced(SB), NOSPLIT, $0-24\n+\tMOVD\tz+0(FP), R2\n+\tMOVD\tx+8(FP), R0\n+\tMOVD\ty+16(FP), R1\n+\n+\t// Load x into R3-R14\n+\t// Subtract y from x and store result in R3-R14\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R15, R16)\n+\tLDP\t16(R0), (R5, R6)\n+\tLDP\t16(R1), (R17, R19)\n+\tSUBS\tR15, R3\n+\tSBCS\tR16, R4\n+\tSBCS\tR17, R5\n+\tSBCS\tR19, R6\n+\n+\tLDP\t32(R0), (R7, R8)\n+\tLDP\t32(R1), (R15, R16)\n+\tLDP\t48(R0), (R9, R10)\n+\tLDP\t48(R1), (R17, R19)\n+\tSBCS\tR15, R7\n+\tSBCS\tR16, R8\n+\tSBCS\tR17, R9\n+\tSBCS\tR19, R10\n+\n+\tLDP\t64(R0), (R11, R12)\n+\tLDP\t64(R1), (R15, R16)\n+\tLDP\t80(R0), (R13, R14)\n+\tLDP\t80(R1), (R17, R19)\n+\tSBCS\tR15, R11\n+\tSBCS\tR16, R12\n+\tSBCS\tR17, R13\n+\tSBCS\tR19, R14\n+\tSBC\tZR, ZR, R15\n+\n+\t// Add 2 * p751 back but anded with the mask in R15\n+\tLDP\t·p751x2+0(SB), (R16, R17)\n+\tAND\tR15, R16\n+\tAND\tR15, R17\n+\tLDP\t·p751x2+40(SB), (R19, R20)\n+\tAND\tR15, R19\n+\tAND\tR15, R20\n+\n+\tADDS\tR16, R3\n+\tADCS\tR17, R4\n+\tSTP\t(R3, R4), 0(R2)\n+\tADCS\tR17, R5\n+\tADCS\tR17, R6\n+\tSTP\t(R5, R6), 16(R2)\n+\tADCS\tR17, R7\n+\tADCS\tR19, R8\n+\tSTP\t(R7, R8), 32(R2)\n+\tADCS\tR20, R9\n+\n+\tLDP\t·p751x2+56(SB), (R16, R17)\n+\tAND\tR15, R16\n+\tAND\tR15, R17\n+\tLDP\t·p751x2+72(SB), (R19, R20)\n+\tAND\tR15, R19\n+\tAND\tR15, R20\n+\n+\tADCS\tR16, R10\n+\tSTP\t(R9, R10), 48(R2)\n+\tADCS\tR17, R11\n+\tADCS\tR19, R12\n+\tSTP\t(R11, R12), 64(R2)\n+\tADCS\tR20, R13\n+\n+\tMOVD\t·p751x2+88(SB), R16\n+\tAND\tR15, R16\n+\tADC\tR16, R14\n+\tSTP\t(R13, R14), 80(R2)\n+\n+\tRET\n+\n+TEXT ·fp751AddLazy(SB), NOSPLIT, $0-24\n+\tMOVD\tz+0(FP), R2\n+\tMOVD\tx+8(FP), R0\n+\tMOVD\ty+16(FP), R1\n+\n+\t// Load first summand into R3-R14\n+\t// Add first summand and second summand and store result in R3-R14\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R15, R16)\n+\tLDP\t16(R0), (R5, R6)\n+\tLDP\t16(R1), (R17, R19)\n+\tADDS\tR15, R3\n+\tADCS\tR16, R4\n+\tSTP\t(R3, R4), 0(R2)\n+\tADCS\tR17, R5\n+\tADCS\tR19, R6\n+\tSTP\t(R5, R6), 16(R2)\n+\n+\tLDP\t32(R0), (R7, R8)\n+\tLDP\t32(R1), (R15, R16)\n+\tLDP\t48(R0), (R9, R10)\n+\tLDP\t48(R1), (R17, R19)\n+\tADCS\tR15, R7\n+\tADCS\tR16, R8\n+\tSTP\t(R7, R8), 32(R2)\n+\tADCS\tR17, R9\n+\tADCS\tR19, R10\n+\tSTP\t(R9, R10), 48(R2)\n+\n+\tLDP\t64(R0), (R11, R12)\n+\tLDP\t64(R1), (R15, R16)\n+\tLDP\t80(R0), (R13, R14)\n+\tLDP\t80(R1), (R17, R19)\n+\tADCS\tR15, R11\n+\tADCS\tR16, R12\n+\tSTP\t(R11, R12), 64(R2)\n+\tADCS\tR17, R13\n+\tADC\tR19, R14\n+\tSTP\t(R13, R14), 80(R2)\n+\n+\tRET\n+\n+TEXT ·fp751X2AddLazy(SB), NOSPLIT, $0-24\n+\tMOVD\tz+0(FP), R2\n+\tMOVD\tx+8(FP), R0\n+\tMOVD\ty+16(FP), R1\n+\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R15, R16)\n+\tLDP\t16(R0), (R5, R6)\n+\tLDP\t16(R1), (R17, R19)\n+\tADDS\tR15, R3\n+\tADCS\tR16, R4\n+\tSTP\t(R3, R4), 0(R2)\n+\tADCS\tR17, R5\n+\tADCS\tR19, R6\n+\tSTP\t(R5, R6), 16(R2)\n+\n+\tLDP\t32(R0), (R7, R8)\n+\tLDP\t32(R1), (R15, R16)\n+\tLDP\t48(R0), (R9, R10)\n+\tLDP\t48(R1), (R17, R19)\n+\tADCS\tR15, R7\n+\tADCS\tR16, R8\n+\tSTP\t(R7, R8), 32(R2)\n+\tADCS\tR17, R9\n+\tADCS\tR19, R10\n+\tSTP\t(R9, R10), 48(R2)\n+\n+\tLDP\t64(R0), (R11, R12)\n+\tLDP\t64(R1), (R15, R16)\n+\tLDP\t80(R0), (R13, R14)\n+\tLDP\t80(R1), (R17, R19)\n+\tADCS\tR15, R11\n+\tADCS\tR16, R12\n+\tSTP\t(R11, R12), 64(R2)\n+\tADCS\tR17, R13\n+\tADCS\tR19, R14\n+\tSTP\t(R13, R14), 80(R2)\n+\n+\tLDP\t96(R0), (R3, R4)\n+\tLDP\t96(R1), (R15, R16)\n+\tLDP\t112(R0), (R5, R6)\n+\tLDP\t112(R1), (R17, R19)\n+\tADCS\tR15, R3\n+\tADCS\tR16, R4\n+\tSTP\t(R3, R4), 96(R2)\n+\tADCS\tR17, R5\n+\tADCS\tR19, R6\n+\tSTP\t(R5, R6), 112(R2)\n+\n+\tLDP\t128(R0), (R7, R8)\n+\tLDP\t128(R1), (R15, R16)\n+\tLDP\t144(R0), (R9, R10)\n+\tLDP\t144(R1), (R17, R19)\n+\tADCS\tR15, R7\n+\tADCS\tR16, R8\n+\tSTP\t(R7, R8), 128(R2)\n+\tADCS\tR17, R9\n+\tADCS\tR19, R10\n+\tSTP\t(R9, R10), 144(R2)\n+\n+\tLDP\t160(R0), (R11, R12)\n+\tLDP\t160(R1), (R15, R16)\n+\tLDP\t176(R0), (R13, R14)\n+\tLDP\t176(R1), (R17, R19)\n+\tADCS\tR15, R11\n+\tADCS\tR16, R12\n+\tSTP\t(R11, R12), 160(R2)\n+\tADCS\tR17, R13\n+\tADC\tR19, R14\n+\tSTP\t(R13, R14), 176(R2)\n+\n+\tRET\n+\n+TEXT ·fp751X2SubLazy(SB), NOSPLIT, $0-24\n+\tMOVD\tz+0(FP), R2\n+\tMOVD\tx+8(FP), R0\n+\tMOVD\ty+16(FP), R1\n+\n+\tLDP\t0(R0), (R3, R4)\n+\tLDP\t0(R1), (R15, R16)\n+\tLDP\t16(R0), (R5, R6)\n+\tLDP\t16(R1), (R17, R19)\n+\tSUBS\tR15, R3\n+\tSBCS\tR16, R4\n+\tSTP\t(R3, R4), 0(R2)\n+\tSBCS\tR17, R5\n+\tSBCS\tR19, R6\n+\tSTP\t(R5, R6), 16(R2)\n+\n+\tLDP\t32(R0), (R7, R8)\n+\tLDP\t32(R1), (R15, R16)\n+\tLDP\t48(R0), (R9, R10)\n+\tLDP\t48(R1), (R17, R19)\n+\tSBCS\tR15, R7\n+\tSBCS\tR16, R8\n+\tSTP\t(R7, R8), 32(R2)\n+\tSBCS\tR17, R9\n+\tSBCS\tR19, R10\n+\tSTP\t(R9, R10), 48(R2)\n+\n+\tLDP\t64(R0), (R11, R12)\n+\tLDP\t64(R1), (R15, R16)\n+\tLDP\t80(R0), (R13, R14)\n+\tLDP\t80(R1), (R17, R19)\n+\tSBCS\tR15, R11\n+\tSBCS\tR16, R12\n+\tSTP\t(R11, R12), 64(R2)\n+\tSBCS\tR17, R13\n+\tSBCS\tR19, R14\n+\tSTP\t(R13, R14), 80(R2)\n+\n+\tLDP\t96(R0), (R3, R4)\n+\tLDP\t96(R1), (R15, R16)\n+\tLDP\t112(R0), (R5, R6)\n+\tLDP\t112(R1), (R17, R19)\n+\tSBCS\tR15, R3\n+\tSBCS\tR16, R4\n+\tSBCS\tR17, R5\n+\tSBCS\tR19, R6\n+\n+\tLDP\t128(R0), (R7, R8)\n+\tLDP\t128(R1), (R15, R16)\n+\tLDP\t144(R0), (R9, R10)\n+\tLDP\t144(R1), (R17, R19)\n+\tSBCS\tR15, R7\n+\tSBCS\tR16, R8\n+\tSBCS\tR17, R9\n+\tSBCS\tR19, R10\n+\n+\tLDP\t160(R0), (R11, R12)\n+\tLDP\t160(R1), (R15, R16)\n+\tLDP\t176(R0), (R13, R14)\n+\tLDP\t176(R1), (R17, R19)\n+\tSBCS\tR15, R11\n+\tSBCS\tR16, R12\n+\tSBCS\tR17, R13\n+\tSBCS\tR19, R14\n+\tSBC\tZR, ZR, R15\n+\n+\t// Add p751 back but anded with the mask in R15\n+\tMOVD\t·p751+0(SB), R20\n+\tAND\tR15, R20\n+\tLDP\t·p751+40(SB), (R16, R17)\n+\tADDS\tR20, R3\n+\tADCS\tR20, R4\n+\tSTP\t(R3, R4), 96(R2)\n+\tADCS\tR20, R5\n+\tADCS\tR20, R6\n+\tSTP\t(R5, R6), 112(R2)\n+\tADCS\tR20, R7\n+\n+\tLDP\t·p751+56(SB), (R19, R20)\n+\tAND\tR15, R16\n+\tAND \tR15, R17\n+\tADCS\tR16, R8\n+\tSTP\t(R7, R8), 128(R2)\n+\tADCS\tR17, R9\n+\n+\tLDP\t·p751+72(SB), (R16, R17)\n+\tAND\tR15, R19\n+\tAND\tR15, R20\n+\tADCS\tR19, R10\n+\tSTP\t(R9, R10), 144(R2)\n+\tADCS\tR20, R11\n+\n+\tMOVD\t·p751+88(SB), R19\n+\tAND \tR15, R16\n+\tAND \tR15, R17\n+\tADCS\tR16, R12\n+\tSTP\t(R11, R12), 160(R2)\n+\tADCS\tR17, R13\n+\n+\tAND\tR15, R19\n+\tADC\tR19, R14\n+\tSTP\t(R13, R14), 176(R2)\n+\n+\tRET\n+\n+TEXT ·fp751Mul(SB), $0-24","path":"p751toolbox/field_arm64.s","position":451,"original_position":451,"commit_id":"447e3f468d610aac2e263ab92c23ca5506dfeaad","original_commit_id":"447e3f468d610aac2e263ab92c23ca5506dfeaad","user":{"login":"henrydcase","id":1159844,"node_id":"MDQ6VXNlcjExNTk4NDQ=","avatar_url":"https://avatars0.githubusercontent.com/u/1159844?v=4","gravatar_id":"","url":"https://api.github.com/users/henrydcase","html_url":"https://github.com/henrydcase","followers_url":"https://api.github.com/users/henrydcase/followers","following_url":"https://api.github.com/users/henrydcase/following{/other_user}","gists_url":"https://api.github.com/users/henrydcase/gists{/gist_id}","starred_url":"https://api.github.com/users/henrydcase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrydcase/subscriptions","organizations_url":"https://api.github.com/users/henrydcase/orgs","repos_url":"https://api.github.com/users/henrydcase/repos","events_url":"https://api.github.com/users/henrydcase/events{/privacy}","received_events_url":"https://api.github.com/users/henrydcase/received_events","type":"User","site_admin":false},"body":"Can you put comment saying that it is using variant of comba meth.?\r\nMore comments in general would be useful","created_at":"2018-08-26T14:37:39Z","updated_at":"2018-08-26T14:37:39Z","html_url":"https://github.com/cloudflare/p751sidh/pull/10#discussion_r212828476","pull_request_url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/comments/212828476"},"html":{"href":"https://github.com/cloudflare/p751sidh/pull/10#discussion_r212828476"},"pull_request":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10","id":210764955,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEwNzY0OTU1","html_url":"https://github.com/cloudflare/p751sidh/pull/10","diff_url":"https://github.com/cloudflare/p751sidh/pull/10.diff","patch_url":"https://github.com/cloudflare/p751sidh/pull/10.patch","issue_url":"https://api.github.com/repos/cloudflare/p751sidh/issues/10","number":10,"state":"open","locked":false,"title":"p751: add field arithmetic in assembly for arm64","user":{"login":"Ko-","id":3865731,"node_id":"MDQ6VXNlcjM4NjU3MzE=","avatar_url":"https://avatars0.githubusercontent.com/u/3865731?v=4","gravatar_id":"","url":"https://api.github.com/users/Ko-","html_url":"https://github.com/Ko-","followers_url":"https://api.github.com/users/Ko-/followers","following_url":"https://api.github.com/users/Ko-/following{/other_user}","gists_url":"https://api.github.com/users/Ko-/gists{/gist_id}","starred_url":"https://api.github.com/users/Ko-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ko-/subscriptions","organizations_url":"https://api.github.com/users/Ko-/orgs","repos_url":"https://api.github.com/users/Ko-/repos","events_url":"https://api.github.com/users/Ko-/events{/privacy}","received_events_url":"https://api.github.com/users/Ko-/received_events","type":"User","site_admin":false},"body":"This adds an assembly implementation of the field arithmetic for `p751` for the `arm64` architecture. The following benchmark was done on a Qualcomm server, comparing the generic Go implementation in `field_generic.go` to this assembly implementation that can be found in in `field_arm64.s`:\r\n\r\nGeneric Go implementation:\r\n```\r\n$ GO=/home/ko/go-1.10/bin/go NOASM=1 make bench\r\n(...)\r\ngoos: linux\r\ngoarch: arm64\r\nBenchmarkThreePointLadder379BitScalar-46              30      42578197 ns/op\r\nBenchmarkR2L379BitScalar-46                           30      42336612 ns/op\r\nBenchmarkExtensionFieldElementMul-46              200000          9876 ns/op\r\nBenchmarkExtensionFieldElementInv-46                 500       3333384 ns/op\r\nBenchmarkExtensionFieldElementSquare-46           200000          7400 ns/op\r\nBenchmarkExtensionFieldElementAdd-46            10000000           192 ns/op\r\nBenchmarkExtensionFieldElementSub-46            10000000           137 ns/op\r\nBenchmarkPrimeFieldElementMul-46                  500000          3716 ns/op\r\nBenchmarkPrimeFieldElementInv-46                     500       3338189 ns/op\r\nBenchmarkPrimeFieldElementSqrt-46                    500       3336501 ns/op\r\nBenchmarkPrimeFieldElementSquare-46               500000          3728 ns/op\r\nBenchmarkPrimeFieldElementAdd-46                20000000            97.0 ns/op\r\nBenchmarkPrimeFieldElementSub-46                20000000            70.1 ns/op\r\nBenchmarkFp751Multiply-46                        1000000          2067 ns/op\r\nBenchmarkFp751MontgomeryReduce-46                1000000          1638 ns/op\r\nBenchmarkFp751AddReduced-46                     20000000            95.8 ns/op\r\nBenchmarkFp751SubReduced-46                     20000000            67.9 ns/op\r\nBenchmarkFp751ConditionalSwap-46                30000000            52.1 ns/op\r\nBenchmarkFp751StrongReduce-46                   20000000            64.5 ns/op\r\nBenchmarkFp751AddLazy-46                        50000000            30.9 ns/op\r\nBenchmarkFp751X2AddLazy-46                      30000000            58.5 ns/op\r\nBenchmarkFp751X2SubLazy-46                      20000000           106 ns/op\r\nPASS\r\n(...)\r\nBenchmarkSidhKeyAgreement-46               3     395807957 ns/op\r\nBenchmarkAliceKeyGenPrv-46           1000000          1073 ns/op\r\nBenchmarkBobKeyGenPrv-46             1000000          2263 ns/op\r\nBenchmarkAliceKeyGenPub-46                 5     220176419 ns/op\r\nBenchmarkBobKeyGenPub-46                   5     248311708 ns/op\r\nBenchmarkSharedSecretAlice-46             10     183228186 ns/op\r\nBenchmarkSharedSecretBob-46                5     212705547 ns/op\r\nPASS\r\n(...)\r\n```\r\n\r\nAssembly implementation:\r\n```\r\n$ GO=/home/ko/go-1.10/bin/go make bench\r\n(...)\r\nBenchmarkThreePointLadder379BitScalar-46             500       3324228 ns/op\r\nBenchmarkR2L379BitScalar-46                          500       3324581 ns/op\r\nBenchmarkExtensionFieldElementMul-46             2000000           737 ns/op\r\nBenchmarkExtensionFieldElementInv-46               10000        228631 ns/op\r\nBenchmarkExtensionFieldElementSquare-46          3000000           564 ns/op\r\nBenchmarkExtensionFieldElementAdd-46            50000000            39.4 ns/op\r\nBenchmarkExtensionFieldElementSub-46            50000000            32.0 ns/op\r\nBenchmarkPrimeFieldElementMul-46                 5000000           251 ns/op\r\nBenchmarkPrimeFieldElementInv-46                   10000        227728 ns/op\r\nBenchmarkPrimeFieldElementSqrt-46                  10000        227221 ns/op\r\nBenchmarkPrimeFieldElementSquare-46              5000000           251 ns/op\r\nBenchmarkPrimeFieldElementAdd-46                100000000           22.0 ns/op\r\nBenchmarkPrimeFieldElementSub-46                100000000           17.8 ns/op\r\nBenchmarkFp751Multiply-46                       10000000           142 ns/op\r\nBenchmarkFp751MontgomeryReduce-46               20000000            98.0 ns/op\r\nBenchmarkFp751AddReduced-46                     100000000           17.4 ns/op\r\nBenchmarkFp751SubReduced-46                     100000000           14.4 ns/op\r\nBenchmarkFp751ConditionalSwap-46                100000000           21.4 ns/op\r\nBenchmarkFp751StrongReduce-46                   100000000           10.8 ns/op\r\nBenchmarkFp751AddLazy-46                        200000000            7.72 ns/op\r\nBenchmarkFp751X2AddLazy-46                      100000000           12.7 ns/op\r\nBenchmarkFp751X2SubLazy-46                      100000000           19.0 ns/op\r\nPASS\r\n(...)\r\nBenchmarkSidhKeyAgreement-46              50      30760966 ns/op\r\nBenchmarkAliceKeyGenPrv-46           1000000          1052 ns/op\r\nBenchmarkBobKeyGenPrv-46             1000000          2347 ns/op\r\nBenchmarkAliceKeyGenPub-46               100      17189494 ns/op\r\nBenchmarkBobKeyGenPub-46                 100      19460506 ns/op\r\nBenchmarkSharedSecretAlice-46            100      14153113 ns/op\r\nBenchmarkSharedSecretBob-46              100      16591926 ns/op\r\nPASS\r\n(...)\r\n```","created_at":"2018-08-24T14:55:34Z","updated_at":"2018-08-26T14:37:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4100215d1687cd9bf4cc5b83272fb7d0a9b22613","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10/commits","review_comments_url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10/comments","review_comment_url":"https://api.github.com/repos/cloudflare/p751sidh/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cloudflare/p751sidh/issues/10/comments","statuses_url":"https://api.github.com/repos/cloudflare/p751sidh/statuses/447e3f468d610aac2e263ab92c23ca5506dfeaad","head":{"label":"Ko-:arm64-field-arithmetic","ref":"arm64-field-arithmetic","sha":"447e3f468d610aac2e263ab92c23ca5506dfeaad","user":{"login":"Ko-","id":3865731,"node_id":"MDQ6VXNlcjM4NjU3MzE=","avatar_url":"https://avatars0.githubusercontent.com/u/3865731?v=4","gravatar_id":"","url":"https://api.github.com/users/Ko-","html_url":"https://github.com/Ko-","followers_url":"https://api.github.com/users/Ko-/followers","following_url":"https://api.github.com/users/Ko-/following{/other_user}","gists_url":"https://api.github.com/users/Ko-/gists{/gist_id}","starred_url":"https://api.github.com/users/Ko-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ko-/subscriptions","organizations_url":"https://api.github.com/users/Ko-/orgs","repos_url":"https://api.github.com/users/Ko-/repos","events_url":"https://api.github.com/users/Ko-/events{/privacy}","received_events_url":"https://api.github.com/users/Ko-/received_events","type":"User","site_admin":false},"repo":{"id":145568093,"node_id":"MDEwOlJlcG9zaXRvcnkxNDU1NjgwOTM=","name":"p751sidh","full_name":"Ko-/p751sidh","owner":{"login":"Ko-","id":3865731,"node_id":"MDQ6VXNlcjM4NjU3MzE=","avatar_url":"https://avatars0.githubusercontent.com/u/3865731?v=4","gravatar_id":"","url":"https://api.github.com/users/Ko-","html_url":"https://github.com/Ko-","followers_url":"https://api.github.com/users/Ko-/followers","following_url":"https://api.github.com/users/Ko-/following{/other_user}","gists_url":"https://api.github.com/users/Ko-/gists{/gist_id}","starred_url":"https://api.github.com/users/Ko-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ko-/subscriptions","organizations_url":"https://api.github.com/users/Ko-/orgs","repos_url":"https://api.github.com/users/Ko-/repos","events_url":"https://api.github.com/users/Ko-/events{/privacy}","received_events_url":"https://api.github.com/users/Ko-/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Ko-/p751sidh","description":"Supersingular Isogeny Diffie-Hellman in Go","fork":true,"url":"https://api.github.com/repos/Ko-/p751sidh","forks_url":"https://api.github.com/repos/Ko-/p751sidh/forks","keys_url":"https://api.github.com/repos/Ko-/p751sidh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ko-/p751sidh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ko-/p751sidh/teams","hooks_url":"https://api.github.com/repos/Ko-/p751sidh/hooks","issue_events_url":"https://api.github.com/repos/Ko-/p751sidh/issues/events{/number}","events_url":"https://api.github.com/repos/Ko-/p751sidh/events","assignees_url":"https://api.github.com/repos/Ko-/p751sidh/assignees{/user}","branches_url":"https://api.github.com/repos/Ko-/p751sidh/branches{/branch}","tags_url":"https://api.github.com/repos/Ko-/p751sidh/tags","blobs_url":"https://api.github.com/repos/Ko-/p751sidh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ko-/p751sidh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ko-/p751sidh/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ko-/p751sidh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ko-/p751sidh/statuses/{sha}","languages_url":"https://api.github.com/repos/Ko-/p751sidh/languages","stargazers_url":"https://api.github.com/repos/Ko-/p751sidh/stargazers","contributors_url":"https://api.github.com/repos/Ko-/p751sidh/contributors","subscribers_url":"https://api.github.com/repos/Ko-/p751sidh/subscribers","subscription_url":"https://api.github.com/repos/Ko-/p751sidh/subscription","commits_url":"https://api.github.com/repos/Ko-/p751sidh/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ko-/p751sidh/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ko-/p751sidh/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ko-/p751sidh/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ko-/p751sidh/contents/{+path}","compare_url":"https://api.github.com/repos/Ko-/p751sidh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ko-/p751sidh/merges","archive_url":"https://api.github.com/repos/Ko-/p751sidh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ko-/p751sidh/downloads","issues_url":"https://api.github.com/repos/Ko-/p751sidh/issues{/number}","pulls_url":"https://api.github.com/repos/Ko-/p751sidh/pulls{/number}","milestones_url":"https://api.github.com/repos/Ko-/p751sidh/milestones{/number}","notifications_url":"https://api.github.com/repos/Ko-/p751sidh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ko-/p751sidh/labels{/name}","releases_url":"https://api.github.com/repos/Ko-/p751sidh/releases{/id}","deployments_url":"https://api.github.com/repos/Ko-/p751sidh/deployments","created_at":"2018-08-21T13:30:56Z","updated_at":"2018-08-21T13:30:58Z","pushed_at":"2018-08-24T14:39:51Z","git_url":"git://github.com/Ko-/p751sidh.git","ssh_url":"git@github.com:Ko-/p751sidh.git","clone_url":"https://github.com/Ko-/p751sidh.git","svn_url":"https://github.com/Ko-/p751sidh","homepage":"https://blog.cloudflare.com/sidh-go/","size":343,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"cloudflare:master","ref":"master","sha":"a6e421568ef83ec6541075dbf2b9b49535cc70e2","user":{"login":"cloudflare","id":314135,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNDEzNQ==","avatar_url":"https://avatars3.githubusercontent.com/u/314135?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudflare","html_url":"https://github.com/cloudflare","followers_url":"https://api.github.com/users/cloudflare/followers","following_url":"https://api.github.com/users/cloudflare/following{/other_user}","gists_url":"https://api.github.com/users/cloudflare/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudflare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudflare/subscriptions","organizations_url":"https://api.github.com/users/cloudflare/orgs","repos_url":"https://api.github.com/users/cloudflare/repos","events_url":"https://api.github.com/users/cloudflare/events{/privacy}","received_events_url":"https://api.github.com/users/cloudflare/received_events","type":"Organization","site_admin":false},"repo":{"id":97104590,"node_id":"MDEwOlJlcG9zaXRvcnk5NzEwNDU5MA==","name":"p751sidh","full_name":"cloudflare/p751sidh","owner":{"login":"cloudflare","id":314135,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNDEzNQ==","avatar_url":"https://avatars3.githubusercontent.com/u/314135?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudflare","html_url":"https://github.com/cloudflare","followers_url":"https://api.github.com/users/cloudflare/followers","following_url":"https://api.github.com/users/cloudflare/following{/other_user}","gists_url":"https://api.github.com/users/cloudflare/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudflare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudflare/subscriptions","organizations_url":"https://api.github.com/users/cloudflare/orgs","repos_url":"https://api.github.com/users/cloudflare/repos","events_url":"https://api.github.com/users/cloudflare/events{/privacy}","received_events_url":"https://api.github.com/users/cloudflare/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cloudflare/p751sidh","description":"Supersingular Isogeny Diffie-Hellman in Go","fork":false,"url":"https://api.github.com/repos/cloudflare/p751sidh","forks_url":"https://api.github.com/repos/cloudflare/p751sidh/forks","keys_url":"https://api.github.com/repos/cloudflare/p751sidh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cloudflare/p751sidh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cloudflare/p751sidh/teams","hooks_url":"https://api.github.com/repos/cloudflare/p751sidh/hooks","issue_events_url":"https://api.github.com/repos/cloudflare/p751sidh/issues/events{/number}","events_url":"https://api.github.com/repos/cloudflare/p751sidh/events","assignees_url":"https://api.github.com/repos/cloudflare/p751sidh/assignees{/user}","branches_url":"https://api.github.com/repos/cloudflare/p751sidh/branches{/branch}","tags_url":"https://api.github.com/repos/cloudflare/p751sidh/tags","blobs_url":"https://api.github.com/repos/cloudflare/p751sidh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cloudflare/p751sidh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cloudflare/p751sidh/git/refs{/sha}","trees_url":"https://api.github.com/repos/cloudflare/p751sidh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cloudflare/p751sidh/statuses/{sha}","languages_url":"https://api.github.com/repos/cloudflare/p751sidh/languages","stargazers_url":"https://api.github.com/repos/cloudflare/p751sidh/stargazers","contributors_url":"https://api.github.com/repos/cloudflare/p751sidh/contributors","subscribers_url":"https://api.github.com/repos/cloudflare/p751sidh/subscribers","subscription_url":"https://api.github.com/repos/cloudflare/p751sidh/subscription","commits_url":"https://api.github.com/repos/cloudflare/p751sidh/commits{/sha}","git_commits_url":"https://api.github.com/repos/cloudflare/p751sidh/git/commits{/sha}","comments_url":"https://api.github.com/repos/cloudflare/p751sidh/comments{/number}","issue_comment_url":"https://api.github.com/repos/cloudflare/p751sidh/issues/comments{/number}","contents_url":"https://api.github.com/repos/cloudflare/p751sidh/contents/{+path}","compare_url":"https://api.github.com/repos/cloudflare/p751sidh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cloudflare/p751sidh/merges","archive_url":"https://api.github.com/repos/cloudflare/p751sidh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cloudflare/p751sidh/downloads","issues_url":"https://api.github.com/repos/cloudflare/p751sidh/issues{/number}","pulls_url":"https://api.github.com/repos/cloudflare/p751sidh/pulls{/number}","milestones_url":"https://api.github.com/repos/cloudflare/p751sidh/milestones{/number}","notifications_url":"https://api.github.com/repos/cloudflare/p751sidh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cloudflare/p751sidh/labels{/name}","releases_url":"https://api.github.com/repos/cloudflare/p751sidh/releases{/id}","deployments_url":"https://api.github.com/repos/cloudflare/p751sidh/deployments","created_at":"2017-07-13T09:23:15Z","updated_at":"2018-08-22T23:50:01Z","pushed_at":"2018-08-24T14:55:35Z","git_url":"git://github.com/cloudflare/p751sidh.git","ssh_url":"git@github.com:cloudflare/p751sidh.git","clone_url":"https://github.com/cloudflare/p751sidh.git","svn_url":"https://github.com/cloudflare/p751sidh","homepage":"https://blog.cloudflare.com/sidh-go/","size":315,"stargazers_count":62,"watchers_count":62,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":8,"open_issues":3,"watchers":62,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10"},"html":{"href":"https://github.com/cloudflare/p751sidh/pull/10"},"issue":{"href":"https://api.github.com/repos/cloudflare/p751sidh/issues/10"},"comments":{"href":"https://api.github.com/repos/cloudflare/p751sidh/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cloudflare/p751sidh/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/cloudflare/p751sidh/statuses/447e3f468d610aac2e263ab92c23ca5506dfeaad"}},"author_association":"NONE"}}
{"actor":{"display_login":"henrydcase"}}