64 lines
No EOL
1.3 KiB
ArmAsm
64 lines
No EOL
1.3 KiB
ArmAsm
; ce programme est pour l'assembleur RealView (Keil)
|
|
thumb
|
|
area moncode, code, readonly
|
|
export calcul_dft
|
|
import TabCos
|
|
import TabSin
|
|
|
|
;
|
|
|
|
|
|
calcul_dft proc
|
|
push {lr}
|
|
|
|
push {r0,r1,r4,r5}
|
|
|
|
ldr r2, =TabCos
|
|
bl calcul_partie_dft ;recuperation Re(k) dans r0
|
|
|
|
smull r4, r5, r0, r0 ;Re(k)² dans r4, r5
|
|
pop {r0,r1} ;recupereration de TabSig et k dans r0,r1
|
|
|
|
|
|
ldr r2, =TabSin
|
|
bl calcul_partie_dft ;mise de -Im(k) dans r0
|
|
|
|
smlal r4, r5, r0, r0 ;Re²+(-Im(k))²
|
|
|
|
mov r0, r5 ;recuperation des bits de poids fort de M2(k)
|
|
pop {lr, r4,r5}
|
|
bx lr
|
|
endp
|
|
|
|
calcul_partie_dft proc
|
|
push {r4-r7}
|
|
|
|
|
|
mov r4, r0 ;chargement de TabSig dans r4
|
|
mov r5, r2 ;chargement de TabCos/TabSin dans r5
|
|
mov r6, r1 ;chargement de k dans r6
|
|
mov r7, #0 ;ik dans r7
|
|
|
|
mov r3, #0 ;i=0 dans r3
|
|
mov r0, #0 ;resultat de la somme dans r0
|
|
|
|
boucle ldrh r1, [r4, r3, LSL #1] ;chargement de x(i)
|
|
ldrsh r2, [r5, r7, LSL #1] ;chargement de cos(ik..), ldrs(!)h tres important, ne fonctionne pas sinon
|
|
|
|
mla r0, r1, r2, r0 ;multiplication + ajout au resultat de x(i)cos(ik..)
|
|
|
|
add r7, r7, r6 ;mise a jour de ik
|
|
and r7, r7, #63 ;modulo de ik par 64
|
|
|
|
add r3, #1 ;incrementation de i
|
|
cmp r3, #64 ;test de i
|
|
bne boucle
|
|
beq sortie
|
|
|
|
sortie
|
|
|
|
pop {r4-r7}
|
|
bx lr
|
|
endp
|
|
|
|
end |