Project

General

Profile

qf_mat44_mul.asm

sprin, 08/09/2013 11:29 PM

 
1
.include "qf_common.inc"
2

    
3
.text
4

    
5
; ??-????????:
6
;   void qf_mat44_mul(const float* a, const float* b, float* c);
7

    
8
; ???????????:
9
;  * ??? 4-? ?????????? ?? - MCp0411100101
10

    
11
.global qf_mat44_mul
12
qf_mat44_mul:
13
    .alias qf_mat44_mul.a #SP,4
14
    .alias qf_mat44_mul.b #SP,8
15
    .alias qf_mat44_mul.c #SP,12
16
    .alias qf_mat44_mul.old_i32 #SP,-4
17
    .alias qf_mat44_mul.old_i33 #SP,-8
18
    .alias qf_mat44_mul.old_i34 #SP,-12
19

    
20
    .alias qf_mat44_mul.stackb 12      ; ?????????? ???? ??? ????. #BP(#38) ?? ????????????.
21
    .alias qf_mat44_mul.old_i32.newSP #SP,8
22
    .alias qf_mat44_mul.old_i33.newSP #SP,4
23
    .alias qf_mat44_mul.old_i34.newSP #SP
24

    
25

    
26
    jmp qf_mat44_mul.P0
27

    
28
    ; ???????? ??? ???? ?????. ????? 1 ?? 3
29
    SP13 := getl #SP
30
    ; ?????????? ??????? ?????????? ? ?????????
31
    a := rdl qf_mat44_mul.a
32
    b := rdl qf_mat44_mul.b
33
    c := rdl qf_mat44_mul.c
34
    ; ???????? ??? ???? ?????. ????? 2 ?? 3
35
    SP23 := subl @SP13, qf_mat44_mul.stackb
36
    ; ????????? ???????? ????????? 32, 33 ? 34
37
    old_i32 := getl #32
38
    old_i33 := getl #33
39
    old_i34 := getl #34
40
    ; ???????? ??? ???? ?????. ????? 3 ?? 3
41
    setl #SP, @SP23
42
    ; ?????? ? ????????? ???????? ?????????? ?? ?????????
43
    setl #32, @a
44
    setl #33, @b
45
    setl #34, @c
46
    ; ?????????? ?????? ???????? ????????? ????????? ? ?????
47
    wrl  @old_i32, qf_mat44_mul.old_i32
48
    wrl  @old_i33, qf_mat44_mul.old_i33
49
    wrl  @old_i34, qf_mat44_mul.old_i34
50
complete
51

    
52
.local qf_mat44_mul.P0
53
qf_mat44_mul.P0:
54
    ; ????????? ????????. ????? 1 ?? 2
55
    exit := rdl #SP, qf_mat44_mul.stackb
56
    ; ?????? ??????? "a"
57
    va01 := rdq #32
58
    va23 := rdq #32,8
59
    va45 := rdq #32,16
60
    va67 := rdq #32,24
61
    va89 := rdq #32,32
62
    vaAB := rdq #32,40
63
    vaCD := rdq #32,48
64
    vaEF := rdq #32,56
65
    ; ????????? ????????. ????? 2 ?? 2
66
    jmp @exit
67
    ; ??????????????? ???????? ??? ???????? ??????? "a" ? ??????. ????? 1 ?? 2
68
    va54 := pack @va45, @va45
69
    va76 := pack @va67, @va67
70
    ; ?????? ??????? "b"
71
    vb01 := rdq #33
72
    vb23 := rdq #33,8
73
    vb45 := rdq #33,16
74
    vb67 := rdq #33,24
75
    vb89 := rdq #33,32
76
    vbAB := rdq #33,40
77
    vbCD := rdq #33,48
78
    vbEF := rdq #33,56
79
    ; ??????????????? ???????? ??? ???????? ??????? "a" ? ??????. ????? 2 ?? 2
80
    vaDC := pack @vaCD, @vaCD
81
    vaFE := pack @vaEF, @vaEF
82
    ; ???????? ????? ??????? "a"
83
    va04 := patch @va45, @va01
84
    va8C := patch @vaCD, @va89
85
    va15 := pack @va54, @va01
86
    va9D := pack @vaDC, @va89
