annotate vasm.h @ 0:e0bbaa717f41 draft default tip

lol J
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Mon, 25 Nov 2013 11:56:30 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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