VirtualBox

source: vbox/trunk/include/iprt/asm-amd64-x86-watcom-32.h@ 76505

最後變更 在這個檔案從76505是 76505,由 vboxsync 提交於 6 年 前

include/*: Some header guard cleanups in prep for scm rules on the subject.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 16.6 KB
 
1/** @file
2 * IPRT - AMD64 and x86 Specific Assembly Functions, 32-bit Watcom C pragma aux.
3 */
4
5/*
6 * Copyright (C) 2006-2017 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.alldomusa.eu.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___iprt_asm_amd64_x86_watcom_32_h
27#define ___iprt_asm_amd64_x86_watcom_32_h
28
29#ifndef ___iprt_asm_amd64_x86_h
30# error "Don't include this header directly."
31#endif
32
33#ifndef __FLAT__
34# error "Only works with flat pointers! (-mf)"
35#endif
36
37/*
38 * Note! The #undef that preceds the #pragma aux statements is for undoing
39 * the mangling, because the symbol in #pragma aux [symbol] statements
40 * doesn't get subjected to preprocessing. This is also why we include
41 * the watcom header at both the top and the bottom of asm-amd64-x86.h file.
42 */
43
44#undef ASMGetIDTR
45#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
46#pragma aux ASMGetIDTR = \
47 "sidt fword ptr [ecx]" \
48 parm [ecx] \
49 modify exact [];
50#endif
51
52#undef ASMGetIdtrLimit
53#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
54#pragma aux ASMGetIdtrLimit = \
55 "sub esp, 8" \
56 "sidt fword ptr [esp]" \
57 "mov cx, [esp]" \
58 "add esp, 8" \
59 parm [] \
60 value [cx] \
61 modify exact [ecx];
62#endif
63
64#undef ASMSetIDTR
65#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
66#pragma aux ASMSetIDTR = \
67 "lidt fword ptr [ecx]" \
68 parm [ecx] nomemory \
69 modify nomemory;
70#endif
71
72#undef ASMGetGDTR
73#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
74#pragma aux ASMGetGDTR = \
75 "sgdt fword ptr [ecx]" \
76 parm [ecx] \
77 modify exact [];
78#endif
79
80#undef ASMSetGDTR
81#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
82#pragma aux ASMSetGDTR = \
83 "lgdt fword ptr [ecx]" \
84 parm [ecx] nomemory \
85 modify exact [] nomemory;
86#endif
87
88#undef ASMGetCS
89#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
90#pragma aux ASMGetCS = \
91 "mov ax, cs" \
92 parm [] nomemory \
93 value [ax] \
94 modify exact [eax] nomemory;
95#endif
96
97#undef ASMGetDS
98#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
99#pragma aux ASMGetDS = \
100 "mov ax, ds" \
101 parm [] nomemory \
102 value [ax] \
103 modify exact [eax] nomemory;
104#endif
105
106#undef ASMGetES
107#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
108#pragma aux ASMGetES = \
109 "mov ax, es" \
110 parm [] nomemory \
111 value [ax] \
112 modify exact [eax] nomemory;
113#endif
114
115#undef ASMGetFS
116#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
117#pragma aux ASMGetFS = \
118 "mov ax, fs" \
119 parm [] nomemory \
120 value [ax] \
121 modify exact [eax] nomemory;
122#endif
123
124#undef ASMGetGS
125#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
126#pragma aux ASMGetGS = \
127 "mov ax, gs" \
128 parm [] nomemory \
129 value [ax] \
130 modify exact [eax] nomemory;
131#endif
132
133#undef ASMGetSS
134#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
135#pragma aux ASMGetSS = \
136 "mov ax, ss" \
137 parm [] nomemory \
138 value [ax] \
139 modify exact [eax] nomemory;
140#endif
141
142#undef ASMGetTR
143#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
144#pragma aux ASMGetTR = \
145 "str ax" \
146 parm [] nomemory \
147 value [ax] \
148 modify exact [eax] nomemory;
149#endif
150
151#undef ASMGetLDTR
152#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
153#pragma aux ASMGetLDTR = \
154 "sldt ax" \
155 parm [] nomemory \
156 value [ax] \
157 modify exact [eax] nomemory;
158#endif
159
160/** @todo ASMGetSegAttr */
161
162#undef ASMGetFlags
163#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
164#pragma aux ASMGetFlags = \
165 "pushfd" \
166 "pop eax" \
167 parm [] nomemory \
168 value [eax] \
169 modify exact [eax] nomemory;
170#endif
171
172#undef ASMSetFlags
173#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
174#pragma aux ASMSetFlags = \
175 "push eax" \
176 "popfd" \
177 parm [eax] nomemory \
178 modify exact [] nomemory;
179#endif
180
181#undef ASMChangeFlags
182#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
183#pragma aux ASMChangeFlags = \
184 "pushfd" \
185 "pop eax" \
186 "and edx, eax" \
187 "or edx, ecx" \
188 "push edx" \
189 "popfd" \
190 parm [edx] [ecx] nomemory \
191 value [eax] \
192 modify exact [edx] nomemory;
193#endif
194
195#undef ASMAddFlags
196#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
197#pragma aux ASMAddFlags = \
198 "pushfd" \
199 "pop eax" \
200 "or edx, eax" \
201 "push edx" \
202 "popfd" \
203 parm [edx] nomemory \
204 value [eax] \
205 modify exact [edx] nomemory;
206#endif
207
208#undef ASMClearFlags
209#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
210#pragma aux ASMClearFlags = \
211 "pushfd" \
212 "pop eax" \
213 "and edx, eax" \
214 "push edx" \
215 "popfd" \
216 parm [edx] nomemory \
217 value [eax] \
218 modify exact [edx] nomemory;
219#endif
220
221/* Note! Must use the 64-bit integer return value convension.
222 The order of registers in the value [set] does not seem to mean anything. */
223#undef ASMReadTSC
224#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
225#pragma aux ASMReadTSC = \
226 ".586" \
227 "rdtsc" \
228 parm [] nomemory \
229 value [eax edx] \
230 modify exact [edx eax] nomemory;
231#endif
232
233#undef ASMReadTscWithAux
234#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
235#pragma aux ASMReadTscWithAux = \
236 0x0f 0x01 0xf9 \
237 "mov [ebx], ecx" \
238 parm [ebx] \
239 value [eax edx] \
240 modify exact [eax edx ecx];
241#endif
242
243/* ASMCpuId: Implemented externally, too many parameters. */
244/* ASMCpuId_Idx_ECX: Implemented externally, too many parameters. */
245/* ASMCpuIdExSlow: Always implemented externally. */
246
247#undef ASMCpuId_ECX_EDX
248#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
249#pragma aux ASMCpuId_ECX_EDX = \
250 ".586" \
251 "cpuid" \
252 "mov [edi], ecx" \
253 "mov [esi], edx" \
254 parm [eax] [edi] [esi] \
255 modify exact [eax ebx ecx edx];
256#endif
257
258#undef ASMCpuId_EAX
259#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
260#pragma aux ASMCpuId_EAX = \
261 ".586" \
262 "cpuid" \
263 parm [eax] \
264 value [eax] \
265 modify exact [eax ebx ecx edx];
266#endif
267
268#undef ASMCpuId_EBX
269#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
270#pragma aux ASMCpuId_EBX = \
271 ".586" \
272 "cpuid" \
273 parm [eax] \
274 value [ebx] \
275 modify exact [eax ebx ecx edx];
276#endif
277
278#undef ASMCpuId_ECX
279#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
280#pragma aux ASMCpuId_ECX = \
281 ".586" \
282 "cpuid" \
283 parm [eax] \
284 value [ecx] \
285 modify exact [eax ebx ecx edx];
286#endif
287
288#undef ASMCpuId_EDX
289#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
290#pragma aux ASMCpuId_EDX = \
291 ".586" \
292 "cpuid" \
293 parm [eax] \
294 value [edx] \
295 modify exact [eax ebx ecx edx];
296#endif
297
298/* ASMHasCpuId: MSC inline in main source file. */
299
300#undef ASMGetApicId
301#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
302#pragma aux ASMGetApicId = \
303 ".586" \
304 "xor eax, eax" \
305 "cpuid" \
306 "shr ebx,24" \
307 parm [] \
308 value [bl] \
309 modify exact [eax ebx ecx edx];
310#endif
311
312#undef ASMGetCR0
313#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
314#pragma aux ASMGetCR0 = \
315 "mov eax, cr0" \
316 parm [] nomemory \
317 value [eax] \
318 modify exact [eax] nomemory;
319#endif
320
321#undef ASMSetCR0
322#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
323#pragma aux ASMSetCR0 = \
324 "mov cr0, eax" \
325 parm [eax] nomemory \
326 modify exact [] nomemory;
327#endif
328
329#undef ASMGetCR2
330#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
331#pragma aux ASMGetCR2 = \
332 "mov eax, cr2" \
333 parm [] nomemory \
334 value [eax] \
335 modify exact [eax] nomemory;
336#endif
337
338#undef ASMSetCR2
339#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
340#pragma aux ASMSetCR2 = \
341 "mov cr2, eax" \
342 parm [eax] nomemory \
343 modify exact [] nomemory;
344#endif
345
346#undef ASMGetCR3
347#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
348#pragma aux ASMGetCR3 = \
349 "mov eax, cr3" \
350 parm [] nomemory \
351 value [eax] \
352 modify exact [eax] nomemory;
353#endif
354
355#undef ASMSetCR3
356#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
357#pragma aux ASMSetCR3 = \
358 "mov cr3, eax" \
359 parm [eax] nomemory \
360 modify exact [] nomemory;
361#endif
362
363#undef ASMReloadCR3
364#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
365#pragma aux ASMReloadCR3 = \
366 "mov eax, cr3" \
367 "mov cr3, eax" \
368 parm [] nomemory \
369 modify exact [eax] nomemory;
370#endif
371
372#undef ASMGetCR4
373#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
374#pragma aux ASMGetCR4 = \
375 "mov eax, cr4" \
376 parm [] nomemory \
377 value [eax] \
378 modify exact [eax] nomemory;
379#endif
380
381#undef ASMSetCR4
382#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
383#pragma aux ASMSetCR4 = \
384 "mov cr4, eax" \
385 parm [eax] nomemory \
386 modify exact [] nomemory;
387#endif
388
389/* ASMGetCR8: Don't bother for 32-bit. */
390/* ASMSetCR8: Don't bother for 32-bit. */
391
392#undef ASMIntEnable
393#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
394#pragma aux ASMIntEnable = \
395 "sti" \
396 parm [] nomemory \
397 modify exact [] nomemory;
398#endif
399
400#undef ASMIntDisable
401#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
402#pragma aux ASMIntDisable = \
403 "cli" \
404 parm [] nomemory \
405 modify exact [] nomemory;
406#endif
407
408#undef ASMIntDisableFlags
409#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
410#pragma aux ASMIntDisableFlags = \
411 "pushfd" \
412 "cli" \
413 "pop eax" \
414 parm [] nomemory \
415 value [eax] \
416 modify exact [] nomemory;
417#endif
418
419#undef ASMHalt
420#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
421#pragma aux ASMHalt = \
422 "hlt" \
423 parm [] nomemory \
424 modify exact [] nomemory;
425#endif
426
427#undef ASMRdMsr
428#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
429#pragma aux ASMRdMsr = \
430 ".586" \
431 "rdmsr" \
432 parm [ecx] nomemory \
433 value [eax edx] \
434 modify exact [eax edx] nomemory;
435#endif
436
437#undef ASMWrMsr
438#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
439#pragma aux ASMWrMsr = \
440 ".586" \
441 "wrmsr" \
442 parm [ecx] [eax edx] nomemory \
443 modify exact [] nomemory;
444#endif
445
446#undef ASMRdMsrEx
447#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
448#pragma aux ASMRdMsrEx = \
449 ".586" \
450 "rdmsr" \
451 parm [ecx] [edi] nomemory \
452 value [eax edx] \
453 modify exact [eax edx] nomemory;
454#endif
455
456#undef ASMWrMsrEx
457#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
458#pragma aux ASMWrMsrEx = \
459 ".586" \
460 "wrmsr" \
461 parm [ecx] [edi] [eax edx] nomemory \
462 modify exact [] nomemory;
463#endif
464
465#undef ASMRdMsr_Low
466#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
467#pragma aux ASMRdMsr_Low = \
468 ".586" \
469 "rdmsr" \
470 parm [ecx] nomemory \
471 value [eax] \
472 modify exact [eax edx] nomemory;
473#endif
474
475#undef ASMRdMsr_High
476#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
477#pragma aux ASMRdMsr_High = \
478 ".586" \
479 "rdmsr" \
480 parm [ecx] nomemory \
481 value [edx] \
482 modify exact [eax edx] nomemory;
483#endif
484
485
486#undef ASMGetDR0
487#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
488#pragma aux ASMGetDR0 = \
489 "mov eax, dr0" \
490 parm [] nomemory \
491 value [eax] \
492 modify exact [eax] nomemory;
493#endif
494
495#undef ASMGetDR1
496#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
497#pragma aux ASMGetDR1 = \
498 "mov eax, dr1" \
499 parm [] nomemory \
500 value [eax] \
501 modify exact [eax] nomemory;
502#endif
503
504#undef ASMGetDR2
505#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
506#pragma aux ASMGetDR2 = \
507 "mov eax, dr2" \
508 parm [] nomemory \
509 value [eax] \
510 modify exact [eax] nomemory;
511#endif
512
513#undef ASMGetDR3
514#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
515#pragma aux ASMGetDR3 = \
516 "mov eax, dr3" \
517 parm [] nomemory \
518 value [eax] \
519 modify exact [eax] nomemory;
520#endif
521
522#undef ASMGetDR6
523#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
524#pragma aux ASMGetDR6 = \
525 "mov eax, dr6" \
526 parm [] nomemory \
527 value [eax] \
528 modify exact [eax] nomemory;
529#endif
530
531#undef ASMGetAndClearDR6
532#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
533#pragma aux ASMGetAndClearDR6 = \
534 "mov edx, 0ffff0ff0h" \
535 "mov eax, dr6" \
536 "mov dr6, edx" \
537 parm [] nomemory \
538 value [eax] \
539 modify exact [eax edx] nomemory;
540#endif
541
542#undef ASMGetDR7
543#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
544#pragma aux ASMGetDR7 = \
545 "mov eax, dr7" \
546 parm [] nomemory \
547 value [eax] \
548 modify exact [eax] nomemory;
549#endif
550
551#undef ASMSetDR0
552#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
553#pragma aux ASMSetDR0 = \
554 "mov dr0, eax" \
555 parm [eax] nomemory \
556 modify exact [] nomemory;
557#endif
558
559#undef ASMSetDR1
560#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
561#pragma aux ASMSetDR1 = \
562 "mov dr1, eax" \
563 parm [eax] nomemory \
564 modify exact [] nomemory;
565#endif
566
567#undef ASMSetDR2
568#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
569#pragma aux ASMSetDR2 = \
570 "mov dr2, eax" \
571 parm [eax] nomemory \
572 modify exact [] nomemory;
573#endif
574
575#undef ASMSetDR3
576#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
577#pragma aux ASMSetDR3 = \
578 "mov dr3, eax" \
579 parm [eax] nomemory \
580 modify exact [] nomemory;
581#endif
582
583#undef ASMSetDR6
584#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
585#pragma aux ASMSetDR6 = \
586 "mov dr6, eax" \
587 parm [eax] nomemory \
588 modify exact [] nomemory;
589#endif
590
591#undef ASMSetDR7
592#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
593#pragma aux ASMSetDR7 = \
594 "mov dr7, eax" \
595 parm [eax] nomemory \
596 modify exact [] nomemory;
597#endif
598
599/* Yeah, could've used outp here, but this keeps the main file simpler. */
600#undef ASMOutU8
601#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
602#pragma aux ASMOutU8 = \
603 "out dx, al" \
604 parm [dx] [al] nomemory \
605 modify exact [] nomemory;
606#endif
607
608#undef ASMInU8
609#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
610#pragma aux ASMInU8 = \
611 "in al, dx" \
612 parm [dx] nomemory \
613 value [al] \
614 modify exact [] nomemory;
615#endif
616
617#undef ASMOutU16
618#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
619#pragma aux ASMOutU16 = \
620 "out dx, ax" \
621 parm [dx] [ax] nomemory \
622 modify exact [] nomemory;
623#endif
624
625#undef ASMInU16
626#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
627#pragma aux ASMInU16 = \
628 "in ax, dx" \
629 parm [dx] nomemory \
630 value [ax] \
631 modify exact [] nomemory;
632#endif
633
634#undef ASMOutU32
635#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
636#pragma aux ASMOutU32 = \
637 "out dx, eax" \
638 parm [dx] [eax] nomemory \
639 modify exact [] nomemory;
640#endif
641
642#undef ASMInU32
643#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
644#pragma aux ASMInU32 = \
645 "in eax, dx" \
646 parm [dx] nomemory \
647 value [eax] \
648 modify exact [] nomemory;
649#endif
650
651#undef ASMOutStrU8
652#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
653#pragma aux ASMOutStrU8 = \
654 "rep outsb" \
655 parm [dx] [esi] [ecx] nomemory \
656 modify exact [esi ecx] nomemory;
657#endif
658
659#undef ASMInStrU8
660#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
661#pragma aux ASMInStrU8 = \
662 "rep insb" \
663 parm [dx] [edi] [ecx] \
664 modify exact [edi ecx];
665#endif
666
667#undef ASMOutStrU16
668#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
669#pragma aux ASMOutStrU16 = \
670 "rep outsw" \
671 parm [dx] [esi] [ecx] nomemory \
672 modify exact [esi ecx] nomemory;
673#endif
674
675#undef ASMInStrU16
676#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
677#pragma aux ASMInStrU16 = \
678 "rep insw" \
679 parm [dx] [edi] [ecx] \
680 modify exact [edi ecx];
681#endif
682
683#undef ASMOutStrU32
684#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
685#pragma aux ASMOutStrU32 = \
686 "rep outsd" \
687 parm [dx] [esi] [ecx] nomemory \
688 modify exact [esi ecx] nomemory;
689#endif
690
691#undef ASMInStrU32
692#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
693#pragma aux ASMInStrU32 = \
694 "rep insd" \
695 parm [dx] [edi] [ecx] \
696 modify exact [edi ecx];
697#endif
698
699#undef ASMInvalidatePage
700#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
701#pragma aux ASMInvalidatePage = \
702 "invlpg [eax]" \
703 parm [eax] \
704 modify exact [];
705#endif
706
707#undef ASMWriteBackAndInvalidateCaches
708#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
709#pragma aux ASMWriteBackAndInvalidateCaches = \
710 ".486" \
711 "wbinvd" \
712 parm [] nomemory \
713 modify exact [] nomemory;
714#endif
715
716#undef ASMInvalidateInternalCaches
717#ifdef IPRT_ASM_AMD64_X86_WATCOM_32_INSTANTIATE
718#pragma aux ASMInvalidateInternalCaches = \
719 ".486" \
720 "invd" \
721 parm [] \
722 modify exact [];
723#endif
724
725#endif
726
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette