umulsi3_highpart.S 515 B

12345678910111213141516171819202122232425
  1. .align 2
  2. .global ___umulsi3_highpart;
  3. .type ___umulsi3_highpart, STT_FUNC;
  4. #ifdef CONFIG_ARITHMETIC_OPS_L1
  5. .section .l1.text
  6. #else
  7. .text
  8. #endif
  9. ___umulsi3_highpart:
  10. R2 = R1.H * R0.H, R3 = R1.L * R0.H (FU);
  11. R0 = R1.L * R0.L, R1 = R1.H * R0.L (FU);
  12. R0 >>= 16;
  13. /* Unsigned multiplication has the nice property that we can
  14. ignore carry on this first addition. */
  15. R0 = R0 + R3;
  16. R0 = R0 + R1;
  17. cc = ac0;
  18. R1 = cc;
  19. R1 = PACK(R1.l,R0.h);
  20. R0 = R1 + R2;
  21. RTS;
  22. .size ___umulsi3_highpart, .-___umulsi3_highpart