This commit is contained in:
2025-06-01 17:52:46 +02:00
parent 781280060c
commit ad8c61002b
2 changed files with 52 additions and 0 deletions

23
examples/euler4.zr Normal file
View File

@@ -0,0 +1,23 @@
func print_i64[x: I64] : I64
printf("%ld\n", x)
func i64_to_string[n: I64] : String
let x: I64 = malloc(21)
sprintf(x, "%ld", n)
return x
func main[] : I64
let out: I64 = 0
let a: I64 = 500
while a < 1000
let b: I64 = 500
while b < 1000
if a * b > out
let s: String = i64_to_string(a * b)
let s_rev: String = strrev(s)
if strcmp(s, s_rev) == 0
out = a * b
b = b + 1
a = a + 1
print_i64(out)

View File

@@ -100,8 +100,37 @@ extern free
extern printf
extern sprintf
extern strlen
extern strcmp
extern puts
print equ puts
; generated with clang
strrev:
push r14
push rbx
push rax
mov rbx, rdi
call strlen
mov r14, rax
lea rdi, [rax + 1]
call malloc
mov rcx, rax
mov rsi, r14
mov rdx, r14
.LBB0_1:
sub rdx, 1
jb .LBB0_2
mov sil, byte [rbx + rsi - 1]
mov byte [rcx], sil
inc rcx
mov rsi, rdx
jmp .LBB0_1
.LBB0_2:
mov byte [rax + r14], 0
add rsp, 8
pop rbx
pop r14
ret
",
);
Ok(())