2024-02-07 12:12:46 +01:00
|
|
|
.data
|
2024-02-05 14:18:06 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
.global _Lprintf
|
2024-04-30 23:26:19 +02:00
|
|
|
.extern _Bprintf
|
2024-02-05 14:18:06 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
.global _Lfprintf
|
2024-04-30 23:26:19 +02:00
|
|
|
.extern _Bfprintf
|
2024-02-05 14:18:06 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
.global _Lsprintf
|
2024-04-30 23:26:19 +02:00
|
|
|
.extern _Bsprintf
|
2024-02-06 10:27:27 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
.global _Lfailure
|
2024-04-30 23:26:19 +02:00
|
|
|
.extern _failure
|
2024-02-05 14:18:06 +01:00
|
|
|
|
2024-02-07 12:12:46 +01:00
|
|
|
.extern cnt_percentage_sign
|
|
|
|
|
|
|
|
|
|
.text
|
2024-02-05 14:18:06 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lprintf:
|
2024-02-05 16:48:27 +01:00
|
|
|
# save return address
|
|
|
|
|
popq %r14
|
|
|
|
|
|
|
|
|
|
pushq %r9
|
|
|
|
|
pushq %r8
|
|
|
|
|
pushq %rcx
|
|
|
|
|
pushq %rdx
|
|
|
|
|
pushq %rsi
|
|
|
|
|
movq %rsp, %rax
|
|
|
|
|
# rdi --- format string
|
|
|
|
|
# r11 --- number of arguments except format string
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lprintf_loop:
|
2024-02-05 16:48:27 +01:00
|
|
|
movq $0, %r12
|
|
|
|
|
cmpq %r11, %r12
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lprintf_continue
|
2024-02-05 16:48:27 +01:00
|
|
|
|
|
|
|
|
decq %r11
|
|
|
|
|
movq (%rax), %r10
|
|
|
|
|
testq $1, %r10
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lprintf_loop_end
|
2024-02-05 16:48:27 +01:00
|
|
|
# unbox value
|
|
|
|
|
sarq %r10
|
|
|
|
|
movq %r10, (%rax)
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lprintf_loop_end:
|
2024-02-05 16:48:27 +01:00
|
|
|
addq $8, %rax
|
2024-04-09 22:46:48 +03:00
|
|
|
jmp _Lprintf_loop
|
|
|
|
|
_Lprintf_continue:
|
2024-02-05 16:48:27 +01:00
|
|
|
popq %rsi
|
|
|
|
|
popq %rdx
|
|
|
|
|
popq %rcx
|
|
|
|
|
popq %r8
|
|
|
|
|
popq %r9
|
|
|
|
|
# restore return address
|
|
|
|
|
pushq %r14
|
2024-04-30 23:46:19 +02:00
|
|
|
jmp _Bprintf
|
2024-02-05 16:48:27 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfprintf:
|
2024-02-06 10:27:27 +01:00
|
|
|
# save return address
|
|
|
|
|
popq %r14
|
|
|
|
|
|
|
|
|
|
pushq %r9
|
|
|
|
|
pushq %r8
|
|
|
|
|
pushq %rcx
|
|
|
|
|
pushq %rdx
|
|
|
|
|
movq %rsp, %rax
|
|
|
|
|
# rdi --- FILE*
|
|
|
|
|
# rsi --- format string
|
|
|
|
|
# r11 --- number of arguments except format string
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfprintf_loop:
|
2024-02-06 10:27:27 +01:00
|
|
|
movq $0, %r12
|
|
|
|
|
cmpq %r11, %r12
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lfprintf_continue
|
2024-02-06 10:27:27 +01:00
|
|
|
|
|
|
|
|
decq %r11
|
|
|
|
|
movq (%rax), %r10
|
|
|
|
|
testq $1, %r10
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lfprintf_loop_end
|
2024-02-06 10:27:27 +01:00
|
|
|
# unbox value
|
|
|
|
|
sarq %r10
|
|
|
|
|
movq %r10, (%rax)
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfprintf_loop_end:
|
2024-02-06 10:27:27 +01:00
|
|
|
addq $8, %rax
|
2024-04-09 22:46:48 +03:00
|
|
|
jmp _Lfprintf_loop
|
|
|
|
|
_Lfprintf_continue:
|
2024-02-06 10:27:27 +01:00
|
|
|
popq %rdx
|
|
|
|
|
popq %rcx
|
|
|
|
|
popq %r8
|
|
|
|
|
popq %r9
|
|
|
|
|
# restore return address
|
|
|
|
|
pushq %r14
|
2024-04-30 23:46:19 +02:00
|
|
|
jmp _Bfprintf
|
2024-02-06 10:27:27 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lsprintf:
|
2024-02-06 10:27:27 +01:00
|
|
|
# save return address
|
|
|
|
|
popq %r14
|
|
|
|
|
|
|
|
|
|
pushq %r9
|
|
|
|
|
pushq %r8
|
|
|
|
|
pushq %rcx
|
|
|
|
|
pushq %rdx
|
|
|
|
|
pushq %rsi
|
|
|
|
|
movq %rsp, %rax
|
|
|
|
|
# rdi --- format string
|
|
|
|
|
# r11 --- number of arguments except format string
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lsprintf_loop:
|
2024-02-06 10:27:27 +01:00
|
|
|
movq $0, %r12
|
|
|
|
|
cmpq %r11, %r12
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lsprintf_continue
|
2024-02-06 10:27:27 +01:00
|
|
|
|
|
|
|
|
decq %r11
|
|
|
|
|
movq (%rax), %r10
|
|
|
|
|
testq $1, %r10
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lsprintf_loop_end
|
2024-02-06 10:27:27 +01:00
|
|
|
# unbox value
|
|
|
|
|
sarq %r10
|
|
|
|
|
movq %r10, (%rax)
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lsprintf_loop_end:
|
2024-02-06 10:27:27 +01:00
|
|
|
addq $8, %rax
|
2024-04-09 22:46:48 +03:00
|
|
|
jmp _Lsprintf_loop
|
|
|
|
|
_Lsprintf_continue:
|
2024-02-06 10:27:27 +01:00
|
|
|
popq %rsi
|
|
|
|
|
popq %rdx
|
|
|
|
|
popq %rcx
|
|
|
|
|
popq %r8
|
|
|
|
|
popq %r9
|
|
|
|
|
# restore return address
|
|
|
|
|
pushq %r14
|
2024-04-30 23:46:19 +02:00
|
|
|
jmp _Bsprintf
|
2024-02-06 10:27:27 +01:00
|
|
|
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfailure:
|
2024-02-06 10:27:27 +01:00
|
|
|
# save return address
|
|
|
|
|
popq %r14
|
|
|
|
|
|
|
|
|
|
pushq %r9
|
|
|
|
|
pushq %r8
|
|
|
|
|
pushq %rcx
|
|
|
|
|
pushq %rdx
|
|
|
|
|
pushq %rsi
|
|
|
|
|
movq %rsp, %rax
|
|
|
|
|
# rdi --- format string
|
|
|
|
|
# r11 --- number of arguments except format string
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfailure_loop:
|
2024-02-06 10:27:27 +01:00
|
|
|
movq $0, %r12
|
|
|
|
|
cmpq %r11, %r12
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lfailure_continue
|
2024-02-06 10:27:27 +01:00
|
|
|
|
|
|
|
|
decq %r11
|
|
|
|
|
movq (%rax), %r10
|
|
|
|
|
testq $1, %r10
|
2024-04-09 22:46:48 +03:00
|
|
|
jz _Lfailure_loop_end
|
2024-02-06 10:27:27 +01:00
|
|
|
# unbox value
|
|
|
|
|
sarq %r10
|
|
|
|
|
movq %r10, (%rax)
|
2024-04-09 22:46:48 +03:00
|
|
|
_Lfailure_loop_end:
|
2024-02-06 10:27:27 +01:00
|
|
|
addq $8, %rax
|
2024-04-09 22:46:48 +03:00
|
|
|
jmp _Lfailure_loop
|
|
|
|
|
_Lfailure_continue:
|
2024-02-06 10:27:27 +01:00
|
|
|
popq %rsi
|
|
|
|
|
popq %rdx
|
|
|
|
|
popq %rcx
|
|
|
|
|
popq %r8
|
|
|
|
|
popq %r9
|
|
|
|
|
# restore return address
|
|
|
|
|
pushq %r14
|
2024-04-30 23:46:19 +02:00
|
|
|
jmp _failure
|