vlop.s 1014 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. TEXT _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. * _mul64by32(uint64 *r, uint64 a, uint32 b)
  17. * sets *r = low 64 bits of 96-bit product a*b; returns high 32 bits.
  18. */
  19. TEXT _mul64by32(SB), $0
  20. MOVL r+0(FP), CX
  21. MOVL a+4(FP), AX
  22. MULL b+12(FP)
  23. MOVL AX, 0(CX) /* *r = low 32 bits of a*b */
  24. MOVL DX, BX /* BX = high 32 bits of a*b */
  25. MOVL a+8(FP), AX
  26. MULL b+12(FP) /* hi = (a>>32) * b */
  27. ADDL AX, BX /* BX += low 32 bits of hi */
  28. ADCL $0, DX /* DX = high 32 bits of hi + carry */
  29. MOVL BX, 4(CX) /* *r |= (high 32 bits of a*b) << 32 */
  30. MOVL DX, AX /* return hi>>32 */
  31. RET
  32. TEXT _div64by32(SB), $0
  33. MOVL r+12(FP), CX
  34. MOVL a+0(FP), AX
  35. MOVL a+4(FP), DX
  36. DIVL b+8(FP)
  37. MOVL DX, 0(CX)
  38. RET
  39. TEXT _addv(SB), $0
  40. MOVL r+0(FP), CX
  41. MOVL a+4(FP), AX
  42. MOVL a+8(FP), BX
  43. ADDL b+12(FP), AX
  44. ADCL b+16(FP), BX
  45. MOVL AX, 0(CX)
  46. MOVL BX, 4(CX)
  47. RET