FreeBSD/contrib/gcc/varasm.c
/* Worker function for output_constant_pool_1.  Emit assembly for X
   in MODE with known alignment ALIGN.  */
Worker function for output_constant_pool_1.  Emit assembly for X
in MODE with known alignment ALIGN.
Worker function for output_constant_pool_1 . Emit assembly for X in MODE with known alignment ALIGN .
static void
output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
{
  switch (GET_MODE_CLASS (mode))
    {
    case MODE_FLOAT:
    case MODE_DECIMAL_FLOAT:
      {
	REAL_VALUE_TYPE r;
	gcc_assert (GET_CODE (x) == CONST_DOUBLE);
	REAL_VALUE_FROM_CONST_DOUBLE (r, x);
	assemble_real (r, mode, align);
	break;
      }
    case MODE_INT:
    case MODE_PARTIAL_INT:
      assemble_integer (x, GET_MODE_SIZE (mode), align, 1);
      break;
    case MODE_VECTOR_FLOAT:
    case MODE_VECTOR_INT:
      {
	int i, units;
        enum machine_mode submode = GET_MODE_INNER (mode);
	unsigned int subalign = MIN (align, GET_MODE_BITSIZE (submode));
	gcc_assert (GET_CODE (x) == CONST_VECTOR);
	units = CONST_VECTOR_NUNITS (x);
	for (i = 0; i < units; i++)
	  {
	    rtx elt = CONST_VECTOR_ELT (x, i);
	    output_constant_pool_2 (submode, elt, i ? subalign : align);
	  }
      }
      break;
    default:
      gcc_unreachable ();
    }
}
static void output_constant_pool_2 ( enum machine_mode mode , rtx x , unsigned int align ) { switch ( GET_MODE_CLASS ( mode ) ) { case MODE_FLOAT : case MODE_DECIMAL_FLOAT : { REAL_VALUE_TYPE r ; gcc_assert ( GET_CODE ( x ) == CONST_DOUBLE ) ; REAL_VALUE_FROM_CONST_DOUBLE ( r , x ) ; assemble_real ( r , mode , align ) ; break ; } case MODE_INT : case MODE_PARTIAL_INT : assemble_integer ( x , GET_MODE_SIZE ( mode ) , align , 1 ) ; break ; case MODE_VECTOR_FLOAT : case MODE_VECTOR_INT : { int i , units ; enum machine_mode submode = GET_MODE_INNER ( mode ) ; unsigned int subalign = MIN ( align , GET_MODE_BITSIZE ( submode ) ) ; gcc_assert ( GET_CODE ( x ) == CONST_VECTOR ) ; units = CONST_VECTOR_NUNITS ( x ) ; for ( i = 0 ; i < units ; i ++ ) { rtx elt = CONST_VECTOR_ELT ( x , i ) ; output_constant_pool_2 ( submode , elt , i ? subalign : align ) ; } } break ; default : gcc_unreachable ( ) ; } }
Worker function for output_constant_pool_1.
Worker function for output_constant_pool_1 .