diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-18 16:19:53 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-18 16:19:53 +0000 |
commit | 11e330df4d27cf801f7edd61605082f66d1ee4ae (patch) | |
tree | ab7642b0de513ef71e1bf64dcb8672552e2a768e | |
parent | 256b464ad6bdf3c4635848d2713edd4e53becb76 (diff) | |
download | gcc-11e330df4d27cf801f7edd61605082f66d1ee4ae.tar.gz |
Backport from mainline
2016-01-07 Uros Bizjak <ubizjak@gmail.com>
PR target/69140
* config/i386/i386.c (ix86_frame_pointer_required): Enable
frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned.
testsuite/ChangeLog:
Backport from mainline
2016-01-06 Uros Bizjak <ubizjak@gmail.com>
PR target/69140
* gcc.target/i386/pr69140.c: New test
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@232528 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr69140.c | 24 |
4 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb8d1fbc16e..373f07a9b78 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-01-18 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2016-01-07 Uros Bizjak <ubizjak@gmail.com> + + PR target/69140 + * config/i386/i386.c (ix86_frame_pointer_required): Enable + frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned. + 2016-01-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com> Backport from mainline: diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c1b68aaa1c2..504e8b8d871 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -9690,6 +9690,10 @@ ix86_frame_pointer_required (void) if (TARGET_64BIT_MS_ABI && get_frame_size () > SEH_MAX_FRAME_SIZE) return true; + /* SSE saves require frame-pointer when stack is misaligned. */ + if (TARGET_64BIT_MS_ABI && ix86_incoming_stack_boundary < 128) + return true; + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER turns off the frame pointer by default. Turn it back on now if we've not got a leaf function. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 121ea955700..b4f892816a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2016-01-18 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2016-01-06 Uros Bizjak <ubizjak@gmail.com> + + PR target/69140 + * gcc.target/i386/pr69140.c: New test + 2016-01-18 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/inline12.adb: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr69140.c b/gcc/testsuite/gcc.target/i386/pr69140.c new file mode 100644 index 00000000000..2c345dd75bc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr69140.c @@ -0,0 +1,24 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-O2 -mincoming-stack-boundary=3" } */ + +typedef struct { + unsigned int buf[4]; + unsigned char in[64]; +} MD4_CTX; + +static void +MD4Transform (unsigned int buf[4], const unsigned int in[16]) +{ + unsigned int a, b, c, d; + (b) += ((((c)) & ((d))) | ((~(c)) & ((a)))) + (in[7]); + (a) += ((((b)) & ((c))) | ((~(b)) & ((d)))) + (in[8]); + (d) += ((((a)) & ((b))) | ((~(a)) & ((c)))) + (in[9]); + buf[3] += d; +} + +void __attribute__((ms_abi)) +MD4Update (MD4_CTX *ctx, const unsigned char *buf) +{ + MD4Transform( ctx->buf, (unsigned int *)ctx->in); + MD4Transform( ctx->buf, (unsigned int *)ctx->in); +} |