OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libquadmath/] [printf/] [_itowa.h] - Blame information for rev 849

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 740 jeremybenn
/* Internal function for converting integers to ASCII.
2
   Copyright (C) 1994,95,96,97,98,99,2002,2003 Free Software Foundation, Inc.
3
   This file is part of the GNU C Library.
4
 
5
   The GNU C Library is free software; you can redistribute it and/or
6
   modify it under the terms of the GNU Lesser General Public
7
   License as published by the Free Software Foundation; either
8
   version 2.1 of the License, or (at your option) any later version.
9
 
10
   The GNU C Library is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
   Lesser General Public License for more details.
14
 
15
   You should have received a copy of the GNU Lesser General Public
16
   License along with the GNU C Library; if not, write to the Free
17
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18
   02111-1307 USA.  */
19
 
20
#ifndef _ITOWA_H
21
#define _ITOWA_H        1
22
 
23
/* Convert VALUE into ASCII in base BASE (2..16).
24
   Write backwards starting the character just before BUFLIM.
25
   Return the address of the first (left-to-right) character in the number.
26
   Use upper case letters iff UPPER_CASE is nonzero.  */
27
 
28
static const wchar_t _itowa_lower_digits[16] = L_("0123456789abcdef");
29
static const wchar_t _itowa_upper_digits[16] = L_("0123456789ABCDEF");
30
 
31
static inline wchar_t *
32
__attribute__ ((unused, always_inline))
33
_itowa_word (unsigned long value, wchar_t *buflim,
34
             unsigned int base, int upper_case)
35
{
36
  const wchar_t *digits = (upper_case
37
                           ? _itowa_upper_digits : _itowa_lower_digits);
38
  wchar_t *bp = buflim;
39
 
40
  switch (base)
41
    {
42
#define SPECIAL(Base)                                                         \
43
    case Base:                                                                \
44
      do                                                                      \
45
        *--bp = digits[value % Base];                                         \
46
      while ((value /= Base) != 0);                                            \
47
      break
48
 
49
      SPECIAL (10);
50
      SPECIAL (16);
51
      SPECIAL (8);
52
    default:
53
      do
54
        *--bp = digits[value % base];
55
      while ((value /= base) != 0);
56
    }
57
  return bp;
58
}
59
 
60
static inline wchar_t *
61
__attribute__ ((unused, always_inline))
62
_itowa (uint64_t value, wchar_t *buflim,
63
        unsigned int base, int upper_case)
64
{
65
  const wchar_t *digits = (upper_case
66
                           ? _itowa_upper_digits : _itowa_lower_digits);
67
  wchar_t *bp = buflim;
68
 
69
  switch (base)
70
    {
71
      SPECIAL (10);
72
      SPECIAL (16);
73
      SPECIAL (8);
74
    default:
75
      do
76
        *--bp = digits[value % base];
77
      while ((value /= base) != 0);
78
    }
79
  return bp;
80
}
81
#undef SPECIAL
82
 
83
#endif  /* itowa.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.