Deleted Added
sdiff udiff text old ( 3535:af201ccd2e51 ) new ( 4046:ef34b290091e )
full compact
1/*
2 * Copyright (c) 2004-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 27 unchanged lines hidden (view full) ---

36#include "arch/arguments.hh"
37
38using namespace std;
39
40
41void
42Printk(TheISA::Arguments args)
43{
44 char *p = (char *)args++;
45
46 ios::fmtflags saved_flags = DebugOut().flags();
47 char old_fill = DebugOut().fill();
48 int old_precision = DebugOut().precision();
49
50 while (*p) {
51 switch (*p) {
52 case '%': {
53 bool more = true;
54 bool islong = false;
55 bool leftjustify = false;
56 bool format = false;

--- 56 unchanged lines hidden (view full) ---

113 case 'u':
114 case 'X':
115 case 'x':
116 case 'O':
117 case 'o':
118 case 'P':
119 case 'p': {
120 if (hexnum)
121 DebugOut() << hex;
122
123 if (octal)
124 DebugOut() << oct;
125
126 if (format) {
127 if (!zero)
128 DebugOut().setf(ios::showbase);
129 else {
130 if (hexnum) {
131 DebugOut() << "0x";
132 width -= 2;
133 } else if (octal) {
134 DebugOut() << "0";
135 width -= 1;
136 }
137 }
138 }
139
140 if (zero)
141 DebugOut().fill('0');
142
143 if (width > 0)
144 DebugOut().width(width);
145
146 if (leftjustify && !zero)
147 DebugOut().setf(ios::left);
148
149 if (sign) {
150 if (islong)
151 DebugOut() << (int64_t)args;
152 else
153 DebugOut() << (int32_t)args;
154 } else {
155 if (islong)
156 DebugOut() << (uint64_t)args;
157 else
158 DebugOut() << (uint32_t)args;
159 }
160
161 if (zero)
162 DebugOut().fill(' ');
163
164 if (width > 0)
165 DebugOut().width(0);
166
167 DebugOut() << dec;
168
169 ++args;
170 }
171 break;
172
173 case 's': {
174 char *s = (char *)args;
175 if (!s)
176 s = "<NULL>";
177
178 if (width > 0)
179 DebugOut().width(width);
180 if (leftjustify)
181 DebugOut().setf(ios::left);
182
183 DebugOut() << s;
184 ++args;
185 }
186 break;
187 case 'C':
188 case 'c': {
189 uint64_t mask = (*p == 'C') ? 0xffL : 0x7fL;
190 uint64_t num;
191 int width;

--- 4 unchanged lines hidden (view full) ---

196 } else {
197 num = (uint32_t)args;
198 width = sizeof(uint32_t);
199 }
200
201 while (width-- > 0) {
202 char c = (char)(num & mask);
203 if (c)
204 DebugOut() << c;
205 num >>= 8;
206 }
207
208 ++args;
209 }
210 break;
211 case 'b': {
212 uint64_t n = (uint64_t)args++;
213 char *s = (char *)args++;
214 DebugOut() << s << ": " << n;
215 }
216 break;
217 case 'n':
218 case 'N': {
219 args += 2;
220#if 0
221 uint64_t n = (uint64_t)args++;
222 struct reg_values *rv = (struct reg_values *)args++;

--- 5 unchanged lines hidden (view full) ---

228 args += 2;
229#if 0
230 uint64_t n = (uint64_t)args++;
231 struct reg_desc *rd = (struct reg_desc *)args++;
232#endif
233 }
234 break;
235 case '%':
236 DebugOut() << '%';
237 break;
238 }
239 ++p;
240 }
241 break;
242 case '\n':
243 DebugOut() << endl;
244 ++p;
245 break;
246 case '\r':
247 ++p;
248 if (*p != '\n')
249 DebugOut() << endl;
250 break;
251
252 default: {
253 size_t len = strcspn(p, "%\n\r\0");
254 DebugOut().write(p, len);
255 p += len;
256 }
257 }
258 }
259
260 DebugOut().flags(saved_flags);
261 DebugOut().fill(old_fill);
262 DebugOut().precision(old_precision);
263}
264