@@ -119,13 +119,13 @@ typedef intptr_t ssize_t;
119
119
#define STORE_32LE (SRC , ADDR , ARR ) { \
120
120
uint32_t _addr = (ADDR); \
121
121
void* _ptr = (ARR); \
122
- __asm__("stwbrx %0, %1, %2" : : "r"(SRC), "b"(_ptr), "r"(_addr)); \
122
+ __asm__("stwbrx %0, %1, %2" : : "r"(SRC), "b"(_ptr), "r"(_addr) : "memory" ); \
123
123
}
124
124
125
125
#define STORE_16LE (SRC , ADDR , ARR ) { \
126
126
uint32_t _addr = (ADDR); \
127
127
void* _ptr = (ARR); \
128
- __asm__("sthbrx %0, %1, %2" : : "r"(SRC), "b"(_ptr), "r"(_addr)); \
128
+ __asm__("sthbrx %0, %1, %2" : : "r"(SRC), "b"(_ptr), "r"(_addr) : "memory" ); \
129
129
}
130
130
131
131
#define LOAD_64LE (DEST , ADDR , ARR ) { \
@@ -136,12 +136,13 @@ typedef intptr_t ssize_t;
136
136
uint32_t lo; \
137
137
}; \
138
138
uint64_t b64; \
139
- } * bswap = (void*) &DEST ; \
139
+ } bswap; \
140
140
const void* _ptr = (ARR); \
141
141
__asm__( \
142
142
"lwbrx %0, %2, %3 \n" \
143
143
"lwbrx %1, %2, %4 \n" \
144
- : "=r"(bswap->lo), "=r"(bswap->hi) : "b"(_ptr), "r"(_addr), "r"(_addr + 4)); \
144
+ : "=&r"(bswap.lo), "=&r"(bswap.hi) : "b"(_ptr), "r"(_addr), "r"(_addr + 4)) ; \
145
+ DEST = bswap.b64; \
145
146
}
146
147
147
148
#define STORE_64LE (SRC , ADDR , ARR ) { \
@@ -152,12 +153,12 @@ typedef intptr_t ssize_t;
152
153
uint32_t lo; \
153
154
}; \
154
155
uint64_t b64; \
155
- } * bswap = (void*) & SRC; \
156
+ } bswap = { .b64 = SRC } ; \
156
157
const void* _ptr = (ARR); \
157
158
__asm__( \
158
159
"stwbrx %0, %2, %3 \n" \
159
160
"stwbrx %1, %2, %4 \n" \
160
- : : "r"(bswap-> hi), "r"(bswap-> lo), "b"(_ptr), "r"(_addr), "r"(_addr + 4)); \
161
+ : : "r"(bswap. hi), "r"(bswap. lo), "b"(_ptr), "r"(_addr), "r"(_addr + 4) : "memory" ); \
161
162
}
162
163
163
164
#elif defined(__llvm__ ) || (__GNUC__ > 4 ) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8 )
@@ -177,8 +178,12 @@ typedef intptr_t ssize_t;
177
178
#define STORE_64LE (SRC , ADDR , ARR ) *(uint64_t*) ((uintptr_t) (ARR) + (size_t) (ADDR)) = SRC
178
179
#define STORE_32LE (SRC , ADDR , ARR ) *(uint32_t*) ((uintptr_t) (ARR) + (size_t) (ADDR)) = SRC
179
180
#define STORE_16LE (SRC , ADDR , ARR ) *(uint16_t*) ((uintptr_t) (ARR) + (size_t) (ADDR)) = SRC
181
+ #ifdef _MSC_VER
182
+ #define LOAD_32BE (DEST , ADDR , ARR ) DEST = _byteswap_ulong(((uint32_t*) ARR)[(ADDR) >> 2])
183
+ #else
180
184
#define LOAD_32BE (DEST , ADDR , ARR ) DEST = __builtin_bswap32(((uint32_t*) ARR)[(ADDR) >> 2])
181
185
#endif
186
+ #endif
182
187
183
188
#define MAKE_MASK (START , END ) (((1 << ((END) - (START))) - 1) << (START))
184
189
#define CHECK_BITS (SRC , START , END ) ((SRC) & MAKE_MASK(START, END))
@@ -191,9 +196,11 @@ typedef intptr_t ssize_t;
191
196
#ifdef _MSC_VER
192
197
#define ATTRIBUTE_UNUSED
193
198
#define ATTRIBUTE_FORMAT (X , Y , Z )
199
+ #define ATTRIBUTE_NOINLINE
194
200
#else
195
201
#define ATTRIBUTE_UNUSED __attribute__((unused))
196
202
#define ATTRIBUTE_FORMAT (X , Y , Z ) __attribute__((format(X, Y, Z)))
203
+ #define ATTRIBUTE_NOINLINE __attribute__((noinline))
197
204
#endif
198
205
199
206
#define DECL_BITFIELD (NAME , TYPE ) typedef TYPE NAME
0 commit comments