12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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
|