diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-04-20 13:07:42 -0700 |
---|---|---|
committer | Randall Spangler <rspangler@chromium.org> | 2012-04-20 14:01:11 -0700 |
commit | 9f552ff5aa043eddc5b6d59db09728d83faf97dd (patch) | |
tree | e7f39070eac9b14a9afa6363703eab0950e856cc /common/uart_buffering.c | |
parent | a05deade13c696643ca6f8cc216f78db015a7ddb (diff) | |
download | chrome-ec-9f552ff5aa043eddc5b6d59db09728d83faf97dd.tar.gz |
Implement 64-bit integer printing in uart_printf()
Signed-off-by: Randall Spangler <rspangler@chromium.org>
BUG=chrome-os-partner:7490
TEST=timerinfo; numbers should look reasonable
Change-Id: I698be99c87bf311013427ac0ed9e93e5687f40c0
Diffstat (limited to 'common/uart_buffering.c')
-rw-r--r-- | common/uart_buffering.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/common/uart_buffering.c b/common/uart_buffering.c index 6393ff47be..6d08dbb9af 100644 --- a/common/uart_buffering.c +++ b/common/uart_buffering.c @@ -452,24 +452,40 @@ int uart_printf(const char *format, ...) if (vstr == NULL) vstr = "(NULL)"; } else { - uint32_t v; + uint64_t v; int is_negative = 0; + int is_64bit = 0; int base = 10; - /* TODO: (crosbug.com/p/7490) handle "%l" prefix for - * uint64_t */ + if (c == 'l') { + is_64bit = 1; + c = *format++; + } /* Special-case: %T = current time */ - if (c == 'T') - v = get_time().le.lo; - else + if (c == 'T') { + v = get_time().val; + is_64bit = 1; + } else if (is_64bit) { + v = va_arg(args, uint64_t); + } else { v = va_arg(args, uint32_t); + } switch (c) { case 'd': - if ((int)v < 0) { - is_negative = 1; - v = -v; + if (is_64bit) { + if ((int64_t)v < 0) { + is_negative = 1; + if (v != (1ULL << 63)) + v = -v; + } + } else { + if ((int)v < 0) { + is_negative = 1; + if (v != (1ULL << 31)) + v = -(int)v; + } } break; case 'u': @@ -496,10 +512,9 @@ int uart_printf(const char *format, ...) if (!v) *(--vstr) = '0'; - while (v) { - *(--vstr) = int_chars[v % base]; - v /= base; - } + while (v) + *(--vstr) = int_chars[uint64divmod(&v, base)]; + if (is_negative) *(--vstr) = '-'; } |