diff --git a/lang/src/int_to_str.asm b/lang/src/int_to_str.asm index fa0543a..39b3e8a 100644 --- a/lang/src/int_to_str.asm +++ b/lang/src/int_to_str.asm @@ -104,7 +104,9 @@ int_to_str2: test rdi, rdi jnz .convert_loop mov byte [rsi + r12], '0' - jmp .epilogue + inc r13 + inc r12 + jmp .reverse .convert_loop: mov rax, [rsp + 8] ; buffer length @@ -129,6 +131,7 @@ int_to_str2: test rdi, rdi jnz .convert_loop +.reverse: ; Reverse the digits mov rdx, r12 dec r12 ; last digit index diff --git a/lang/tests/int_to_str.rs b/lang/tests/int_to_str.rs index 20f66a5..2c1b0bd 100644 --- a/lang/tests/int_to_str.rs +++ b/lang/tests/int_to_str.rs @@ -12,6 +12,11 @@ fn main() { let value = 1234567890isize; let mut buffer = [0u8; 32]; unsafe { + let slice = int_to_str2(0, buffer.as_mut_ptr(), buffer.len(), 10); + let s = slice.as_str(); + println!("Integer: {}, String: {}", 0, s); + assert_eq!(s, format!("{}", 0)); + let slice = int_to_str2(value, buffer.as_mut_ptr(), buffer.len(), 10); let s = slice.as_str(); println!("Integer: {}, String: {}", value, s);