/* Subroutines for insn-output.c for Vax.
Copyright (C) 1987 Free Software Foundation, Inc.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* This function allows any constant operand, even on VMS where some
constants are not normally legitimate. */
supergeneral_operand (x
, mode
)
return (CONSTANT_P (x
) || general_operand (x
, mode
));
print_operand_address (file
, addr
)
register rtx reg1
, reg2
, breg
, ireg
;
fprintf (file
, "(%s)", reg_names
[REGNO (addr
)]);
fprintf (file
, "-(%s)", reg_names
[REGNO (XEXP (addr
, 0))]);
fprintf (file
, "(%s)+", reg_names
[REGNO (XEXP (addr
, 0))]);
if (CONSTANT_ADDRESS_P (XEXP (addr
, 0))
|| GET_CODE (XEXP (addr
, 0)) == MEM
)
else if (CONSTANT_ADDRESS_P (XEXP (addr
, 1))
|| GET_CODE (XEXP (addr
, 1)) == MEM
)
if (GET_CODE (addr
) != PLUS
)
else if (GET_CODE (XEXP (addr
, 0)) == MULT
)
else if (GET_CODE (XEXP (addr
, 1)) == MULT
)
else if (GET_CODE (XEXP (addr
, 0)) == REG
)
else if (GET_CODE (XEXP (addr
, 1)) == REG
)
if (GET_CODE (addr
) == REG
|| GET_CODE (addr
) == MULT
)
if (reg1
!= 0 && GET_CODE (reg1
) == MULT
)
else if (reg2
!= 0 && GET_CODE (reg2
) == MULT
)
else if (reg2
!= 0 || GET_CODE (addr
) == MEM
)
if (GET_CODE (breg
) != REG
)
fprintf (file
, "(%s)", reg_names
[REGNO (breg
)]);
if (GET_CODE (ireg
) == MULT
)
if (GET_CODE (ireg
) != REG
)
fprintf (file
, "[%s]", reg_names
[REGNO (ireg
)]);
output_addr_const (file
, addr
);