mirror of
https://github.com/qemu/qemu.git
synced 2024-12-14 15:03:33 +08:00
exec: Extract 'page-vary.h' header
In the next commit we will extract the generic code out of page-vary.c, only keeping the target specific code. Both files will use the same TargetPageBits structure, so make its declaration in a shared header. As the common header can not use target specific types, use a uint64_t to hold the page mask value, and add a cast back to target_long in the TARGET_PAGE_MASK definitions. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210322112427.4045204-3-f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
6670d4d0e3
commit
27eb9d65ff
@ -215,11 +215,7 @@ static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val
|
||||
/* page related stuff */
|
||||
|
||||
#ifdef TARGET_PAGE_BITS_VARY
|
||||
typedef struct {
|
||||
bool decided;
|
||||
int bits;
|
||||
target_long mask;
|
||||
} TargetPageBits;
|
||||
# include "exec/page-vary.h"
|
||||
#if defined(CONFIG_ATTRIBUTE_ALIAS) || !defined(IN_EXEC_VARY)
|
||||
extern const TargetPageBits target_page;
|
||||
#else
|
||||
@ -227,10 +223,11 @@ extern TargetPageBits target_page;
|
||||
#endif
|
||||
#ifdef CONFIG_DEBUG_TCG
|
||||
#define TARGET_PAGE_BITS ({ assert(target_page.decided); target_page.bits; })
|
||||
#define TARGET_PAGE_MASK ({ assert(target_page.decided); target_page.mask; })
|
||||
#define TARGET_PAGE_MASK ({ assert(target_page.decided); \
|
||||
(target_long)target_page.mask; })
|
||||
#else
|
||||
#define TARGET_PAGE_BITS target_page.bits
|
||||
#define TARGET_PAGE_MASK target_page.mask
|
||||
#define TARGET_PAGE_MASK ((target_long)target_page.mask)
|
||||
#endif
|
||||
#define TARGET_PAGE_SIZE (-(int)TARGET_PAGE_MASK)
|
||||
#else
|
||||
|
29
include/exec/page-vary.h
Normal file
29
include/exec/page-vary.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Definitions for cpus with variable page sizes.
|
||||
*
|
||||
* Copyright (c) 2003 Fabrice Bellard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef EXEC_PAGE_VARY_H
|
||||
#define EXEC_PAGE_VARY_H
|
||||
|
||||
typedef struct {
|
||||
bool decided;
|
||||
int bits;
|
||||
uint64_t mask;
|
||||
} TargetPageBits;
|
||||
|
||||
#endif /* EXEC_PAGE_VARY_H */
|
Loading…
Reference in New Issue
Block a user