aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.apple/ppc_intrinsics-2.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.apple/ppc_intrinsics-2.c')
-rw-r--r--gcc/testsuite/gcc.apple/ppc_intrinsics-2.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.apple/ppc_intrinsics-2.c b/gcc/testsuite/gcc.apple/ppc_intrinsics-2.c
new file mode 100644
index 00000000000..2f5698fc685
--- /dev/null
+++ b/gcc/testsuite/gcc.apple/ppc_intrinsics-2.c
@@ -0,0 +1,66 @@
+/* { dg-options "-I ${srcdir}/../../more-hdrs -Wshorten-64-to-32 -Wno-long-long" } */
+/* { dg-do run { target "powerpc*-*-darwin*" } } */
+#include "ppc_intrinsics.h"
+#include <stdlib.h>
+
+int main( void )
+{
+ int intconst = 0x5;
+ long long longlongconst = 0x5;
+ int intloc, intloc1, intloc2;
+ unsigned int uintloc, uintloc1, uintloc2;
+ long longloc;
+ long long longlongloc;
+ int fails = 0;
+
+ intloc = __cntlzw(intconst);
+ if (intloc != 29)
+ ++fails;
+
+ longlongloc = __cntlzd(longlongconst);
+ if (longlongloc != 61)
+ ++fails;
+
+ intloc = 0xffff;
+ __rlwimi(intloc, 0x21876543, 8, 0, 23);
+ if (intloc != 0x876543ff)
+ ++fails;
+
+ intloc = __rlwinm(0x21876543, 8, 0, 31);
+ if (intloc != 0x87654321)
+ ++fails;
+
+ longloc = __rlwinm(0x45, 5, 24, 31);
+ if (longloc != 0xa0)
+ ++fails;
+
+ longloc = __rlwnm(0x47, 5, 24, 31);
+ if (longloc != 0xe0)
+ ++fails;
+
+ intloc1 = 1 << 20;
+ intloc2 = 1 << 21;
+ intloc = __mulhw (intloc1, intloc2);
+ if (intloc != (1 << 9))
+ ++fails;
+
+ intloc1 = 0xfffe0000;
+ intloc2 = 0xfffc0000;
+ intloc = __mulhw (intloc1, intloc2);
+ if (intloc != 8)
+ ++fails;
+
+ uintloc1 = 0xffffffff;
+ uintloc2 = 0xfffffffe;
+ uintloc = __mulhwu (uintloc1, uintloc2);
+ if (uintloc != 0xfffffffd)
+ ++fails;
+
+ uintloc1 = 0xfffe0000;
+ uintloc2 = 0xfffc0000;
+ uintloc = __mulhwu (uintloc1, uintloc2);
+ if (uintloc != 0xfffa0008)
+ ++fails;
+
+ return fails;
+}