| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- .globl mac_init;
-
- ALIGN;
- mac_init:
- movel #0,%macsr
- movel #0xfffffdff,%mask /*CFG_ADC_BUF_MASK */
- movel #0x0,%acc0
- movel #0x0,%acc1
- clrl %d0
- rts
-
-
- /*
- 在内核中函数调用压栈的顺序为从右到左,最后压栈的为返回地址。
- 例如下列函数中返回地址为sp(0),a的地址为sp(4),b的地址为sp(8), c的地址为sp(12).
- void abc(int a,int b, int c)
- {
- }
- void fourier32(short *dots,short * real_image_pair,int harmonic)
- */
- .globl fourier32;
- ALIGN;
- fourier32:
- subal #(3*4), %sp
- moveml %d2/%a2-%a3 ,%sp@
- /*得到初值*/
- movel %sp@(16),%a0 /*a0: 采样值的地址*/
- moveal %sp@(24),%a1 /*a1:本次实部系数地址*/
- moveal %a1,%a2
- addl #64,%a2 /*a2本次虚部系数地址*/
- movel %sp@(20),%a3 /*a3: 返回复数对的地址*/
-
-
- movel #0,%acc0 /*ACC0清零*/
- movel #0,%acc1 /*ACC1清零*/
- clrl %d0
-
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc0 /*%d2高16位为0,并取回下一个采样值*/
- movel (%a1)+,%d1 /*实部系数*/
-
- /*循环计算*/
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,%acc1 /*乘加虚部低16位*/
- mac.w %d0u,%d2u,%acc1 /*乘加虚部高16位*/
- /*取得结果,并四舍五入*/
- movel %acc0,%d0 /*结果->D0*/
- addl #0x8000,%d0 /*大于0.5就加一,已考虑正负数问题。*/
- swap %d0 /*交换高低16位,就是将结果值除以65536*/
- move.w %d0,(%a3)+ /*保存结果*/
-
- movel %acc1,%d0 /*结果->D0*/
- addl #0x8000,%d0 /*大于0.5就加一,已考虑正负数问题。*/
- swap %d0 /*交换高低16位,就是将结果值除以65536*/
- move.w %d0,(%a3) /*保存结果*/
- /*函数退出*/
- moveml %sp@,%d2/%a2-%a3
- addal #(3*4), %sp
-
- rts
- .globl fourier32_half;
- ALIGN;
- fourier32_half:
- subal #(3*4), %sp
- moveml %d2/%a2-%a3 ,%sp@
- /*得到初值*/
- movel %sp@(16),%a0 /*a0: 采样值的地址*/
- moveal %sp@(24),%a1 /*a1:本次实部系数地址*/
- moveal %a1,%a2
- addl #64,%a2 /*a2本次虚部系数地址*/
- movel %sp@(20),%a3 /*a3: 返回复数对的地址*/
-
-
- movel #0,%acc0 /*ACC0清零*/
- movel #0,%acc1 /*ACC1清零*/
- clrl %d0
-
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc0 /*%d2高16位为0,并取回下一个采样值*/
- movel (%a1)+,%d1 /*实部系数*/
-
- /*循环计算*/
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,(%a1)+,%d1,%acc1 /*乘加虚部低16位,并取实部系数*/
- mac.w %d0u,%d2u,(%a0)+&,%d0,%acc1 /*乘加虚部高16位,并取采样值*/
-
- mac.w %d0l,%d1l,%acc0 /*乘加实部低16位*/
- mac.w %d0u,%d1u,(%a2)+,%d2,%acc0 /*乘加实部高16位,并取虚部系数*/
- mac.w %d0l,%d2l,%acc1 /*乘加虚部低16位*/
- mac.w %d0u,%d2u,%acc1 /*乘加虚部高16位*/
- /*取得结果,并四舍五入*/
- movel #2,%d1
- movel %acc0,%d0 /*结果->D0*/
- mulsl %d1,%d0 /*有符号乘以2*/
- addl #0x8000,%d0 /*大于0.5就加一,已考虑正负数问题。*/
- swap %d0 /*交换高低16位,就是将结果值除以65536*/
- move.w %d0,(%a3)+ /*保存结果*/
-
- movel %acc1,%d0 /*结果->D0*/
- mulsl %d1,%d0 /*有符号乘以2*/
- addl #0x8000,%d0 /*大于0.5就加一,已考虑正负数问题。*/
- swap %d0 /*交换高低16位,就是将结果值除以65536*/
- move.w %d0,(%a3) /*保存结果*/
- /*函数退出*/
- moveml %sp@,%d2/%a2-%a3
- addal #(3*4), %sp
-
- rts
-
- .globl bkpt_disable;
-
- ALIGN;
- bkpt_disable:
- lea wdbg_bkpt,%a0
- wdebug (%a0)
- clrl %d0
- rts
- .data
- .align 4
- wdbg_bkpt:
- .word 0x2c80 /* DR0 */
- .word 0x0006 /* 31:16 */
- .word 0x0000 /* 15:0 -- enable UHE */
- .word 0x0000 /* unused */
|