   1              		.file	"rprintf.c"
   9              	.Ltext0:
  10              		.align	2
  11              		.global	rprintf_devopen
  13              	rprintf_devopen:
  14              	.LFB2:
  15              		.file 1 "rprintf.c"
   1:rprintf.c     **** //#########################################################################
   2:rprintf.c     **** // printf.c
   3:rprintf.c     **** //
   4:rprintf.c     **** // *** printf() based on sprintf() from gcctest9.c Volker Oth
   5:rprintf.c     **** //
   6:rprintf.c     **** // *** Changes made by Holger Klabunde
   7:rprintf.c     **** // Now takes format strings from FLASH (was into RAM ! before)
   8:rprintf.c     **** // Fixed bug for %i, %I. u_val was used before it had the right value
   9:rprintf.c     **** // Added %d, %D (is same as %i, %I)
  10:rprintf.c     **** // Support for long variables %li, %ld, %Lu, %LX ....
  11:rprintf.c     **** // %x, %X now gives upper case hex characters A,B,C,D,E,F
  12:rprintf.c     **** // Output can be redirected in a single function: myputchar()
  13:rprintf.c     **** // Make printf() smaller by commenting out a few #defines
  14:rprintf.c     **** // Added some SPACE and ZERO padding %02x or % 3u up to 9 characters
  15:rprintf.c     **** // 
  16:rprintf.c     **** // Todo:
  17:rprintf.c     **** // %f, %F for floating point numbers
  18:rprintf.c     **** //
  19:rprintf.c     **** // *** Changes made by Martin Thomas for the efsl debug output:
  20:rprintf.c     **** // - removed AVR "progmem"
  21:rprintf.c     **** // - added function pointer for "putchar"
  22:rprintf.c     **** // - devopen function
  23:rprintf.c     **** //
  24:rprintf.c     **** //#########################################################################
  25:rprintf.c     **** 
  26:rprintf.c     **** #include <stdarg.h>
  27:rprintf.c     **** #include <string.h>
  28:rprintf.c     **** #include "rprintf.h"
  29:rprintf.c     **** 
  30:rprintf.c     **** #define SCRATCH 12	//32Bits go up to 4GB + 1 Byte for \0
  31:rprintf.c     **** 
  32:rprintf.c     **** //Spare some program space by making a comment of all not used format flag lines
  33:rprintf.c     **** #define USE_LONG 	// %lx, %Lu and so on, else only 16 bit integer is allowed
  34:rprintf.c     **** //#define USE_OCTAL	// %o, %O Octal output. Who needs this ?
  35:rprintf.c     **** #define USE_STRING      // %s, %S Strings as parameters
  36:rprintf.c     **** #define USE_CHAR	// %c, %C Chars as parameters
  37:rprintf.c     **** #define USE_INTEGER	// %i, %I Remove this format flag. %d, %D does the same
  38:rprintf.c     **** #define USE_HEX		// %x, %X Hexadezimal output
  39:rprintf.c     **** #define USE_UPPERHEX	// %x, %X outputs A,B,C... else a,b,c...
  40:rprintf.c     **** #ifndef USE_HEX
  41:rprintf.c     ****  #undef USE_UPPERHEX    // ;)
  42:rprintf.c     **** #endif
  43:rprintf.c     **** #define USE_UPPER	// uncommenting this removes %C,%D,%I,%O,%S,%U,%X and %L..
  44:rprintf.c     ****                         // only lowercase format flags are used
  45:rprintf.c     **** #define PADDING         //SPACE and ZERO padding
  46:rprintf.c     **** 
  47:rprintf.c     **** 
  48:rprintf.c     **** static int (*putcharfunc)(int c);
  49:rprintf.c     **** 
  50:rprintf.c     **** void rprintf_devopen( int(*put)(int) )
  51:rprintf.c     **** {
  16              	 args = 0, pretend = 0, frame = 0
  17              		@ frame_needed = 0, uses_anonymous_args = 0
  18              		@ link register save eliminated.
  19              	.LVL0:
  20              		.loc 1 52 0
  52:rprintf.c     ****    putcharfunc = put;
  21              	r3, .L3
  22 0000 04309FE5 		.loc 1 51 0
  23              		@ lr needed for prologue
  24              		.loc 1 52 0
  25              		str	r0, [r3, #0]
  26 0004 000083E5 		.loc 1 53 0
  53:rprintf.c     **** }
  27              	
  28 0008 1EFF2FE1 	.L4:
  29              		.align	2
  30              	.L3:
  31              		.word	putcharfunc
  32 000c 00000000 	.LFE2:
  34              		.global	__umodsi3
  35              		.global	__udivsi3
  36              		.align	2
  37              		.global	rprintf
  39              	rprintf:
  40              	.LFB4:
  41              		.loc 1 62 0
  54:rprintf.c     **** 
  55:rprintf.c     **** static void myputchar(unsigned char c)
  56:rprintf.c     **** {
  57:rprintf.c     **** 	if(c == '\n') putcharfunc('\r');
  58:rprintf.c     **** 	putcharfunc(c);
  59:rprintf.c     **** }
  60:rprintf.c     **** 
  61:rprintf.c     **** void rprintf(char const *format, ...)
  62:rprintf.c     **** {
  42              	retend = 16, frame = 16
  43              		@ frame_needed = 0, uses_anonymous_args = 1
  44              	.LVL1:
  45              		stmfd	sp!, {r0, r1, r2, r3}
  46 0010 0F002DE9 	.LCFI0:
  47              		stmfd	sp!, {r4, r5, r6, r7, r8, sl, lr}
  48 0014 F0452DE9 	.LCFI1:
  49              		sub	sp, sp, #16
  50 0018 10D04DE2 	.LCFI2:
  51              		.loc 1 83 0
  63:rprintf.c     ****   unsigned char scratch[SCRATCH];
  64:rprintf.c     ****   unsigned char format_flag;
  65:rprintf.c     ****   unsigned short base;
  66:rprintf.c     ****   unsigned char *ptr;
  67:rprintf.c     ****   unsigned char issigned=0;
  68:rprintf.c     ****   va_list ap;
  69:rprintf.c     **** 
  70:rprintf.c     **** #ifdef USE_LONG
  71:rprintf.c     **** // #warning "use long"
  72:rprintf.c     ****   unsigned char islong=0;
  73:rprintf.c     ****   unsigned long u_val=0;
  74:rprintf.c     ****   long s_val=0;
  75:rprintf.c     **** #else
  76:rprintf.c     ****   unsigned int u_val=0;
  77:rprintf.c     ****   int s_val=0;
  78:rprintf.c     **** #endif
  79:rprintf.c     **** 
  80:rprintf.c     ****   unsigned char fill;
  81:rprintf.c     ****   unsigned char width;
  82:rprintf.c     **** 
  83:rprintf.c     ****   va_start (ap, format);
  52              	p, #48
  53 001c 30308DE2 		.loc 1 62 0
  54              		ldr	r8, [sp, #44]
  55 0020 2C809DE5 		.loc 1 83 0
  56              		str	r3, [sp, #12]
  57 0024 0C308DE5 	.LVL2:
  58              	.LVL3:
  59              	.L72:
  60              		.loc 1 85 0
  84:rprintf.c     ****   for (;;){
  85:rprintf.c     ****     while ((format_flag = *(format++)) != '%'){      // Until '%' or '\0' 
  61              	 [r8], #1	@ zero_extendqisi2
  62 0028 0100D8E4 	.LVL4:
  63              		cmp	r0, #37
  64 002c 250050E3 		beq	.L74
  65 0030 0B00000A 	.L7:
  66              		.loc 1 86 0
  86:rprintf.c     ****       if (!format_flag){va_end (ap); return;}
  67              	0, #0
  68 0034 000050E3 		beq	.L56
  69 0038 CA00000A 	.LVL5:
  70              	.L21:
  71              	.LVL6:
  72              		.loc 1 130 0
  87:rprintf.c     ****       myputchar(format_flag);
  88:rprintf.c     ****     }
  89:rprintf.c     **** 
  90:rprintf.c     ****     issigned=0; //default unsigned
  91:rprintf.c     ****     base = 10;
  92:rprintf.c     **** 
  93:rprintf.c     ****     format_flag = *format++; //get char after '%'
  94:rprintf.c     **** 
  95:rprintf.c     **** #ifdef PADDING
  96:rprintf.c     ****     width=0; //no formatting
  97:rprintf.c     ****     fill=0;  //no formatting
  98:rprintf.c     ****     if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding  ?
  99:rprintf.c     ****      {
 100:rprintf.c     ****       fill=format_flag;
 101:rprintf.c     ****       format_flag = *format++; //get char after padding char
 102:rprintf.c     ****       if(format_flag>='0' && format_flag<='9')
 103:rprintf.c     ****        {
 104:rprintf.c     ****         width=format_flag-'0';
 105:rprintf.c     ****         format_flag = *format++; //get char after width char
 106:rprintf.c     ****        }
 107:rprintf.c     ****      }
 108:rprintf.c     **** #endif
 109:rprintf.c     **** 
 110:rprintf.c     **** #ifdef USE_LONG
 111:rprintf.c     ****     islong=0; //default int value
 112:rprintf.c     **** #ifdef USE_UPPER
 113:rprintf.c     ****     if(format_flag=='l' || format_flag=='L') //Long value 
 114:rprintf.c     **** #else
 115:rprintf.c     ****     if(format_flag=='l') //Long value 
 116:rprintf.c     **** #endif
 117:rprintf.c     ****      {
 118:rprintf.c     ****       islong=1;
 119:rprintf.c     ****       format_flag = *format++; //get char after 'l' or 'L'
 120:rprintf.c     ****      }
 121:rprintf.c     **** #endif
 122:rprintf.c     **** 
 123:rprintf.c     ****     switch (format_flag)
 124:rprintf.c     ****     {
 125:rprintf.c     **** #ifdef USE_CHAR
 126:rprintf.c     ****     case 'c':
 127:rprintf.c     **** #ifdef USE_UPPER
 128:rprintf.c     ****     case 'C':
 129:rprintf.c     **** #endif
 130:rprintf.c     ****       format_flag = va_arg(ap,int);
  73              	4, r0, #255
  74 003c FF4000E2 	.LVL7:
  75              	.LBB13:
  76              	.LBB14:
  77              		.loc 1 57 0
  78              		cmp	r4, #10
  79 0040 0A0054E3 		ldrne	r7, .L77
  80 0044 5C739F15 		beq	.L75
  81 0048 5F00000A 	.L10:
  82              	.LVL8:
  83              	.LBE14:
  84              	.LBE13:
  85              	.LBB15:
  86              	.LBB16:
  87              		.loc 1 58 0
  88              		mov	r0, r4
  89 004c 0400A0E1 	.LVL9:
  90              		mov	lr, pc
  91 0050 0FE0A0E1 		ldr	pc, [r7, #0]
  92 0054 00F097E5 	.LVL10:
  93              	.LBE16:
  94              	.LBE15:
  95              		.loc 1 85 0
  96              		ldrb	r0, [r8], #1	@ zero_extendqisi2
  97 0058 0100D8E4 	.LVL11:
  98              		cmp	r0, #37
  99 005c 250050E3 		bne	.L7
 100 0060 F3FFFF1A 	.LVL12:
 101              	.L74:
 102              		.loc 1 93 0
 103              		ldrb	r2, [r8], #1	@ zero_extendqisi2
 104 0064 0120D8E4 	.LVL13:
 105              		.loc 1 98 0
 106              		cmp	r2, #32
 107 0068 200052E3 		cmpne	r2, #48
 108 006c 30005213 		movne	r3, #0
 109 0070 0030A013 		moveq	r3, #1
 110 0074 0130A003 		movne	r6, r3
 111 0078 0360A011 		movne	r0, r2
 112 007c 0200A011 	.LVL14:
 113              		movne	sl, r6
 114 0080 06A0A011 		bne	.L15
 115 0084 0700001A 		.loc 1 101 0
 116              		ldrb	r0, [r8], #1	@ zero_extendqisi2
 117 0088 0100D8E4 		.loc 1 102 0
 118              		sub	r3, r0, #48
 119 008c 303040E2 		and	r6, r3, #255
 120 0090 FF6003E2 		cmp	r6, #9
 121 0094 090056E3 		.loc 1 105 0
 122              		ldrlsb	r0, [r8], #1	@ zero_extendqisi2
 123 0098 0100D894 		.loc 1 102 0
 124              		movhi	sl, r2
 125 009c 02A0A081 		movhi	r6, #0
 126 00a0 0060A083 		.loc 1 105 0
 127              		movls	sl, r2
 128 00a4 02A0A091 	.L15:
 129              		.loc 1 113 0
 130              		cmp	r0, #76
 131 00a8 4C0050E3 		cmpne	r0, #108
 132 00ac 6C005013 		.loc 1 119 0
 133              		ldreqb	r0, [r8], #1	@ zero_extendqisi2
 134 00b0 0100D804 		.loc 1 113 0
 135              		movne	r3, #0
 136 00b4 0030A013 		moveq	r3, #1
 137 00b8 0130A003 		movne	r2, r3
 138 00bc 0320A011 	.LVL15:
 139              		.loc 1 123 0
 140              		sub	r3, r0, #67
 141 00c0 433040E2 		.loc 1 119 0
 142              		moveq	r2, #1
 143 00c4 0120A003 		.loc 1 123 0
 144              		cmp	r3, #53
 145 00c8 350053E3 		ldrls	pc, [pc, r3, asl #2]
 146 00cc 03F19F97 		b	.L21
 147 00d0 D9FFFFEA 		.p2align 2
 148              	.L27:
 149              		.word	.L22
 150 00d4 AC010000 		.word	.L23
 151 00d8 E0010000 		.word	.L21
 152 00dc 3C000000 		.word	.L21
 153 00e0 3C000000 		.word	.L21
 154 00e4 3C000000 		.word	.L21
 155 00e8 3C000000 		.word	.L23
 156 00ec E0010000 		.word	.L21
 157 00f0 3C000000 		.word	.L21
 158 00f4 3C000000 		.word	.L21
 159 00f8 3C000000 		.word	.L21
 160 00fc 3C000000 		.word	.L21
 161 0100 3C000000 		.word	.L21
 162 0104 3C000000 		.word	.L21
 163 0108 3C000000 		.word	.L21
 164 010c 3C000000 		.word	.L21
 165 0110 3C000000 		.word	.L24
 166 0114 08020000 		.word	.L21
 167 0118 3C000000 		.word	.L25
 168 011c 64020000 		.word	.L21
 169 0120 3C000000 		.word	.L21
 170 0124 3C000000 		.word	.L26
 171 0128 60030000 		.word	.L21
 172 012c 3C000000 		.word	.L21
 173 0130 3C000000 		.word	.L21
 174 0134 3C000000 		.word	.L21
 175 0138 3C000000 		.word	.L21
 176 013c 3C000000 		.word	.L21
 177 0140 3C000000 		.word	.L21
 178 0144 3C000000 		.word	.L21
 179 0148 3C000000 		.word	.L21
 180 014c 3C000000 		.word	.L21
 181 0150 3C000000 		.word	.L22
 182 0154 AC010000 		.word	.L23
 183 0158 E0010000 		.word	.L21
 184 015c 3C000000 		.word	.L21
 185 0160 3C000000 		.word	.L21
 186 0164 3C000000 		.word	.L21
 187 0168 3C000000 		.word	.L23
 188 016c E0010000 		.word	.L21
 189 0170 3C000000 		.word	.L21
 190 0174 3C000000 		.word	.L21
 191 0178 3C000000 		.word	.L21
 192 017c 3C000000 		.word	.L21
 193 0180 3C000000 		.word	.L21
 194 0184 3C000000 		.word	.L21
 195 0188 3C000000 		.word	.L21
 196 018c 3C000000 		.word	.L21
 197 0190 3C000000 		.word	.L24
 198 0194 08020000 		.word	.L21
 199 0198 3C000000 		.word	.L25
 200 019c 64020000 		.word	.L21
 201 01a0 3C000000 		.word	.L21
 202 01a4 3C000000 		.word	.L26
 203 01a8 60030000 	.L22:
 204              		.loc 1 130 0
 205              		ldr	r2, [sp, #12]
 206 01ac 0C209DE5 	.LVL16:
 207              		ldrb	r0, [r2, #0]	@ zero_extendqisi2
 208 01b0 0000D2E5 		and	r4, r0, #255
 209 01b4 FF4000E2 	.LVL17:
 210              		add	r3, r2, #4
 211 01b8 043082E2 	.LBB17:
 212              	.LBB18:
 213              		.loc 1 57 0
 214              		cmp	r4, #10
 215 01bc 0A0054E3 	.LBE18:
 216              	.LBE17:
 217              		.loc 1 130 0
 218              		str	r3, [sp, #12]
 219 01c0 0C308DE5 		ldrne	r7, .L77
 220 01c4 DC719F15 	.LBB19:
 221              	.LBB20:
 222              		.loc 1 57 0
 223              		bne	.L10
 224 01c8 9FFFFF1A 	.LVL18:
 225              	.L75:
 226              		ldr	r7, .L77
 227 01cc D4719FE5 		mov	r0, #13
 228 01d0 0D00A0E3 	.LVL19:
 229              		mov	lr, pc
 230 01d4 0FE0A0E1 		ldr	pc, [r7, #0]
 231 01d8 00F097E5 	.LVL20:
 232              		b	.L10
 233 01dc 9AFFFFEA 	.LVL21:
 234              	.L23:
 235              	.LBE20:
 236              	.LBE19:
 237              		.loc 1 191 0
 131:rprintf.c     ****       // no break -> run into default
 132:rprintf.c     **** #endif
 133:rprintf.c     **** 
 134:rprintf.c     ****     default:
 135:rprintf.c     ****       myputchar(format_flag);
 136:rprintf.c     ****       continue;
 137:rprintf.c     **** 
 138:rprintf.c     **** #ifdef USE_STRING
 139:rprintf.c     **** #ifdef USE_UPPER
 140:rprintf.c     ****     case 'S':
 141:rprintf.c     **** #endif
 142:rprintf.c     ****     case 's':
 143:rprintf.c     ****       ptr = (unsigned char*)va_arg(ap,char *);
 144:rprintf.c     ****       while(*ptr) { myputchar(*ptr); ptr++; }
 145:rprintf.c     ****       continue;
 146:rprintf.c     **** #endif
 147:rprintf.c     **** 
 148:rprintf.c     **** #ifdef USE_OCTAL
 149:rprintf.c     ****     case 'o':
 150:rprintf.c     **** #ifdef USE_UPPER
 151:rprintf.c     ****     case 'O':
 152:rprintf.c     **** #endif
 153:rprintf.c     ****       base = 8;
 154:rprintf.c     ****       myputchar('0');
 155:rprintf.c     ****       goto CONVERSION_LOOP;
 156:rprintf.c     **** #endif
 157:rprintf.c     **** 
 158:rprintf.c     **** #ifdef USE_INTEGER //don't use %i, is same as %d
 159:rprintf.c     ****     case 'i':
 160:rprintf.c     **** #ifdef USE_UPPER
 161:rprintf.c     ****     case 'I':
 162:rprintf.c     **** #endif
 163:rprintf.c     **** #endif
 164:rprintf.c     ****     case 'd':
 165:rprintf.c     **** #ifdef USE_UPPER
 166:rprintf.c     ****     case 'D':
 167:rprintf.c     **** #endif
 168:rprintf.c     ****       issigned=1;
 169:rprintf.c     ****       // no break -> run into next case
 170:rprintf.c     ****     case 'u':
 171:rprintf.c     **** #ifdef USE_UPPER
 172:rprintf.c     ****     case 'U':
 173:rprintf.c     **** #endif
 174:rprintf.c     **** 
 175:rprintf.c     **** //don't insert some case below this if USE_HEX is undefined !
 176:rprintf.c     **** //or put       goto CONVERSION_LOOP;  before next case.
 177:rprintf.c     **** #ifdef USE_HEX
 178:rprintf.c     ****       goto CONVERSION_LOOP;
 179:rprintf.c     ****     case 'x':
 180:rprintf.c     **** #ifdef USE_UPPER
 181:rprintf.c     ****     case 'X':
 182:rprintf.c     **** #endif
 183:rprintf.c     ****       base = 16;
 184:rprintf.c     **** #endif
 185:rprintf.c     **** 
 186:rprintf.c     ****     CONVERSION_LOOP:
 187:rprintf.c     **** 
 188:rprintf.c     ****       if(issigned) //Signed types
 189:rprintf.c     ****        {
 190:rprintf.c     **** #ifdef USE_LONG
 191:rprintf.c     ****         if(islong) { s_val = va_arg(ap,long); }
 238              	
 239 01e0 000052E3 		.loc 1 203 0
 240 01e4 6300001A 		mov	r7, #10
 192:rprintf.c     ****         else { s_val = va_arg(ap,int); }
 241              		.L40
 242 01e8 0C209DE5 	.LVL24:
 243              	.L24:
 244 01ec 043082E2 		.loc 1 143 0
 245 01f0 0C308DE5 		ldr	r2, [sp, #12]
 246 01f4 004092E5 	.LVL25:
 247              		add	r3, r2, #4
 248              		str	r3, [sp, #12]
 193:rprintf.c     **** #else
 194:rprintf.c     ****         s_val = va_arg(ap,int);
 195:rprintf.c     **** #endif
 196:rprintf.c     **** 
 197:rprintf.c     ****         if(s_val < 0) //Value negativ ?
 249              	 [r2, #0]
 250 01f8 000054E3 	.LVL26:
 251 01fc 620000BA 		.loc 1 144 0
 198:rprintf.c     ****          {
 199:rprintf.c     ****           s_val = - s_val; //Make it positiv
 200:rprintf.c     ****           myputchar('-');    //Output sign
 201:rprintf.c     ****          }
 202:rprintf.c     **** 
 203:rprintf.c     ****         u_val = (unsigned long)s_val;
 252              	rb	r0, [r2, #0]	@ zero_extendqisi2
 253 0200 0A70A0E3 	.LVL27:
 254 0204 220000EA 		cmp	r0, #0
 255              		beq	.L72
 256              		ldr	r7, .L77
 257              		mov	r5, r2
 258 0208 0C209DE5 	.LVL28:
 259              		b	.L31
 260 020c 043082E2 	.LVL29:
 261 0210 0C308DE5 	.L32:
 262 0214 002092E5 	.LBB21:
 263              	.LBB22:
 264              		.loc 1 58 0
 265 0218 0000D2E5 		mov	r0, r4
 266              		mov	lr, pc
 267 021c 000050E3 		ldr	pc, [r7, #0]
 268 0220 80FFFF0A 	.LVL30:
 269 0224 7C719FE5 	.LBE22:
 270 0228 0250A0E1 	.LBE21:
 271              		.loc 1 144 0
 272 022c 050000EA 		ldrb	r0, [r5, #1]!	@ zero_extendqisi2
 273              		cmp	r0, #0
 274              		beq	.L72
 275              	.LVL31:
 276              	.L31:
 277              		and	r4, r0, #255
 278 0230 0400A0E1 	.LVL32:
 279 0234 0FE0A0E1 	.LBB23:
 280 0238 00F097E5 	.LBB24:
 281              		.loc 1 57 0
 282              		cmp	r4, #10
 283              		mov	r0, #13
 284              		bne	.L32
 285 023c 0100F5E5 		mov	lr, pc
 286 0240 000050E3 		ldr	pc, [r7, #0]
 287 0244 77FFFF0A 	.LVL33:
 288              		b	.L32
 289              	.LVL34:
 290 0248 FF4000E2 	.L25:
 291              	.LBE24:
 292              	.LBE23:
 293              		.loc 1 186 0
 294              		mov	r1, #10
 295 024c 0A0054E3 	.LVL35:
 296 0250 0D00A0E3 	.L34:
 297 0254 F5FFFF1A 		.loc 1 208 0
 298 0258 0FE0A0E1 		cmp	r2, #0
 299 025c 00F097E5 		ldrne	r3, [sp, #12]
 300              		.loc 1 209 0
 301 0260 F2FFFFEA 		ldreq	r2, [sp, #12]
 302              	.LVL36:
 303              		.loc 1 208 0
 304              		ldrne	r4, [r3, #0]
 305              	.LVL37:
 306              		.loc 1 209 0
 307 0264 0A10A0E3 		addeq	r3, r2, #4
 308              		.loc 1 208 0
 309              		addne	r3, r3, #4
 204:rprintf.c     ****        }
 205:rprintf.c     ****       else //Unsigned types
 206:rprintf.c     ****        {
 207:rprintf.c     **** #ifdef USE_LONG
 208:rprintf.c     ****         if(islong) { u_val = va_arg(ap,unsigned long); }
 310              	dreq	r4, [r2, #0]
 311 0268 000052E3 		.loc 1 208 0
 312 026c 0C309D15 		movne	r7, r1
 209:rprintf.c     ****         else { u_val = va_arg(ap,unsigned int); }
 313              	oc 1 209 0
 314 0270 0C209D05 		moveq	r7, r1
 315              	.LVL38:
 316              	.L40:
 317 0274 00409315 		.loc 1 216 0
 318              		mov	r3, #0
 319              		strb	r3, [sp, #11]
 320 0278 04308202 		add	r5, sp, #11
 321              	.L43:
 322 027c 04308312 	.LVL39:
 323 0280 0C308D15 	.LBB25:
 324              		.loc 1 219 0
 325 0284 0C308D05 		mov	r0, r4
 326 0288 00409205 	.LVL40:
 327              		mov	r1, r7
 328 028c 0170A011 	.LVL41:
 329              		bl	__umodsi3
 330 0290 0170A001 	.LVL42:
 331              		add	r0, r0, #48
 332              		and	r3, r0, #255
 210:rprintf.c     **** #else
 211:rprintf.c     ****         u_val = va_arg(ap,unsigned int);
 212:rprintf.c     **** #endif
 213:rprintf.c     ****        }
 214:rprintf.c     ****     
 215:rprintf.c     ****       ptr = scratch + SCRATCH;
 216:rprintf.c     ****       *--ptr = 0;
 333              	0
 334 0294 0030A0E3 		cmp	r3, #57
 335 0298 0B30CDE5 		.loc 1 225 0
 336 029c 0B508DE2 		add	r2, r3, #7
 337              		andhi	r3, r2, #255
 338              		.loc 1 230 0
 339              		mov	r0, r4
 217:rprintf.c     ****       do
 218:rprintf.c     ****        {
 219:rprintf.c     ****         char ch = u_val % base + '0';
 340              	 229 0
 341 02a0 0400A0E1 		strb	r3, [r5, #-1]!
 342              		.loc 1 230 0
 343 02a4 0710A0E1 		mov	r1, r7
 344              		bl	__udivsi3
 345 02a8 FEFFFFEB 	.LVL44:
 346              		.loc 1 233 0
 347 02ac 300080E2 		cmp	r6, #0
 348 02b0 FF3000E2 		sub	r3, r6, #1
 349              		andne	r6, r3, #255
 220:rprintf.c     **** #ifdef USE_HEX
 221:rprintf.c     ****         if (ch > '9')
 350              	loc 1 235 0
 351 02b4 390053E3 		cmp	r0, #0
 222:rprintf.c     ****          {
 223:rprintf.c     ****           ch += 'a' - '9' - 1;
 224:rprintf.c     **** #ifdef USE_UPPERHEX
 225:rprintf.c     ****           ch-=0x20;
 352              	BB26:
 353 02b8 072083E2 		.loc 1 230 0
 354 02bc FF300282 		mov	r4, r0
 226:rprintf.c     **** #endif
 227:rprintf.c     ****          }
 228:rprintf.c     **** #endif          
 229:rprintf.c     ****         *--ptr = ch;
 230:rprintf.c     ****         u_val /= base;
 355              	E26:
 356 02c0 0400A0E1 		.loc 1 235 0
 357              		bne	.L43
 358 02c4 013065E5 		.loc 1 238 0
 359              		sub	r3, r6, #1
 360 02c8 0710A0E1 		and	r2, r3, #255
 361 02cc FEFFFFEB 	.LVL45:
 362              		cmp	r2, #255
 231:rprintf.c     **** 
 232:rprintf.c     **** #ifdef PADDING
 233:rprintf.c     ****         if(width) width--; //calculate number of padding chars
 363              	235 0
 364 02d0 000056E3 		mov	r1, r5
 365 02d4 013046E2 	.LVL46:
 366 02d8 FF600312 		.loc 1 238 0
 367              		bne	.L68
 234:rprintf.c     **** #endif
 235:rprintf.c     ****       } while (u_val);
 368              	49
 369 02dc 000050E3 	.L60:
 370              		sub	r3, r6, #1
 371              	.L68:
 372 02e0 0040A0E1 		ands	r6, r3, #255
 373              		strb	sl, [r5, #-1]!
 374              		bne	.L60
 375 02e4 EDFFFF1A 		rsb	r3, r2, r1
 236:rprintf.c     **** 
 237:rprintf.c     **** #ifdef PADDING
 238:rprintf.c     ****      while(width--) *--ptr = fill; //insert padding chars		      
 376              	 r3, #1
 377 02e8 013046E2 	.L49:
 378 02ec FF2003E2 		.loc 1 241 0
 379              		ldrb	r0, [r5, #0]	@ zero_extendqisi2
 380 02f0 FF0052E3 		cmp	r0, #0
 381              		beq	.L72
 382 02f4 0510A0E1 		ldr	r7, .L77
 383              		b	.L53
 384              	.LVL47:
 385 02f8 0100001A 	.L54:
 386 02fc 050000EA 	.LBB27:
 387              	.LBB28:
 388 0300 013046E2 		.loc 1 58 0
 389              		mov	r0, r4
 390 0304 FF6013E2 		mov	lr, pc
 391 0308 01A065E5 		ldr	pc, [r7, #0]
 392 030c FBFFFF1A 	.LVL48:
 393 0310 013062E0 	.LVL49:
 394 0314 015043E2 	.LBE28:
 395              	.LBE27:
 239:rprintf.c     **** #endif
 240:rprintf.c     **** 
 241:rprintf.c     ****       while(*ptr) { myputchar(*ptr); ptr++; }
 396              	r0, [r5, #1]!	@ zero_extendqisi2
 397 0318 0000D5E5 		cmp	r0, #0
 398 031c 000050E3 		beq	.L72
 399 0320 40FFFF0A 	.LVL50:
 400 0324 7C709FE5 	.L53:
 401 0328 050000EA 		and	r4, r0, #255
 402              	.LVL51:
 403              	.LBB29:
 404              	.LBB30:
 405              		.loc 1 57 0
 406              		cmp	r4, #10
 407 032c 0400A0E1 		mov	r0, #13
 408 0330 0FE0A0E1 		bne	.L54
 409 0334 00F097E5 		mov	lr, pc
 410              		ldr	pc, [r7, #0]
 411              	.LVL52:
 412              		b	.L54
 413              	.LVL53:
 414              	.L26:
 415 0338 0100F5E5 	.LBE30:
 416 033c 000050E3 	.LBE29:
 417 0340 38FFFF0A 		.loc 1 203 0
 418              		mov	r1, #16
 419              	.LVL54:
 420 0344 FF4000E2 		b	.L34
 421              	.LVL55:
 422              	.L56:
 423              		.loc 1 244 0
 424              		add	sp, sp, #16
 425 0348 0A0054E3 		ldmfd	sp!, {r4, r5, r6, r7, r8, sl, lr}
 426 034c 0D00A0E3 		add	sp, sp, #16
 427 0350 F5FFFF1A 		bx	lr
 428 0354 0FE0A0E1 	.LVL56:
 429 0358 00F097E5 	.L35:
 430              		.loc 1 191 0
 431 035c F2FFFFEA 		ldr	r3, [sp, #12]
 432              		ldr	r4, [r3, #0]
 433              	.LVL57:
 434              		add	r3, r3, #4
 435              		str	r3, [sp, #12]
 436              		b	.L36
 437 0360 1010A0E3 	.L76:
 438              	.LBB31:
 439 0364 BFFFFFEA 	.LBB32:
 440              		.loc 1 58 0
 441              		ldr	r7, .L77
 242:rprintf.c     ****     }
 243:rprintf.c     ****   }
 244:rprintf.c     **** }
 442              	 #0]
 443 0368 10D08DE2 	.LVL59:
 444 036c F045BDE8 	.LBE32:
 445 0370 10D08DE2 	.LBE31:
 446 0374 1EFF2FE1 		.loc 1 199 0
 447              		rsb	r4, r4, #0
 448              		.loc 1 203 0
 449              		mov	r7, #10
 450 0378 0C309DE5 		b	.L40
 451 037c 004093E5 	.L78:
 452              		.align	2
 453 0380 043083E2 	.L77:
 454 0384 0C308DE5 		.word	putcharfunc
 455 0388 9AFFFFEA 	.LFE4:
 457              		.bss
 458              		.align	2
 459              	putcharfunc:
 460 038c 14709FE5 		.space	4
 461 0390 2D00A0E3 		.section	.debug_frame,"",%progbits
 462              	.Lframe0:
 463 0394 0FE0A0E1 		.4byte	.LECIE0-.LSCIE0
 464 0398 00F097E5 	.LSCIE0:
 465              		.4byte	0xffffffff
 466              		.byte	0x1
 467              		.ascii	"\000"
 468              		.uleb128 0x1
 469 039c 004064E2 		.sleb128 -4
 470              		.byte	0xe
 471 03a0 0A70A0E3 		.byte	0xc
 472 03a4 BAFFFFEA 		.uleb128 0xd
 473              		.uleb128 0x0
 474              		.align	2
 475              	.LECIE0:
 476 03a8 00000000 	.LSFDE0:
 477              		.4byte	.LEFDE0-.LASFDE0
 478              	.LASFDE0:
 479              		.4byte	.Lframe0
 480              		.4byte	.LFB2
 481              		.4byte	.LFE2-.LFB2
 482 0000 00000000 		.align	2
 550              		.sleb128 60
DEFINED SYMBOLS
                            *ABS*:00000000 rprintf.c
C:\WINDOWS\TEMP/ccW1yo0s.s:13     .text:00000000 rprintf_devopen
C:\WINDOWS\TEMP/ccW1yo0s.s:22     .text:00000000 $a
C:\WINDOWS\TEMP/ccW1yo0s.s:32     .text:0000000c $d
C:\WINDOWS\TEMP/ccW1yo0s.s:481    .bss:00000000 putcharfunc
C:\WINDOWS\TEMP/ccW1yo0s.s:40     .text:00000010 rprintf
C:\WINDOWS\TEMP/ccW1yo0s.s:46     .text:00000010 $a
C:\WINDOWS\TEMP/ccW1yo0s.s:150    .text:000000d4 $d
C:\WINDOWS\TEMP/ccW1yo0s.s:206    .text:000001ac $a
C:\WINDOWS\TEMP/ccW1yo0s.s:476    .text:000003a8 $d

UNDEFINED SYMBOLS
__umodsi3
__udivsi3
