[PATCH] D16607: Implementation of PS4 ABI, round 1

Sunil Srivastava via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 26 15:19:48 PST 2016

Sunil_Srivastava created this revision.
Sunil_Srivastava added a reviewer: rsmith.
Sunil_Srivastava added a subscriber: cfe-commits.

We are planning to upstream changes needed for maintaining PS4 ABI across future releases.

Unlike many other targets, we need to maintain, in most cases, strict object compatibility to a stable base (llvm 3.2 in this case) across releases, even in cases where the behavior differs from common x86-64 documentation or current practice.

To maintain such compatibility we are proposing to introduce TargetCXXABI::PS4. This will be a variant of GenericItaniumABI, but will remain compatible to llvm 3.2 in most cases, even if the GenericItaniumABI behavior changes. One such change has recently occurred in r257462, and is the motivation of taking up this task now.

This proposed change is the  first step of this work. This is not a change in the compiler at all, but just an addition to a test for x86_64_pc-linux-gnu triple. Its purpose is to guard against inadvertent changes to the default x86_64 ABI by future changes, in regard to the bitfield layout.

The proposed change adds a new run line with x86_64_pc-linux-gnu, along with few variants of tests where they x86_64 rules differ from other triple used In the test.

The next round of changes will introduce the concept of the PS4 ABI in the compiler itself.



Index: test/Sema/bitfield-layout.c
--- test/Sema/bitfield-layout.c
+++ test/Sema/bitfield-layout.c
@@ -1,6 +1,7 @@
 // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
 // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
 // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
+// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
 // expected-no-diagnostics
 #include <stddef.h>
@@ -190,7 +191,7 @@
   __attribute__((aligned(1))) long long b : 62;
   char c;
-#if defined(__arm__) || defined(__aarch64__)
+#if defined(__arm__) || defined(__aarch64__) || defined(__x86_64__)
 CHECK_SIZE(struct, g11, 24);
 CHECK_ALIGN(struct, g11, 8);
 CHECK_OFFSET(struct, g11, c, 16);
@@ -218,6 +219,10 @@
 CHECK_SIZE(struct, g13, 16);
 CHECK_ALIGN(struct, g13, 8);
 CHECK_OFFSET(struct, g13, c, 8);
+#elif (__x86_64__)
+CHECK_SIZE(struct, g13, 9);
+CHECK_ALIGN(struct, g13, 1);
+CHECK_OFFSET(struct, g13, c, 8);
 CHECK_SIZE(struct, g13, 5);
 CHECK_ALIGN(struct, g13, 1);
@@ -233,6 +238,10 @@
 CHECK_SIZE(struct, g14, 16);
 CHECK_ALIGN(struct, g14, 8);
 CHECK_OFFSET(struct, g14, c, 8);
+#elif (__x86_64__)
+CHECK_SIZE(struct, g14, 9);
+CHECK_ALIGN(struct, g14, 1);
+CHECK_OFFSET(struct, g14, c, 8);
 CHECK_SIZE(struct, g14, 5);
 CHECK_ALIGN(struct, g14, 1);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16607.46060.patch
Type: text/x-patch
Size: 1405 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160126/c0c25f64/attachment.bin>

More information about the cfe-commits mailing list