diff options
| author | Murilo Ijanc <[email protected]> | 2026-07-26 12:56:51 -0300 |
|---|---|---|
| committer | Murilo Ijanc <[email protected]> | 2026-07-26 12:56:59 -0300 |
| commit | b7b08a7d29d84de187dd8a55e0c94de66b07a572 (patch) | |
| tree | 7e55661d3eca3cf3b16aada6e87eabee68802fb9 /src/cep.S | |
| download | asm-b7b08a7d29d84de187dd8a55e0c94de66b07a572.tar.gz | |
Initial importv0.1.0
Diffstat (limited to 'src/cep.S')
| -rw-r--r-- | src/cep.S | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/cep.S b/src/cep.S new file mode 100644 index 0000000..8b7661d --- /dev/null +++ b/src/cep.S @@ -0,0 +1,53 @@ +#include "abi.inc" +#include "defs.inc" + + .text + +PUBFUNC cepis_normalize_cep + test %rsi, %rsi + jz .Lnorm_usage + movb $0, (%rsi) + test %rdi, %rdi + jz .Lnorm_bad + xor %ecx, %ecx +.Lnorm_loop: + movzbl (%rdi), %eax + inc %rdi + test %al, %al + jz .Lnorm_done + cmp $'-', %al + je .Lnorm_loop + cmp $'.', %al + je .Lnorm_loop + cmp $' ', %al + je .Lnorm_loop + cmp $9, %al + jb .Lnorm_digit + cmp $13, %al + jbe .Lnorm_loop +.Lnorm_digit: + cmp $'0', %al + jb .Lnorm_bad + cmp $'9', %al + ja .Lnorm_bad + cmp $8, %rcx + jae .Lnorm_bad + mov %al, (%rsi, %rcx, 1) + inc %rcx + jmp .Lnorm_loop +.Lnorm_done: + cmp $8, %rcx + jne .Lnorm_bad + movb $0, 8(%rsi) + xor %eax, %eax + ret +.Lnorm_bad: + movb $0, (%rsi) + mov $CEPIS_ERR_INVALID_CEP, %eax + ret +.Lnorm_usage: + mov $CEPIS_ERR_USAGE, %eax + ret +ENDFUNC cepis_normalize_cep + + .section .note.GNU-stack,"",@progbits |