12345678910111213141516171819202122232425262728293031 |
- /*
- * Copyright 2007 Analog Devices Inc.
- *
- * Licensed under the Clear BSD license or the GPL-2 (or later)
- */
- .align 2
- .global ___umulsi3_highpart;
- .type ___umulsi3_highpart, STT_FUNC;
- #ifdef CONFIG_ARITHMETIC_OPS_L1
- .section .l1.text
- #else
- .text
- #endif
- ___umulsi3_highpart:
- R2 = R1.H * R0.H, R3 = R1.L * R0.H (FU);
- R0 = R1.L * R0.L, R1 = R1.H * R0.L (FU);
- R0 >>= 16;
- /* Unsigned multiplication has the nice property that we can
- ignore carry on this first addition. */
- R0 = R0 + R3;
- R0 = R0 + R1;
- cc = ac0;
- R1 = cc;
- R1 = PACK(R1.l,R0.h);
- R0 = R1 + R2;
- RTS;
- .size ___umulsi3_highpart, .-___umulsi3_highpart
|