[an error occurred while processing this directive]
|
.text _iir: lddu r10, r4, 2 iir_1: // filter body stdu r10, r4, 2 // context saving mov r6, r12 // restoring of registers
/////////////////////////////////////////////////////
//
// iir filter
//
// iir(descriptor* ddd, int* in, int* out );
//
// typedef struct{
// int num; // size of the block
// int a2; // koeff a2
// int a3; // koeff a3
// int inverse_a1; // koeff 1/a1
// int b1; // koeff b1
// int z1; // delay z1
// int z2; // delay z2
// int b2; // koeff b2
// int b3; // koeff b3
// } descriptor;
//
// r4 - pointer to descriptor
// r5 - pointer to input
// r6 - pointer to output
// r8 - a2 (matlab)
// r9 - a3 (matlab)
// r14 - b2 (matlab)
// r15 - b3 (matlab)
// r7 - (1/a1) (matlab)
// r13 - b1 (matlab)
// r10 - z1
// r11 - z2
//
/////////////////////////////////////////////////////
.global _iir
mov r13, %fmode // saving of registers
stu r13, r12, -1
mov r13, %guard
stu r13, r12, -1
mov r13, %loop0
stu r13, r12, -1
ldu r0, r4, 1 // context loading
add r0, -1
mov %loop0, r0
lddu r8, r4, 2
ldu r7, r4, 1
ldu r13, r4, 1
lddu r14, r4, 2
add r4, -4
bits %fmode, 2
bits %fmode, 4
xor.e r0, r0
xor.e r2, r2
ldu r1, r5, 1
shra.e r0, 2
mac2.a r10, r8
mac2.b r10, r14
mov r11, r10
mul.a r1, r7
mov r10, r1
mul.a r1, r13
add.e r2, r0
stu r3, r6, 1
agn0 iir_1
add r6, 1
ldu r13, r6, 1
mov %loop0, r13
ldu r13, r6, 1
mov %guard,r13
ld r13, r6
mov %fmode,r13
mov r12, r6
ret
Вот хочу оптимизировать это, а Вы не хотите помочь. Стыдно, товарисч!
E-mail: info@telesys.ru