|
From: <sv...@va...> - 2012-06-08 06:39:54
|
cborntra 2012-06-08 07:39:43 +0100 (Fri, 08 Jun 2012)
New Revision: 12620
Log:
CDSG needs quad word (16 byte) aligned data structures. Since the stack
on s390 has only 8 byte alignment gcc cant guarantee 16 byte alignment
for local variables. As a global variable gcc can do that.
Modified files:
trunk/none/tests/s390x/cdsg.c
Modified: trunk/none/tests/s390x/cdsg.c (+13 -8)
===================================================================
--- trunk/none/tests/s390x/cdsg.c 2012-06-07 12:38:40 +01:00 (rev 12619)
+++ trunk/none/tests/s390x/cdsg.c 2012-06-08 07:39:43 +01:00 (rev 12620)
@@ -4,21 +4,26 @@
typedef struct {
uint64_t high;
uint64_t low;
-} quad_word;
+} __attribute__((aligned(16))) quad_word;
-void
+
+/* CDSG needs quad-word alignment */
+quad_word op1, op2, op3;
+
+void
test(quad_word op1_init, quad_word op2_init, quad_word op3_init,
int expected_cc)
{
+ quad_word op1_before, op2_before, op3_before;
int cc = 1 - expected_cc;
- quad_word op1 = op1_init;
- quad_word op2 = op2_init;
- quad_word op3 = op3_init;
+ op1 = op1_init;
+ op2 = op2_init;
+ op3 = op3_init;
- quad_word op1_before = op1;
- quad_word op2_before = op2;
- quad_word op3_before = op3;
+ op1_before = op1;
+ op2_before = op2;
+ op3_before = op3;
printf("before op1 = (%#lx, %#lx)\n", op1.high, op1.low);
printf("before op2 = (%#lx, %#lx)\n", op2.high, op2.low);
|