TEXT _mulv(SB), $0 MOVL r+0(FP), CX MOVL a+4(FP), AX MULL b+12(FP) MOVL AX, 0(CX) MOVL DX, BX MOVL a+4(FP), AX MULL b+16(FP) ADDL AX, BX MOVL a+8(FP), AX MULL b+12(FP) ADDL AX, BX MOVL BX, 4(CX) RET /* * _mul64by32(uint64 *r, uint64 a, uint32 b) * sets *r = low 64 bits of 96-bit product a*b; returns high 32 bits. */ TEXT _mul64by32(SB), $0 MOVL r+0(FP), CX MOVL a+4(FP), AX MULL b+12(FP) MOVL AX, 0(CX) /* *r = low 32 bits of a*b */ MOVL DX, BX /* BX = high 32 bits of a*b */ MOVL a+8(FP), AX MULL b+12(FP) /* hi = (a>>32) * b */ ADDL AX, BX /* BX += low 32 bits of hi */ ADCL $0, DX /* DX = high 32 bits of hi + carry */ MOVL BX, 4(CX) /* *r |= (high 32 bits of a*b) << 32 */ MOVL DX, AX /* return hi>>32 */ RET TEXT _div64by32(SB), $0 MOVL r+12(FP), CX MOVL a+0(FP), AX MOVL a+4(FP), DX DIVL b+8(FP) MOVL DX, 0(CX) RET TEXT _addv(SB), $0 MOVL r+0(FP), CX MOVL a+4(FP), AX MOVL a+8(FP), BX ADDL b+12(FP), AX ADCL b+16(FP), BX MOVL AX, 0(CX) MOVL BX, 4(CX) RET