From b9bf3afbb52aebcc0f93df55b55ec0f0f521b1ab Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Sun, 16 Feb 2025 18:21:50 +0100 Subject: add some practice problems from 4 --- 4/practice_problem_4_6.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 4/practice_problem_4_6.c (limited to '4/practice_problem_4_6.c') diff --git a/4/practice_problem_4_6.c b/4/practice_problem_4_6.c new file mode 100644 index 0000000..c6808b7 --- /dev/null +++ b/4/practice_problem_4_6.c @@ -0,0 +1,23 @@ +#include + +/* +long sum(long *start, long count) +start in %rdi, count in %rsi +sum: + irmovq $8,%r8 Constant 8 + irmovq $1,%r9 Constant 1 + xorq %rax,%rax sum = 0 + andq %rsi,%rsi Set cc + jmp test Goto test +loop: + mrmovq (%rdi), %r10 Get *start + xorq %r11, %r11 Constant 0 + subq %r10, %r11 -x + cmovg %r11, %r10 x = -x, if -x was positive + addq %r10,%rax Add to sum + addq %r8,%rdi start++ + subq %r9,%rsi count--. Set CC +test: + jne loop Stop when 0 + ret +*/ -- cgit v1.2.3