星野/日誌/2009-06-18
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[星野/日誌]]
-授業~
組み込みのTAの予習となりました。~
H8かNIOS2か、という違いだけで、あとはそんなに変わらないはず。~
一番やっかいなのは、環境。
-研究~
プレゼン作り。~
ISAを作ろうかと思ったけどそんな暇はなかったんだぜ!~
--DCT for RISC (MIPS?)
---yだけunrollingした。
---そもそも、アセンブリの作り方がわからない。
---レジスタの使い方めちゃくちゃ
---ILPがわかればいいのかな?
---つか、FPU使わないとだめじゃない?
---FPUのレジスタ使わないとか・・・
---いいえ、全部整数です。(ということにして、いまはやめておく)
// DCT assembly for RISC
// Created by Hiroki Hoshino
// Update : June 18, 2009
/*
1 for(u=0; u<N; u++){
2 for(v=0; v<N; v++){
3
4 if(u==0) Cu = 1/sqrt(2);
5 else Cu = 1.0;
6 if(v==0) Cv = 1/sqrt(2);
7 else Cv = 1.0;
8
9 for(x=0; x<N; x++){
10 for(y=0; y<N; y++){
11 A[u][v] += a[x][y] * costable[x][u] * costable[y][v];
12 }
13 }
14
15 A[u][v] *= 0.25*Cu*Cv;
16 }
17 }
*/
main:
lda r30, *a[][]
lda r29, *costable[][]
lda r28, *A[][]
lda r27, *vars // u, v, x, Cu, Cv
mov r4, r0 // u = 0
stw r4, 0(r27)
L7:
/******************************************/
ldli r8, 8
ldw r4, 0(r27)
ble r8, r4, L8 // if 8 <= u then go to L8
/******************************************/
/******************************************/
mov r5, r0 // v = 0
stw r5, 1(r27)
/******************************************/
L3:
/******************************************/
ldli r8, 8
ldw r5, 1(r27)
ble r8, r5, L6 // if 8 <= v then go to L6
/******************************************/
/******************************************/
ldw r4, 0(r27) // u
beq r4, r0, L4 // u == 0
lui r21, (upper of 1.0)
ori r21, (lower of 1.0)
L4:
lui r21, (upper of 1/sqrt(2))
ori r21, (lower of 1/sqrt(2))
stw r21, 3(r27)
beq r5, r0, L5
lui r22, (upper of 1.0)
ori r22, (lower of 1.0)
L5:
lui r22, (upper of 1/sqrt(2))
ori r22, (lower of 1/sqrt(2))
stw r22, 4(r27)
/******************************************/
/******************************************/
ldw r4, 0(r27)
ldw r5, 1(r27)
sll r1, r4, 2 // u
sll r2, r5, 5 // v
add r3, r1, r2 // [u][v]
mov r23, r28
add r23, r23, r3 // *A[u][v]
/******************************************/
/******************************************/
mov r6, r0 // x = 0
stw r6, 2(r27)
/******************************************/
L1:
/******************************************/
ldli r8, 8
ldw r6, 2(r27)
ble r8, r6, L2 // if 8 <= x then go to L2
/******************************************/
/******************************************/
mov r24, r30
ldw r6, 2(r27)
sll r8, r6, 5 // x
add r24, r24, r8 // r24 = *a[0][y]
mov r25, r29
ldw r6, 2(r27)
sll r8, r6, 5 // x
ldw r4, 0(r27)
sll r9, r4, 2 // u
add r8, r8, r9
add r25, r25, r8 // r25 = *costable[x][u]
mov r26, r29
ldw r5, 1(r27)
sll r8, r5, 2 // v
add r26, r26, r8 // r26 = *costalbe[y][0]
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][0]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][0]*costable[x][u]
ldw r12, 0(r26) // costable[0][v]
mul r13, r11, r12 // r13 = a[x][0]*costable[x][u]*costable[0][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][0]*costable[x][u]*costable[0][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][1]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][1]*costable[x][u]
ldw r12, 0(r26) // costable[1][v]
mul r13, r11, r12 // r13 = a[x][1]*costable[x][u]*costable[1][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][1]*costable[x][u]*costable[1][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][2]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][2]*costable[x][u]
ldw r12, 0(r26) // costable[2][v]
mul r13, r11, r12 // r13 = a[x][2]*costable[x][u]*costable[2][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][2]*costable[x][u]*costable[2][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][3]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][3]*costable[x][u]
ldw r12, 0(r26) // costable[3][v]
mul r13, r11, r12 // r13 = a[x][3]*costable[x][u]*costable[0][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][3]*costable[x][u]*costable[3][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][4]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][4]*costable[x][u]
ldw r12, 0(r26) // costable[4][v]
mul r13, r11, r12 // r13 = a[x][4]*costable[x][u]*costable[4][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][4]*costable[x][u]*costable[4][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][5]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][5]*costable[x][u]
ldw r12, 0(r26) // costable[0][v]
mul r13, r11, r12 // r13 = a[x][5]*costable[x][u]*costable[5][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][5]*costable[x][u]*costable[5][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][6]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][6]*costable[x][u]
ldw r12, 0(r26) // costable[6][v]
mul r13, r11, r12 // r13 = a[x][6]*costable[x][u]*costable[6][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][6]*costable[x][u]*costable[6][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][7]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][7]*costable[x][u]
ldw r12, 0(r26) // costable[7][v]
mul r13, r11, r12 // r13 = a[x][7]*costable[x][u]*costable[7][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][7]*costable[x][u]*costable[7][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r6, 2(r27)
addi r6, r6, 1 // x = x +1
stw r6, 2(r27)
j L1
/******************************************/
L2:
/******************************************/
ldw r16, 0(r23) // A[u][v]
ldw r17, 3(r27) // Cu
mul r18, r16, r17
ldw r16, 4(r27) // Cv
mul r19, r18, r16
lui r20, (upper of 0.25)
ori r20, (lower of 0.25)
mul r21, r19, r20
stw r19, 0(r23) // 0.25*A[u][v]*Cu*Cv
/******************************************/
/******************************************/
ldw r5, 1(r27)
addi r5, r5, 1 // v = v +1
stw r5, 1(r27)
j L3
/******************************************/
L6:
/******************************************/
ldw r4, 0(r27)
addi r4, r4, 1 // u = u +1
stw r4, 0(r27)
j L7
/******************************************/
L8:
hlt
-------------
#comment
終了行:
[[星野/日誌]]
-授業~
組み込みのTAの予習となりました。~
H8かNIOS2か、という違いだけで、あとはそんなに変わらないはず。~
一番やっかいなのは、環境。
-研究~
プレゼン作り。~
ISAを作ろうかと思ったけどそんな暇はなかったんだぜ!~
--DCT for RISC (MIPS?)
---yだけunrollingした。
---そもそも、アセンブリの作り方がわからない。
---レジスタの使い方めちゃくちゃ
---ILPがわかればいいのかな?
---つか、FPU使わないとだめじゃない?
---FPUのレジスタ使わないとか・・・
---いいえ、全部整数です。(ということにして、いまはやめておく)
// DCT assembly for RISC
// Created by Hiroki Hoshino
// Update : June 18, 2009
/*
1 for(u=0; u<N; u++){
2 for(v=0; v<N; v++){
3
4 if(u==0) Cu = 1/sqrt(2);
5 else Cu = 1.0;
6 if(v==0) Cv = 1/sqrt(2);
7 else Cv = 1.0;
8
9 for(x=0; x<N; x++){
10 for(y=0; y<N; y++){
11 A[u][v] += a[x][y] * costable[x][u] * costable[y][v];
12 }
13 }
14
15 A[u][v] *= 0.25*Cu*Cv;
16 }
17 }
*/
main:
lda r30, *a[][]
lda r29, *costable[][]
lda r28, *A[][]
lda r27, *vars // u, v, x, Cu, Cv
mov r4, r0 // u = 0
stw r4, 0(r27)
L7:
/******************************************/
ldli r8, 8
ldw r4, 0(r27)
ble r8, r4, L8 // if 8 <= u then go to L8
/******************************************/
/******************************************/
mov r5, r0 // v = 0
stw r5, 1(r27)
/******************************************/
L3:
/******************************************/
ldli r8, 8
ldw r5, 1(r27)
ble r8, r5, L6 // if 8 <= v then go to L6
/******************************************/
/******************************************/
ldw r4, 0(r27) // u
beq r4, r0, L4 // u == 0
lui r21, (upper of 1.0)
ori r21, (lower of 1.0)
L4:
lui r21, (upper of 1/sqrt(2))
ori r21, (lower of 1/sqrt(2))
stw r21, 3(r27)
beq r5, r0, L5
lui r22, (upper of 1.0)
ori r22, (lower of 1.0)
L5:
lui r22, (upper of 1/sqrt(2))
ori r22, (lower of 1/sqrt(2))
stw r22, 4(r27)
/******************************************/
/******************************************/
ldw r4, 0(r27)
ldw r5, 1(r27)
sll r1, r4, 2 // u
sll r2, r5, 5 // v
add r3, r1, r2 // [u][v]
mov r23, r28
add r23, r23, r3 // *A[u][v]
/******************************************/
/******************************************/
mov r6, r0 // x = 0
stw r6, 2(r27)
/******************************************/
L1:
/******************************************/
ldli r8, 8
ldw r6, 2(r27)
ble r8, r6, L2 // if 8 <= x then go to L2
/******************************************/
/******************************************/
mov r24, r30
ldw r6, 2(r27)
sll r8, r6, 5 // x
add r24, r24, r8 // r24 = *a[0][y]
mov r25, r29
ldw r6, 2(r27)
sll r8, r6, 5 // x
ldw r4, 0(r27)
sll r9, r4, 2 // u
add r8, r8, r9
add r25, r25, r8 // r25 = *costable[x][u]
mov r26, r29
ldw r5, 1(r27)
sll r8, r5, 2 // v
add r26, r26, r8 // r26 = *costalbe[y][0]
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][0]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][0]*costable[x][u]
ldw r12, 0(r26) // costable[0][v]
mul r13, r11, r12 // r13 = a[x][0]*costable[x][u]*costable[0][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][0]*costable[x][u]*costable[0][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][1]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][1]*costable[x][u]
ldw r12, 0(r26) // costable[1][v]
mul r13, r11, r12 // r13 = a[x][1]*costable[x][u]*costable[1][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][1]*costable[x][u]*costable[1][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][2]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][2]*costable[x][u]
ldw r12, 0(r26) // costable[2][v]
mul r13, r11, r12 // r13 = a[x][2]*costable[x][u]*costable[2][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][2]*costable[x][u]*costable[2][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][3]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][3]*costable[x][u]
ldw r12, 0(r26) // costable[3][v]
mul r13, r11, r12 // r13 = a[x][3]*costable[x][u]*costable[0][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][3]*costable[x][u]*costable[3][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][4]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][4]*costable[x][u]
ldw r12, 0(r26) // costable[4][v]
mul r13, r11, r12 // r13 = a[x][4]*costable[x][u]*costable[4][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][4]*costable[x][u]*costable[4][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][5]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][5]*costable[x][u]
ldw r12, 0(r26) // costable[0][v]
mul r13, r11, r12 // r13 = a[x][5]*costable[x][u]*costable[5][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][5]*costable[x][u]*costable[5][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][6]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][6]*costable[x][u]
ldw r12, 0(r26) // costable[6][v]
mul r13, r11, r12 // r13 = a[x][6]*costable[x][u]*costable[6][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][6]*costable[x][u]*costable[6][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r9, 0(r24) // a[x][7]
ldw r10, 0(r25) // costable[x][u]
mul r11, r9, r10// r11 = a[x][7]*costable[x][u]
ldw r12, 0(r26) // costable[7][v]
mul r13, r11, r12 // r13 = a[x][7]*costable[x][u]*costable[7][v]
ldw r14, 0(r23)
add r15, r13, r15 // A[u][v] += a[x][7]*costable[x][u]*costable[7][v]
stw r15, 0(r23)
/******************************************/
/******************************************/
ldw r6, 2(r27)
addi r6, r6, 1 // x = x +1
stw r6, 2(r27)
j L1
/******************************************/
L2:
/******************************************/
ldw r16, 0(r23) // A[u][v]
ldw r17, 3(r27) // Cu
mul r18, r16, r17
ldw r16, 4(r27) // Cv
mul r19, r18, r16
lui r20, (upper of 0.25)
ori r20, (lower of 0.25)
mul r21, r19, r20
stw r19, 0(r23) // 0.25*A[u][v]*Cu*Cv
/******************************************/
/******************************************/
ldw r5, 1(r27)
addi r5, r5, 1 // v = v +1
stw r5, 1(r27)
j L3
/******************************************/
L6:
/******************************************/
ldw r4, 0(r27)
addi r4, r4, 1 // u = u +1
stw r4, 0(r27)
j L7
/******************************************/
L8:
hlt
-------------
#comment
ページ名: