target/arm: Move endian adjustment macros to vec_internal.h
We have two copies of these, one set of which is not complete. Move them to a common header. Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210525010358.152808-82-richard.henderson@linaro.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a5421b54c4
commit
93966af1d3
@ -29,22 +29,6 @@
|
|||||||
#include "vec_internal.h"
|
#include "vec_internal.h"
|
||||||
|
|
||||||
|
|
||||||
/* Note that vector data is stored in host-endian 64-bit chunks,
|
|
||||||
so addressing units smaller than that needs a host-endian fixup. */
|
|
||||||
#ifdef HOST_WORDS_BIGENDIAN
|
|
||||||
#define H1(x) ((x) ^ 7)
|
|
||||||
#define H1_2(x) ((x) ^ 6)
|
|
||||||
#define H1_4(x) ((x) ^ 4)
|
|
||||||
#define H2(x) ((x) ^ 3)
|
|
||||||
#define H4(x) ((x) ^ 1)
|
|
||||||
#else
|
|
||||||
#define H1(x) (x)
|
|
||||||
#define H1_2(x) (x)
|
|
||||||
#define H1_4(x) (x)
|
|
||||||
#define H2(x) (x)
|
|
||||||
#define H4(x) (x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Return a value for NZCV as per the ARM PredTest pseudofunction.
|
/* Return a value for NZCV as per the ARM PredTest pseudofunction.
|
||||||
*
|
*
|
||||||
* The return value has bit 31 set if N is set, bit 1 set if Z is clear,
|
* The return value has bit 31 set if N is set, bit 1 set if Z is clear,
|
||||||
|
@ -25,18 +25,6 @@
|
|||||||
#include "qemu/int128.h"
|
#include "qemu/int128.h"
|
||||||
#include "vec_internal.h"
|
#include "vec_internal.h"
|
||||||
|
|
||||||
/* Note that vector data is stored in host-endian 64-bit chunks,
|
|
||||||
so addressing units smaller than that needs a host-endian fixup. */
|
|
||||||
#ifdef HOST_WORDS_BIGENDIAN
|
|
||||||
#define H1(x) ((x) ^ 7)
|
|
||||||
#define H2(x) ((x) ^ 3)
|
|
||||||
#define H4(x) ((x) ^ 1)
|
|
||||||
#else
|
|
||||||
#define H1(x) (x)
|
|
||||||
#define H2(x) (x)
|
|
||||||
#define H4(x) (x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Signed saturating rounding doubling multiply-accumulate high half, 8-bit */
|
/* Signed saturating rounding doubling multiply-accumulate high half, 8-bit */
|
||||||
int8_t do_sqrdmlah_b(int8_t src1, int8_t src2, int8_t src3,
|
int8_t do_sqrdmlah_b(int8_t src1, int8_t src2, int8_t src3,
|
||||||
bool neg, bool round)
|
bool neg, bool round)
|
||||||
|
@ -20,6 +20,30 @@
|
|||||||
#ifndef TARGET_ARM_VEC_INTERNALS_H
|
#ifndef TARGET_ARM_VEC_INTERNALS_H
|
||||||
#define TARGET_ARM_VEC_INTERNALS_H
|
#define TARGET_ARM_VEC_INTERNALS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that vector data is stored in host-endian 64-bit chunks,
|
||||||
|
* so addressing units smaller than that needs a host-endian fixup.
|
||||||
|
*
|
||||||
|
* The H<N> macros are used when indexing an array of elements of size N.
|
||||||
|
*
|
||||||
|
* The H1_<N> macros are used when performing byte arithmetic and then
|
||||||
|
* casting the final pointer to a type of size N.
|
||||||
|
*/
|
||||||
|
#ifdef HOST_WORDS_BIGENDIAN
|
||||||
|
#define H1(x) ((x) ^ 7)
|
||||||
|
#define H1_2(x) ((x) ^ 6)
|
||||||
|
#define H1_4(x) ((x) ^ 4)
|
||||||
|
#define H2(x) ((x) ^ 3)
|
||||||
|
#define H4(x) ((x) ^ 1)
|
||||||
|
#else
|
||||||
|
#define H1(x) (x)
|
||||||
|
#define H1_2(x) (x)
|
||||||
|
#define H1_4(x) (x)
|
||||||
|
#define H2(x) (x)
|
||||||
|
#define H4(x) (x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static inline void clear_tail(void *vd, uintptr_t opr_sz, uintptr_t max_sz)
|
static inline void clear_tail(void *vd, uintptr_t opr_sz, uintptr_t max_sz)
|
||||||
{
|
{
|
||||||
uint64_t *d = vd + opr_sz;
|
uint64_t *d = vd + opr_sz;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user