FreeBSD/contrib/binutils/gas/config/tc-arm.c
/* Check the various types for the VCVT instruction, and return which version
   the current instruction is.  */
Check the various types for the VCVT instruction, and return which version
the current instruction is.
Check the various types for the VCVT instruction and return which version the current instruction is .
static int
neon_cvt_flavour (enum neon_shape rs)
{
#define CVT_VAR(C,X,Y)							\
  et = neon_check_type (2, rs, whole_reg | (X), whole_reg | (Y));	\
  if (et.type != NT_invtype)						\
    {									\
      inst.error = NULL;						\
      return (C);							\
    }
  struct neon_type_el et;
  unsigned whole_reg = (rs == NS_FFI || rs == NS_FD || rs == NS_DF
                        || rs == NS_FF) ? N_VFP : 0;
  unsigned key = (rs == NS_QQI || rs == NS_DDI || rs == NS_FFI) ? N_KEY : 0;
  CVT_VAR (0, N_S32, N_F32);
  CVT_VAR (1, N_U32, N_F32);
  CVT_VAR (2, N_F32, N_S32);
  CVT_VAR (3, N_F32, N_U32);
  whole_reg = N_VFP;
  CVT_VAR (4, N_F32, N_F64);
  CVT_VAR (5, N_F64, N_F32);
  CVT_VAR (6, N_S32, N_F64 | key);
  CVT_VAR (7, N_U32, N_F64 | key);
  CVT_VAR (8, N_F64 | key, N_S32);
  CVT_VAR (9, N_F64 | key, N_U32);
  CVT_VAR (10, N_F32 | key, N_S16);
  CVT_VAR (11, N_F32 | key, N_U16);
  CVT_VAR (12, N_F64 | key, N_S16);
  CVT_VAR (13, N_F64 | key, N_U16);
  CVT_VAR (14, N_S16, N_F32 | key);
  CVT_VAR (15, N_U16, N_F32 | key);
  CVT_VAR (16, N_S16, N_F64 | key);
  CVT_VAR (17, N_U16, N_F64 | key);
  return -1;
#undef CVT_VAR
}
static int neon_cvt_flavour ( enum neon_shape rs ) { #define CVT_VAR ( C , X , Y ) 							\
  et = neon_check_type (2, rs, whole_reg | (X), whole_reg | (Y));	\
  if (et.type != NT_invtype)						\
    {									\
      inst.error = NULL;						\
      return (C);							\
    } struct neon_type_el et ; unsigned whole_reg = ( rs == NS_FFI || rs == NS_FD || rs == NS_DF || rs == NS_FF ) ? N_VFP : 0 ; unsigned key = ( rs == NS_QQI || rs == NS_DDI || rs == NS_FFI ) ? N_KEY : 0 ; CVT_VAR ( 0 , N_S32 , N_F32 ) ; CVT_VAR ( 1 , N_U32 , N_F32 ) ; CVT_VAR ( 2 , N_F32 , N_S32 ) ; CVT_VAR ( 3 , N_F32 , N_U32 ) ; whole_reg = N_VFP ; CVT_VAR ( 4 , N_F32 , N_F64 ) ; CVT_VAR ( 5 , N_F64 , N_F32 ) ; CVT_VAR ( 6 , N_S32 , N_F64 | key ) ; CVT_VAR ( 7 , N_U32 , N_F64 | key ) ; CVT_VAR ( 8 , N_F64 | key , N_S32 ) ; CVT_VAR ( 9 , N_F64 | key , N_U32 ) ; CVT_VAR ( 10 , N_F32 | key , N_S16 ) ; CVT_VAR ( 11 , N_F32 | key , N_U16 ) ; CVT_VAR ( 12 , N_F64 | key , N_S16 ) ; CVT_VAR ( 13 , N_F64 | key , N_U16 ) ; CVT_VAR ( 14 , N_S16 , N_F32 | key ) ; CVT_VAR ( 15 , N_U16 , N_F32 | key ) ; CVT_VAR ( 16 , N_S16 , N_F64 | key ) ; CVT_VAR ( 17 , N_U16 , N_F64 | key ) ; return -1 ; #undef  CVT_VAR }
Check the various types for the VCVT instruction, and return which version
the current instruction is.
Check the various types for the VCVT instruction and return which version the current instruction is .
/* The instruction versions which take an immediate take one register
     argument, which is extended to the width of the full register. Thus the
     "source" and "destination" registers must have the same width.  Hack that
     here by making the size equal to the key (wider, in this case) operand.  */ /* VFP instructions.  */ /* VFP instructions with bitshift.  */