|
▼のざわさん:
>お世話になります。
>
>良く判らないので質問させてください。
>
>http://ww1.microchip.com/downloads/en/DeviceDoc/51685E.pdf
>
>例えば、このマニュアルの103ページにあるmips_vec_add16ですが二つのベクトル列を足していますが、これって
>
>一度に16bitの演算を2回やっているのでしょうか?
>
>Nは4の倍数で4以上にしろと書いてあるので、なんらかのベクトル計算だと思うのですが、実際の所どうやっているか判らないです。
>
>gcc環境のほうで、高速な16bitのQ形式の線形計算(+-X/)のベクトル演算をしたいのですが、参考になる資料を探していています。
>
>何か資料はありませんでしょうか?
libdsp.aというのがMPLABのインストール先のどっかに作られていると思います。
それを逆アセンブルすれば良いです。
D:> mips-objdump -S libdsp.a
vec_add16.o: file format elf32-littlemips
Disassembly of section .text:
00000000 <mips_vec_add16>:
0: 30e7fffc andi a3,a3,0xfffc
4: 00073840 sll a3,a3,0x1
8: 00a73821 addu a3,a1,a3
0000000c <loop>:
c: 84a80000 lh t0,0(a1)
10: 84a90002 lh t1,2(a1)
14: 84aa0004 lh t2,4(a1)
18: 84ab0006 lh t3,6(a1)
1c: 84cc0000 lh t4,0(a2)
20: 84cd0002 lh t5,2(a2)
24: 84ce0004 lh t6,4(a2)
28: 84cf0006 lh t7,6(a2)
2c: 010c4021 addu t0,t0,t4
30: 012d4821 addu t1,t1,t5
34: 014e5021 addu t2,t2,t6
38: 016f5821 addu t3,t3,t7
3c: a4880000 sh t0,0(a0)
40: a4890002 sh t1,2(a0)
44: a48a0004 sh t2,4(a0)
48: a48b0006 sh t3,6(a0)
4c: 24a50008 addiu a1,a1,8
50: 24c60008 addiu a2,a2,8
54: 14a7ffed bne a1,a3,c <loop>
58: 24840008 addiu a0,a0,8
5c: 03e00008 jr ra
60: 00000040 ssnop
vec_addc16.o: file format elf32-littlemips
こんな感じで普通にN=4のループアンロールですね。
PIC32MXにはベクトル演算機構はないです。
私はなんとなくMIPS歴が長いので、普通にCでもこんなことします。
(ループアンロール)
ARMはレジスタ少ないし、遅延分岐しませんし、小回りが利くので
あんまりアンロールしなくても速い感じです。
|
|