source: git/omalloc/omMemOps.h @ 851406

spielwiese
Last change on this file since 851406 was e70e45, checked in by Olaf Bachmann <obachman@…>, 24 years ago
* re-added files git-svn-id: file:///usr/local/Singular/svn/trunk@4521 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 7.6 KB
Line 
1/*******************************************************************
2 *  File:    omMemOps.h
3 *  Purpose: low-level Macros for memory operations
4 *  Author:  obachman (Olaf Bachmann)
5 *  Created: 11/99
6 *  Version: $Id: omMemOps.h,v 1.4 2000-08-14 12:26:47 obachman Exp $
7 *******************************************************************/
8
9#ifndef OM_MEM_OPS_H
10#define OM_MEM_OPS_H
11
12#ifdef DO_DEEP_PROFILE
13extern void _omMemcpyW(long* p1, long* p2, long l);
14#define omMemcpy_nwEVEN(p1, p2, l)    _omMemcpyW((long*) p1, (long*) p2, (long) l)
15#define omMemcpy_nwODD(p1, p2, l)     _omMemcpyW((long*) p1, (long*) p2, (long) l)
16#define omMemcpyW(p1, p2, l)          _omMemcpyW((long*) p1, (long*) p2, (long) l)
17
18extern void _omMemaddW(long* p1, long* p2, long* p3, long l);
19#define omMemaddW(p1, p2, p3, l)          _omMemaddW(p1, p2, p3, l)
20#define omMemadd_nwODD(p1, p2, p3, l)     _omMemaddW(p1, p2, p3, l)
21#define omMemadd_nwEVEN(p1, p2, p3, l)    _omMemaddW(p1, p2, p3, l)
22#define omMemadd_nwONE(p1, p2, p3)        _omMemaddW(p1, p2, p3, 1)
23#define omMemadd_nwTWO(p1, p2, p3)        _omMemaddW(p1, p2, p3, 2)
24
25extern void _omMemsetW(long* p1, long w, long l);
26#define omMemsetW(p1, w, l) _omMemsetW(p1, w, l)
27
28#else /* ! DO_DEEP_PROFILE */
29
30#define omMemcpyW(p1, p2, l)                    \
31do                                              \
32{                                               \
33  long _i = l;                                  \
34  long* _s1 = (long*) (p1);                       \
35  const long* _s2 = (long*) (p2);                 \
36                                                \
37  for (;;)                                      \
38  {                                             \
39    *_s1 = *_s2;                                \
40    _i--;                                       \
41    if (_i == 0) break;                         \
42    _s1++;                                      \
43    _s2++;                                      \
44  }                                             \
45}                                               \
46while(0)
47
48#define omMemcpy_nwODD(p1, p2, l)               \
49do                                              \
50{                                               \
51  long _i = (l) - 1;                              \
52  long* _s1 = (long*) (p1);                       \
53  const long* _s2 = (long*) (p2);                 \
54                                                \
55  *_s1++ = *_s2++;                              \
56  for (;;)                                      \
57  {                                             \
58    *_s1++ = *_s2++;                            \
59    *_s1++ = *_s2++;                            \
60    _i -= 2;                                    \
61    if (_i == 0) break;                         \
62  }                                             \
63}                                               \
64while(0)
65
66#define omMemcpy_nwEVEN(p1, p2, l)              \
67do                                              \
68{                                               \
69  long _i = l;                                  \
70  long* _s1 = (long*) (p1);                       \
71  const long* _s2 = (long*) (p2);                 \
72                                                \
73  for (;;)                                      \
74  {                                             \
75    *_s1++ = *_s2++;                            \
76    *_s1++ = *_s2++;                            \
77    _i -= 2;                                    \
78    if (_i == 0) break;                         \
79  }                                             \
80}                                               \
81while(0)
82
83#define omMemaddW(P1, P2, P3, L)                \
84do                                              \
85{                                               \
86  unsigned long* _p1 = P1;                      \
87  const unsigned long* _p2 = P2;                \
88  const unsigned long* _p3 = P3;                \
89  unsigned long l = L;                          \
90                                                \
91  do                                            \
92  {                                             \
93    *_p1++ = *_p2++ + *_p3++;                   \
94    l--;                                        \
95  }                                             \
96  while(l);                                     \
97}                                               \
98while(0)
99
100#define omMemadd_nwODD(P1, P2, P3, L)           \
101do                                              \
102{                                               \
103  unsigned long* _p1 = P1;                      \
104  const unsigned long* _p2 = P2;                \
105  const unsigned long* _p3 = P3;                \
106  unsigned long l = L;                          \
107                                                \
108 *_p1++ = *_p2++ + *_p3++;                      \
109  l--;                                          \
110                                                \
111  do                                            \
112  {                                             \
113     *_p1++ = *_p2++ + *_p3++;                  \
114     *_p1++ = *_p2++ + *_p3++;                  \
115     l -=2;                                     \
116  }                                             \
117  while(l);                                     \
118}                                               \
119while(0)
120
121#define omMemadd_nwEVEN(P1, P2, P3, L)          \
122do                                              \
123{                                               \
124  unsigned long* _p1 = P1;                      \
125  const unsigned long* _p2 = P2;                \
126  const unsigned long* _p3 = P3;                \
127  unsigned long l = L;                          \
128                                                \
129  do                                            \
130  {                                             \
131     *_p1++ = *_p2++ + *_p3++;                  \
132     *_p1++ = *_p2++ + *_p3++;                  \
133     l -=2;                                     \
134  }                                             \
135  while(l);                                     \
136}                                               \
137while(0)
138
139#define omMemadd_nwONE(P1, P2, P3)              \
140do                                              \
141{                                               \
142  unsigned long* _p1 = P1;                      \
143  const unsigned long* _p2 = P2;                \
144  const unsigned long* _p3 = P3;                \
145                                                \
146 *_p1 = *_p2 + *_p3;                            \
147}                                               \
148while(0)
149
150#define omMemadd_nwTWO(P1, P2, P3)              \
151do                                              \
152{                                               \
153  unsigned long* _p1 = P1;                      \
154  const unsigned long* _p2 = P2;                \
155  const unsigned long* _p3 = P3;                \
156                                                \
157 *_p1++ = *_p2++ + *_p3++;                      \
158 *_p1 = *_p2 + *_p3;                            \
159}                                               \
160while(0)
161
162#define omMemsetW(P1, W, L)                     \
163do                                              \
164{                                               \
165  long* _p1 = (long*) (P1);                     \
166  unsigned long _l = L;                         \
167  unsigned long _w = W;                         \
168  while(_l)                                     \
169  {                                             \
170    *_p1++ = _w;                                \
171    _l--;                                       \
172  }                                             \
173}                                               \
174while(0)
175
176#endif /* DO_DEEP_PROFILE */
177
178#endif /* OM_LIST_H */
Note: See TracBrowser for help on using the repository browser.