87
    va26 := patch @va67, @va23
88
    vaAE := patch @vaEF, @vaAB
89
    va37 := pack @va76, @va23
90
    vaBF := pack @vaFE, @vaAB
91
    ; ????????? ???????????? ????? ??????? "a" ?? ????????? ??????? "b".
92
    ; ??????? ??????? ??? ????????????? ?????????? ??????? ??????????? ??????????.
93
    ; ???? ????????? ??? ?????. ?? ?????????? MCp0411100101 ??? ??????????
94
    ; ????????? ???????, ??? ?????????? ??????? ?????????? ???????????? ??????.
95
    madd @va04, @vb01
96
    madd @va8C, @vb23
97
    madd @va15, @vb01
98
    madd @va9D, @vb23
99
    madd @va26, @vb01
100
    madd @vaAE, @vb23
101
    madd @va37, @vb01
102
    madd @vaBF, @vb23
103
    madd @va04, @vb45
104
    madd @va8C, @vb67
105
    madd @va15, @vb45
106
    madd @va9D, @vb67
107
    madd @va26, @vb45
108
    madd @vaAE, @vb67
109
    madd @va37, @vb45
110
    madd @vaBF, @vb67
111
    madd @va04, @vb89
112
    madd @va8C, @vbAB
113
    madd @va15, @vb89
114
    madd @va9D, @vbAB
115
    madd @va26, @vb89
116
    madd @vaAE, @vbAB
117
    madd @va37, @vb89
118
    madd @vaBF, @vbAB
119
    madd @va04, @vbCD
120
    madd @va8C, @vbEF
121
    madd @va15, @vbCD
122
    madd @va9D, @vbEF
123
    madd @va26, @vbCD
124
    madd @vaAE, @vbEF
125
    madd @va37, @vbCD
126
    madd @vaBF, @vbEF
127
    vc0 := addf @32, @31
128
    vc1 := addf @31, @30
129
    vc2 := addf @30, @29
130
    vc3 := addf @29, @28
131
    vc4 := addf @28, @27
132
    vc5 := addf @27, @26
133
    vc6 := addf @26, @25
134
    vc7 := addf @25, @24
135
    vc8 := addf @24, @23
136
    vc9 := addf @23, @22
137
    vcA := addf @22, @21
138
    vcB := addf @21, @20
139
    vcC := addf @20, @19
140
    vcD := addf @19, @18
141
    vcE := addf @18, @17
142
    vcF := addf @17, @16
143
    ; ?????? ???????????,
144
    ;   "wrl" ??? ???????? ???? ???????, ??? ???????? ? ?????? ? "wrq".
145
    wrl @vc0, #34
146
    wrl @vc1, #34,4
147
    wrl @vc2, #34,8
148
    wrl @vc3, #34,12
149
    wrl @vc4, #34,16
150
    wrl @vc5, #34,20
151
    wrl @vc6, #34,24
152
    wrl @vc7, #34,28
153
    wrl @vc8, #34,32
154
    wrl @vc9, #34,36
155
    wrl @vcA, #34,40
156
    wrl @vcB, #34,44
157
    wrl @vcC, #34,48
158
    wrl @vcD, #34,52
159
    wrl @vcE, #34,56
160
    wrl @vcF, #34,60
161

    
162
    ; ??????? ??? ???? ?????. ????? 1 ?? 3
163
    SP13 := getl #SP
164
    ; ?????????????? ?????? ???????? ????????? ?????????. ????? 1 ?? 2
165
    old_i34 := rdl qf_mat44_mul.old_i34.newSP
166
    old_i33 := rdl qf_mat44_mul.old_i33.newSP
167
    old_i32 := rdl qf_mat44_mul.old_i32.newSP
168
    ; ??????? ??? ???? ?????. ????? 2 ?? 3
169
    SP23 := addl @SP13, qf_mat44_mul.stackb
170
    ; ?????????????? ?????? ???????? ????????? ?????????. ????? 2 ?? 2
171
    setl #34, @old_i34
172
    setl #33, @old_i33
173
    setl #32, @old_i32
174
    ; ??????? ??? ???? ?????. ????? 3 ?? 3
175
    setl #SP, @SP23
176
complete