clarify the purpose of this project
[nyanglibc.git] / libio / putc.s
blob68b010da521fd82785d27fa14c7619a0c07fc9bb
1 .text
2 .p2align 4,,15
3 .globl _IO_putc
4 .hidden _IO_putc
5 .type _IO_putc, @function
6 _IO_putc:
7 .LFB68:
8 pushq %r12
9 pushq %rbp
10 pushq %rbx
11 testb $-128, 116(%rsi)
12 movq %rsi, %rbx
13 jne .L2
14 movq 40(%rsi), %rdx
15 cmpq 48(%rsi), %rdx
16 movzbl %dil, %r8d
17 jnb .L20
18 leaq 1(%rdx), %rcx
19 movq %rcx, 40(%rsi)
20 movb %dil, (%rdx)
21 .L1:
22 popq %rbx
23 movl %r8d, %eax
24 popq %rbp
25 popq %r12
26 ret
27 .p2align 4,,10
28 .p2align 3
29 .L2:
30 movl (%rsi), %edx
31 movl %edi, %ebp
32 andl $32768, %edx
33 jne .L5
34 movq 136(%rsi), %rdi
35 movq %fs:16, %r12
36 cmpq %r12, 8(%rdi)
37 je .L6
38 #APP
39 # 30 "putc.c" 1
40 movl %fs:24,%eax
41 # 0 "" 2
42 #NO_APP
43 testl %eax, %eax
44 jne .L7
45 movl $1, %edx
46 #APP
47 # 47 "../sysdeps/unix/sysv/linux/x86/lowlevellock.h" 1
48 cmpxchgl %edx, (%rdi)
49 # 0 "" 2
50 #NO_APP
51 .L8:
52 movq 136(%rbx), %rdi
53 movq %r12, 8(%rdi)
54 .L6:
55 addl $1, 4(%rdi)
56 .L5:
57 movq 40(%rbx), %rax
58 cmpq 48(%rbx), %rax
59 movzbl %bpl, %r8d
60 jnb .L21
61 leaq 1(%rax), %rdx
62 movq %rdx, 40(%rbx)
63 movb %bpl, (%rax)
64 .L12:
65 testl $32768, (%rbx)
66 jne .L1
67 movq 136(%rbx), %rdi
68 movl 4(%rdi), %eax
69 subl $1, %eax
70 testl %eax, %eax
71 movl %eax, 4(%rdi)
72 jne .L1
73 movq $0, 8(%rdi)
74 #APP
75 # 885 "libioP.h" 1
76 movl %fs:24,%edx
77 # 0 "" 2
78 #NO_APP
79 testl %edx, %edx
80 jne .L13
81 subl $1, (%rdi)
82 movl %r8d, %eax
83 popq %rbx
84 popq %rbp
85 popq %r12
86 ret
87 .p2align 4,,10
88 .p2align 3
89 .L21:
90 movl %r8d, %esi
91 movq %rbx, %rdi
92 .LEHB0:
93 call __overflow
94 .LEHE0:
95 movl %eax, %r8d
96 jmp .L12
97 .p2align 4,,10
98 .p2align 3
99 .L20:
100 movq %rbx, %rdi
101 movl %r8d, %esi
102 popq %rbx
103 popq %rbp
104 popq %r12
105 .LEHB1:
106 jmp __overflow
107 .LEHE1:
108 .p2align 4,,10
109 .p2align 3
110 .L7:
111 movl $1, %ecx
112 movl %edx, %eax
113 lock cmpxchgl %ecx, (%rdi)
114 je .L8
115 .LEHB2:
116 call __lll_lock_wait_private
117 .LEHE2:
118 jmp .L8
119 .p2align 4,,10
120 .p2align 3
121 .L13:
122 #APP
123 # 885 "libioP.h" 1
124 xchgl %eax, (%rdi)
125 # 0 "" 2
126 #NO_APP
127 cmpl $1, %eax
128 jle .L1
129 xorl %r10d, %r10d
130 movl $1, %edx
131 movl $129, %esi
132 movl $202, %eax
133 #APP
134 # 885 "libioP.h" 1
135 syscall
137 # 0 "" 2
138 #NO_APP
139 jmp .L1
140 .L17:
141 testl $32768, (%rbx)
142 movq %rax, %r8
143 jne .L15
144 movq 136(%rbx), %rdi
145 movl 4(%rdi), %eax
146 subl $1, %eax
147 testl %eax, %eax
148 movl %eax, 4(%rdi)
149 jne .L15
150 movq $0, 8(%rdi)
151 #APP
152 # 885 "libioP.h" 1
153 movl %fs:24,%edx
154 # 0 "" 2
155 #NO_APP
156 testl %edx, %edx
157 jne .L16
158 subl $1, (%rdi)
159 .L15:
160 movq %r8, %rdi
161 .LEHB3:
162 call _Unwind_Resume@PLT
163 .LEHE3:
164 .L16:
165 #APP
166 # 885 "libioP.h" 1
167 xchgl %eax, (%rdi)
168 # 0 "" 2
169 #NO_APP
170 subl $1, %eax
171 jle .L15
172 xorl %r10d, %r10d
173 movl $1, %edx
174 movl $129, %esi
175 movl $202, %eax
176 #APP
177 # 885 "libioP.h" 1
178 syscall
180 # 0 "" 2
181 #NO_APP
182 jmp .L15
183 .LFE68:
184 .globl __gcc_personality_v0
185 .section .gcc_except_table,"a",@progbits
186 .LLSDA68:
187 .byte 0xff
188 .byte 0xff
189 .byte 0x1
190 .uleb128 .LLSDACSE68-.LLSDACSB68
191 .LLSDACSB68:
192 .uleb128 .LEHB0-.LFB68
193 .uleb128 .LEHE0-.LEHB0
194 .uleb128 .L17-.LFB68
195 .uleb128 0
196 .uleb128 .LEHB1-.LFB68
197 .uleb128 .LEHE1-.LEHB1
198 .uleb128 0
199 .uleb128 0
200 .uleb128 .LEHB2-.LFB68
201 .uleb128 .LEHE2-.LEHB2
202 .uleb128 .L17-.LFB68
203 .uleb128 0
204 .uleb128 .LEHB3-.LFB68
205 .uleb128 .LEHE3-.LEHB3
206 .uleb128 0
207 .uleb128 0
208 .LLSDACSE68:
209 .text
210 .size _IO_putc, .-_IO_putc
211 .weak putc
212 .set putc,_IO_putc
213 .hidden DW.ref.__gcc_personality_v0
214 .weak DW.ref.__gcc_personality_v0
215 .section .data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
216 .align 8
217 .type DW.ref.__gcc_personality_v0, @object
218 .size DW.ref.__gcc_personality_v0, 8
219 DW.ref.__gcc_personality_v0:
220 .quad __gcc_personality_v0
221 .hidden __lll_lock_wait_private
222 .hidden __overflow