[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 |
|
---|