linux/arch/blackfin/lib/umulsi3_highpart.S
<<
>>
Prefs
   1/*
   2 * Copyright 2007 Analog Devices Inc.
   3 *
   4 * Licensed under the Clear BSD license or the GPL-2 (or later)
   5 */
   6
   7.align 2
   8.global ___umulsi3_highpart;
   9.type ___umulsi3_highpart, STT_FUNC;
  10
  11#ifdef CONFIG_ARITHMETIC_OPS_L1
  12.section .l1.text
  13#else
  14.text
  15#endif
  16
  17___umulsi3_highpart:
  18        R2 = R1.H * R0.H, R3 = R1.L * R0.H (FU);
  19        R0 = R1.L * R0.L, R1 = R1.H * R0.L (FU);
  20        R0 >>= 16;
  21        /* Unsigned multiplication has the nice property that we can
  22           ignore carry on this first addition.  */
  23        R0 = R0 + R3;
  24        R0 = R0 + R1;
  25        cc = ac0;
  26        R1 = cc;
  27        R1 = PACK(R1.l,R0.h);
  28        R0 = R1 + R2;
  29        RTS;
  30
  31.size ___umulsi3_highpart, .-___umulsi3_highpart
  32