1TEXT _mulv(SB), $0 2 MOVL r+0(FP), CX 3 MOVL a+4(FP), AX 4 MULL b+12(FP) 5 MOVL AX, 0(CX) 6 MOVL DX, BX 7 MOVL a+4(FP), AX 8 MULL b+16(FP) 9 ADDL AX, BX 10 MOVL a+8(FP), AX 11 MULL b+12(FP) 12 ADDL AX, BX 13 MOVL BX, 4(CX) 14 RET 15 16/* 17 * _mul64by32(uint64 *r, uint64 a, uint32 b) 18 * sets *r = low 64 bits of 96-bit product a*b; returns high 32 bits. 19 */ 20TEXT _mul64by32(SB), $0 21 MOVL r+0(FP), CX 22 MOVL a+4(FP), AX 23 MULL b+12(FP) 24 MOVL AX, 0(CX) /* *r = low 32 bits of a*b */ 25 MOVL DX, BX /* BX = high 32 bits of a*b */ 26 27 MOVL a+8(FP), AX 28 MULL b+12(FP) /* hi = (a>>32) * b */ 29 ADDL AX, BX /* BX += low 32 bits of hi */ 30 ADCL $0, DX /* DX = high 32 bits of hi + carry */ 31 MOVL BX, 4(CX) /* *r |= (high 32 bits of a*b) << 32 */ 32 33 MOVL DX, AX /* return hi>>32 */ 34 RET 35 36TEXT _div64by32(SB), $0 37 MOVL r+12(FP), CX 38 MOVL a+0(FP), AX 39 MOVL a+4(FP), DX 40 DIVL b+8(FP) 41 MOVL DX, 0(CX) 42 RET 43 44TEXT _addv(SB), $0 45 MOVL r+0(FP), CX 46 MOVL a+4(FP), AX 47 MOVL a+8(FP), BX 48 ADDL b+12(FP), AX 49 ADCL b+16(FP), BX 50 MOVL AX, 0(CX) 51 MOVL BX, 4(CX) 52 RET 53