linux/arch/arm/lib/muldi3.S
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/lib/muldi3.S
   3 *
   4 *  Author:     Nicolas Pitre
   5 *  Created:    Oct 19, 2005
   6 *  Copyright:  Monta Vista Software, Inc.
   7 *
   8 *  This program is free software; you can redistribute it and/or modify
   9 *  it under the terms of the GNU General Public License version 2 as
  10 *  published by the Free Software Foundation.
  11 */
  12
  13#include <linux/linkage.h>
  14
  15#ifdef __ARMEB__
  16#define xh r0
  17#define xl r1
  18#define yh r2
  19#define yl r3
  20#else
  21#define xl r0
  22#define xh r1
  23#define yl r2
  24#define yh r3
  25#endif
  26
  27ENTRY(__muldi3)
  28ENTRY(__aeabi_lmul)
  29
  30        mul     xh, yl, xh
  31        mla     xh, xl, yh, xh
  32        mov     ip, xl, lsr #16
  33        mov     yh, yl, lsr #16
  34        bic     xl, xl, ip, lsl #16
  35        bic     yl, yl, yh, lsl #16
  36        mla     xh, yh, ip, xh
  37        mul     yh, xl, yh
  38        mul     xl, yl, xl
  39        mul     ip, yl, ip
  40        adds    xl, xl, yh, lsl #16
  41        adc     xh, xh, yh, lsr #16
  42        adds    xl, xl, ip, lsl #16
  43        adc     xh, xh, ip, lsr #16
  44        mov     pc, lr
  45
  46ENDPROC(__muldi3)
  47ENDPROC(__aeabi_lmul)
  48