summaryrefslogtreecommitdiff
path: root/zap/source/amd64/mem/utf20len.S
diff options
context:
space:
mode:
Diffstat (limited to 'zap/source/amd64/mem/utf20len.S')
-rw-r--r--zap/source/amd64/mem/utf20len.S27
1 files changed, 15 insertions, 12 deletions
diff --git a/zap/source/amd64/mem/utf20len.S b/zap/source/amd64/mem/utf20len.S
index 5af352b..03f8254 100644
--- a/zap/source/amd64/mem/utf20len.S
+++ b/zap/source/amd64/mem/utf20len.S
@@ -5,31 +5,34 @@
.globl zap_utf20len
zap_utf20len:
- # rax: Address of the current character.
- # rdi: Address of the first character.
- # rdx: Current character.
+# Address of the current character:
+#define addr %rax
+# Address of the first character:
+#define start %rdi
+# Current character:
+#define chr %edx
- movq %rdi,%rax
+ movq start,addr
# Iterate over the string:
.loop:
# Move the character into a register:
- movl (%rax),%edx
+ movl (addr),chr # chr = *addr
# Check if we have reached the null-terminator:
- testl %edx,%edx
- jz .done # If so, we are done.
+ testl chr,chr # if (chr == 0x0)
+ jz .done # goto done
# Continue to the next character:
- addq $0x4,%rax
- jmp .loop
+ addq $0x4,addr # addr += 0x4
+ jmp .loop # goto loop
# Done:
.done:
# Get the length:
- subq %rdi,%rax
- shrq $0x2,%rax # Divide by four to get the number of doublewords rather than bytes.
+ subq start,addr # addr -= start
+ shrq $0x2,addr # addr /= 0x4 // Divide by four to get the number of doublewords rather than bytes.
- ret
+ ret # return addr