2 * User-only accessor function support
4 * Generate inline load/store functions for one data size.
6 * Generate a store function as well as signed and unsigned loads.
8 * Not used directly but included from cpu_ldst.h.
10 * Copyright (c) 2015 Linaro Limited
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
26 #if !defined(CODE_ACCESS)
27 #include "trace-root.h"
30 #include "trace/mem.h"
35 #define DATA_TYPE uint64_t
40 #define DATA_TYPE uint32_t
45 #define DATA_TYPE uint16_t
46 #define DATA_STYPE int16_t
51 #define DATA_TYPE uint8_t
52 #define DATA_STYPE int8_t
55 #error unsupported data size
59 #define RES_TYPE uint64_t
61 #define RES_TYPE uint32_t
64 static inline RES_TYPE
65 glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr)
67 #if !defined(CODE_ACCESS)
68 trace_guest_mem_before_exec(
69 ENV_GET_CPU(env), ptr,
70 trace_mem_build_info(SHIFT, false, MO_TE, false));
72 return glue(glue(ld, USUFFIX), _p)(g2h(ptr));
75 static inline RES_TYPE
76 glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
81 helper_retaddr = retaddr;
82 ret = glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(env, ptr);
89 glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr)
91 #if !defined(CODE_ACCESS)
92 trace_guest_mem_before_exec(
93 ENV_GET_CPU(env), ptr,
94 trace_mem_build_info(SHIFT, true, MO_TE, false));
96 return glue(glue(lds, SUFFIX), _p)(g2h(ptr));
100 glue(glue(glue(cpu_lds, SUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
105 helper_retaddr = retaddr;
106 ret = glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(env, ptr);
114 glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr,
117 #if !defined(CODE_ACCESS)
118 trace_guest_mem_before_exec(
119 ENV_GET_CPU(env), ptr,
120 trace_mem_build_info(SHIFT, false, MO_TE, true));
122 glue(glue(st, SUFFIX), _p)(g2h(ptr), v);
126 glue(glue(glue(cpu_st, SUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
131 helper_retaddr = retaddr;
132 glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(env, ptr, v);