Home | History | Annotate | Line # | Download | only in lm32
      1       1.1  mrg /* _mulsi3 for Lattice Mico32.
      2       1.1  mrg    Contributed by Jon Beniston <jon (at) beniston.com>
      3       1.1  mrg 
      4  1.1.1.12  mrg    Copyright (C) 2009-2024 Free Software Foundation, Inc.
      5       1.1  mrg 
      6       1.1  mrg    This file is free software; you can redistribute it and/or modify it
      7       1.1  mrg    under the terms of the GNU General Public License as published by the
      8       1.1  mrg    Free Software Foundation; either version 3, or (at your option) any
      9       1.1  mrg    later version.
     10       1.1  mrg 
     11       1.1  mrg    This file is distributed in the hope that it will be useful, but
     12       1.1  mrg    WITHOUT ANY WARRANTY; without even the implied warranty of
     13       1.1  mrg    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14       1.1  mrg    General Public License for more details.
     15       1.1  mrg 
     16       1.1  mrg    Under Section 7 of GPL version 3, you are granted additional
     17       1.1  mrg    permissions described in the GCC Runtime Library Exception, version
     18       1.1  mrg    3.1, as published by the Free Software Foundation.
     19       1.1  mrg 
     20       1.1  mrg    You should have received a copy of the GNU General Public License and
     21       1.1  mrg    a copy of the GCC Runtime Library Exception along with this program;
     22       1.1  mrg    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     23       1.1  mrg    <http://www.gnu.org/licenses/>. */
     24       1.1  mrg 
     25       1.1  mrg #include "libgcc_lm32.h"
     26       1.1  mrg 
     27       1.1  mrg /* Integer multiplication.  */
     28       1.1  mrg 
     29       1.1  mrg USItype
     30       1.1  mrg __mulsi3 (USItype a, USItype b)
     31       1.1  mrg {
     32       1.1  mrg   USItype result;
     33       1.1  mrg 
     34       1.1  mrg   result = 0;
     35       1.1  mrg 
     36       1.1  mrg   if (a == 0)
     37       1.1  mrg     return 0;
     38       1.1  mrg 
     39       1.1  mrg   while (b != 0)
     40       1.1  mrg     {
     41       1.1  mrg       if (b & 1)
     42       1.1  mrg 	result += a;
     43       1.1  mrg       a <<= 1;
     44       1.1  mrg       b >>= 1;
     45       1.1  mrg     }
     46       1.1  mrg 
     47       1.1  mrg   return result;
     48       1.1  mrg }
     49