blob: ab94344e10a44268cd8cdeafb4d09c07a228f0d8 [file] [log] [blame]
// Code generated by command: go run nat_amd64_asm.go -out ../nat_amd64.s -pkg bigmod. DO NOT EDIT.
//go:build !purego
// func addMulVVW1024(z *uint, x *uint, y uint) (c uint)
// Requires: ADX, BMI2
TEXT ·addMulVVW1024(SB), $0-32
CMPB ·supportADX+0(SB), $0x01
JEQ adx
MOVQ z+0(FP), CX
MOVQ x+8(FP), BX
MOVQ y+16(FP), SI
XORQ DI, DI
// Iteration 0
MOVQ (BX), AX
MULQ SI
ADDQ (CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, (CX)
// Iteration 1
MOVQ 8(BX), AX
MULQ SI
ADDQ 8(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 8(CX)
// Iteration 2
MOVQ 16(BX), AX
MULQ SI
ADDQ 16(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 16(CX)
// Iteration 3
MOVQ 24(BX), AX
MULQ SI
ADDQ 24(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 24(CX)
// Iteration 4
MOVQ 32(BX), AX
MULQ SI
ADDQ 32(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 32(CX)
// Iteration 5
MOVQ 40(BX), AX
MULQ SI
ADDQ 40(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 40(CX)
// Iteration 6
MOVQ 48(BX), AX
MULQ SI
ADDQ 48(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 48(CX)
// Iteration 7
MOVQ 56(BX), AX
MULQ SI
ADDQ 56(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 56(CX)
// Iteration 8
MOVQ 64(BX), AX
MULQ SI
ADDQ 64(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 64(CX)
// Iteration 9
MOVQ 72(BX), AX
MULQ SI
ADDQ 72(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 72(CX)
// Iteration 10
MOVQ 80(BX), AX
MULQ SI
ADDQ 80(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 80(CX)
// Iteration 11
MOVQ 88(BX), AX
MULQ SI
ADDQ 88(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 88(CX)
// Iteration 12
MOVQ 96(BX), AX
MULQ SI
ADDQ 96(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 96(CX)
// Iteration 13
MOVQ 104(BX), AX
MULQ SI
ADDQ 104(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 104(CX)
// Iteration 14
MOVQ 112(BX), AX
MULQ SI
ADDQ 112(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 112(CX)
// Iteration 15
MOVQ 120(BX), AX
MULQ SI
ADDQ 120(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 120(CX)
MOVQ DI, c+24(FP)
RET
adx:
MOVQ z+0(FP), AX
MOVQ x+8(FP), CX
MOVQ y+16(FP), DX
XORQ BX, BX
XORQ SI, SI
// Iteration 0
MULXQ (CX), R8, DI
ADCXQ BX, R8
ADOXQ (AX), R8
MOVQ R8, (AX)
// Iteration 1
MULXQ 8(CX), R8, BX
ADCXQ DI, R8
ADOXQ 8(AX), R8
MOVQ R8, 8(AX)
// Iteration 2
MULXQ 16(CX), R8, DI
ADCXQ BX, R8
ADOXQ 16(AX), R8
MOVQ R8, 16(AX)
// Iteration 3
MULXQ 24(CX), R8, BX
ADCXQ DI, R8
ADOXQ 24(AX), R8
MOVQ R8, 24(AX)
// Iteration 4
MULXQ 32(CX), R8, DI
ADCXQ BX, R8
ADOXQ 32(AX), R8
MOVQ R8, 32(AX)
// Iteration 5
MULXQ 40(CX), R8, BX
ADCXQ DI, R8
ADOXQ 40(AX), R8
MOVQ R8, 40(AX)
// Iteration 6
MULXQ 48(CX), R8, DI
ADCXQ BX, R8
ADOXQ 48(AX), R8
MOVQ R8, 48(AX)
// Iteration 7
MULXQ 56(CX), R8, BX
ADCXQ DI, R8
ADOXQ 56(AX), R8
MOVQ R8, 56(AX)
// Iteration 8
MULXQ 64(CX), R8, DI
ADCXQ BX, R8
ADOXQ 64(AX), R8
MOVQ R8, 64(AX)
// Iteration 9
MULXQ 72(CX), R8, BX
ADCXQ DI, R8
ADOXQ 72(AX), R8
MOVQ R8, 72(AX)
// Iteration 10
MULXQ 80(CX), R8, DI
ADCXQ BX, R8
ADOXQ 80(AX), R8
MOVQ R8, 80(AX)
// Iteration 11
MULXQ 88(CX), R8, BX
ADCXQ DI, R8
ADOXQ 88(AX), R8
MOVQ R8, 88(AX)
// Iteration 12
MULXQ 96(CX), R8, DI
ADCXQ BX, R8
ADOXQ 96(AX), R8
MOVQ R8, 96(AX)
// Iteration 13
MULXQ 104(CX), R8, BX
ADCXQ DI, R8
ADOXQ 104(AX), R8
MOVQ R8, 104(AX)
// Iteration 14
MULXQ 112(CX), R8, DI
ADCXQ BX, R8
ADOXQ 112(AX), R8
MOVQ R8, 112(AX)
// Iteration 15
MULXQ 120(CX), R8, BX
ADCXQ DI, R8
ADOXQ 120(AX), R8
MOVQ R8, 120(AX)
// Add back carry flags and return
ADCXQ SI, BX
ADOXQ SI, BX
MOVQ BX, c+24(FP)
RET
// func addMulVVW1536(z *uint, x *uint, y uint) (c uint)
// Requires: ADX, BMI2
TEXT ·addMulVVW1536(SB), $0-32
CMPB ·supportADX+0(SB), $0x01
JEQ adx
MOVQ z+0(FP), CX
MOVQ x+8(FP), BX
MOVQ y+16(FP), SI
XORQ DI, DI
// Iteration 0
MOVQ (BX), AX
MULQ SI
ADDQ (CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, (CX)
// Iteration 1
MOVQ 8(BX), AX
MULQ SI
ADDQ 8(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 8(CX)
// Iteration 2
MOVQ 16(BX), AX
MULQ SI
ADDQ 16(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 16(CX)
// Iteration 3
MOVQ 24(BX), AX
MULQ SI
ADDQ 24(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 24(CX)
// Iteration 4
MOVQ 32(BX), AX
MULQ SI
ADDQ 32(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 32(CX)
// Iteration 5
MOVQ 40(BX), AX
MULQ SI
ADDQ 40(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 40(CX)
// Iteration 6
MOVQ 48(BX), AX
MULQ SI
ADDQ 48(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 48(CX)
// Iteration 7
MOVQ 56(BX), AX
MULQ SI
ADDQ 56(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 56(CX)
// Iteration 8
MOVQ 64(BX), AX
MULQ SI
ADDQ 64(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 64(CX)
// Iteration 9
MOVQ 72(BX), AX
MULQ SI
ADDQ 72(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 72(CX)
// Iteration 10
MOVQ 80(BX), AX
MULQ SI
ADDQ 80(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 80(CX)
// Iteration 11
MOVQ 88(BX), AX
MULQ SI
ADDQ 88(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 88(CX)
// Iteration 12
MOVQ 96(BX), AX
MULQ SI
ADDQ 96(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 96(CX)
// Iteration 13
MOVQ 104(BX), AX
MULQ SI
ADDQ 104(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 104(CX)
// Iteration 14
MOVQ 112(BX), AX
MULQ SI
ADDQ 112(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 112(CX)
// Iteration 15
MOVQ 120(BX), AX
MULQ SI
ADDQ 120(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 120(CX)
// Iteration 16
MOVQ 128(BX), AX
MULQ SI
ADDQ 128(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 128(CX)
// Iteration 17
MOVQ 136(BX), AX
MULQ SI
ADDQ 136(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 136(CX)
// Iteration 18
MOVQ 144(BX), AX
MULQ SI
ADDQ 144(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 144(CX)
// Iteration 19
MOVQ 152(BX), AX
MULQ SI
ADDQ 152(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 152(CX)
// Iteration 20
MOVQ 160(BX), AX
MULQ SI
ADDQ 160(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 160(CX)
// Iteration 21
MOVQ 168(BX), AX
MULQ SI
ADDQ 168(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 168(CX)
// Iteration 22
MOVQ 176(BX), AX
MULQ SI
ADDQ 176(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 176(CX)
// Iteration 23
MOVQ 184(BX), AX
MULQ SI
ADDQ 184(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 184(CX)
MOVQ DI, c+24(FP)
RET
adx:
MOVQ z+0(FP), AX
MOVQ x+8(FP), CX
MOVQ y+16(FP), DX
XORQ BX, BX
XORQ SI, SI
// Iteration 0
MULXQ (CX), R8, DI
ADCXQ BX, R8
ADOXQ (AX), R8
MOVQ R8, (AX)
// Iteration 1
MULXQ 8(CX), R8, BX
ADCXQ DI, R8
ADOXQ 8(AX), R8
MOVQ R8, 8(AX)
// Iteration 2
MULXQ 16(CX), R8, DI
ADCXQ BX, R8
ADOXQ 16(AX), R8
MOVQ R8, 16(AX)
// Iteration 3
MULXQ 24(CX), R8, BX
ADCXQ DI, R8
ADOXQ 24(AX), R8
MOVQ R8, 24(AX)
// Iteration 4
MULXQ 32(CX), R8, DI
ADCXQ BX, R8
ADOXQ 32(AX), R8
MOVQ R8, 32(AX)
// Iteration 5
MULXQ 40(CX), R8, BX
ADCXQ DI, R8
ADOXQ 40(AX), R8
MOVQ R8, 40(AX)
// Iteration 6
MULXQ 48(CX), R8, DI
ADCXQ BX, R8
ADOXQ 48(AX), R8
MOVQ R8, 48(AX)
// Iteration 7
MULXQ 56(CX), R8, BX
ADCXQ DI, R8
ADOXQ 56(AX), R8
MOVQ R8, 56(AX)
// Iteration 8
MULXQ 64(CX), R8, DI
ADCXQ BX, R8
ADOXQ 64(AX), R8
MOVQ R8, 64(AX)
// Iteration 9
MULXQ 72(CX), R8, BX
ADCXQ DI, R8
ADOXQ 72(AX), R8
MOVQ R8, 72(AX)
// Iteration 10
MULXQ 80(CX), R8, DI
ADCXQ BX, R8
ADOXQ 80(AX), R8
MOVQ R8, 80(AX)
// Iteration 11
MULXQ 88(CX), R8, BX
ADCXQ DI, R8
ADOXQ 88(AX), R8
MOVQ R8, 88(AX)
// Iteration 12
MULXQ 96(CX), R8, DI
ADCXQ BX, R8
ADOXQ 96(AX), R8
MOVQ R8, 96(AX)
// Iteration 13
MULXQ 104(CX), R8, BX
ADCXQ DI, R8
ADOXQ 104(AX), R8
MOVQ R8, 104(AX)
// Iteration 14
MULXQ 112(CX), R8, DI
ADCXQ BX, R8
ADOXQ 112(AX), R8
MOVQ R8, 112(AX)
// Iteration 15
MULXQ 120(CX), R8, BX
ADCXQ DI, R8
ADOXQ 120(AX), R8
MOVQ R8, 120(AX)
// Iteration 16
MULXQ 128(CX), R8, DI
ADCXQ BX, R8
ADOXQ 128(AX), R8
MOVQ R8, 128(AX)
// Iteration 17
MULXQ 136(CX), R8, BX
ADCXQ DI, R8
ADOXQ 136(AX), R8
MOVQ R8, 136(AX)
// Iteration 18
MULXQ 144(CX), R8, DI
ADCXQ BX, R8
ADOXQ 144(AX), R8
MOVQ R8, 144(AX)
// Iteration 19
MULXQ 152(CX), R8, BX
ADCXQ DI, R8
ADOXQ 152(AX), R8
MOVQ R8, 152(AX)
// Iteration 20
MULXQ 160(CX), R8, DI
ADCXQ BX, R8
ADOXQ 160(AX), R8
MOVQ R8, 160(AX)
// Iteration 21
MULXQ 168(CX), R8, BX
ADCXQ DI, R8
ADOXQ 168(AX), R8
MOVQ R8, 168(AX)
// Iteration 22
MULXQ 176(CX), R8, DI
ADCXQ BX, R8
ADOXQ 176(AX), R8
MOVQ R8, 176(AX)
// Iteration 23
MULXQ 184(CX), R8, BX
ADCXQ DI, R8
ADOXQ 184(AX), R8
MOVQ R8, 184(AX)
// Add back carry flags and return
ADCXQ SI, BX
ADOXQ SI, BX
MOVQ BX, c+24(FP)
RET
// func addMulVVW2048(z *uint, x *uint, y uint) (c uint)
// Requires: ADX, BMI2
TEXT ·addMulVVW2048(SB), $0-32
CMPB ·supportADX+0(SB), $0x01
JEQ adx
MOVQ z+0(FP), CX
MOVQ x+8(FP), BX
MOVQ y+16(FP), SI
XORQ DI, DI
// Iteration 0
MOVQ (BX), AX
MULQ SI
ADDQ (CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, (CX)
// Iteration 1
MOVQ 8(BX), AX
MULQ SI
ADDQ 8(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 8(CX)
// Iteration 2
MOVQ 16(BX), AX
MULQ SI
ADDQ 16(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 16(CX)
// Iteration 3
MOVQ 24(BX), AX
MULQ SI
ADDQ 24(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 24(CX)
// Iteration 4
MOVQ 32(BX), AX
MULQ SI
ADDQ 32(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 32(CX)
// Iteration 5
MOVQ 40(BX), AX
MULQ SI
ADDQ 40(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 40(CX)
// Iteration 6
MOVQ 48(BX), AX
MULQ SI
ADDQ 48(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 48(CX)
// Iteration 7
MOVQ 56(BX), AX
MULQ SI
ADDQ 56(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 56(CX)
// Iteration 8
MOVQ 64(BX), AX
MULQ SI
ADDQ 64(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 64(CX)
// Iteration 9
MOVQ 72(BX), AX
MULQ SI
ADDQ 72(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 72(CX)
// Iteration 10
MOVQ 80(BX), AX
MULQ SI
ADDQ 80(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 80(CX)
// Iteration 11
MOVQ 88(BX), AX
MULQ SI
ADDQ 88(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 88(CX)
// Iteration 12
MOVQ 96(BX), AX
MULQ SI
ADDQ 96(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 96(CX)
// Iteration 13
MOVQ 104(BX), AX
MULQ SI
ADDQ 104(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 104(CX)
// Iteration 14
MOVQ 112(BX), AX
MULQ SI
ADDQ 112(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 112(CX)
// Iteration 15
MOVQ 120(BX), AX
MULQ SI
ADDQ 120(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 120(CX)
// Iteration 16
MOVQ 128(BX), AX
MULQ SI
ADDQ 128(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 128(CX)
// Iteration 17
MOVQ 136(BX), AX
MULQ SI
ADDQ 136(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 136(CX)
// Iteration 18
MOVQ 144(BX), AX
MULQ SI
ADDQ 144(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 144(CX)
// Iteration 19
MOVQ 152(BX), AX
MULQ SI
ADDQ 152(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 152(CX)
// Iteration 20
MOVQ 160(BX), AX
MULQ SI
ADDQ 160(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 160(CX)
// Iteration 21
MOVQ 168(BX), AX
MULQ SI
ADDQ 168(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 168(CX)
// Iteration 22
MOVQ 176(BX), AX
MULQ SI
ADDQ 176(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 176(CX)
// Iteration 23
MOVQ 184(BX), AX
MULQ SI
ADDQ 184(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 184(CX)
// Iteration 24
MOVQ 192(BX), AX
MULQ SI
ADDQ 192(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 192(CX)
// Iteration 25
MOVQ 200(BX), AX
MULQ SI
ADDQ 200(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 200(CX)
// Iteration 26
MOVQ 208(BX), AX
MULQ SI
ADDQ 208(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 208(CX)
// Iteration 27
MOVQ 216(BX), AX
MULQ SI
ADDQ 216(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 216(CX)
// Iteration 28
MOVQ 224(BX), AX
MULQ SI
ADDQ 224(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 224(CX)
// Iteration 29
MOVQ 232(BX), AX
MULQ SI
ADDQ 232(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 232(CX)
// Iteration 30
MOVQ 240(BX), AX
MULQ SI
ADDQ 240(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 240(CX)
// Iteration 31
MOVQ 248(BX), AX
MULQ SI
ADDQ 248(CX), AX
ADCQ $0x00, DX
ADDQ DI, AX
ADCQ $0x00, DX
MOVQ DX, DI
MOVQ AX, 248(CX)
MOVQ DI, c+24(FP)
RET
adx:
MOVQ z+0(FP), AX
MOVQ x+8(FP), CX
MOVQ y+16(FP), DX
XORQ BX, BX
XORQ SI, SI
// Iteration 0
MULXQ (CX), R8, DI
ADCXQ BX, R8
ADOXQ (AX), R8
MOVQ R8, (AX)
// Iteration 1
MULXQ 8(CX), R8, BX
ADCXQ DI, R8
ADOXQ 8(AX), R8
MOVQ R8, 8(AX)
// Iteration 2
MULXQ 16(CX), R8, DI
ADCXQ BX, R8
ADOXQ 16(AX), R8
MOVQ R8, 16(AX)
// Iteration 3
MULXQ 24(CX), R8, BX
ADCXQ DI, R8
ADOXQ 24(AX), R8
MOVQ R8, 24(AX)
// Iteration 4
MULXQ 32(CX), R8, DI
ADCXQ BX, R8
ADOXQ 32(AX), R8
MOVQ R8, 32(AX)
// Iteration 5
MULXQ 40(CX), R8, BX
ADCXQ DI, R8
ADOXQ 40(AX), R8
MOVQ R8, 40(AX)
// Iteration 6
MULXQ 48(CX), R8, DI
ADCXQ BX, R8
ADOXQ 48(AX), R8
MOVQ R8, 48(AX)
// Iteration 7
MULXQ 56(CX), R8, BX
ADCXQ DI, R8
ADOXQ 56(AX), R8
MOVQ R8, 56(AX)
// Iteration 8
MULXQ 64(CX), R8, DI
ADCXQ BX, R8
ADOXQ 64(AX), R8
MOVQ R8, 64(AX)
// Iteration 9
MULXQ 72(CX), R8, BX
ADCXQ DI, R8
ADOXQ 72(AX), R8
MOVQ R8, 72(AX)
// Iteration 10
MULXQ 80(CX), R8, DI
ADCXQ BX, R8
ADOXQ 80(AX), R8
MOVQ R8, 80(AX)
// Iteration 11
MULXQ 88(CX), R8, BX
ADCXQ DI, R8
ADOXQ 88(AX), R8
MOVQ R8, 88(AX)
// Iteration 12
MULXQ 96(CX), R8, DI
ADCXQ BX, R8
ADOXQ 96(AX), R8
MOVQ R8, 96(AX)
// Iteration 13
MULXQ 104(CX), R8, BX
ADCXQ DI, R8
ADOXQ 104(AX), R8
MOVQ R8, 104(AX)
// Iteration 14
MULXQ 112(CX), R8, DI
ADCXQ BX, R8
ADOXQ 112(AX), R8
MOVQ R8, 112(AX)
// Iteration 15
MULXQ 120(CX), R8, BX
ADCXQ DI, R8
ADOXQ 120(AX), R8
MOVQ R8, 120(AX)
// Iteration 16
MULXQ 128(CX), R8, DI
ADCXQ BX, R8
ADOXQ 128(AX), R8
MOVQ R8, 128(AX)
// Iteration 17
MULXQ 136(CX), R8, BX
ADCXQ DI, R8
ADOXQ 136(AX), R8
MOVQ R8, 136(AX)
// Iteration 18
MULXQ 144(CX), R8, DI
ADCXQ BX, R8
ADOXQ 144(AX), R8
MOVQ R8, 144(AX)
// Iteration 19
MULXQ 152(CX), R8, BX
ADCXQ DI, R8
ADOXQ 152(AX), R8
MOVQ R8, 152(AX)
// Iteration 20
MULXQ 160(CX), R8, DI
ADCXQ BX, R8
ADOXQ 160(AX), R8
MOVQ R8, 160(AX)
// Iteration 21
MULXQ 168(CX), R8, BX
ADCXQ DI, R8
ADOXQ 168(AX), R8
MOVQ R8, 168(AX)
// Iteration 22
MULXQ 176(CX), R8, DI
ADCXQ BX, R8
ADOXQ 176(AX), R8
MOVQ R8, 176(AX)
// Iteration 23
MULXQ 184(CX), R8, BX
ADCXQ DI, R8
ADOXQ 184(AX), R8
MOVQ R8, 184(AX)
// Iteration 24
MULXQ 192(CX), R8, DI
ADCXQ BX, R8
ADOXQ 192(AX), R8
MOVQ R8, 192(AX)
// Iteration 25
MULXQ 200(CX), R8, BX
ADCXQ DI, R8
ADOXQ 200(AX), R8
MOVQ R8, 200(AX)
// Iteration 26
MULXQ 208(CX), R8, DI
ADCXQ BX, R8
ADOXQ 208(AX), R8
MOVQ R8, 208(AX)
// Iteration 27
MULXQ 216(CX), R8, BX
ADCXQ DI, R8
ADOXQ 216(AX), R8
MOVQ R8, 216(AX)
// Iteration 28
MULXQ 224(CX), R8, DI
ADCXQ BX, R8
ADOXQ 224(AX), R8
MOVQ R8, 224(AX)
// Iteration 29
MULXQ 232(CX), R8, BX
ADCXQ DI, R8
ADOXQ 232(AX), R8
MOVQ R8, 232(AX)
// Iteration 30
MULXQ 240(CX), R8, DI
ADCXQ BX, R8
ADOXQ 240(AX), R8
MOVQ R8, 240(AX)
// Iteration 31
MULXQ 248(CX), R8, BX
ADCXQ DI, R8
ADOXQ 248(AX), R8
MOVQ R8, 248(AX)
// Add back carry flags and return
ADCXQ SI, BX
ADOXQ SI, BX
MOVQ BX, c+24(FP)
RET