From 3d771dfd7ae13f303ed9fe346df8364adb2c702d Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Fri, 7 Oct 1994 19:45:00 +0000 Subject: [PATCH] Do not allow SUBREGs as either base or index register. From-SVN: r8237 --- gcc/config/i386/i386.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7a7c607aeb9..830f3dd975f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1424,21 +1424,18 @@ legitimate_address_p (mode, addr, strict) } /* Validate base register */ + /* Don't allow SUBREG's here, it can lead to spill failures when the base + is one word out of a two word structure, which is represented internally + as a DImode int. */ if (base) { - if (GET_CODE (base) == SUBREG) + if (GET_CODE (base) != REG) { - if (GET_CODE (SUBREG_REG (base)) != REG || SUBREG_WORD (base) != 0) - { - ADDR_INVALID ("Base SUBREG is not of a REG.\n", base); - return FALSE; - } - - base = SUBREG_REG (base); + ADDR_INVALID ("Base is not a register.\n", base); + return FALSE; } - if (GET_CODE (base) != REG - || ( strict && !REG_OK_FOR_BASE_STRICT_P (base)) + if ((strict && !REG_OK_FOR_BASE_STRICT_P (base)) || (!strict && !REG_OK_FOR_BASE_NONSTRICT_P (base))) { ADDR_INVALID ("Base is not valid.\n", base); @@ -1447,21 +1444,18 @@ legitimate_address_p (mode, addr, strict) } /* Validate index register */ + /* Don't allow SUBREG's here, it can lead to spill failures when the index + is one word out of a two word structure, which is represented internally + as a DImode int. */ if (indx) { - if (GET_CODE (indx) == SUBREG) + if (GET_CODE (indx) != REG) { - if (GET_CODE (SUBREG_REG (indx)) != REG || SUBREG_WORD (indx) != 0) - { - ADDR_INVALID ("Index SUBREG is not of a REG.", indx); - return FALSE; - } - - indx = SUBREG_REG (indx); + ADDR_INVALID ("Index is not a register.\n", indx); + return FALSE; } - if (GET_CODE (indx) != REG - || ( strict && !REG_OK_FOR_INDEX_STRICT_P (indx)) + if ((strict && !REG_OK_FOR_INDEX_STRICT_P (indx)) || (!strict && !REG_OK_FOR_INDEX_NONSTRICT_P (indx))) { ADDR_INVALID ("Index is not valid.\n", indx); -- 2.30.2