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 std::ostream &out = Trace::output();
45 char *p = (char *)args++;
46
47 ios::fmtflags saved_flags = out.flags();
48 char old_fill = out.fill();
49 int old_precision = out.precision();
50
51 while (*p) {
52 switch (*p) {
53 case '%': {
54 bool more = true;
55 bool islong = false;
56 bool leftjustify = false;
57 bool format = false;

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

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

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

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

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

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