diff options
author | Jan Hubicka <jh@suse.cz> | 2001-03-21 18:54:00 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-03-21 17:54:00 +0000 |
commit | 70a324958b2556acba361a23255fdf56fa9062aa (patch) | |
tree | cf0f93281d4d071af62f33d97703370da8a6005d /gcc | |
parent | 5db60c46d06cdb6276d257d9ea895a4facb3e718 (diff) | |
download | gcc-70a324958b2556acba361a23255fdf56fa9062aa.zip gcc-70a324958b2556acba361a23255fdf56fa9062aa.tar.gz gcc-70a324958b2556acba361a23255fdf56fa9062aa.tar.bz2 |
* recog.c (push_operand): Recognize new format of push instructions.
From-SVN: r40694
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/recog.c | 22 |
2 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 90ab387..15dabb0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Wed Mar 21 18:51:19 CET 2001 Jan Hubicka <jh@suse.cz> + + * recog.c (push_operand): Recognize new format of push instructions. + Wed Mar 21 10:53:57 CET 2001 Jan Hubicka <jh@suse.cz> * i386.md (pushqi1): New. diff --git a/gcc/recog.c b/gcc/recog.c index bf8a3e3..195d3f4 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -1358,8 +1358,26 @@ push_operand (op, mode) op = XEXP (op, 0); - if (GET_CODE (op) != STACK_PUSH_CODE) - return 0; + if (PUSH_ROUNDING (GET_MODE_SIZE (mode)) == GET_MODE_SIZE (mode)) + { + if (GET_CODE (op) != STACK_PUSH_CODE) + return 0; + } + else + { + int rounded_size = PUSH_ROUNDING (GET_MODE_SIZE (mode)); + if (GET_CODE (op) != PRE_MODIFY + || GET_CODE (XEXP (op, 1)) != PLUS + || XEXP (XEXP (op, 1), 0) != XEXP (op, 0) + || GET_CODE (XEXP (XEXP (op, 1), 1)) != CONST_INT +#ifdef STACK_GROWS_DOWNWARD + || INTVAL (XEXP (XEXP (op, 1), 1)) != -rounded_size +#else + || INTVAL (XEXP (XEXP (op, 1), 1)) != rounded_size +#endif + ) + return 0; + } return XEXP (op, 0) == stack_pointer_rtx; } |