Skip to content

Commit 5d14ed2

Browse files
committed
fwd: Clean up TEB macros a little
1 parent c609a96 commit 5d14ed2

File tree

1 file changed

+117
-165
lines changed

1 file changed

+117
-165
lines changed

mcfgthread/fwd.h

Lines changed: 117 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -157,217 +157,169 @@ __MCF_CXX(extern "C" {)
157157
* depending on whether the address is immediate. */
158158
#if (defined __GNUC__ || defined __clang__) && (defined __amd64__ && !defined __arm64ec__)
159159

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))
199183

200184
# define __MCF_64_32(x, y) x
201185

202186
#elif defined _MSC_VER && (defined _M_X64 && !defined _M_ARM64EC)
203187

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)))
206190

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))
209193

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))
212196

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))
215199

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)))
218202

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))
221205

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))
224208

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))
227211

228212
# define __MCF_64_32(x, y) x
229213

230214
#elif (defined __GNUC__ || defined __clang__) && defined __i386__
231215

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))
271239

272240
# define __MCF_64_32(x, y) y
273241

274242
#elif defined _MSC_VER && defined _M_IX86
275243

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)))
278246

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))
281249

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)
284252

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))
287255

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)))
290258

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))
293261

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))
296264

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))
299267

300268
# define __MCF_64_32(x, y) y
301269

302270
#elif (defined __GNUC__ || defined __clang__) && (defined __aarch64__ || defined __arm64ec__)
303271

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)))
343295

344296
# define __MCF_64_32(x, y) x
345297

346298
#elif defined _MSC_VER && (defined _M_ARM64 || defined _M_ARM64EC)
347299

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)))
350302

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))
353305

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))
356308

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))
359311

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)))
362314

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))
365317

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))
368320

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))
371323

372324
# define __MCF_64_32(x, y) x
373325

0 commit comments

Comments
 (0)