From e43424b7805e710e9907a8b67f90bea9c6f203fd Mon Sep 17 00:00:00 2001 From: janis Date: Sat, 1 Nov 2025 01:41:05 +0100 Subject: [PATCH] fix int_to_str2 for 0 --- lang/src/int_to_str.asm | 5 ++++- lang/tests/int_to_str.rs | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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);