From fe319686f4947f22f4ae5f0a9dd3c5f7ce4378b9 Mon Sep 17 00:00:00 2001 From: Samu Date: Mon, 8 Dec 2025 09:11:27 +0100 Subject: [PATCH] Provant operacions amb vectors --- MathWorld/src/MathWorld.c | 37 ++++++++++++++++++++++++------------- MathWorld/src/aa_vadd.s | 8 ++++++++ 2 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 MathWorld/src/aa_vadd.s diff --git a/MathWorld/src/MathWorld.c b/MathWorld/src/MathWorld.c index 8f1db15..92f5706 100644 --- a/MathWorld/src/MathWorld.c +++ b/MathWorld/src/MathWorld.c @@ -1,33 +1,44 @@ #include -extern long long int aa_add(long long int a, long long int b); -extern long long int aa_sub(long long int a, long long int b); -extern long long int aa_mul(long long int a, long long int b); -extern long long int aa_madd(long long int a, long long int b, long long int c); -extern long long int aa_udiv(long long int a, long long int b); +extern unsigned long aa_add(unsigned long a, unsigned long b); +extern unsigned long aa_sub(unsigned long a, unsigned long b); +extern unsigned long aa_mul(unsigned long a, unsigned long b); +extern unsigned long aa_madd(unsigned long a, unsigned long b, unsigned long c); +extern unsigned long aa_udiv(unsigned long a, unsigned long b); extern double aa_fadd(double d, double e); extern double aa_fdiv(double d, double e); +extern unsigned long aa_vadd(unsigned long* v); + int main(void) { - long long int a = 3; - long long int b = 2; - long long int c = 2; + unsigned long a = 3; + unsigned long b = 2; + unsigned long c = 4; + unsigned long f = 8; + unsigned long g = 7; + unsigned long h = 6; + unsigned long i = 5; + unsigned long j = 9; double d = 3.2; double e = 1.6; + unsigned long v[]= {a, b, c}; printf("ARM ASSEMBLY 64-bit Integer Operations\n"); - printf("ADD x0 %d x1 %d RET %d\n", a, b, aa_add(a, b)); - printf("SUB x0 %d x1 %d RET %d\n", a, b, aa_sub(a, b)); - printf("MUL x0 %d x1 %d RET %d\n", a, b, aa_mul(a, b)); - printf("MADD x0 %d x1 %d x2 %d RET %d\n", a, b, c, aa_madd(a, b, c)); - printf("UDIV x0 %d x1 %d RET %d\n", a, b, aa_udiv(a, b)); + printf("ADD x0 %lld x1 %lld RET %lld\n", a, b, aa_add(a, b)); + printf("SUB x0 %lld x1 %lld RET %lld\n", a, b, aa_sub(a, b)); + printf("MUL x0 %lld x1 %lld RET %lld\n", a, b, aa_mul(a, b)); + printf("MADD x0 %lld x1 %lld x2 %lld RET %lld\n", a, b, c, aa_madd(a, b, c)); + printf("UDIV x0 %lld x1 %lld RET %lld\n", a, b, aa_udiv(a, b)); printf("ARM ASSEMBLY 64-bit Floating Point Operations\n"); printf("FADD d0 %lf d1 %lf RET %lf\n", d, e, aa_fadd(d, e)); printf("FDIV d0 %lf d1 %lf RET %lf\n", d, e, aa_fdiv(d, e)); + + printf("ARM ASSEMBLY 64-bit Integer Operations with Vectors\n"); + printf("VADD v[0] %lld v[1] %lld RET %lld\n", v[0], v[1], aa_vadd(v)); return (0); } diff --git a/MathWorld/src/aa_vadd.s b/MathWorld/src/aa_vadd.s new file mode 100644 index 0000000..52c60b0 --- /dev/null +++ b/MathWorld/src/aa_vadd.s @@ -0,0 +1,8 @@ + .global aa_vadd + .type aa_vadd, "function" + .p2align 4 +aa_vadd: + ldr x1, [x0] + ldr x2, [x0, #8] + add x0, x1, x2 + ret