VirtualBox

source: vbox/trunk/include/iprt/asm-amd64-x86-watcom-16.h@ 104384

Last change on this file since 104384 was 98103, checked in by vboxsync, 20 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.0 KB
RevLine 
[58699]1/** @file
2 * IPRT - AMD64 and x86 Specific Assembly Functions, 16-bit Watcom C pragma aux.
3 */
4
5/*
[98103]6 * Copyright (C) 2006-2023 Oracle and/or its affiliates.
[58699]7 *
[96407]8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
[58699]10 *
[96407]11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
[58699]24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
[96407]26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
[58699]28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
[96407]32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
[58699]34 */
35
[76557]36#ifndef IPRT_INCLUDED_asm_amd64_x86_watcom_16_h
37#define IPRT_INCLUDED_asm_amd64_x86_watcom_16_h
[76512]38/* no pragma once */
[76505]39
[76557]40#ifndef IPRT_INCLUDED_asm_amd64_x86_h
[58699]41# error "Don't include this header directly."
42#endif
43
44/*
45 * Turns out we cannot use 'ds' for segment stuff here because the compiler
46 * seems to insists on loading the DGROUP segment into 'ds' before calling
47 * stuff when using -ecc. Using 'es' instead as this seems to work fine.
[58749]48 *
49 * Note! The #undef that preceds the #pragma aux statements is for undoing
50 * the mangling, because the symbol in #pragma aux [symbol] statements
51 * doesn't get subjected to preprocessing. This is also why we include
[75131]52 * the watcom header at both the top and the bottom of asm-amd64-x86.h file.
[58699]53 */
54
[58749]55#undef ASMGetIDTR
[75131]56#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]57#pragma aux ASMGetIDTR = \
[59310]58 ".286p" \
[58699]59 "sidt fword ptr es:[bx]" \
60 parm [es bx] \
61 modify exact [];
[75131]62#endif
[58699]63
[58749]64#undef ASMGetIdtrLimit
[75131]65#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]66#pragma aux ASMGetIdtrLimit = \
[59310]67 ".286p" \
[58699]68 "sub sp, 8" \
69 "mov bx, sp" \
70 "sidt fword ptr ss:[bx]" \
71 "mov bx, ss:[bx]" \
72 "add sp, 8" \
73 parm [] \
74 value [bx] \
75 modify exact [bx];
[75131]76#endif
[58699]77
[58749]78#undef ASMSetIDTR
[75131]79#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]80#pragma aux ASMSetIDTR = \
[59310]81 ".286p" \
[58699]82 "lidt fword ptr es:[bx]" \
83 parm [es bx] nomemory \
84 modify nomemory;
[75131]85#endif
[58699]86
[58749]87#undef ASMGetGDTR
[75131]88#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]89#pragma aux ASMGetGDTR = \
[59310]90 ".286p" \
[58699]91 "sgdt fword ptr es:[bx]" \
92 parm [es bx] \
93 modify exact [];
[75131]94#endif
[58699]95
[58749]96#undef ASMSetGDTR
[75131]97#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]98#pragma aux ASMSetGDTR = \
[59310]99 ".286p" \
[58699]100 "lgdt fword ptr es:[bx]" \
101 parm [es bx] nomemory \
102 modify exact [] nomemory;
[75131]103#endif
[58699]104
[58749]105#undef ASMGetCS
[75131]106#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]107#pragma aux ASMGetCS = \
108 "mov ax, cs" \
109 parm [] nomemory \
110 value [ax] \
111 modify exact [ax] nomemory;
[75131]112#endif
[58699]113
[58749]114#undef ASMGetDS
[75131]115#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]116#pragma aux ASMGetDS = \
117 "mov ax, ds" \
118 parm [] nomemory \
119 value [ax] \
120 modify exact [ax] nomemory;
[75131]121#endif
[58699]122
[58749]123#undef ASMGetES
[75131]124#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]125#pragma aux ASMGetES = \
126 "mov ax, es" \
127 parm [] nomemory \
128 value [ax] \
129 modify exact [ax] nomemory;
[75131]130#endif
[58699]131
[58749]132#undef ASMGetFS
[75131]133#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]134#pragma aux ASMGetFS = \
[59310]135 ".386" \
[58699]136 "mov ax, fs" \
137 parm [] nomemory \
138 value [ax] \
139 modify exact [ax] nomemory;
[75131]140#endif
[58699]141
[58749]142#undef ASMGetGS
[75131]143#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]144#pragma aux ASMGetGS = \
[59310]145 ".386" \
[58699]146 "mov ax, gs" \
147 parm [] nomemory \
148 value [ax] \
149 modify exact [ax] nomemory;
[75131]150#endif
[58699]151
[58749]152#undef ASMGetSS
[75131]153#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]154#pragma aux ASMGetSS = \
155 "mov ax, ss" \
156 parm [] nomemory \
157 value [ax] \
158 modify exact [ax] nomemory;
[75131]159#endif
[58699]160
[58749]161#undef ASMGetTR
[75131]162#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]163#pragma aux ASMGetTR = \
[59310]164 ".286" \
[58699]165 "str ax" \
166 parm [] nomemory \
167 value [ax] \
168 modify exact [ax] nomemory;
[75131]169#endif
[58699]170
[58749]171#undef ASMGetLDTR
[75131]172#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]173#pragma aux ASMGetLDTR = \
[59310]174 ".286" \
[58699]175 "sldt ax" \
176 parm [] nomemory \
177 value [ax] \
178 modify exact [ax] nomemory;
[75131]179#endif
[58699]180
181/** @todo ASMGetSegAttr */
182
[58749]183#undef ASMGetFlags
[75131]184#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]185#pragma aux ASMGetFlags = \
186 "pushf" \
187 "pop ax" \
188 parm [] nomemory \
189 value [ax] \
190 modify exact [ax] nomemory;
[75131]191#endif
[58699]192
[58749]193#undef ASMSetFlags
[75131]194#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]195#pragma aux ASMSetFlags = \
196 "push ax" \
197 "popf" \
198 parm [ax] nomemory \
199 modify exact [] nomemory;
[75131]200#endif
[58699]201
[58749]202#undef ASMChangeFlags
[75131]203#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]204#pragma aux ASMChangeFlags = \
205 "pushf" \
206 "pop ax" \
207 "and dx, ax" \
208 "or dx, cx" \
209 "push dx" \
210 "popf" \
211 parm [dx] [cx] nomemory \
212 value [ax] \
213 modify exact [dx] nomemory;
[75131]214#endif
[58699]215
[58749]216#undef ASMAddFlags
[75131]217#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]218#pragma aux ASMAddFlags = \
219 "pushf" \
220 "pop ax" \
221 "or dx, ax" \
222 "push dx" \
223 "popf" \
224 parm [dx] nomemory \
225 value [ax] \
226 modify exact [dx] nomemory;
[75131]227#endif
[58699]228
[58749]229#undef ASMClearFlags
[75131]230#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]231#pragma aux ASMClearFlags = \
232 "pushf" \
233 "pop ax" \
234 "and dx, ax" \
235 "push dx" \
236 "popf" \
237 parm [dx] nomemory \
238 value [ax] \
239 modify exact [dx] nomemory;
[75131]240#endif
[58699]241
242/* Note! Must use the 64-bit integer return value convension.
243 The order of registers in the value [set] does not seem to mean anything. */
[58749]244#undef ASMReadTSC
[75131]245#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]246#pragma aux ASMReadTSC = \
247 ".586" \
248 "rdtsc" \
249 "mov ebx, edx" \
250 "mov ecx, eax" \
251 "shr ecx, 16" \
252 "xchg eax, edx" \
253 "shr eax, 16" \
254 parm [] nomemory \
255 value [dx cx bx ax] \
256 modify exact [ax bx cx dx] nomemory;
[75131]257#endif
[58699]258
259/** @todo ASMReadTscWithAux if needed (rdtscp not recognized by compiler) */
260
261
262/* ASMCpuId: Implemented externally, too many parameters. */
263/* ASMCpuId_Idx_ECX: Implemented externally, too many parameters. */
264/* ASMCpuIdExSlow: Always implemented externally. */
265/* ASMCpuId_ECX_EDX: Implemented externally, too many parameters. */
[60323]266
267#undef ASMCpuId_EAX
[75131]268#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[60323]269#pragma aux ASMCpuId_EAX = \
270 ".586" \
271 "xchg ax, dx" \
272 "shl eax, 16" \
273 "mov ax, dx" \
274 "cpuid" \
275 "mov edx, eax" \
276 "shr edx, 16" \
277 parm [ax dx] \
278 value [ax dx] \
279 modify exact [ax bx cx dx];
[75131]280#endif
[60323]281
282#undef ASMCpuId_EBX
[75131]283#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[60323]284#pragma aux ASMCpuId_EBX = \
285 ".586" \
286 "xchg ax, dx" \
287 "shl eax, 16" \
288 "mov ax, dx" \
289 "cpuid" \
290 "mov ax, bx" \
291 "shr ebx, 16" \
292 parm [ax dx] \
293 value [ax bx] \
294 modify exact [ax bx cx dx];
[75131]295#endif
[60323]296
297#undef ASMCpuId_ECX
[75131]298#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[60323]299#pragma aux ASMCpuId_ECX = \
300 ".586" \
301 "xchg ax, dx" \
302 "shl eax, 16" \
303 "mov ax, dx" \
304 "cpuid" \
305 "mov ax, cx" \
306 "shr ecx, 16" \
307 parm [ax dx] \
308 value [ax cx] \
309 modify exact [ax bx cx dx];
[75131]310#endif
[60323]311
312#undef ASMCpuId_EDX
[75131]313#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[60323]314#pragma aux ASMCpuId_EDX = \
315 ".586" \
316 "xchg ax, dx" \
317 "shl eax, 16" \
318 "mov ax, dx" \
319 "cpuid" \
320 "mov ax, dx" \
321 "shr edx, 16" \
322 parm [ax dx] \
323 value [ax dx] \
324 modify exact [ax bx cx dx];
[75131]325#endif
[60323]326
[58699]327/* ASMHasCpuId: MSC inline in main source file. */
328/* ASMGetApicId: Implemented externally, lazy bird. */
329
330/* Note! Again, when returning two registers, watcom have certain fixed ordering rules (low:high):
331 ax:bx, ax:cx, ax:dx, ax:si, ax:di
332 bx:cx, bx:dx, bx:si, bx:di
333 dx:cx, si:cx, di:cx
334 si:dx, di:dx
335 si:di
336 This ordering seems to apply to parameter values too. */
[58749]337#undef ASMGetCR0
[75131]338#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]339#pragma aux ASMGetCR0 = \
[59310]340 ".386" \
[58699]341 "mov eax, cr0" \
342 "mov edx, eax" \
343 "shr edx, 16" \
344 parm [] nomemory \
345 value [ax dx] \
346 modify exact [ax dx] nomemory;
[75131]347#endif
[58699]348
[58749]349#undef ASMSetCR0
[75131]350#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]351#pragma aux ASMSetCR0 = \
[59310]352 ".386" \
[58699]353 "shl edx, 16" \
354 "mov dx, ax" \
355 "mov cr0, edx" \
356 parm [ax dx] nomemory \
357 modify exact [dx] nomemory;
[75131]358#endif
[58699]359
[58749]360#undef ASMGetCR2
[75131]361#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]362#pragma aux ASMGetCR2 = \
[59310]363 ".386" \
[58699]364 "mov eax, cr2" \
365 "mov edx, eax" \
366 "shr edx, 16" \
367 parm [] nomemory \
368 value [ax dx] \
369 modify exact [ax dx] nomemory;
[75131]370#endif
[58699]371
[58749]372#undef ASMSetCR2
[75131]373#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]374#pragma aux ASMSetCR2 = \
[59310]375 ".386" \
[58699]376 "shl edx, 16" \
377 "mov dx, ax" \
378 "mov cr2, edx" \
379 parm [ax dx] nomemory \
380 modify exact [dx] nomemory;
[75131]381#endif
[58699]382
[58749]383#undef ASMGetCR3
[75131]384#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]385#pragma aux ASMGetCR3 = \
[59310]386 ".386" \
[58699]387 "mov eax, cr3" \
388 "mov edx, eax" \
389 "shr edx, 16" \
390 parm [] nomemory \
391 value [ax dx] \
392 modify exact [ax dx] nomemory;
[75131]393#endif
[58699]394
[58749]395#undef ASMSetCR3
[75131]396#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]397#pragma aux ASMSetCR3 = \
[59310]398 ".386" \
[58699]399 "shl edx, 16" \
400 "mov dx, ax" \
401 "mov cr3, edx" \
402 parm [ax dx] nomemory \
403 modify exact [dx] nomemory;
[75131]404#endif
[58699]405
[58749]406#undef ASMReloadCR3
[75131]407#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]408#pragma aux ASMReloadCR3 = \
[59310]409 ".386" \
[58699]410 "mov eax, cr3" \
411 "mov cr3, eax" \
412 parm [] nomemory \
413 modify exact [ax] nomemory;
[75131]414#endif
[58699]415
[58749]416#undef ASMGetCR4
[75131]417#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]418#pragma aux ASMGetCR4 = \
[59310]419 ".386" \
[58699]420 "mov eax, cr4" \
421 "mov edx, eax" \
422 "shr edx, 16" \
423 parm [] nomemory \
424 value [ax dx] \
425 modify exact [ax dx] nomemory;
[75131]426#endif
[58699]427
[58749]428#undef ASMSetCR4
[75131]429#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]430#pragma aux ASMSetCR4 = \
[59310]431 ".386" \
[58699]432 "shl edx, 16" \
433 "mov dx, ax" \
434 "mov cr4, edx" \
435 parm [ax dx] nomemory \
436 modify exact [dx] nomemory;
[75131]437#endif
[58699]438
439/* ASMGetCR8: Don't bother for 16-bit. */
440/* ASMSetCR8: Don't bother for 16-bit. */
441
[58749]442#undef ASMIntEnable
[75131]443#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]444#pragma aux ASMIntEnable = \
445 "sti" \
446 parm [] nomemory \
447 modify exact [] nomemory;
[75131]448#endif
[58699]449
[58749]450#undef ASMIntDisable
[75131]451#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]452#pragma aux ASMIntDisable = \
453 "cli" \
454 parm [] nomemory \
455 modify exact [] nomemory;
[75131]456#endif
[58699]457
[58749]458#undef ASMIntDisableFlags
[75131]459#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]460#pragma aux ASMIntDisableFlags = \
461 "pushf" \
462 "cli" \
463 "pop ax" \
464 parm [] nomemory \
465 value [ax] \
466 modify exact [] nomemory;
[75131]467#endif
[58699]468
[58749]469#undef ASMHalt
[75131]470#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]471#pragma aux ASMHalt = \
472 "hlt" \
473 parm [] nomemory \
474 modify exact [] nomemory;
[75131]475#endif
[58699]476
[58749]477#undef ASMRdMsr
[75131]478#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]479#pragma aux ASMRdMsr = \
480 ".586" \
481 "shl ecx, 16" \
482 "mov cx, ax" \
483 "rdmsr" \
484 "mov ebx, edx" \
485 "mov ecx, eax" \
486 "shr ecx, 16" \
487 "xchg eax, edx" \
488 "shr eax, 16" \
489 parm [ax cx] nomemory \
490 value [dx cx bx ax] \
491 modify exact [ax bx cx dx] nomemory;
[75131]492#endif
[58699]493
494/* ASMWrMsr: Implemented externally, lazy bird. */
495/* ASMRdMsrEx: Implemented externally, lazy bird. */
496/* ASMWrMsrEx: Implemented externally, lazy bird. */
497
[58749]498#undef ASMRdMsr_Low
[75131]499#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]500#pragma aux ASMRdMsr_Low = \
501 ".586" \
502 "shl ecx, 16" \
503 "mov cx, ax" \
504 "rdmsr" \
505 "mov edx, eax" \
506 "shr edx, 16" \
507 parm [ax cx] nomemory \
508 value [ax dx] \
509 modify exact [ax bx cx dx] nomemory;
[75131]510#endif
[58699]511
[58749]512#undef ASMRdMsr_High
[75131]513#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]514#pragma aux ASMRdMsr_High = \
515 ".586" \
516 "shl ecx, 16" \
517 "mov cx, ax" \
518 "rdmsr" \
519 "mov eax, edx" \
520 "shr edx, 16" \
521 parm [ax cx] nomemory \
522 value [ax dx] \
523 modify exact [ax bx cx dx] nomemory;
[75131]524#endif
[58699]525
526
[58749]527#undef ASMGetDR0
[75131]528#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]529#pragma aux ASMGetDR0 = \
[59310]530 ".386" \
[58699]531 "mov eax, dr0" \
532 "mov edx, eax" \
533 "shr edx, 16" \
534 parm [] nomemory \
535 value [ax dx] \
536 modify exact [ax dx] nomemory;
[75131]537#endif
[58699]538
[58749]539#undef ASMGetDR1
[75131]540#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]541#pragma aux ASMGetDR1 = \
[59310]542 ".386" \
[58699]543 "mov eax, dr1" \
544 "mov edx, eax" \
545 "shr edx, 16" \
546 parm [] nomemory \
547 value [ax dx] \
548 modify exact [ax dx] nomemory;
[75131]549#endif
[58699]550
[58749]551#undef ASMGetDR2
[75131]552#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]553#pragma aux ASMGetDR2 = \
[59310]554 ".386" \
[58699]555 "mov eax, dr2" \
556 "mov edx, eax" \
557 "shr edx, 16" \
558 parm [] nomemory \
559 value [ax dx] \
560 modify exact [ax dx] nomemory;
[75131]561#endif
[58699]562
[58749]563#undef ASMGetDR3
[75131]564#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]565#pragma aux ASMGetDR3 = \
[59310]566 ".386" \
[58699]567 "mov eax, dr3" \
568 "mov edx, eax" \
569 "shr edx, 16" \
570 parm [] nomemory \
571 value [ax dx] \
572 modify exact [ax dx] nomemory;
[75131]573#endif
[58699]574
[58749]575#undef ASMGetDR6
[75131]576#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]577#pragma aux ASMGetDR6 = \
[59310]578 ".386" \
[58699]579 "mov eax, dr6" \
580 "mov edx, eax" \
581 "shr edx, 16" \
582 parm [] nomemory \
583 value [ax dx] \
584 modify exact [ax dx] nomemory;
[75131]585#endif
[58699]586
[58749]587#undef ASMGetAndClearDR6
[75131]588#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]589#pragma aux ASMGetAndClearDR6 = \
[59310]590 ".386" \
[58699]591 "mov edx, 0ffff0ff0h" \
592 "mov eax, dr6" \
593 "mov dr6, edx" \
594 "mov edx, eax" \
595 "shr edx, 16" \
596 parm [] nomemory \
597 value [ax dx] \
598 modify exact [ax dx] nomemory;
[75131]599#endif
[58699]600
[58749]601#undef ASMGetDR7
[75131]602#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]603#pragma aux ASMGetDR7 = \
[59310]604 ".386" \
[58699]605 "mov eax, dr7" \
606 "mov edx, eax" \
607 "shr edx, 16" \
608 parm [] nomemory \
609 value [ax dx] \
610 modify exact [ax dx] nomemory;
[75131]611#endif
[58699]612
[58749]613#undef ASMSetDR0
[75131]614#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]615#pragma aux ASMSetDR0 = \
[59310]616 ".386" \
[58699]617 "shl edx, 16" \
618 "mov dx, ax" \
619 "mov dr0, edx" \
620 parm [ax dx] nomemory \
621 modify exact [dx] nomemory;
[75131]622#endif
[58699]623
[58749]624#undef ASMSetDR1
[75131]625#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]626#pragma aux ASMSetDR1 = \
[59310]627 ".386" \
[58699]628 "shl edx, 16" \
629 "mov dx, ax" \
630 "mov dr1, edx" \
631 parm [ax dx] nomemory \
632 modify exact [dx] nomemory;
[75131]633#endif
[58699]634
[58749]635#undef ASMSetDR2
[75131]636#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]637#pragma aux ASMSetDR2 = \
[59310]638 ".386" \
[58699]639 "shl edx, 16" \
640 "mov dx, ax" \
641 "mov dr2, edx" \
642 parm [ax dx] nomemory \
643 modify exact [dx] nomemory;
[75131]644#endif
[58699]645
[58749]646#undef ASMSetDR3
[75131]647#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]648#pragma aux ASMSetDR3 = \
[59310]649 ".386" \
[58699]650 "shl edx, 16" \
651 "mov dx, ax" \
652 "mov dr3, edx" \
653 parm [ax dx] nomemory \
654 modify exact [dx] nomemory;
[75131]655#endif
[58699]656
[58749]657#undef ASMSetDR6
[75131]658#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]659#pragma aux ASMSetDR6 = \
[59310]660 ".386" \
[58699]661 "shl edx, 16" \
662 "mov dx, ax" \
663 "mov dr6, edx" \
664 parm [ax dx] nomemory \
665 modify exact [dx] nomemory;
[75131]666#endif
[58699]667
[58749]668#undef ASMSetDR7
[75131]669#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]670#pragma aux ASMSetDR7 = \
[59310]671 ".386" \
[58699]672 "shl edx, 16" \
673 "mov dx, ax" \
674 "mov dr7, edx" \
675 parm [ax dx] nomemory \
676 modify exact [dx] nomemory;
[75131]677#endif
[58699]678
679/* Yeah, could've used outp here, but this keeps the main file simpler. */
[58749]680#undef ASMOutU8
[75131]681#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]682#pragma aux ASMOutU8 = \
683 "out dx, al" \
684 parm [dx] [al] nomemory \
685 modify exact [] nomemory;
[75131]686#endif
[58699]687
[58749]688#undef ASMInU8
[75131]689#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]690#pragma aux ASMInU8 = \
691 "in al, dx" \
692 parm [dx] nomemory \
693 value [al] \
694 modify exact [] nomemory;
[75131]695#endif
[58699]696
[58749]697#undef ASMOutU16
[75131]698#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]699#pragma aux ASMOutU16 = \
700 "out dx, ax" \
701 parm [dx] [ax] nomemory \
702 modify exact [] nomemory;
[75131]703#endif
[58699]704
[58749]705#undef ASMInU16
[75131]706#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]707#pragma aux ASMInU16 = \
708 "in ax, dx" \
709 parm [dx] nomemory \
710 value [ax] \
711 modify exact [] nomemory;
[75131]712#endif
[58699]713
[58749]714#undef ASMOutU32
[75131]715#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]716#pragma aux ASMOutU32 = \
[59310]717 ".386" \
[58699]718 "shl ecx, 16" \
719 "mov cx, ax" \
720 "mov eax, ecx" \
721 "out dx, eax" \
722 parm [dx] [ax cx] nomemory \
723 modify exact [] nomemory;
[75131]724#endif
[58699]725
[58749]726#undef ASMInU32
[75131]727#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]728#pragma aux ASMInU32 = \
[59310]729 ".386" \
[58699]730 "in eax, dx" \
731 "mov ecx, eax" \
732 "shr ecx, 16" \
733 parm [dx] nomemory \
734 value [ax cx] \
735 modify exact [] nomemory;
[75131]736#endif
[58699]737
[58749]738#undef ASMOutStrU8
[75131]739#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]740#pragma aux ASMOutStrU8 = \
[59310]741 ".186" \
[90466]742 "mov ax, ds" \
[90469]743 "mov ds, di" \
[58699]744 "rep outsb" \
[90466]745 "mov ds, ax" \
[90469]746 parm [dx] [si di] [cx] nomemory \
[90466]747 modify exact [si cx ax] nomemory;
[75131]748#endif
[58699]749
[58749]750#undef ASMInStrU8
[75131]751#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]752#pragma aux ASMInStrU8 = \
[59310]753 ".186" \
[58699]754 "rep insb" \
[90469]755 parm [dx] [di es] [cx] \
[58699]756 modify exact [di cx];
[75131]757#endif
[58699]758
[58749]759#undef ASMOutStrU16
[75131]760#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]761#pragma aux ASMOutStrU16 = \
[59310]762 ".186" \
[90466]763 "mov ax, ds" \
[90469]764 "mov ds, di" \
[58699]765 "rep outsw" \
[90466]766 "mov ds, ax" \
[90469]767 parm [dx] [si di] [cx] nomemory \
[90466]768 modify exact [si cx ax] nomemory;
[75131]769#endif
[58699]770
[58749]771#undef ASMInStrU16
[75131]772#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]773#pragma aux ASMInStrU16 = \
[59310]774 ".186" \
[58699]775 "rep insw" \
[90469]776 parm [dx] [di es] [cx] \
[58699]777 modify exact [di cx];
[75131]778#endif
[58699]779
[58749]780#undef ASMOutStrU32
[75131]781#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]782#pragma aux ASMOutStrU32 = \
[59310]783 ".386" \
[90466]784 "mov ax, ds" \
[90469]785 "mov ds, di" \
[58699]786 "rep outsd" \
[90466]787 "mov ds, ax" \
[90469]788 parm [dx] [si di] [cx] nomemory \
[90466]789 modify exact [si cx ax] nomemory;
[75131]790#endif
[58699]791
[58749]792#undef ASMInStrU32
[75131]793#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]794#pragma aux ASMInStrU32 = \
[59310]795 ".386" \
[58699]796 "rep insd" \
797 parm [dx] [es di] [cx] \
798 modify exact [di cx];
[75131]799#endif
[58699]800
[60229]801#undef ASMInvalidatePage
[75131]802#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[60229]803#pragma aux ASMInvalidatePage = \
804 ".486" \
805 "shl edx, 16" \
806 "mov dx, ax" \
[60230]807 "invlpg [edx]" \
[60229]808 parm [ax dx] \
809 modify exact [dx];
[75131]810#endif
[58699]811
[58749]812#undef ASMWriteBackAndInvalidateCaches
[75131]813#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]814#pragma aux ASMWriteBackAndInvalidateCaches = \
815 ".486" \
816 "wbinvd" \
817 parm [] nomemory \
818 modify exact [] nomemory;
[75131]819#endif
[58699]820
[58749]821#undef ASMInvalidateInternalCaches
[75131]822#ifdef IPRT_ASM_AMD64_X86_WATCOM_16_INSTANTIATE
[58699]823#pragma aux ASMInvalidateInternalCaches = \
824 ".486" \
825 "invd" \
826 parm [] \
827 modify exact [];
[75131]828#endif
[58699]829
[76585]830#endif /* !IPRT_INCLUDED_asm_amd64_x86_watcom_16_h */
[58699]831
Note: See TracBrowser for help on using the repository browser.

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