qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

ldst_common.c.inc (8817B)


      1 /*
      2  * Routines common to user and system emulation of load/store.
      3  *
      4  *  Copyright (c) 2003 Fabrice Bellard
      5  *
      6  * SPDX-License-Identifier: GPL-2.0-or-later
      7  *
      8  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      9  * See the COPYING file in the top-level directory.
     10  */
     11 
     12 uint32_t cpu_ldub_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     13                             int mmu_idx, uintptr_t ra)
     14 {
     15     MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
     16     return cpu_ldb_mmu(env, addr, oi, ra);
     17 }
     18 
     19 int cpu_ldsb_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     20                        int mmu_idx, uintptr_t ra)
     21 {
     22     return (int8_t)cpu_ldub_mmuidx_ra(env, addr, mmu_idx, ra);
     23 }
     24 
     25 uint32_t cpu_lduw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     26                                int mmu_idx, uintptr_t ra)
     27 {
     28     MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
     29     return cpu_ldw_be_mmu(env, addr, oi, ra);
     30 }
     31 
     32 int cpu_ldsw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     33                           int mmu_idx, uintptr_t ra)
     34 {
     35     return (int16_t)cpu_lduw_be_mmuidx_ra(env, addr, mmu_idx, ra);
     36 }
     37 
     38 uint32_t cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     39                               int mmu_idx, uintptr_t ra)
     40 {
     41     MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
     42     return cpu_ldl_be_mmu(env, addr, oi, ra);
     43 }
     44 
     45 uint64_t cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     46                               int mmu_idx, uintptr_t ra)
     47 {
     48     MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
     49     return cpu_ldq_be_mmu(env, addr, oi, ra);
     50 }
     51 
     52 uint32_t cpu_lduw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     53                                int mmu_idx, uintptr_t ra)
     54 {
     55     MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
     56     return cpu_ldw_le_mmu(env, addr, oi, ra);
     57 }
     58 
     59 int cpu_ldsw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     60                           int mmu_idx, uintptr_t ra)
     61 {
     62     return (int16_t)cpu_lduw_le_mmuidx_ra(env, addr, mmu_idx, ra);
     63 }
     64 
     65 uint32_t cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     66                               int mmu_idx, uintptr_t ra)
     67 {
     68     MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
     69     return cpu_ldl_le_mmu(env, addr, oi, ra);
     70 }
     71 
     72 uint64_t cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
     73                               int mmu_idx, uintptr_t ra)
     74 {
     75     MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
     76     return cpu_ldq_le_mmu(env, addr, oi, ra);
     77 }
     78 
     79 void cpu_stb_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
     80                        int mmu_idx, uintptr_t ra)
     81 {
     82     MemOpIdx oi = make_memop_idx(MO_UB, mmu_idx);
     83     cpu_stb_mmu(env, addr, val, oi, ra);
     84 }
     85 
     86 void cpu_stw_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
     87                           int mmu_idx, uintptr_t ra)
     88 {
     89     MemOpIdx oi = make_memop_idx(MO_BEUW | MO_UNALN, mmu_idx);
     90     cpu_stw_be_mmu(env, addr, val, oi, ra);
     91 }
     92 
     93 void cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
     94                           int mmu_idx, uintptr_t ra)
     95 {
     96     MemOpIdx oi = make_memop_idx(MO_BEUL | MO_UNALN, mmu_idx);
     97     cpu_stl_be_mmu(env, addr, val, oi, ra);
     98 }
     99 
    100 void cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
    101                           int mmu_idx, uintptr_t ra)
    102 {
    103     MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
    104     cpu_stq_be_mmu(env, addr, val, oi, ra);
    105 }
    106 
    107 void cpu_stw_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
    108                           int mmu_idx, uintptr_t ra)
    109 {
    110     MemOpIdx oi = make_memop_idx(MO_LEUW | MO_UNALN, mmu_idx);
    111     cpu_stw_le_mmu(env, addr, val, oi, ra);
    112 }
    113 
    114 void cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
    115                           int mmu_idx, uintptr_t ra)
    116 {
    117     MemOpIdx oi = make_memop_idx(MO_LEUL | MO_UNALN, mmu_idx);
    118     cpu_stl_le_mmu(env, addr, val, oi, ra);
    119 }
    120 
    121 void cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
    122                           int mmu_idx, uintptr_t ra)
    123 {
    124     MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
    125     cpu_stq_le_mmu(env, addr, val, oi, ra);
    126 }
    127 
    128 /*--------------------------*/
    129 
    130 uint32_t cpu_ldub_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    131 {
    132     return cpu_ldub_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    133 }
    134 
    135 int cpu_ldsb_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    136 {
    137     return (int8_t)cpu_ldub_data_ra(env, addr, ra);
    138 }
    139 
    140 uint32_t cpu_lduw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    141 {
    142     return cpu_lduw_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    143 }
    144 
    145 int cpu_ldsw_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    146 {
    147     return (int16_t)cpu_lduw_be_data_ra(env, addr, ra);
    148 }
    149 
    150 uint32_t cpu_ldl_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    151 {
    152     return cpu_ldl_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    153 }
    154 
    155 uint64_t cpu_ldq_be_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    156 {
    157     return cpu_ldq_be_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    158 }
    159 
    160 uint32_t cpu_lduw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    161 {
    162     return cpu_lduw_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    163 }
    164 
    165 int cpu_ldsw_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    166 {
    167     return (int16_t)cpu_lduw_le_data_ra(env, addr, ra);
    168 }
    169 
    170 uint32_t cpu_ldl_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    171 {
    172     return cpu_ldl_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    173 }
    174 
    175 uint64_t cpu_ldq_le_data_ra(CPUArchState *env, abi_ptr addr, uintptr_t ra)
    176 {
    177     return cpu_ldq_le_mmuidx_ra(env, addr, cpu_mmu_index(env, false), ra);
    178 }
    179 
    180 void cpu_stb_data_ra(CPUArchState *env, abi_ptr addr,
    181                      uint32_t val, uintptr_t ra)
    182 {
    183     cpu_stb_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    184 }
    185 
    186 void cpu_stw_be_data_ra(CPUArchState *env, abi_ptr addr,
    187                         uint32_t val, uintptr_t ra)
    188 {
    189     cpu_stw_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    190 }
    191 
    192 void cpu_stl_be_data_ra(CPUArchState *env, abi_ptr addr,
    193                         uint32_t val, uintptr_t ra)
    194 {
    195     cpu_stl_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    196 }
    197 
    198 void cpu_stq_be_data_ra(CPUArchState *env, abi_ptr addr,
    199                         uint64_t val, uintptr_t ra)
    200 {
    201     cpu_stq_be_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    202 }
    203 
    204 void cpu_stw_le_data_ra(CPUArchState *env, abi_ptr addr,
    205                         uint32_t val, uintptr_t ra)
    206 {
    207     cpu_stw_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    208 }
    209 
    210 void cpu_stl_le_data_ra(CPUArchState *env, abi_ptr addr,
    211                         uint32_t val, uintptr_t ra)
    212 {
    213     cpu_stl_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    214 }
    215 
    216 void cpu_stq_le_data_ra(CPUArchState *env, abi_ptr addr,
    217                         uint64_t val, uintptr_t ra)
    218 {
    219     cpu_stq_le_mmuidx_ra(env, addr, val, cpu_mmu_index(env, false), ra);
    220 }
    221 
    222 /*--------------------------*/
    223 
    224 uint32_t cpu_ldub_data(CPUArchState *env, abi_ptr addr)
    225 {
    226     return cpu_ldub_data_ra(env, addr, 0);
    227 }
    228 
    229 int cpu_ldsb_data(CPUArchState *env, abi_ptr addr)
    230 {
    231     return (int8_t)cpu_ldub_data(env, addr);
    232 }
    233 
    234 uint32_t cpu_lduw_be_data(CPUArchState *env, abi_ptr addr)
    235 {
    236     return cpu_lduw_be_data_ra(env, addr, 0);
    237 }
    238 
    239 int cpu_ldsw_be_data(CPUArchState *env, abi_ptr addr)
    240 {
    241     return (int16_t)cpu_lduw_be_data(env, addr);
    242 }
    243 
    244 uint32_t cpu_ldl_be_data(CPUArchState *env, abi_ptr addr)
    245 {
    246     return cpu_ldl_be_data_ra(env, addr, 0);
    247 }
    248 
    249 uint64_t cpu_ldq_be_data(CPUArchState *env, abi_ptr addr)
    250 {
    251     return cpu_ldq_be_data_ra(env, addr, 0);
    252 }
    253 
    254 uint32_t cpu_lduw_le_data(CPUArchState *env, abi_ptr addr)
    255 {
    256     return cpu_lduw_le_data_ra(env, addr, 0);
    257 }
    258 
    259 int cpu_ldsw_le_data(CPUArchState *env, abi_ptr addr)
    260 {
    261     return (int16_t)cpu_lduw_le_data(env, addr);
    262 }
    263 
    264 uint32_t cpu_ldl_le_data(CPUArchState *env, abi_ptr addr)
    265 {
    266     return cpu_ldl_le_data_ra(env, addr, 0);
    267 }
    268 
    269 uint64_t cpu_ldq_le_data(CPUArchState *env, abi_ptr addr)
    270 {
    271     return cpu_ldq_le_data_ra(env, addr, 0);
    272 }
    273 
    274 void cpu_stb_data(CPUArchState *env, abi_ptr addr, uint32_t val)
    275 {
    276     cpu_stb_data_ra(env, addr, val, 0);
    277 }
    278 
    279 void cpu_stw_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
    280 {
    281     cpu_stw_be_data_ra(env, addr, val, 0);
    282 }
    283 
    284 void cpu_stl_be_data(CPUArchState *env, abi_ptr addr, uint32_t val)
    285 {
    286     cpu_stl_be_data_ra(env, addr, val, 0);
    287 }
    288 
    289 void cpu_stq_be_data(CPUArchState *env, abi_ptr addr, uint64_t val)
    290 {
    291     cpu_stq_be_data_ra(env, addr, val, 0);
    292 }
    293 
    294 void cpu_stw_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
    295 {
    296     cpu_stw_le_data_ra(env, addr, val, 0);
    297 }
    298 
    299 void cpu_stl_le_data(CPUArchState *env, abi_ptr addr, uint32_t val)
    300 {
    301     cpu_stl_le_data_ra(env, addr, val, 0);
    302 }
    303 
    304 void cpu_stq_le_data(CPUArchState *env, abi_ptr addr, uint64_t val)
    305 {
    306     cpu_stq_le_data_ra(env, addr, val, 0);
    307 }