github.com/smalaichami/go-bowhead@v0.0.0-20180311002552-16302db95eaa/crypto/bn256/cloudflare/gfp_amd64.s (about) 1 // +build amd64,!appengine,!gccgo 2 3 #include "gfp.h" 4 #include "mul.h" 5 #include "mul_bmi2.h" 6 7 TEXT ·gfpNeg(SB),0,$0-16 8 MOVQ ·p2+0(SB), R8 9 MOVQ ·p2+8(SB), R9 10 MOVQ ·p2+16(SB), R10 11 MOVQ ·p2+24(SB), R11 12 13 MOVQ a+8(FP), DI 14 SUBQ 0(DI), R8 15 SBBQ 8(DI), R9 16 SBBQ 16(DI), R10 17 SBBQ 24(DI), R11 18 19 MOVQ $0, AX 20 gfpCarry(R8,R9,R10,R11,AX, R12,R13,R14,R15,BX) 21 22 MOVQ c+0(FP), DI 23 storeBlock(R8,R9,R10,R11, 0(DI)) 24 RET 25 26 TEXT ·gfpAdd(SB),0,$0-24 27 MOVQ a+8(FP), DI 28 MOVQ b+16(FP), SI 29 30 loadBlock(0(DI), R8,R9,R10,R11) 31 MOVQ $0, R12 32 33 ADDQ 0(SI), R8 34 ADCQ 8(SI), R9 35 ADCQ 16(SI), R10 36 ADCQ 24(SI), R11 37 ADCQ $0, R12 38 39 gfpCarry(R8,R9,R10,R11,R12, R13,R14,R15,AX,BX) 40 41 MOVQ c+0(FP), DI 42 storeBlock(R8,R9,R10,R11, 0(DI)) 43 RET 44 45 TEXT ·gfpSub(SB),0,$0-24 46 MOVQ a+8(FP), DI 47 MOVQ b+16(FP), SI 48 49 loadBlock(0(DI), R8,R9,R10,R11) 50 51 MOVQ ·p2+0(SB), R12 52 MOVQ ·p2+8(SB), R13 53 MOVQ ·p2+16(SB), R14 54 MOVQ ·p2+24(SB), R15 55 MOVQ $0, AX 56 57 SUBQ 0(SI), R8 58 SBBQ 8(SI), R9 59 SBBQ 16(SI), R10 60 SBBQ 24(SI), R11 61 62 CMOVQCC AX, R12 63 CMOVQCC AX, R13 64 CMOVQCC AX, R14 65 CMOVQCC AX, R15 66 67 ADDQ R12, R8 68 ADCQ R13, R9 69 ADCQ R14, R10 70 ADCQ R15, R11 71 72 MOVQ c+0(FP), DI 73 storeBlock(R8,R9,R10,R11, 0(DI)) 74 RET 75 76 TEXT ·gfpMul(SB),0,$160-24 77 MOVQ a+8(FP), DI 78 MOVQ b+16(FP), SI 79 80 // Jump to a slightly different implementation if MULX isn't supported. 81 CMPB runtime·support_bmi2(SB), $0 82 JE nobmi2Mul 83 84 mulBMI2(0(DI),8(DI),16(DI),24(DI), 0(SI)) 85 storeBlock( R8, R9,R10,R11, 0(SP)) 86 storeBlock(R12,R13,R14,R15, 32(SP)) 87 gfpReduceBMI2() 88 JMP end 89 90 nobmi2Mul: 91 mul(0(DI),8(DI),16(DI),24(DI), 0(SI), 0(SP)) 92 gfpReduce(0(SP)) 93 94 end: 95 MOVQ c+0(FP), DI 96 storeBlock(R12,R13,R14,R15, 0(DI)) 97 RET