@ -6362,17 +6362,14 @@ void sve_ldN_r(CPUARMState *env, uint64_t *vg, const target_ulong addr,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_ldN_r_mte ( CPUARMState * env , uint64_t * vg , target_ulong addr ,
void sve_ldN_r_mte ( CPUARMState * env , uint64_t * vg , target_ulong addr ,
uint32 _t desc , const uintptr_t ra ,
uint64 _t desc , const uintptr_t ra ,
const int esz , const int msz , const int N ,
const int esz , const int msz , const int N ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/* Perform gross MTE suppression early. */
/* Perform gross MTE suppression early. */
if ( ! tbi_check ( mtedesc , bit55 ) | |
if ( ! tbi_check ( mtedesc , bit55 ) | |
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
@ -6727,17 +6724,14 @@ void sve_ldnfff1_r(CPUARMState *env, void *vg, const target_ulong addr,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_ldnfff1_r_mte ( CPUARMState * env , void * vg , target_ulong addr ,
void sve_ldnfff1_r_mte ( CPUARMState * env , void * vg , target_ulong addr ,
uint32 _t desc , const uintptr_t retaddr ,
uint64 _t desc , const uintptr_t retaddr ,
const int esz , const int msz , const SVEContFault fault ,
const int esz , const int msz , const SVEContFault fault ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/* Perform gross MTE suppression early. */
/* Perform gross MTE suppression early. */
if ( ! tbi_check ( mtedesc , bit55 ) | |
if ( ! tbi_check ( mtedesc , bit55 ) | |
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
@ -6985,17 +6979,14 @@ void sve_stN_r(CPUARMState *env, uint64_t *vg, target_ulong addr,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_stN_r_mte ( CPUARMState * env , uint64_t * vg , target_ulong addr ,
void sve_stN_r_mte ( CPUARMState * env , uint64_t * vg , target_ulong addr ,
uint32 _t desc , const uintptr_t ra ,
uint64 _t desc , const uintptr_t ra ,
const int esz , const int msz , const int N ,
const int esz , const int msz , const int N ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
int bit55 = extract64 ( addr , 55 , 1 ) ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/* Perform gross MTE suppression early. */
/* Perform gross MTE suppression early. */
if ( ! tbi_check ( mtedesc , bit55 ) | |
if ( ! tbi_check ( mtedesc , bit55 ) | |
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
tcma_check ( mtedesc , bit55 , allocation_tag_from_addr ( addr ) ) ) {
@ -7183,14 +7174,12 @@ void sve_ld1_z(CPUARMState *env, void *vd, uint64_t *vg, void *vm,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_ld1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
void sve_ld1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
target_ulong base , uint32 _t desc , uintptr_t retaddr ,
target_ulong base , uint64 _t desc , uintptr_t retaddr ,
int esize , int msize , zreg_off_fn * off_fn ,
int esize , int msize , zreg_off_fn * off_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/*
/*
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
@ -7395,15 +7384,13 @@ void sve_ldff1_z(CPUARMState *env, void *vd, uint64_t *vg, void *vm,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_ldff1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
void sve_ldff1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
target_ulong base , uint32 _t desc , uintptr_t retaddr ,
target_ulong base , uint64 _t desc , uintptr_t retaddr ,
const int esz , const int msz ,
const int esz , const int msz ,
zreg_off_fn * off_fn ,
zreg_off_fn * off_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/*
/*
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
@ -7600,14 +7587,12 @@ void sve_st1_z(CPUARMState *env, void *vd, uint64_t *vg, void *vm,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve_st1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
void sve_st1_z_mte ( CPUARMState * env , void * vd , uint64_t * vg , void * vm ,
target_ulong base , uint32 _t desc , uintptr_t retaddr ,
target_ulong base , uint64 _t desc , uintptr_t retaddr ,
int esize , int msize , zreg_off_fn * off_fn ,
int esize , int msize , zreg_off_fn * off_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
uint32_t mtedesc = desc > > 32 ;
/* Remove mtedesc from the normal sve descriptor. */
desc = extract32 ( desc , 0 , SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
/*
/*
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
* ? ? ? TODO : For the 32 - bit offset extractions , base + ofs cannot
@ -7853,14 +7838,15 @@ static void sve2p1_cont_ldst_mte_check(SVEContLdSt *info, CPUARMState *env,
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve2p1_ld1_c ( CPUARMState * env , ARMVectorReg * zd , const vaddr addr ,
void sve2p1_ld1_c ( CPUARMState * env , ARMVectorReg * zd , const vaddr addr ,
uint32_t png , uint32_t desc ,
uint32_t png , uint64_t desc64 ,
const uintptr_t ra , const MemOp esz ,
const uintptr_t ra , const MemOp esz ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc64 > > 32 ;
uint32_t desc = desc64 ;
const unsigned N = ( desc > > SIMD_DATA_SHIFT ) & 1 ? 4 : 2 ;
const unsigned N = ( desc > > SIMD_DATA_SHIFT ) & 1 ? 4 : 2 ;
const unsigned rstride = 1 < < ( ( desc > > ( SIMD_DATA_SHIFT + 1 ) ) % 4 ) ;
const unsigned rstride = 1 < < ( ( desc > > ( SIMD_DATA_SHIFT + 1 ) ) % 4 ) ;
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
const intptr_t reg_max = simd_oprsz ( desc ) ;
const intptr_t reg_max = simd_oprsz ( desc ) ;
const unsigned esize = 1 < < esz ;
const unsigned esize = 1 < < esz ;
intptr_t count_off , count_last ;
intptr_t count_off , count_last ;
@ -8025,14 +8011,15 @@ DO_LD1_2(ld1dd, MO_64)
static inline QEMU_ALWAYS_INLINE
static inline QEMU_ALWAYS_INLINE
void sve2p1_st1_c ( CPUARMState * env , ARMVectorReg * zd , const vaddr addr ,
void sve2p1_st1_c ( CPUARMState * env , ARMVectorReg * zd , const vaddr addr ,
uint32_t png , uint32_t desc ,
uint32_t png , uint64_t desc64 ,
const uintptr_t ra , const int esz ,
const uintptr_t ra , const int esz ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_host_fn * host_fn ,
sve_ldst1_tlb_fn * tlb_fn )
sve_ldst1_tlb_fn * tlb_fn )
{
{
uint32_t mtedesc = desc64 > > 32 ;
uint32_t desc = desc64 ;
const unsigned N = ( desc > > SIMD_DATA_SHIFT ) & 1 ? 4 : 2 ;
const unsigned N = ( desc > > SIMD_DATA_SHIFT ) & 1 ? 4 : 2 ;
const unsigned rstride = 1 < < ( ( desc > > ( SIMD_DATA_SHIFT + 1 ) ) % 4 ) ;
const unsigned rstride = 1 < < ( ( desc > > ( SIMD_DATA_SHIFT + 1 ) ) % 4 ) ;
uint32_t mtedesc = desc > > ( SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT ) ;
const intptr_t reg_max = simd_oprsz ( desc ) ;
const intptr_t reg_max = simd_oprsz ( desc ) ;
const unsigned esize = 1 < < esz ;
const unsigned esize = 1 < < esz ;
intptr_t count_off , count_last ;
intptr_t count_off , count_last ;