summaryrefslogtreecommitdiffstats
path: root/src/models.S
diff options
context:
space:
mode:
authorMurilo Ijanc <[email protected]>2026-07-26 12:56:51 -0300
committerMurilo Ijanc <[email protected]>2026-07-26 12:56:59 -0300
commitb7b08a7d29d84de187dd8a55e0c94de66b07a572 (patch)
tree7e55661d3eca3cf3b16aada6e87eabee68802fb9 /src/models.S
downloadasm-b7b08a7d29d84de187dd8a55e0c94de66b07a572.tar.gz
Initial importv0.1.0
Diffstat (limited to 'src/models.S')
-rw-r--r--src/models.S716
1 files changed, 716 insertions, 0 deletions
diff --git a/src/models.S b/src/models.S
new file mode 100644
index 0000000..77218f4
--- /dev/null
+++ b/src/models.S
@@ -0,0 +1,716 @@
+#include "abi.inc"
+#include "defs.inc"
+
+ .text
+
+FUNC cepis__addr_field_offset
+ PROLOGUE 24
+ mov %rdi, %rbx
+ lea cepis__addr_fields(%rip), %r12
+.Lfo_loop:
+ mov (%r12), %rsi
+ test %rsi, %rsi
+ jz .Lfo_none
+ mov %rbx, %rdi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lfo_hit
+ add $16, %r12
+ jmp .Lfo_loop
+.Lfo_hit:
+ mov 8(%r12), %rax
+ EPILOGUE
+ ret
+.Lfo_none:
+ mov $-1, %rax
+ EPILOGUE
+ ret
+ENDFUNC cepis__addr_field_offset
+
+FUNC cepis__addr_set
+ PROLOGUE 24
+ mov %rdi, %rbx
+ mov %rsi, %r12
+ mov %rdx, %r13
+ mov (%rbx, %r12, 1), %rdi
+ test %rdi, %rdi
+ jz .Lset_store
+ call free@PLT
+.Lset_store:
+ mov %r13, (%rbx, %r12, 1)
+ EPILOGUE
+ ret
+ENDFUNC cepis__addr_set
+
+FUNC cepis__address_new
+ PROLOGUE 24
+ mov $1, %rdi
+ mov $A_SIZE, %rsi
+ call calloc@PLT
+ test %rax, %rax
+ jz .Lanew_out
+ mov %rax, %rbx
+ xor %r12d, %r12d
+.Lanew_loop:
+ cmp $(A_NFIELDS * 8), %r12
+ jae .Lanew_done
+ call cepis__empty
+ test %rax, %rax
+ jz .Lanew_fail
+ mov %rax, (%rbx, %r12, 1)
+ add $8, %r12
+ jmp .Lanew_loop
+.Lanew_done:
+ mov %rbx, %rax
+.Lanew_out:
+ EPILOGUE
+ ret
+.Lanew_fail:
+ mov %rbx, %rdi
+ call cepis_address_free
+ xor %eax, %eax
+ EPILOGUE
+ ret
+ENDFUNC cepis__address_new
+
+PUBFUNC cepis_address_free
+ PROLOGUE 24
+ test %rdi, %rdi
+ jz .Lafree_out
+ mov %rdi, %rbx
+ xor %r12d, %r12d
+.Lafree_loop:
+ cmp $(A_NFIELDS * 8), %r12
+ jae .Lafree_geo
+ mov (%rbx, %r12, 1), %rdi
+ test %rdi, %rdi
+ jz .Lafree_next
+ call free@PLT
+.Lafree_next:
+ add $8, %r12
+ jmp .Lafree_loop
+.Lafree_geo:
+ mov A_GEO(%rbx), %r13
+ test %r13, %r13
+ jz .Lafree_raw
+ mov GEO_PRECISAO(%r13), %rdi
+ test %rdi, %rdi
+ jz .Lafree_geo_self
+ call free@PLT
+.Lafree_geo_self:
+ mov %r13, %rdi
+ call free@PLT
+.Lafree_raw:
+ mov A_RAW(%rbx), %rdi
+ test %rdi, %rdi
+ jz .Lafree_self
+ call free@PLT
+.Lafree_self:
+ mov %rbx, %rdi
+ call free@PLT
+.Lafree_out:
+ EPILOGUE
+ ret
+ENDFUNC cepis_address_free
+
+PUBFUNC cepis_address_list_free
+ PROLOGUE 24
+ test %rdi, %rdi
+ jz .Llfree_out
+ mov %rdi, %rbx
+ mov %rsi, %r12
+ xor %r13d, %r13d
+.Llfree_loop:
+ cmp %r12, %r13
+ jae .Llfree_self
+ mov (%rbx, %r13, 8), %rdi
+ call cepis_address_free
+ inc %r13
+ jmp .Llfree_loop
+.Llfree_self:
+ mov %rbx, %rdi
+ call free@PLT
+.Llfree_out:
+ EPILOGUE
+ ret
+ENDFUNC cepis_address_list_free
+
+PUBFUNC cepis_health_free
+ PROLOGUE 24
+ test %rdi, %rdi
+ jz .Lhfree_out
+ mov %rdi, %rbx
+ mov H_STATUS(%rbx), %rdi
+ test %rdi, %rdi
+ jz .Lhfree_1
+ call free@PLT
+.Lhfree_1:
+ mov H_DNE(%rbx), %rdi
+ test %rdi, %rdi
+ jz .Lhfree_2
+ call free@PLT
+.Lhfree_2:
+ mov H_BASE_GERADA(%rbx), %rdi
+ test %rdi, %rdi
+ jz .Lhfree_3
+ call free@PLT
+.Lhfree_3:
+ mov H_RAW(%rbx), %rdi
+ test %rdi, %rdi
+ jz .Lhfree_self
+ call free@PLT
+.Lhfree_self:
+ mov %rbx, %rdi
+ call free@PLT
+.Lhfree_out:
+ EPILOGUE
+ ret
+ENDFUNC cepis_health_free
+
+PUBFUNC cepis_geo_is_precise
+ xor %eax, %eax
+ test %rdi, %rdi
+ jz .Lprec_out
+ mov GEO_PRECISAO(%rdi), %rdi
+ test %rdi, %rdi
+ jz .Lprec_out
+ lea .Ls_logradouro_val(%rip), %rsi
+ jmp cepis__streq_tail
+.Lprec_out:
+ ret
+ENDFUNC cepis_geo_is_precise
+
+FUNC cepis__streq_tail
+ PROLOGUE 8
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lseq_yes
+ xor %eax, %eax
+ EPILOGUE
+ ret
+.Lseq_yes:
+ mov $1, %eax
+ EPILOGUE
+ ret
+ENDFUNC cepis__streq_tail
+
+PUBFUNC cepis_address_formatted_cep
+ test %rsi, %rsi
+ jz .Lfmt_out
+ movb $0, (%rsi)
+ test %rdi, %rdi
+ jz .Lfmt_out
+ mov A_CEP(%rdi), %rdi
+ test %rdi, %rdi
+ jz .Lfmt_out
+ xor %ecx, %ecx
+ xor %edx, %edx
+.Lfmt_loop:
+ cmp $9, %rcx
+ jae .Lfmt_end
+ movzbl (%rdi, %rcx, 1), %eax
+ test %al, %al
+ jz .Lfmt_end
+ cmp $5, %rcx
+ jne .Lfmt_put
+ movb $'-', (%rsi, %rdx, 1)
+ inc %rdx
+.Lfmt_put:
+ mov %al, (%rsi, %rdx, 1)
+ inc %rdx
+ inc %rcx
+ jmp .Lfmt_loop
+.Lfmt_end:
+ movb $0, (%rsi, %rdx, 1)
+.Lfmt_out:
+ ret
+ENDFUNC cepis_address_formatted_cep
+
+FUNC cepis__geo_parse
+ PROLOGUE 88
+ mov %rsi, %r14
+ movq $0, (%r14)
+ movq $0, LOCAL3(%rbp)
+ xor %r15d, %r15d
+ cmpb $'{', (%rdi)
+ jne .Lgeo_fail
+ lea 1(%rdi), %rdi
+ call cepis__js_ws
+ mov %rax, %rbx
+ cmpb $'}', (%rbx)
+ je .Lgeo_finish
+.Lgeo_pair:
+ cmpb $'"', (%rbx)
+ jne .Lgeo_fail
+ mov %rbx, %rdi
+ lea LOCAL4(%rbp), %rsi
+ call cepis__js_string
+ test %rax, %rax
+ jz .Lgeo_fail
+ mov %rax, %rdi
+ call cepis__js_ws
+ mov %rax, %rbx
+ cmpb $':', (%rbx)
+ jne .Lgeo_fail_key
+ inc %rbx
+ mov LOCAL4(%rbp), %rdi
+ lea .Ls_lat(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lgeo_lat
+ mov LOCAL4(%rbp), %rdi
+ lea .Ls_lon(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lgeo_lon
+ mov LOCAL4(%rbp), %rdi
+ lea .Ls_raio_m(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lgeo_raio
+ mov LOCAL4(%rbp), %rdi
+ lea .Ls_precisao(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lgeo_prec
+ mov %rbx, %rdi
+ call cepis__js_skip
+ jmp .Lgeo_after
+.Lgeo_lat:
+ mov %rbx, %rdi
+ lea LOCAL0(%rbp), %rsi
+ call cepis__js_number
+ or $1, %r15d
+ jmp .Lgeo_after
+.Lgeo_lon:
+ mov %rbx, %rdi
+ lea LOCAL1(%rbp), %rsi
+ call cepis__js_number
+ or $2, %r15d
+ jmp .Lgeo_after
+.Lgeo_raio:
+ mov %rbx, %rdi
+ lea LOCAL2(%rbp), %rsi
+ call cepis__js_number
+ or $4, %r15d
+ jmp .Lgeo_after
+.Lgeo_prec:
+ mov LOCAL3(%rbp), %rdi
+ test %rdi, %rdi
+ jz .Lgeo_prec_go
+ call free@PLT
+ movq $0, LOCAL3(%rbp)
+.Lgeo_prec_go:
+ mov %rbx, %rdi
+ lea LOCAL3(%rbp), %rsi
+ call cepis__js_scalar_text
+ or $8, %r15d
+.Lgeo_after:
+ mov %rax, %r12
+ mov LOCAL4(%rbp), %rdi
+ call free@PLT
+ movq $0, LOCAL4(%rbp)
+ test %r12, %r12
+ jz .Lgeo_fail
+ mov %r12, %rdi
+ call cepis__js_ws
+ mov %rax, %rbx
+ cmpb $',', (%rbx)
+ je .Lgeo_comma
+ cmpb $'}', (%rbx)
+ je .Lgeo_finish
+ jmp .Lgeo_fail
+.Lgeo_comma:
+ lea 1(%rbx), %rdi
+ call cepis__js_ws
+ mov %rax, %rbx
+ jmp .Lgeo_pair
+.Lgeo_finish:
+ cmp $15, %r15d
+ jne .Lgeo_fail
+ cmpq $0, LOCAL3(%rbp)
+ je .Lgeo_fail
+ mov $1, %rdi
+ mov $GEO_SIZE, %rsi
+ call calloc@PLT
+ test %rax, %rax
+ jz .Lgeo_fail
+ mov %rax, %rbx
+ movsd LOCAL0(%rbp), %xmm0
+ movsd %xmm0, GEO_LAT(%rbx)
+ movsd LOCAL1(%rbp), %xmm0
+ movsd %xmm0, GEO_LON(%rbx)
+ cvttsd2si LOCAL2(%rbp), %rax
+ mov %rax, GEO_RAIO_M(%rbx)
+ mov LOCAL3(%rbp), %rax
+ mov %rax, GEO_PRECISAO(%rbx)
+ movq $0, LOCAL3(%rbp)
+ mov %rbx, (%r14)
+ EPILOGUE
+ ret
+.Lgeo_fail_key:
+ mov LOCAL4(%rbp), %rdi
+ call free@PLT
+.Lgeo_fail:
+ mov LOCAL3(%rbp), %rdi
+ test %rdi, %rdi
+ jz .Lgeo_fail_out
+ call free@PLT
+.Lgeo_fail_out:
+ EPILOGUE
+ ret
+ENDFUNC cepis__geo_parse
+
+FUNC cepis__address_from_json
+ PROLOGUE 40
+ mov %rsi, %r14
+ movq $0, (%r14)
+ mov %rdi, %r15
+ call cepis__address_new
+ test %rax, %rax
+ jz .Lafj_nomem
+ mov %rax, %rbx
+ mov %r15, %rdi
+ call cepis__strdup
+ test %rax, %rax
+ jz .Lafj_nomem_free
+ mov %rax, A_RAW(%rbx)
+ mov %r15, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $'{', (%r12)
+ jne .Lafj_invalid
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $'}', (%r12)
+ je .Lafj_ok
+.Lafj_pair:
+ cmpb $'"', (%r12)
+ jne .Lafj_invalid
+ mov %r12, %rdi
+ lea LOCAL0(%rbp), %rsi
+ call cepis__js_string
+ test %rax, %rax
+ jz .Lafj_invalid
+ mov %rax, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $':', (%r12)
+ jne .Lafj_invalid_key
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_geo(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lafj_geo
+ mov LOCAL0(%rbp), %rdi
+ call cepis__addr_field_offset
+ cmp $0, %rax
+ jl .Lafj_unknown
+ mov %rax, %r13
+ movzbl (%r12), %eax
+ cmp $'{', %al
+ je .Lafj_unknown
+ cmp $'[', %al
+ je .Lafj_unknown
+ mov %r12, %rdi
+ lea LOCAL1(%rbp), %rsi
+ call cepis__js_scalar_text
+ test %rax, %rax
+ jz .Lafj_invalid_key
+ mov %rax, %r12
+ mov %rbx, %rdi
+ mov %r13, %rsi
+ mov LOCAL1(%rbp), %rdx
+ call cepis__addr_set
+ jmp .Lafj_next
+.Lafj_unknown:
+ mov %r12, %rdi
+ call cepis__js_skip
+ test %rax, %rax
+ jz .Lafj_invalid_key
+ mov %rax, %r12
+ jmp .Lafj_next
+.Lafj_geo:
+ mov %r12, %rdi
+ call cepis__js_skip
+ test %rax, %rax
+ jz .Lafj_invalid_key
+ mov %rax, %r13
+ cmpb $'{', (%r12)
+ jne .Lafj_geo_done
+ mov %r12, %rdi
+ lea LOCAL2(%rbp), %rsi
+ call cepis__geo_parse
+ mov LOCAL2(%rbp), %rax
+ test %rax, %rax
+ jz .Lafj_geo_done
+ mov %rax, A_GEO(%rbx)
+.Lafj_geo_done:
+ mov %r13, %r12
+.Lafj_next:
+ mov LOCAL0(%rbp), %rdi
+ call free@PLT
+ movq $0, LOCAL0(%rbp)
+ mov %r12, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $',', (%r12)
+ je .Lafj_comma
+ cmpb $'}', (%r12)
+ je .Lafj_ok
+ jmp .Lafj_invalid
+.Lafj_comma:
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ jmp .Lafj_pair
+.Lafj_ok:
+ mov %rbx, (%r14)
+ xor %eax, %eax
+ EPILOGUE
+ ret
+.Lafj_invalid_key:
+ mov LOCAL0(%rbp), %rdi
+ call free@PLT
+.Lafj_invalid:
+ mov %rbx, %rdi
+ call cepis_address_free
+ mov $CEPIS_ERR_INVALID_RESPONSE, %eax
+ EPILOGUE
+ ret
+.Lafj_nomem_free:
+ mov %rbx, %rdi
+ call cepis_address_free
+.Lafj_nomem:
+ mov $CEPIS_ERR_NOMEM, %eax
+ EPILOGUE
+ ret
+ENDFUNC cepis__address_from_json
+
+FUNC cepis__health_from_json
+ PROLOGUE 40
+ mov %rsi, %r14
+ movq $0, (%r14)
+ mov %rdi, %r15
+ mov $1, %rdi
+ mov $H_SIZE, %rsi
+ call calloc@PLT
+ test %rax, %rax
+ jz .Lhfj_nomem
+ mov %rax, %rbx
+ call cepis__empty
+ test %rax, %rax
+ jz .Lhfj_nomem_free
+ mov %rax, H_STATUS(%rbx)
+ call cepis__empty
+ test %rax, %rax
+ jz .Lhfj_nomem_free
+ mov %rax, H_DNE(%rbx)
+ call cepis__empty
+ test %rax, %rax
+ jz .Lhfj_nomem_free
+ mov %rax, H_BASE_GERADA(%rbx)
+ mov %r15, %rdi
+ call cepis__strdup
+ test %rax, %rax
+ jz .Lhfj_nomem_free
+ mov %rax, H_RAW(%rbx)
+ mov %r15, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $'{', (%r12)
+ jne .Lhfj_invalid
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $'}', (%r12)
+ je .Lhfj_ok
+.Lhfj_pair:
+ cmpb $'"', (%r12)
+ jne .Lhfj_invalid
+ mov %r12, %rdi
+ lea LOCAL0(%rbp), %rsi
+ call cepis__js_string
+ test %rax, %rax
+ jz .Lhfj_invalid
+ mov %rax, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $':', (%r12)
+ jne .Lhfj_invalid_key
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_status(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lhfj_status
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_dne(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lhfj_dne
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_base_gerada(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lhfj_base
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_ceps(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lhfj_ceps
+ mov LOCAL0(%rbp), %rdi
+ lea .Ls_geo(%rip), %rsi
+ call strcmp@PLT
+ test %eax, %eax
+ jz .Lhfj_geo
+ mov %r12, %rdi
+ call cepis__js_skip
+ test %rax, %rax
+ jz .Lhfj_invalid_key
+ mov %rax, %r12
+ jmp .Lhfj_next
+.Lhfj_status:
+ mov $H_STATUS, %r13
+ jmp .Lhfj_text
+.Lhfj_dne:
+ mov $H_DNE, %r13
+ jmp .Lhfj_text
+.Lhfj_base:
+ mov $H_BASE_GERADA, %r13
+.Lhfj_text:
+ movzbl (%r12), %eax
+ cmp $'{', %al
+ je .Lhfj_skipval
+ cmp $'[', %al
+ je .Lhfj_skipval
+ mov %r12, %rdi
+ lea LOCAL1(%rbp), %rsi
+ call cepis__js_scalar_text
+ test %rax, %rax
+ jz .Lhfj_invalid_key
+ mov %rax, %r12
+ mov (%rbx, %r13, 1), %rdi
+ call free@PLT
+ mov LOCAL1(%rbp), %rax
+ mov %rax, (%rbx, %r13, 1)
+ jmp .Lhfj_next
+.Lhfj_skipval:
+ mov %r12, %rdi
+ call cepis__js_skip
+ test %rax, %rax
+ jz .Lhfj_invalid_key
+ mov %rax, %r12
+ jmp .Lhfj_next
+.Lhfj_ceps:
+ mov $H_CEPS, %r13
+ jmp .Lhfj_int
+.Lhfj_geo:
+ mov $H_GEO, %r13
+.Lhfj_int:
+ movzbl (%r12), %eax
+ cmp $'{', %al
+ je .Lhfj_skipval
+ cmp $'[', %al
+ je .Lhfj_skipval
+ mov %r12, %rdi
+ lea LOCAL1(%rbp), %rsi
+ call cepis__js_number
+ test %rax, %rax
+ jz .Lhfj_skipval
+ mov %rax, %r12
+ cvttsd2si LOCAL1(%rbp), %rax
+ mov %rax, (%rbx, %r13, 1)
+.Lhfj_next:
+ mov LOCAL0(%rbp), %rdi
+ call free@PLT
+ movq $0, LOCAL0(%rbp)
+ mov %r12, %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ cmpb $',', (%r12)
+ je .Lhfj_comma
+ cmpb $'}', (%r12)
+ je .Lhfj_ok
+ jmp .Lhfj_invalid
+.Lhfj_comma:
+ lea 1(%r12), %rdi
+ call cepis__js_ws
+ mov %rax, %r12
+ jmp .Lhfj_pair
+.Lhfj_ok:
+ mov %rbx, (%r14)
+ xor %eax, %eax
+ EPILOGUE
+ ret
+.Lhfj_invalid_key:
+ mov LOCAL0(%rbp), %rdi
+ call free@PLT
+.Lhfj_invalid:
+ mov %rbx, %rdi
+ call cepis_health_free
+ mov $CEPIS_ERR_INVALID_RESPONSE, %eax
+ EPILOGUE
+ ret
+.Lhfj_nomem_free:
+ mov %rbx, %rdi
+ call cepis_health_free
+.Lhfj_nomem:
+ mov $CEPIS_ERR_NOMEM, %eax
+ EPILOGUE
+ ret
+ENDFUNC cepis__health_from_json
+
+ .section .rodata
+
+.Ls_cep: .asciz "cep"
+.Ls_logradouro: .asciz "logradouro"
+.Ls_complemento: .asciz "complemento"
+.Ls_unidade: .asciz "unidade"
+.Ls_bairro: .asciz "bairro"
+.Ls_localidade: .asciz "localidade"
+.Ls_uf: .asciz "uf"
+.Ls_estado: .asciz "estado"
+.Ls_regiao: .asciz "regiao"
+.Ls_ibge: .asciz "ibge"
+.Ls_gia: .asciz "gia"
+.Ls_ddd: .asciz "ddd"
+.Ls_siafi: .asciz "siafi"
+.Ls_geo: .asciz "geo"
+.Ls_lat: .asciz "lat"
+.Ls_lon: .asciz "lon"
+.Ls_raio_m: .asciz "raio_m"
+.Ls_precisao: .asciz "precisao"
+.Ls_status: .asciz "status"
+.Ls_dne: .asciz "dne"
+.Ls_ceps: .asciz "ceps"
+.Ls_base_gerada: .asciz "base_gerada_em"
+.Ls_logradouro_val: .asciz "logradouro"
+
+ .section .data.rel.ro,"aw",@progbits
+ .p2align 3
+ .globl cepis__addr_fields
+ .hidden cepis__addr_fields
+cepis__addr_fields:
+ .quad .Ls_cep, A_CEP
+ .quad .Ls_logradouro, A_LOGRADOURO
+ .quad .Ls_complemento, A_COMPLEMENTO
+ .quad .Ls_unidade, A_UNIDADE
+ .quad .Ls_bairro, A_BAIRRO
+ .quad .Ls_localidade, A_LOCALIDADE
+ .quad .Ls_uf, A_UF
+ .quad .Ls_estado, A_ESTADO
+ .quad .Ls_regiao, A_REGIAO
+ .quad .Ls_ibge, A_IBGE
+ .quad .Ls_gia, A_GIA
+ .quad .Ls_ddd, A_DDD
+ .quad .Ls_siafi, A_SIAFI
+ .quad 0, 0
+
+ .section .note.GNU-stack,"",@progbits