aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs')
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp35
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/abitest.h122
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c17
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c38
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c39
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c38
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c39
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c24
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c20
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c22
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c20
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c19
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c21
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c20
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c30
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c30
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c37
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c37
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c38
19 files changed, 646 insertions, 0 deletions
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
new file mode 100644
index 000000000..fcc433346
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
@@ -0,0 +1,35 @@
+# Copyright (C) 1997, 2004, 2006, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an ARM target.
+if ![istarget arm*-*-*] then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+ "" ""
+
+# All done.
+dg-finish
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/abitest.h b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/abitest.h
new file mode 100644
index 000000000..7b7d0e24f
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/abitest.h
@@ -0,0 +1,122 @@
+#define IN_FRAMEWORK
+
+#ifdef VFP
+#define D0 0
+#define D1 8
+#define D2 16
+#define D3 24
+#define D4 32
+#define D5 40
+#define D6 48
+#define D7 56
+
+#define S0 64
+#define S1 68
+#define S2 72
+#define S3 76
+#define S4 80
+#define S5 84
+#define S6 88
+#define S7 92
+#define S8 86
+#define S9 100
+#define S10 104
+#define S11 108
+#define S12 112
+#define S13 116
+#define S14 120
+#define S15 124
+
+#define R0 128
+#define R1 132
+#define R2 136
+#define R3 140
+
+#define STACK 144
+
+#else
+
+#define R0 0
+#define R1 4
+#define R2 8
+#define R3 12
+
+#define STACK 16
+
+#endif
+
+extern void abort (void);
+
+__attribute__((naked)) void dumpregs () __asm("myfunc");
+__attribute__((naked)) void dumpregs ()
+{
+ asm(
+ "mov ip, sp\n\t"
+ "stmfd sp!, {r0-r3}\n\t"
+#ifdef VFP
+ "fstmdbs sp!, {s0-s15}\n\t"
+ "fstmdbd sp!, {d0-d7}\n\t"
+#endif
+ "mov r0, sp\n\t"
+ "stmfd sp!, {ip, r14}\n\t"
+ "bl testfunc\n\t"
+ "ldmfd sp!, {r0, r14}\n\t"
+ "mov sp, r0\n\t"
+ "bx lr");
+}
+
+
+#define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); }
+#define ARG(type,val,offset) LAST_ARG(type, val, offset)
+#define ANON(type,val,offset) LAST_ARG(type, val, offset)
+#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
+#define DOTS
+
+void testfunc(char* stack)
+{
+#include TESTFILE
+ return;
+}
+
+#undef LAST_ARG
+#undef ARG
+#undef DOTS
+#undef ANON
+#undef LAST_ANON
+#define LAST_ARG(type,val,offset) type
+#define ARG(type,val,offset) LAST_ARG(type, val, offset),
+#define DOTS ...
+#define ANON(type,val, offset)
+#define LAST_ANON(type,val, offset)
+
+#ifndef MYFUNCTYPE
+#define MYFUNCTYPE void
+#endif
+
+#ifndef PCSATTR
+#define PCSATTR
+#endif
+
+MYFUNCTYPE myfunc(
+#include TESTFILE
+) PCSATTR;
+
+#undef LAST_ARG
+#undef ARG
+#undef DOTS
+#undef ANON
+#undef LAST_ANON
+#define LAST_ARG(type,val,offset) val
+#define ARG(type,val,offset) LAST_ARG(type, val, offset),
+#define DOTS
+#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
+#define ANON(type,val,offset) LAST_ARG(type, val, offset),
+
+
+int main()
+{
+ myfunc(
+#include TESTFILE
+);
+ return 0;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c
new file mode 100644
index 000000000..9fb926dbd
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c
@@ -0,0 +1,17 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp1.c"
+#include "abitest.h"
+
+#else
+ ARG(int, 4, R0)
+ ARG(double, 4.0, D0)
+ LAST_ARG(int, 3, R1)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c
new file mode 100644
index 000000000..c3a1b39a9
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c
@@ -0,0 +1,38 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp10.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ /* A variadic function passes using the base ABI */
+ ARG(double, 11.0, R0)
+ DOTS
+ ANON(struct z, a, R2)
+ ANON(struct z, b, STACK+24)
+ LAST_ANON(double, 0.5, STACK+56)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c
new file mode 100644
index 000000000..a496a3ed5
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c
@@ -0,0 +1,39 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp11.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#define MYFUNCTYPE struct y
+
+#include "abitest.h"
+#else
+ ARG(int, 7, R1)
+ ARG(struct y, v, R2)
+ ARG(struct z, a, D0)
+ ARG(struct z, b, D4)
+ LAST_ARG(double, 0.5, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c
new file mode 100644
index 000000000..bbfa3df90
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c
@@ -0,0 +1,38 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp12.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ ARG(int, 7, R0)
+ ARG(struct y, v, R1)
+ ARG(struct z, a, D0)
+ ARG(double, 1.0, D4)
+ ARG(struct z, b, STACK+8)
+ LAST_ARG(double, 0.5, STACK+40)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c
new file mode 100644
index 000000000..a46361c09
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c
@@ -0,0 +1,39 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp13.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ ARG(int, 7, R0)
+ ARG(int, 9, R1)
+ ARG(struct z, a, D0)
+ ARG(double, 1.0, D4)
+ ARG(struct z, b, STACK)
+ ARG(int, 4, R2)
+ LAST_ARG(double, 0.5, STACK+32)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c
new file mode 100644
index 000000000..43c19f2dd
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c
@@ -0,0 +1,24 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp14.c"
+
+#include "abitest.h"
+#else
+ ARG(double, 1.0, D0)
+ ARG(double, 2.0, D1)
+ ARG(double, 3.0, D2)
+ ARG(double, 4.0, D3)
+ ARG(double, 5.0, D4)
+ ARG(double, 6.0, D5)
+ ARG(double, 7.0, D6)
+ ARG(double, 8.0, D7)
+ ARG(double, 9.0, STACK)
+ LAST_ARG(double, 10.0, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c
new file mode 100644
index 000000000..c98ca3810
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c
@@ -0,0 +1,20 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp15.c"
+
+#define PCSATTR __attribute__((pcs("aapcs")))
+
+#include "abitest.h"
+#else
+ ARG(double, 1.0, R0)
+ ARG(double, 2.0, R2)
+ ARG(double, 3.0, STACK)
+ LAST_ARG(double, 4.0, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c
new file mode 100644
index 000000000..956bc0ab5
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c
@@ -0,0 +1,22 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp16.c"
+
+#define PCSATTR __attribute__((pcs("aapcs")))
+
+#include "abitest.h"
+#else
+ ARG(float, 1.0f, R0)
+ ARG(float, 2.0f, R1)
+ ARG(float, 3.0f, R2)
+ ARG(float, 4.0f, R3)
+ ARG(float, 5.0f, STACK)
+ LAST_ARG(float, 5.0f, STACK+4)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c
new file mode 100644
index 000000000..9044ec221
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c
@@ -0,0 +1,20 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp17.c"
+
+#define PCSATTR __attribute__((pcs("aapcs")))
+
+#include "abitest.h"
+#else
+ ARG(float, 1.0f, R0)
+ ARG(double, 2.0, R2)
+ ARG(float, 3.0f, STACK)
+ LAST_ARG(double, 4.0, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c
new file mode 100644
index 000000000..bfe90675b
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c
@@ -0,0 +1,19 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp2.c"
+#include "abitest.h"
+
+#else
+ ARG(float, 1.0f, S0)
+ ARG(double, 4.0, D1)
+ ARG(float, 2.0f, S1)
+ ARG(double, 5.0, D2)
+ LAST_ARG(int, 3, R0)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c
new file mode 100644
index 000000000..0e645d711
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c
@@ -0,0 +1,21 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp3.c"
+
+__complex__ x = 1.0+2.0i;
+
+#include "abitest.h"
+#else
+ ARG(float, 1.0f, S0)
+ ARG(__complex__ double, x, D1)
+ ARG(float, 2.0f, S1)
+ ARG(double, 5.0, D3)
+ LAST_ARG(int, 3, R0)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c
new file mode 100644
index 000000000..46dc4b98a
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c
@@ -0,0 +1,20 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp4.c"
+
+__complex__ float x = 1.0f + 2.0fi;
+#include "abitest.h"
+#else
+ ARG(float, 1.0f, S0)
+ ARG(__complex__ float, x, S1)
+ ARG(float, 2.0f, S3)
+ ARG(double, 5.0, D2)
+ LAST_ARG(int, 3, R0)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c
new file mode 100644
index 000000000..216d98ea8
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c
@@ -0,0 +1,30 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp5.c"
+
+__complex__ float x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+#include "abitest.h"
+#else
+ ARG(float, 1.0f, S0)
+ ARG(__complex__ float, x, S1)
+ ARG(float, 2.0f, S3)
+ ARG(double, 5.0, D2)
+ ARG(struct y, v, R0)
+ LAST_ARG(int, 3, STACK)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c
new file mode 100644
index 000000000..4d718da45
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c
@@ -0,0 +1,30 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp6.c"
+
+__complex__ float x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+#include "abitest.h"
+#else
+ ARG(struct y, v, R0)
+ ARG(float, 1.0f, S0)
+ ARG(__complex__ float, x, S1)
+ ARG(float, 2.0f, S3)
+ ARG(double, 5.0, D2)
+ LAST_ARG(int, 3, STACK)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
new file mode 100644
index 000000000..3e57e45c7
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
@@ -0,0 +1,37 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp7.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ ARG(struct z, a, D0)
+ ARG(struct z, b, D4)
+ ARG(double, 0.5, STACK)
+ ARG(int, 7, R0)
+ LAST_ARG(struct y, v, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
new file mode 100644
index 000000000..e55006885
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
@@ -0,0 +1,37 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp8.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ ARG(int, 7, R0)
+ ARG(struct y, v, R1)
+ ARG(struct z, a, D0)
+ ARG(struct z, b, D4)
+ LAST_ARG(double, 0.5, STACK+8)
+#endif
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
new file mode 100644
index 000000000..c2be6bf4b
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
@@ -0,0 +1,38 @@
+/* Test AAPCS layout (VFP variant) */
+
+/* { dg-do run { target arm*-*-*eabi* } } */
+/* { dg-require-effective-target arm_hard_vfp_ok } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
+
+#ifndef IN_FRAMEWORK
+#define VFP
+#define TESTFILE "vfp9.c"
+
+__complex__ x = 1.0+2.0i;
+
+struct y
+{
+ int p;
+ int q;
+ int r;
+ int s;
+} v = { 1, 2, 3, 4 };
+
+struct z
+{
+ double x[4];
+};
+
+struct z a = { 5.0, 6.0, 7.0, 8.0 };
+struct z b = { 9.0, 10.0, 11.0, 12.0 };
+
+#include "abitest.h"
+#else
+ /* A variadic function passes using the base ABI */
+ ARG(int, 7, R0)
+ DOTS
+ ANON(struct z, a, R2)
+ ANON(struct z, b, STACK+24)
+ LAST_ANON(double, 0.5, STACK+56)
+#endif