diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386-expand.cc | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 5c29ee1..ac42300 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -25576,27 +25576,32 @@ ix86_ternlog_idx (rtx op, rtx *args) switch (GET_CODE (op)) { + case SUBREG: + if (!register_operand (op, GET_MODE (op))) + return -1; + /* FALLTHRU */ + case REG: if (!args[0]) { args[0] = op; return 0xf0; } - if (REGNO (op) == REGNO (args[0])) + if (rtx_equal_p (op, args[0])) return 0xf0; if (!args[1]) { args[1] = op; return 0xcc; } - if (REGNO (op) == REGNO (args[1])) + if (rtx_equal_p (op, args[1])) return 0xcc; if (!args[2]) { args[2] = op; return 0xaa; } - if (REG_P (args[2]) && REGNO (op) == REGNO (args[2])) + if (rtx_equal_p (op, args[2])) return 0xaa; return -1; @@ -25634,12 +25639,6 @@ ix86_ternlog_idx (rtx op, rtx *args) return 0x55; return -1; - case SUBREG: - if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))) - != GET_MODE_SIZE (GET_MODE (op))) - return -1; - return ix86_ternlog_idx (SUBREG_REG (op), args); - case NOT: idx0 = ix86_ternlog_idx (XEXP (op, 0), args); return (idx0 >= 0) ? idx0 ^ 0xff : -1; |