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}