@@ -157,217 +157,169 @@ __MCF_CXX(extern "C" {)
157
157
* depending on whether the address is immediate. */
158
158
#if (defined __GNUC__ || defined __clang__) && (defined __amd64__ && !defined __arm64ec__)
159
159
160
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
161
- __asm__ volatile ( \
162
- " { mov %%gs:%c1, %k0 | mov %k0, gs:[%1] }" \
163
- : " =r" (*(out)) : "e"(offset))
164
-
165
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
166
- __asm__ volatile ( \
167
- " { mov %k1, %%gs:%c0 | mov gs:[%0], %k1 }" \
168
- : : " e" (offset), "r"(value))
169
-
170
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
171
- __asm__ volatile ( \
172
- " { mov %%gs:%c1(,%2,4), %k0 | mov %k0, gs:[%1+%2*4] }" \
173
- : " =r" (*(out)) : "e"(offset), "r"(index))
174
-
175
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
176
- __asm__ volatile ( \
177
- " { mov %k2, %%gs:%c0(,%1,4) | mov gs:[%0+%1*4], %k2 }" \
178
- : : " e" (offset), "r"(index), "r"(value))
179
-
180
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
181
- __asm__ volatile ( \
182
- " { mov %%gs:%c1, %0 | mov %0, gs:[%1] }" \
183
- : " =r" (*(out)) : "e"(offset))
184
-
185
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
186
- __asm__ volatile ( \
187
- " { mov %1, %%gs:%c0 | mov gs:[%0], %1 }" \
188
- : : " e" (offset), "r"(value))
189
-
190
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
191
- __asm__ volatile ( \
192
- " { mov %%gs:%c1(,%2,8), %0 | mov %0, gs:[%1+%2*8] }" \
193
- : " =r" (*(out)) : "e"(offset), "r"(index))
194
-
195
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
196
- __asm__ volatile ( \
197
- " { mov %2, %%gs:%c0(,%1,8) | mov gs:[%0+%1*8], %2 }" \
198
- : : " e" (offset), "r"(index), "r"(value))
160
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
161
+ __asm__ volatile (" { mov %%gs:%c1, %k0 | mov %k0, gs:[%1] }" : " =r" (*(out)) : "i"(base))
162
+
163
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
164
+ __asm__ volatile (" { mov %k1, %%gs:%c0 | mov gs:[%0], %k1 }" : : " i" (base), "r"(in))
165
+
166
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
167
+ __asm__ volatile (" { mov %%gs:%c1(,%2,4), %k0 | mov %k0, gs:[%1+%2*4] }" : " =r" (*(out)) : "i"(base), "r"(i))
168
+
169
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
170
+ __asm__ volatile (" { mov %k2, %%gs:%c0(,%1,4) | mov gs:[%0+%1*4], %k2 }" : : " i" (base), "r"(i), "r"(in))
171
+
172
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
173
+ __asm__ volatile (" { mov %%gs:%c1, %0 | mov %0, gs:[%1] }" : " =r" (*(out)) : "i"(base))
174
+
175
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
176
+ __asm__ volatile (" { mov %1, %%gs:%c0 | mov gs:[%0], %1 }" : : " i" (base), "r"(in))
177
+
178
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
179
+ __asm__ volatile (" { mov %%gs:%c1(,%2,8), %0 | mov %0, gs:[%1+%2*8] }" : " =r" (*(out)) : "i"(base), "r"(i))
180
+
181
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
182
+ __asm__ volatile (" { mov %2, %%gs:%c0(,%1,8) | mov gs:[%0+%1*8], %2 }" : : " i" (base), "r"(i), "r"(in))
199
183
200
184
# define __MCF_64_32 (x, y ) x
201
185
202
186
#elif defined _MSC_VER && (defined _M_X64 && !defined _M_ARM64EC)
203
187
204
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
205
- (*(out) = __readgsdword((offset )))
188
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
189
+ (*(out) = __readgsdword((base )))
206
190
207
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
208
- __writegsdword ((offset ), (value ))
191
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
192
+ __writegsdword ((base ), (in ))
209
193
210
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
211
- (*(out) = __readgsdword((offset ) + (index ) * 4U ))
194
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
195
+ (*(out) = __readgsdword((base ) + (i ) * 4U ))
212
196
213
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
214
- __writegsdword ((offset ) + (index ) * 4U, (value ))
197
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
198
+ __writegsdword ((base ) + (i ) * 4U, (in ))
215
199
216
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
217
- (*(out) = __readgsqword((offset )))
200
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
201
+ (*(out) = __readgsqword((base )))
218
202
219
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
220
- __writegsqword ((offset ), (value ))
203
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
204
+ __writegsqword ((base ), (in ))
221
205
222
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
223
- (*(out) = __readgsqword((offset ) + (index ) * 8U ))
206
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
207
+ (*(out) = __readgsqword((base ) + (i ) * 8U ))
224
208
225
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
226
- __writegsqword ((offset ) + (index ) * 8U, (value ))
209
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
210
+ __writegsqword ((base ) + (i ) * 8U, (in ))
227
211
228
212
# define __MCF_64_32 (x, y ) x
229
213
230
214
#elif (defined __GNUC__ || defined __clang__) && defined __i386__
231
215
232
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
233
- __asm__ volatile ( \
234
- " { mov %%fs:%c1, %k0 | mov %k0, fs:[%1] }" \
235
- : " =r" (*(out)) : "e"(offset))
236
-
237
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
238
- __asm__ volatile ( \
239
- " { mov %k1, %%fs:%c0 | mov fs:[%0], %k1 }" \
240
- : : " e" (offset), "r"(value))
241
-
242
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
243
- __asm__ volatile ( \
244
- " { mov %%fs:%c1(,%2,4), %k0 | mov %k0, fs:[%1+%2*4] }" \
245
- : " =r" (*(out)) : "e"(offset), "r"(index))
246
-
247
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
248
- __asm__ volatile ( \
249
- " { mov %k1, %%fs:%c0(,%1,4) | mov fs:[%0+%1*4], %k2 }" \
250
- : : " e" (offset), "r"(index), "r"(value))
251
-
252
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
253
- __asm__ volatile ( \
254
- " { mov %%fs:%c1, %0 | mov %0, fs:[%1] }" \
255
- : " =r" (*(out)) : "e"(offset))
256
-
257
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
258
- __asm__ volatile ( \
259
- " { mov %1, %%fs:%c0 | mov fs:[%0], %1 }" \
260
- : : " e" (offset), "r"(value))
261
-
262
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
263
- __asm__ volatile ( \
264
- " { mov %%fs:%c1(,%2,4), %0 | mov %0, fs:[%1+%2*4] }" \
265
- : " =r" (*(out)) : "e"(offset), "r"(index))
266
-
267
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
268
- __asm__ volatile ( \
269
- " { mov %2, %%fs:%c0(,%1,4) | mov fs:[%0+%1*4], %2 }" \
270
- : : " e" (offset), "r"(index), "r"(value))
216
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
217
+ __asm__ volatile (" { mov %%fs:%c1, %k0 | mov %k0, fs:[%1] }" : " =r" (*(out)) : "i"(base))
218
+
219
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
220
+ __asm__ volatile (" { mov %k1, %%fs:%c0 | mov fs:[%0], %k1 }" : : " i" (base), "r"(in))
221
+
222
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
223
+ __asm__ volatile (" { mov %%fs:%c1(,%2,4), %k0 | mov %k0, fs:[%1+%2*4] }" : " =r" (*(out)) : "i"(base), "r"(i))
224
+
225
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
226
+ __asm__ volatile (" { mov %k1, %%fs:%c0(,%1,4) | mov fs:[%0+%1*4], %k2 }" : : " i" (base), "r"(i), "r"(in))
227
+
228
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
229
+ __asm__ volatile (" { mov %%fs:%c1, %0 | mov %0, fs:[%1] }" : " =r" (*(out)) : "i"(base))
230
+
231
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
232
+ __asm__ volatile (" { mov %1, %%fs:%c0 | mov fs:[%0], %1 }" : : " i" (base), "r"(in))
233
+
234
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
235
+ __asm__ volatile (" { mov %%fs:%c1(,%2,4), %0 | mov %0, fs:[%1+%2*4] }" : " =r" (*(out)) : "i"(base), "r"(i))
236
+
237
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
238
+ __asm__ volatile (" { mov %2, %%fs:%c0(,%1,4) | mov fs:[%0+%1*4], %2 }" : : " i" (base), "r"(i), "r"(in))
271
239
272
240
# define __MCF_64_32 (x, y ) y
273
241
274
242
#elif defined _MSC_VER && defined _M_IX86
275
243
276
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
277
- (*(out) = __readfsdword((offset )))
244
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
245
+ (*(out) = __readfsdword((base )))
278
246
279
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
280
- __writefsdword ((offset ), (value ))
247
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
248
+ __writefsdword ((base ), (in ))
281
249
282
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
283
- *(out) = __readfsdword((offset ) + (index ) * 4U )
250
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
251
+ *(out) = __readfsdword((base ) + (i ) * 4U )
284
252
285
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
286
- __writefsdword ((offset ) + (index ) * 4U, (value ))
253
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
254
+ __writefsdword ((base ) + (i ) * 4U, (in ))
287
255
288
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
289
- (*(out) = __readfsdword((offset )))
256
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
257
+ (*(out) = __readfsdword((base )))
290
258
291
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
292
- __writefsdword ((offset ), (value ))
259
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
260
+ __writefsdword ((base ), (in ))
293
261
294
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
295
- (*(out) = __readfsdword((offset ) + (index ) * 4U ))
262
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
263
+ (*(out) = __readfsdword((base ) + (i ) * 4U ))
296
264
297
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
298
- __writefsdword ((offset ) + (index ) * 4U, (value ))
265
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
266
+ __writefsdword ((base ) + (i ) * 4U, (in ))
299
267
300
268
# define __MCF_64_32 (x, y ) y
301
269
302
270
#elif (defined __GNUC__ || defined __clang__) && (defined __aarch64__ || defined __arm64ec__)
303
271
304
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
305
- __asm__ volatile ( \
306
- " ldr %w0, [x18, %1] " \
307
- : " =r" (*(out)) : "M"(offset))
308
-
309
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
310
- __asm__ volatile ( \
311
- " str %w0, [x18, %1] " \
312
- : : " r" (value), "M"(offset))
313
-
314
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
315
- __asm__ volatile ( \
316
- " ldr %w0, [x18, %w1, uxtw #2] " \
317
- : " =r" (*(out)) : "r"((offset) / 4U + (index)))
318
-
319
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
320
- __asm__ volatile ( \
321
- " str %w0, [x18, %w1, uxtw #2] " \
322
- : : " r" (value), "r"((offset) / 4U + (index)))
323
-
324
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
325
- __asm__ volatile ( \
326
- " ldr %0, [x18, %1] " \
327
- : " =r" (*(out)) : "M"(offset))
328
-
329
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
330
- __asm__ volatile ( \
331
- " str %0, [x18, %1] " \
332
- : : " r" (value), "M"(offset))
333
-
334
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
335
- __asm__ volatile ( \
336
- " ldr %0, [x18, %w1, uxtw #3] " \
337
- : " =r" (*(out)) : "r"((offset) / 8U + (index)))
338
-
339
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
340
- __asm__ volatile ( \
341
- " str %0, [x18, %w1, uxtw #3] " \
342
- : : " r" (value), "r"((offset) / 8U + (index)))
272
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
273
+ __asm__ volatile (" ldr %w0, [x18,%1] " : " =r" (*(out)) : "i"(base))
274
+
275
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
276
+ __asm__ volatile (" str %w0, [x18,%1] " : : " r" (in), "i"(base))
277
+
278
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
279
+ __asm__ volatile (" ldr %w0, [x18,%w1,uxtw #2] " : " =r" (*(out)) : "r"((base) / 4U + (i)))
280
+
281
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
282
+ __asm__ volatile (" str %w0, [x18,%w1,uxtw #2] " : : " r" (in), "r"((base) / 4U + (i)))
283
+
284
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
285
+ __asm__ volatile (" ldr %0, [x18,%1] " : " =r" (*(out)) : "i"(base))
286
+
287
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
288
+ __asm__ volatile (" str %0, [x18,%1] " : : " r" (in), "i"(base))
289
+
290
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
291
+ __asm__ volatile (" ldr %0, [x18,%w1,uxtw #3] " : " =r" (*(out)) : "r"((base) / 8U + (i)))
292
+
293
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
294
+ __asm__ volatile (" str %0, [x18,%w1,uxtw #3] " : : " r" (in), "r"((base) / 8U + (i)))
343
295
344
296
# define __MCF_64_32 (x, y ) x
345
297
346
298
#elif defined _MSC_VER && (defined _M_ARM64 || defined _M_ARM64EC)
347
299
348
- # define __MCF_TEB_LOAD_32_IMMEDIATE (out, offset ) \
349
- (*(out) = __readx18dword((offset )))
300
+ # define __MCF_TEB_LOAD_32_IMMEDIATE (out, base ) \
301
+ (*(out) = __readx18dword((base )))
350
302
351
- # define __MCF_TEB_STORE_32_IMMEDIATE (offset, value ) \
352
- __writex18dword ((offset ), (value ))
303
+ # define __MCF_TEB_STORE_32_IMMEDIATE (base, in ) \
304
+ __writex18dword ((base ), (in ))
353
305
354
- # define __MCF_TEB_LOAD_32_INDEXED (out, offset, index ) \
355
- (*(out) = __readx18dword((offset ) + (index ) * 4U ))
306
+ # define __MCF_TEB_LOAD_32_INDEXED (out, base, i ) \
307
+ (*(out) = __readx18dword((base ) + (i ) * 4U ))
356
308
357
- # define __MCF_TEB_STORE_32_INDEXED (offset, index, value ) \
358
- __writex18dword ((offset ) + (index ) * 4U, (value ))
309
+ # define __MCF_TEB_STORE_32_INDEXED (base, i, in ) \
310
+ __writex18dword ((base ) + (i ) * 4U, (in ))
359
311
360
- # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, offset ) \
361
- (*(out) = __readx18qword((offset )))
312
+ # define __MCF_TEB_LOAD_PTR_IMMEDIATE (out, base ) \
313
+ (*(out) = __readx18qword((base )))
362
314
363
- # define __MCF_TEB_STORE_PTR_IMMEDIATE (offset, value ) \
364
- __writex18qword ((offset ), (value ))
315
+ # define __MCF_TEB_STORE_PTR_IMMEDIATE (base, in ) \
316
+ __writex18qword ((base ), (in ))
365
317
366
- # define __MCF_TEB_LOAD_PTR_INDEXED (out, offset, index ) \
367
- (*(out) = __readx18qword((offset ) + (index ) * 8U ))
318
+ # define __MCF_TEB_LOAD_PTR_INDEXED (out, base, i ) \
319
+ (*(out) = __readx18qword((base ) + (i ) * 8U ))
368
320
369
- # define __MCF_TEB_STORE_PTR_INDEXED (offset, index, value ) \
370
- __writex18qword ((offset ) + (index ) * 8U, (value ))
321
+ # define __MCF_TEB_STORE_PTR_INDEXED (base, i, in ) \
322
+ __writex18qword ((base ) + (i ) * 8U, (in ))
371
323
372
324
# define __MCF_64_32 (x, y ) x
373
325
0 commit comments