diff options
-rw-r--r-- | src/u_hexdec.S | 36 | ||||
-rw-r--r-- | src/u_strncmp.S | 33 |
2 files changed, 47 insertions, 22 deletions
diff --git a/src/u_hexdec.S b/src/u_hexdec.S index a362ba6..5e0f019 100644 --- a/src/u_hexdec.S +++ b/src/u_hexdec.S @@ -49,24 +49,24 @@ .globl u_hexdec u_hexdec: - xor %r10, %r10 - xor %r9, %r9 - xor %r8, %r8 - mov $0xa, %rbx - clc + xor %r10, %r10 + xor %r9, %r9 + xor %r8, %r8 + mov $0xa, %rbx + clc .u.repeat: - xor %rdx, %rdx - idiv %rbx - or $0x0, %dl - mov $0x8, %rcx + xor %rdx, %rdx + idiv %rbx + or $0x0, %dl + mov $0x8, %rcx .u.shift: - rcrb $0x1, %dl - rcr $0x1, %r10 - rcr $0x1, %r9 - rcr $0x1, %r8 - dec %rcx - and %rcx, %rcx - jnz .u.shift - and %rax, %rax - jnz .u.repeat + rcrb $0x1, %dl + rcr $0x1, %r10 + rcr $0x1, %r9 + rcr $0x1, %r8 + dec %rcx + and %rcx, %rcx + jnz .u.shift + and %rax, %rax + jnz .u.repeat ret diff --git a/src/u_strncmp.S b/src/u_strncmp.S index 9c90cd0..aafa721 100644 --- a/src/u_strncmp.S +++ b/src/u_strncmp.S @@ -49,8 +49,33 @@ .globl u_strncmp u_strncmp: -# xor %rcx, %rcx -# dec %rdx -#.u.loop -# cmpb (%rsi) + xor %rcx, %rcx + dec %rdx +.u.loop: + xor %r8, %r8 + xor %r9, %r9 + movb (%rdi, %rcx), %r8b + movb (%rsi, %rcx), %r9b + cmpb %r8b, %r9b + jne .u.retdiff + cmp %rdx, %rcx + jge .u.retdiff + cmpb $0x0, (%rdi, %rcx) + jne .u.inc + cmpb $0x0, (%rsi, %rcx) + je .u.retzer +.u.inc: + inc %rcx + jmp .u.loop +.u.retdiff: + xor %r8, %r8 + xor %r9, %r9 + movb (%rdi, %rcx), %r8b + movb (%rsi, %rcx), %r9b + sub %r9, %r8 + xor %rax, %rax + movl %r8d, %eax + ret +.u.retzer: + xor %rax, %rax ret |