VirtualBox

source: vbox/trunk/include/iprt/asm-mem-watcom-x86-16.h

Last change on this file was 103014, checked in by vboxsync, 4 months ago

iprt/asm-mem.h: Eliminated the ASMMemZeroPage function, replaced the three actual uses in PGMPool with RT_BZERO/PAGE_SIZE.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.6 KB
Line 
1/** @file
2 * IPRT - Assembly Memory Functions, x86 16-bit Watcom C/C++ pragma aux.
3 */
4
5/*
6 * Copyright (C) 2006-2024 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
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 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
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
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.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef IPRT_INCLUDED_asm_mem_watcom_x86_16_h
37#define IPRT_INCLUDED_asm_mem_watcom_x86_16_h
38/* no pragma once */
39
40#ifndef IPRT_INCLUDED_asm_mem_h
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.
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
52 * the watcom header at both the top and the bottom of asm.h file.
53 */
54
55#undef ASMMemZero32
56#ifdef IPRT_ASM_WATCOM_X86_16_WITH_PRAGMAS
57# if defined(__SW_0) || defined(__SW_1) || defined(__SW_2)
58# pragma aux ASMMemZero32 = \
59 "xor ax, ax" \
60 "shr cx, 1" \
61 "shr cx, 1" \
62 "rep stosw" \
63 parm [es di] [cx] \
64 modify exact [ax dx cx di];
65# else
66# pragma aux ASMMemZero32 = \
67 "and ecx, 0ffffh" /* probably not necessary, lazy bird should check... */ \
68 "shr ecx, 2" \
69 "xor eax, eax" \
70 "rep stosd" \
71 parm [es di] [cx] \
72 modify exact [ax cx di];
73# endif
74#endif
75
76#undef ASMMemFill32
77#ifdef IPRT_ASM_WATCOM_X86_16_WITH_PRAGMAS
78# if defined(__SW_0) || defined(__SW_1) || defined(__SW_2)
79# pragma aux ASMMemFill32 = \
80 " shr cx, 1" \
81 " shr cx, 1" \
82 " jz done" \
83 "again:" \
84 " stosw" \
85 " xchg ax, dx" \
86 " stosw" \
87 " xchg ax, dx" \
88 " dec cx" \
89 " jnz again" \
90 "done:" \
91 parm [es di] [cx] [ax dx]\
92 modify exact [cx di];
93# else
94# pragma aux ASMMemFill32 = \
95 "and ecx, 0ffffh" /* probably not necessary, lazy bird should check... */ \
96 "shr ecx, 2" \
97 "shl eax, 16" \
98 "mov ax, dx" \
99 "rol eax, 16" \
100 "rep stosd" \
101 parm [es di] [cx] [ax dx]\
102 modify exact [ax cx di];
103# endif
104#endif
105
106#undef ASMProbeReadByte
107#ifdef IPRT_ASM_WATCOM_X86_16_WITH_PRAGMAS
108#pragma aux ASMProbeReadByte = \
109 "mov al, es:[bx]" \
110 parm [es bx] \
111 value [al] \
112 modify exact [al];
113#endif
114
115#endif /* !IPRT_INCLUDED_asm_mem_watcom_x86_16_h */
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use