diff --git a/challenge/Project.uvoptx b/challenge/Project.uvoptx
index 329a5b8..3b9b422 100644
--- a/challenge/Project.uvoptx
+++ b/challenge/Project.uvoptx
@@ -157,38 +157,6 @@
0
0
- 38
- 1
- 134218234
- 0
- 0
- 0
- 0
- 0
- 1
- .\Src\calcul_dft.s
-
- \\CHTI\Src/calcul_dft.s\38
-
-
- 1
- 0
- 0
- 0
- 134218136
- 0
- 0
- 0
- 0
- 0
- 1
-
-
- 0x08000198
-
-
- 2
- 0
10
1
134218152
@@ -202,6 +170,38 @@
\\CHTI\Src/principal.c\10
+
+ 1
+ 0
+ 7
+ 1
+ 134218128
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ .\Src\principal.c
+
+ \\CHTI\Src/principal.c\7
+
+
+ 2
+ 0
+ 52
+ 1
+ 134218270
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ .\Src\calcul_dft.s
+
+ \\CHTI\Src/calcul_dft.s\52
+
3
0
diff --git a/challenge/Src/calcul_dft.s b/challenge/Src/calcul_dft.s
index f0ae408..e65231c 100644
--- a/challenge/Src/calcul_dft.s
+++ b/challenge/Src/calcul_dft.s
@@ -4,34 +4,48 @@
N equ 64
; vitesse initiale : 1726
- ; vitesse actuelle : 1119
+ ; vitesse actuelle : 1101
dft proc
; r0 = x (signal), r1 = k
push {r4, r5, r6, r7, r8, r9}
ldr r2, =TabCos
ldr r3, =TabSin
- mov r4, #0 ; r4 = i
mov r5, #0 ; r5 = ik
- mov r9, #0 ; r9 = résultat réel
- mov r12, #0 ; r10 = résultat imaginaire
+
+ ; première itération de la boucle
+ ldrh r6, [r0], #2 ; r6 = x[i] (puis mise à jour de r0) | format 4.12
+ mov r7, #32767 ; r7 = cos [ik%N] | format 1.15
+ mov r8, #0 ; r8 = sin [ik%N] | format 1.15
+ mul r9, r6, r7 ; r9 = x[i] * cos[ik%n] | format 5.27
+ mul r12, r6, r8 ; r12 = x[i] * sin[ik%n] | format 5.27
+
+ add r5, r1 ; r5 = (i-1)k + k
+ and r5, #N-1 ; r5 = r5 % 64
+ mov r4, #1 ; r4 = i = 1
-deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12
+deb_somme ldrh r6, [r0], #2 ; r6 = x[i] (puis mise à jour de r0) | format 4.12
ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15
ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15
mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27
- mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 5.27
+ mla r12, r6, r8, r12 ; r12 += x[i] * sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k
and r5, #N-1 ; r5 = r5 % 64
add r4, #1 ; on incrémente i
- cmp r4, #N ;
+ cmp r4, #N-1
bne deb_somme
+
+ ; dernière itération de la boucle (pour éviter les 4 instructions inutiles à la fin)
+ ldrh r6, [r0] ; r6 = x[i] | format 4.12
+ ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15
+ ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15
+ mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27
+ mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 5.27
; etat des registres : r0 = x, r1 = k, r9 = Re, r10 = Im, autres libres
smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 10.54
-
smlal r2, r0, r12, r12 ; (r2,r0) = Re(k)² + Im(k)² | format : 10.54
pop {r4, r5, r6, r7, r8, r9}