0
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
1 /* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
2 /* License in license.txt. */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
3 /* */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
4 /* Verbs: Assembly Routines for Integer + * - with Overflow */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
5 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
6 /* fvv zv=.xv+yv 0<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
7 /* fv1 zv=.xv+y 0<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
8 /* f1v zv=.x +yv 0<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
9 /* frv zv=.xv+zv 0<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
10 /* fr z =.+/ xv 1<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
11 /* fp zv=.+/\ xv 1<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
12 /* fs zv=.+/\.xv 1<n */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
13 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
14 #ifndef NOASM /* builder defines NOASM to do I overflow in C instead of asm */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
15 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
16 #if SY_WIN32 && !SY_64 && !SY_WINCE |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
17 #define OVF |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
18 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
19 #define PLUSVV(m,z,x,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
20 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
21 __asm mov ecx,m \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
22 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
23 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
24 __asm mov edx,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
25 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
26 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
27 __asm sub edx,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
28 __asm pvv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
29 __asm add eax,[edx+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
30 __asm jo pvv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
31 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
32 __asm loop pvv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
33 __asm jmp pvv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
34 __asm pvv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
35 __asm pvv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
36 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
37 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
38 #define PLUS1V(n,z,u,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
39 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
40 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
41 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
42 __asm mov edx,u \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
43 __asm mov esi,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
44 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
45 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
46 __asm p1v20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
47 __asm add eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
48 __asm jo p1v30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
49 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
50 __asm loop p1v20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
51 __asm jmp p1v40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
52 __asm p1v30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
53 __asm p1v40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
54 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
55 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
56 #define PLUSV1(n,z,x,v) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
57 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
58 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
59 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
60 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
61 __asm mov edx,v \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
62 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
63 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
64 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
65 __asm pv120: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
66 __asm add eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
67 __asm jo pv130 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
68 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
69 __asm loop pv120 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
70 __asm jmp pv140 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
71 __asm pv130: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
72 __asm pv140: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
73 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
74 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
75 #define PLUSRV(d,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
76 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
77 __asm mov ecx,d \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
78 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
79 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
80 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
81 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
82 __asm prv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
83 __asm add eax,[edi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
84 __asm jo prv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
85 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
86 __asm loop prv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
87 __asm jmp prv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
88 __asm prv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
89 __asm prv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
90 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
91 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
92 #define PLUSR(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
93 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
94 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
95 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
96 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
97 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
98 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
99 __asm pr20: add eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
100 __asm jo pr30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
101 __asm loop pr20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
102 __asm mov [edi],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
103 __asm jmp pr40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
104 __asm pr30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
105 __asm pr40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
106 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
107 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
108 #define PLUSP(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
109 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
110 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
111 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
112 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
113 __asm xor edx,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
114 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
115 __asm mov ebx,ecx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
116 __asm sar ecx,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
117 __asm pp20: add eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
118 __asm jo pp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
119 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
120 __asm inc edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
121 __asm add eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
122 __asm jo pp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
123 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
124 __asm inc edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
125 __asm loop pp20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
126 __asm and ebx,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
127 __asm jz pp40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
128 __asm add eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
129 __asm jo pp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
130 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
131 __asm jmp pp40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
132 __asm pp30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
133 __asm pp40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
134 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
135 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
136 #define PLUSS(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
137 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
138 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
139 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
140 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
141 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
142 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
143 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
144 __asm ps20: add eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
145 __asm jo ps30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
146 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
147 __asm loop ps20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
148 __asm jmp ps40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
149 __asm ps30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
150 __asm ps40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
151 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
152 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
153 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
154 #define MINUSVV(m,z,x,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
155 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
156 __asm mov ecx,m \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
157 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
158 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
159 __asm mov edx,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
160 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
161 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
162 __asm sub edx,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
163 __asm mvv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
164 __asm sub eax,[edx+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
165 __asm jo mvv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
166 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
167 __asm loop mvv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
168 __asm jmp mvv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
169 __asm mvv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
170 __asm mvv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
171 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
172 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
173 #define MINUS1V(n,z,u,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
174 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
175 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
176 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
177 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
178 __asm mov edx,u \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
179 __asm mov esi,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
180 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
181 __asm m1v20: mov eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
182 __asm sub eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
183 __asm jo m1v30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
184 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
185 __asm loop m1v20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
186 __asm jmp m1v40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
187 __asm m1v30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
188 __asm m1v40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
189 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
190 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
191 #define MINUSV1(n,z,x,v) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
192 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
193 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
194 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
195 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
196 __asm mov edx,v \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
197 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
198 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
199 __asm mv120: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
200 __asm sub eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
201 __asm jo mv130 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
202 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
203 __asm loop mv120 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
204 __asm jmp mv140 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
205 __asm mv130: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
206 __asm mv140: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
207 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
208 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
209 #define MINUSRV(d,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
210 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
211 __asm mov ecx,d \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
212 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
213 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
214 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
215 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
216 __asm mrv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
217 __asm sub eax,[edi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
218 __asm jo mrv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
219 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
220 __asm loop mrv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
221 __asm jmp mrv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
222 __asm mrv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
223 __asm mrv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
224 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
225 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
226 #define MINUSR(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
227 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
228 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
229 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
230 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
231 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
232 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
233 __asm mr20: mov edx,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
234 __asm sub edx,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
235 __asm jo mr30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
236 __asm mov eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
237 __asm loop mr20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
238 __asm mov [edi],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
239 __asm jmp mr40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
240 __asm mr30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
241 __asm mr40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
242 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
243 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
244 #define MINUSP(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
245 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
246 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
247 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
248 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
249 __asm xor edx,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
250 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
251 __asm mov ebx,ecx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
252 __asm sar ecx,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
253 __asm mp20: add eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
254 __asm jo mp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
255 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
256 __asm inc edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
257 __asm sub eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
258 __asm jo mp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
259 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
260 __asm inc edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
261 __asm loop mp20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
262 __asm and ebx,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
263 __asm jz mp40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
264 __asm add eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
265 __asm jo mp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
266 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
267 __asm jmp mp40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
268 __asm mp30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
269 __asm mp40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
270 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
271 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
272 #define MINUSS(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
273 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
274 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
275 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
276 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
277 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
278 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
279 __asm xor eax,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
280 __asm ms20: mov edx,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
281 __asm sub edx,eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
282 __asm jo ms30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
283 __asm mov eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
284 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
285 __asm loop ms20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
286 __asm jmp ms40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
287 __asm ms30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
288 __asm ms40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
289 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
290 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
291 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
292 #define TYMESVV(m,z,x,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
293 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
294 __asm mov ecx,m \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
295 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
296 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
297 __asm mov edx,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
298 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
299 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
300 __asm sub edx,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
301 __asm tvv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
302 __asm imul eax,[edx+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
303 __asm jo tvv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
304 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
305 __asm loop tvv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
306 __asm jmp tvv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
307 __asm tvv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
308 __asm tvv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
309 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
310 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
311 #define TYMES1V(n,z,u,y) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
312 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
313 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
314 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
315 __asm mov edx,u \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
316 __asm mov esi,y \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
317 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
318 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
319 __asm t1v20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
320 __asm imul eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
321 __asm jo t1v30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
322 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
323 __asm loop t1v20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
324 __asm jmp t1v40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
325 __asm t1v30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
326 __asm t1v40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
327 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
328 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
329 #define TYMESV1(n,z,x,v) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
330 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
331 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
332 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
333 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
334 __asm mov edx,v \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
335 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
336 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
337 __asm tv120: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
338 __asm imul eax,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
339 __asm jo tv130 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
340 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
341 __asm loop tv120 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
342 __asm jmp tv140 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
343 __asm tv130: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
344 __asm tv140: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
345 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
346 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
347 #define TYMESRV(d,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
348 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
349 __asm mov ecx,d \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
350 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
351 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
352 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
353 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
354 __asm trv20: mov eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
355 __asm imul eax,[edi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
356 __asm jo trv30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
357 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
358 __asm loop trv20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
359 __asm jmp trv40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
360 __asm trv30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
361 __asm trv40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
362 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
363 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
364 #define TYMESR(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
365 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
366 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
367 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
368 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
369 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
370 __asm mov eax,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
371 __asm tr20: imul eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
372 __asm jo tr30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
373 __asm loop tr20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
374 __asm mov [edi],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
375 __asm jmp tr40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
376 __asm tr30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
377 __asm tr40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
378 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
379 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
380 #define TYMESP(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
381 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
382 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
383 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
384 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
385 __asm xor edx,edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
386 __asm mov eax,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
387 __asm tp20: imul eax,[esi+edx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
388 __asm jo tp30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
389 __asm mov [edi+edx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
390 __asm inc edx \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
391 __asm loop tp20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
392 __asm jmp tp40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
393 __asm tp30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
394 __asm tp40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
395 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
396 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
397 #define TYMESS(n,z,x) \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
398 { \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
399 __asm mov ecx,n \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
400 __asm mov edi,z \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
401 __asm mov esi,x \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
402 __asm sub esi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
403 __asm sub edi,4 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
404 __asm mov eax,1 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
405 __asm ts20: imul eax,[esi+ecx*4] \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
406 __asm jo ts30 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
407 __asm mov [edi+ecx*4],eax \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
408 __asm loop ts20 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
409 __asm jmp ts40 \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
410 __asm ts30: mov er,EWOV \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
411 __asm ts40: \ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
412 } |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
413 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
414 #endif |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
415 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
416 #if SY_64 /* win64 and linux64 asm routines */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
417 #define OVF |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
418 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
419 C asmplusvv(I,I*,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
420 C asmminusvv(I,I*,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
421 C asmtymesvv(I,I*,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
422 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
423 C asmplus1v(I,I*,I,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
424 C asmminus1v(I,I*,I,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
425 C asmtymes1v(I,I*,I,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
426 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
427 C asmminusv1(I,I*,I*,I); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
428 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
429 C asmplusr(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
430 C asmminusr(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
431 C asmtymesr(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
432 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
433 C asmplusrv(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
434 C asmminusrv(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
435 C asmtymesrv(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
436 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
437 C asmpluss(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
438 C asmminuss(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
439 C asmtymess(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
440 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
441 C asmplusp(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
442 C asmminusp(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
443 C asmtymesp(I,I*,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
444 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
445 C asminnerprod(I,I*,I*,I*,I); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
446 C asminnerprodx(I,I*,I,I*); |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
447 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
448 #define PLUSVV(m,z,x,y) er=asmplusvv(m,z,x,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
449 #define MINUSVV(m,z,x,y) er=asmminusvv(m,z,x,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
450 #define TYMESVV(m,z,x,y) er=asmtymesvv(m,z,x,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
451 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
452 #define PLUSRV(d,z,x) er=asmplusrv(d,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
453 #define MINUSRV(d,z,x) er=asmminusrv(d,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
454 #define TYMESRV(d,z,x) er=asmtymesrv(d,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
455 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
456 #define PLUS1V(n,z,u,y) er=asmplus1v(n,z,u,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
457 #define MINUS1V(n,z,u,y) er=asmminus1v(n,z,u,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
458 #define TYMES1V(n,z,u,y) er=asmtymes1v(n,z,u,y) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
459 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
460 #define PLUSV1(n,z,x,v) PLUS1V(n,z,v,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
461 #define MINUSV1(n,z,x,v) er=asmminusv1(n,z,x,v) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
462 #define TYMESV1(n,z,x,v) TYMES1V(n,z,v,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
463 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
464 #define PLUSR(n,z,x) er=asmplusr(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
465 #define MINUSR(n,z,x) er=asmminusr(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
466 #define TYMESR(n,z,x) er=asmtymesr(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
467 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
468 #define PLUSS(n,z,x) er=asmpluss(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
469 #define MINUSS(n,z,x) er=asmminuss(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
470 #define TYMESS(n,z,x) er=asmtymess(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
471 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
472 #define PLUSP(n,z,x) er=asmplusp(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
473 #define MINUSP(n,z,x) er=asmminusp(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
474 #define TYMESP(n,z,x) er=asmtymesp(n,z,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
475 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
476 #endif |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
477 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
478 #endif |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
479 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
480 /* C routines for platforms without asm support */ |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
481 #ifndef OVF |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
482 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
483 #if SY_64 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
484 #define DI LD |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
485 #else |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
486 #define DI D |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
487 #endif |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
488 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
489 #define PLUSVV(m,z,x,y) {B p; DO(m, p=0>*x; *z=*x+*y; BOV(p==0>*y&&p!=0>*z); z++; x++; y++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
490 #define MINUSVV(m,z,x,y) {B p; DO(m, p=0>*x; *z=*x-*y; BOV(p!=0>*y&&p!=0>*z); z++; x++; y++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
491 #define TYMESVV(m,z,x,y) {DI t; DO(m, t=*x*(DI)*y; *z=(I)t; BOV(t<IMIN||IMAX<t ); z++; x++; y++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
492 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
493 #define PLUS1V(n,z,u,y) {B p=0>u; DO(n, z[i]=u+y[i]; BOV(p==0>y[i]&&p!=0>z[i]););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
494 #define MINUS1V(n,z,u,y) {B p=0>u; DO(n, z[i]=u-y[i]; BOV(p!=0>y[i]&&p!=0>z[i]););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
495 #define TYMES1V(n,z,u,y) {DI d=u,t; DO(n, t=d*y[i]; z[i]=(I)t; BOV(t<IMIN||IMAX<t ););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
496 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
497 #define PLUSV1(n,z,x,v) PLUS1V(n,z,v,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
498 #define TYMESV1(n,z,x,v) TYMES1V(n,z,v,x) |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
499 #define MINUSV1(n,z,x,v) {B p=0>v; DO(n, z[i]=x[i]-v; BOV(p!=0>x[i]&&p==0>z[i]););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
500 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
501 #define PLUSP(n,z,x) {B p;I s=0; DO(n, p=0>s; *z=s+=*x; BOV(p==0>*x&&p!=0>s); z++; x++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
502 #define MINUSP(n,z,x) {B p=0;DI t=0; DO(n, t=p?t-*x:t+*x; *z=(I)t; BOV(t<IMIN||IMAX<t ); z++; x++; p=!p;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
503 #define TYMESP(n,z,x) {DI t=1; DO(n, t*=*x; *z=(I)t; BOV(t<IMIN||IMAX<t ); z++; x++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
504 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
505 #define PLUSR(n,z,x) {B p;I s=0; DO(n, p=0>s; s+=*x; BOV(p==0>*x&&p!=0>s); x++; ); *z=s;} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
506 #define MINUSR(n,z,x) {B p=0;DI t=0; DO(n, t=p?t-*x:t+*x; BOV(t<IMIN||IMAX<t ); x++; p=!p;); *z=(I)t;} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
507 #define TYMESR(n,z,x) {DI t=1; DO(n, t*=*x; BOV(t<IMIN||IMAX<t ); x++; ); *z=(I)t;} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
508 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
509 #define PLUSRV(d,z,x) {B p; DO(d, p=0>*z; *z+=*x; BOV(p==0>*x&&p!=0>*z); x++; z++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
510 #define MINUSRV(d,z,x) {DI t; DO(d, t=*x-(DI)*z; *z=(I)t; BOV(t<IMIN||IMAX<t ); x++; z++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
511 #define TYMESRV(d,z,x) {DI t; DO(d, t=*x*(DI)*z; *z=(I)t; BOV(t<IMIN||IMAX<t ); x++; z++;);} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
512 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
513 #define PLUSS(n,z,x) {B p;I s=0; x+=n; z+=n; DO(n, --x; p=0>s; *--z=s+=*x; BOV(p==0>*x&&p!=0>s););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
514 #define MINUSS(n,z,x) {B p;I s=0; x+=n; z+=n; DO(n, --x; p=0>s; *--z=s=*x-s; BOV(p!=0>*x&&p==0>s););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
515 #define TYMESS(n,z,x) {DI t=1; x+=n; z+=n; DO(n, --x; t*=*x; *--z=(I)t; BOV(t<IMIN||IMAX<t ););} |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
516 |
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
517 #endif |