aboutsummaryrefslogtreecommitdiffstats
path: root/test/regression
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2020-07-25 17:13:05 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2020-07-27 16:30:28 +0200
commit70f105e623dddeb27be258fedb56bd0e9a59d190 (patch)
tree4c6130620108ec3b2d42f476986fe2896f0dae4a /test/regression
parentbc20d7c0d16d07790fb6eb608bf608237b0abbc3 (diff)
downloadcompcert-kvx-70f105e623dddeb27be258fedb56bd0e9a59d190.tar.gz
compcert-kvx-70f105e623dddeb27be258fedb56bd0e9a59d190.zip
Refactor regression testing of built-in functions
Share the testing code for built-in functions that are available on all target platforms. Improve testing of __builtin_clz* and __builtin_ctz*
Diffstat (limited to 'test/regression')
-rw-r--r--test/regression/Makefile2
-rw-r--r--test/regression/Results/builtins-aarch647
-rw-r--r--test/regression/Results/builtins-arm6
-rw-r--r--test/regression/Results/builtins-common390
-rw-r--r--test/regression/Results/builtins-powerpc9
-rw-r--r--test/regression/Results/builtins-riscV6
-rw-r--r--test/regression/Results/builtins-x8612
-rw-r--r--test/regression/builtins-aarch64.c20
-rw-r--r--test/regression/builtins-arm.c10
-rw-r--r--test/regression/builtins-common.c52
-rw-r--r--test/regression/builtins-powerpc.c13
-rw-r--r--test/regression/builtins-riscV.c11
-rw-r--r--test/regression/builtins-x86.c19
13 files changed, 447 insertions, 110 deletions
diff --git a/test/regression/Makefile b/test/regression/Makefile
index 8e8d8762..28439ed5 100644
--- a/test/regression/Makefile
+++ b/test/regression/Makefile
@@ -22,7 +22,7 @@ TESTS=int32 int64 floats floats-basics floats-lit \
TESTS_COMP=attribs1 bitfields1 bitfields2 bitfields3 bitfields4 \
bitfields5 bitfields6 bitfields7 bitfields8 \
- builtins-$(ARCH) packedstruct1 packedstruct2 alignas \
+ builtins-common builtins-$(ARCH) packedstruct1 packedstruct2 alignas \
varargs1 varargs2 varargs3 sections alias aligned
# Can run, both in compiled mode and in interpreter mode,
diff --git a/test/regression/Results/builtins-aarch64 b/test/regression/Results/builtins-aarch64
index c70432d8..7e3575e5 100644
--- a/test/regression/Results/builtins-aarch64
+++ b/test/regression/Results/builtins-aarch64
@@ -1,14 +1,7 @@
-bswap(12345678) = 78563412
-bswap16(1234) = 3412
-bswap64(123456789abcdef0) = f0debc9a78563412
-clz(12345678) = 3
-clzll(12345678) = 35
-clzll(1234567812345678) = 3
cls(1234567) = 10
cls(-9999) = 17
clsll(1234567) = 42
clsll(-9999) = 49
-fsqrt(3.141590) = 1.772453
fmadd(3.141590, 2.718000, 1.414000) = 9.952842
fmsub(3.141590, 2.718000, 1.414000) = -7.124842
fnmadd(3.141590, 2.718000, 1.414000) = -9.952842
diff --git a/test/regression/Results/builtins-arm b/test/regression/Results/builtins-arm
index f637fb16..bfdad28d 100644
--- a/test/regression/Results/builtins-arm
+++ b/test/regression/Results/builtins-arm
@@ -1,9 +1,3 @@
-bswap(12345678) = 78563412
-bswap16(1234) = 3412
-clz(12345678) = 3
-clzll(12345678) = 35
-clzll(1234567812345678) = 3
-clzll(78563412) = 33
fsqrt(3.141590) = 1.772453
read_16_rev = 3412
read_32_rev = efbeadde
diff --git a/test/regression/Results/builtins-common b/test/regression/Results/builtins-common
new file mode 100644
index 00000000..a40dc907
--- /dev/null
+++ b/test/regression/Results/builtins-common
@@ -0,0 +1,390 @@
+bswap(12345678) = 78563412
+bswap16(1234) = 3412
+bswap64(123456789abcdef0) = f0debc9a78563412
+clz(ffffffff) = 0
+clz(80000000) = 0
+clz(7fffffff) = 1
+clz(40000000) = 1
+clz(3fffffff) = 2
+clz(20000000) = 2
+clz(1fffffff) = 3
+clz(10000000) = 3
+clz(0fffffff) = 4
+clz(08000000) = 4
+clz(07ffffff) = 5
+clz(04000000) = 5
+clz(03ffffff) = 6
+clz(02000000) = 6
+clz(01ffffff) = 7
+clz(01000000) = 7
+clz(00ffffff) = 8
+clz(00800000) = 8
+clz(007fffff) = 9
+clz(00400000) = 9
+clz(003fffff) = 10
+clz(00200000) = 10
+clz(001fffff) = 11
+clz(00100000) = 11
+clz(000fffff) = 12
+clz(00080000) = 12
+clz(0007ffff) = 13
+clz(00040000) = 13
+clz(0003ffff) = 14
+clz(00020000) = 14
+clz(0001ffff) = 15
+clz(00010000) = 15
+clz(0000ffff) = 16
+clz(00008000) = 16
+clz(00007fff) = 17
+clz(00004000) = 17
+clz(00003fff) = 18
+clz(00002000) = 18
+clz(00001fff) = 19
+clz(00001000) = 19
+clz(00000fff) = 20
+clz(00000800) = 20
+clz(000007ff) = 21
+clz(00000400) = 21
+clz(000003ff) = 22
+clz(00000200) = 22
+clz(000001ff) = 23
+clz(00000100) = 23
+clz(000000ff) = 24
+clz(00000080) = 24
+clz(0000007f) = 25
+clz(00000040) = 25
+clz(0000003f) = 26
+clz(00000020) = 26
+clz(0000001f) = 27
+clz(00000010) = 27
+clz(0000000f) = 28
+clz(00000008) = 28
+clz(00000007) = 29
+clz(00000004) = 29
+clz(00000003) = 30
+clz(00000002) = 30
+clz(00000001) = 31
+clz(00000001) = 31
+clzll(ffffffffffffffff) = 0
+clzll(8000000000000000) = 0
+clzll(7fffffffffffffff) = 1
+clzll(4000000000000000) = 1
+clzll(3fffffffffffffff) = 2
+clzll(2000000000000000) = 2
+clzll(1fffffffffffffff) = 3
+clzll(1000000000000000) = 3
+clzll(0fffffffffffffff) = 4
+clzll(0800000000000000) = 4
+clzll(07ffffffffffffff) = 5
+clzll(0400000000000000) = 5
+clzll(03ffffffffffffff) = 6
+clzll(0200000000000000) = 6
+clzll(01ffffffffffffff) = 7
+clzll(0100000000000000) = 7
+clzll(00ffffffffffffff) = 8
+clzll(0080000000000000) = 8
+clzll(007fffffffffffff) = 9
+clzll(0040000000000000) = 9
+clzll(003fffffffffffff) = 10
+clzll(0020000000000000) = 10
+clzll(001fffffffffffff) = 11
+clzll(0010000000000000) = 11
+clzll(000fffffffffffff) = 12
+clzll(0008000000000000) = 12
+clzll(0007ffffffffffff) = 13
+clzll(0004000000000000) = 13
+clzll(0003ffffffffffff) = 14
+clzll(0002000000000000) = 14
+clzll(0001ffffffffffff) = 15
+clzll(0001000000000000) = 15
+clzll(0000ffffffffffff) = 16
+clzll(0000800000000000) = 16
+clzll(00007fffffffffff) = 17
+clzll(0000400000000000) = 17
+clzll(00003fffffffffff) = 18
+clzll(0000200000000000) = 18
+clzll(00001fffffffffff) = 19
+clzll(0000100000000000) = 19
+clzll(00000fffffffffff) = 20
+clzll(0000080000000000) = 20
+clzll(000007ffffffffff) = 21
+clzll(0000040000000000) = 21
+clzll(000003ffffffffff) = 22
+clzll(0000020000000000) = 22
+clzll(000001ffffffffff) = 23
+clzll(0000010000000000) = 23
+clzll(000000ffffffffff) = 24
+clzll(0000008000000000) = 24
+clzll(0000007fffffffff) = 25
+clzll(0000004000000000) = 25
+clzll(0000003fffffffff) = 26
+clzll(0000002000000000) = 26
+clzll(0000001fffffffff) = 27
+clzll(0000001000000000) = 27
+clzll(0000000fffffffff) = 28
+clzll(0000000800000000) = 28
+clzll(00000007ffffffff) = 29
+clzll(0000000400000000) = 29
+clzll(00000003ffffffff) = 30
+clzll(0000000200000000) = 30
+clzll(00000001ffffffff) = 31
+clzll(0000000100000000) = 31
+clzll(00000000ffffffff) = 32
+clzll(0000000080000000) = 32
+clzll(000000007fffffff) = 33
+clzll(0000000040000000) = 33
+clzll(000000003fffffff) = 34
+clzll(0000000020000000) = 34
+clzll(000000001fffffff) = 35
+clzll(0000000010000000) = 35
+clzll(000000000fffffff) = 36
+clzll(0000000008000000) = 36
+clzll(0000000007ffffff) = 37
+clzll(0000000004000000) = 37
+clzll(0000000003ffffff) = 38
+clzll(0000000002000000) = 38
+clzll(0000000001ffffff) = 39
+clzll(0000000001000000) = 39
+clzll(0000000000ffffff) = 40
+clzll(0000000000800000) = 40
+clzll(00000000007fffff) = 41
+clzll(0000000000400000) = 41
+clzll(00000000003fffff) = 42
+clzll(0000000000200000) = 42
+clzll(00000000001fffff) = 43
+clzll(0000000000100000) = 43
+clzll(00000000000fffff) = 44
+clzll(0000000000080000) = 44
+clzll(000000000007ffff) = 45
+clzll(0000000000040000) = 45
+clzll(000000000003ffff) = 46
+clzll(0000000000020000) = 46
+clzll(000000000001ffff) = 47
+clzll(0000000000010000) = 47
+clzll(000000000000ffff) = 48
+clzll(0000000000008000) = 48
+clzll(0000000000007fff) = 49
+clzll(0000000000004000) = 49
+clzll(0000000000003fff) = 50
+clzll(0000000000002000) = 50
+clzll(0000000000001fff) = 51
+clzll(0000000000001000) = 51
+clzll(0000000000000fff) = 52
+clzll(0000000000000800) = 52
+clzll(00000000000007ff) = 53
+clzll(0000000000000400) = 53
+clzll(00000000000003ff) = 54
+clzll(0000000000000200) = 54
+clzll(00000000000001ff) = 55
+clzll(0000000000000100) = 55
+clzll(00000000000000ff) = 56
+clzll(0000000000000080) = 56
+clzll(000000000000007f) = 57
+clzll(0000000000000040) = 57
+clzll(000000000000003f) = 58
+clzll(0000000000000020) = 58
+clzll(000000000000001f) = 59
+clzll(0000000000000010) = 59
+clzll(000000000000000f) = 60
+clzll(0000000000000008) = 60
+clzll(0000000000000007) = 61
+clzll(0000000000000004) = 61
+clzll(0000000000000003) = 62
+clzll(0000000000000002) = 62
+clzll(0000000000000001) = 63
+clzll(0000000000000001) = 63
+ctz(00000001) = 0
+ctz(ffffffff) = 0
+ctz(00000002) = 1
+ctz(fffffffe) = 1
+ctz(00000004) = 2
+ctz(fffffffc) = 2
+ctz(00000008) = 3
+ctz(fffffff8) = 3
+ctz(00000010) = 4
+ctz(fffffff0) = 4
+ctz(00000020) = 5
+ctz(ffffffe0) = 5
+ctz(00000040) = 6
+ctz(ffffffc0) = 6
+ctz(00000080) = 7
+ctz(ffffff80) = 7
+ctz(00000100) = 8
+ctz(ffffff00) = 8
+ctz(00000200) = 9
+ctz(fffffe00) = 9
+ctz(00000400) = 10
+ctz(fffffc00) = 10
+ctz(00000800) = 11
+ctz(fffff800) = 11
+ctz(00001000) = 12
+ctz(fffff000) = 12
+ctz(00002000) = 13
+ctz(ffffe000) = 13
+ctz(00004000) = 14
+ctz(ffffc000) = 14
+ctz(00008000) = 15
+ctz(ffff8000) = 15
+ctz(00010000) = 16
+ctz(ffff0000) = 16
+ctz(00020000) = 17
+ctz(fffe0000) = 17
+ctz(00040000) = 18
+ctz(fffc0000) = 18
+ctz(00080000) = 19
+ctz(fff80000) = 19
+ctz(00100000) = 20
+ctz(fff00000) = 20
+ctz(00200000) = 21
+ctz(ffe00000) = 21
+ctz(00400000) = 22
+ctz(ffc00000) = 22
+ctz(00800000) = 23
+ctz(ff800000) = 23
+ctz(01000000) = 24
+ctz(ff000000) = 24
+ctz(02000000) = 25
+ctz(fe000000) = 25
+ctz(04000000) = 26
+ctz(fc000000) = 26
+ctz(08000000) = 27
+ctz(f8000000) = 27
+ctz(10000000) = 28
+ctz(f0000000) = 28
+ctz(20000000) = 29
+ctz(e0000000) = 29
+ctz(40000000) = 30
+ctz(c0000000) = 30
+ctz(80000000) = 31
+ctz(80000000) = 31
+ctzll(0000000000000001) = 0
+ctzll(ffffffffffffffff) = 0
+ctzll(0000000000000002) = 1
+ctzll(fffffffffffffffe) = 1
+ctzll(0000000000000004) = 2
+ctzll(fffffffffffffffc) = 2
+ctzll(0000000000000008) = 3
+ctzll(fffffffffffffff8) = 3
+ctzll(0000000000000010) = 4
+ctzll(fffffffffffffff0) = 4
+ctzll(0000000000000020) = 5
+ctzll(ffffffffffffffe0) = 5
+ctzll(0000000000000040) = 6
+ctzll(ffffffffffffffc0) = 6
+ctzll(0000000000000080) = 7
+ctzll(ffffffffffffff80) = 7
+ctzll(0000000000000100) = 8
+ctzll(ffffffffffffff00) = 8
+ctzll(0000000000000200) = 9
+ctzll(fffffffffffffe00) = 9
+ctzll(0000000000000400) = 10
+ctzll(fffffffffffffc00) = 10
+ctzll(0000000000000800) = 11
+ctzll(fffffffffffff800) = 11
+ctzll(0000000000001000) = 12
+ctzll(fffffffffffff000) = 12
+ctzll(0000000000002000) = 13
+ctzll(ffffffffffffe000) = 13
+ctzll(0000000000004000) = 14
+ctzll(ffffffffffffc000) = 14
+ctzll(0000000000008000) = 15
+ctzll(ffffffffffff8000) = 15
+ctzll(0000000000010000) = 16
+ctzll(ffffffffffff0000) = 16
+ctzll(0000000000020000) = 17
+ctzll(fffffffffffe0000) = 17
+ctzll(0000000000040000) = 18
+ctzll(fffffffffffc0000) = 18
+ctzll(0000000000080000) = 19
+ctzll(fffffffffff80000) = 19
+ctzll(0000000000100000) = 20
+ctzll(fffffffffff00000) = 20
+ctzll(0000000000200000) = 21
+ctzll(ffffffffffe00000) = 21
+ctzll(0000000000400000) = 22
+ctzll(ffffffffffc00000) = 22
+ctzll(0000000000800000) = 23
+ctzll(ffffffffff800000) = 23
+ctzll(0000000001000000) = 24
+ctzll(ffffffffff000000) = 24
+ctzll(0000000002000000) = 25
+ctzll(fffffffffe000000) = 25
+ctzll(0000000004000000) = 26
+ctzll(fffffffffc000000) = 26
+ctzll(0000000008000000) = 27
+ctzll(fffffffff8000000) = 27
+ctzll(0000000010000000) = 28
+ctzll(fffffffff0000000) = 28
+ctzll(0000000020000000) = 29
+ctzll(ffffffffe0000000) = 29
+ctzll(0000000040000000) = 30
+ctzll(ffffffffc0000000) = 30
+ctzll(0000000080000000) = 31
+ctzll(ffffffff80000000) = 31
+ctzll(0000000100000000) = 32
+ctzll(ffffffff00000000) = 32
+ctzll(0000000200000000) = 33
+ctzll(fffffffe00000000) = 33
+ctzll(0000000400000000) = 34
+ctzll(fffffffc00000000) = 34
+ctzll(0000000800000000) = 35
+ctzll(fffffff800000000) = 35
+ctzll(0000001000000000) = 36
+ctzll(fffffff000000000) = 36
+ctzll(0000002000000000) = 37
+ctzll(ffffffe000000000) = 37
+ctzll(0000004000000000) = 38
+ctzll(ffffffc000000000) = 38
+ctzll(0000008000000000) = 39
+ctzll(ffffff8000000000) = 39
+ctzll(0000010000000000) = 40
+ctzll(ffffff0000000000) = 40
+ctzll(0000020000000000) = 41
+ctzll(fffffe0000000000) = 41
+ctzll(0000040000000000) = 42
+ctzll(fffffc0000000000) = 42
+ctzll(0000080000000000) = 43
+ctzll(fffff80000000000) = 43
+ctzll(0000100000000000) = 44
+ctzll(fffff00000000000) = 44
+ctzll(0000200000000000) = 45
+ctzll(ffffe00000000000) = 45
+ctzll(0000400000000000) = 46
+ctzll(ffffc00000000000) = 46
+ctzll(0000800000000000) = 47
+ctzll(ffff800000000000) = 47
+ctzll(0001000000000000) = 48
+ctzll(ffff000000000000) = 48
+ctzll(0002000000000000) = 49
+ctzll(fffe000000000000) = 49
+ctzll(0004000000000000) = 50
+ctzll(fffc000000000000) = 50
+ctzll(0008000000000000) = 51
+ctzll(fff8000000000000) = 51
+ctzll(0010000000000000) = 52
+ctzll(fff0000000000000) = 52
+ctzll(0020000000000000) = 53
+ctzll(ffe0000000000000) = 53
+ctzll(0040000000000000) = 54
+ctzll(ffc0000000000000) = 54
+ctzll(0080000000000000) = 55
+ctzll(ff80000000000000) = 55
+ctzll(0100000000000000) = 56
+ctzll(ff00000000000000) = 56
+ctzll(0200000000000000) = 57
+ctzll(fe00000000000000) = 57
+ctzll(0400000000000000) = 58
+ctzll(fc00000000000000) = 58
+ctzll(0800000000000000) = 59
+ctzll(f800000000000000) = 59
+ctzll(1000000000000000) = 60
+ctzll(f000000000000000) = 60
+ctzll(2000000000000000) = 61
+ctzll(e000000000000000) = 61
+ctzll(4000000000000000) = 62
+ctzll(c000000000000000) = 62
+ctzll(8000000000000000) = 63
+ctzll(8000000000000000) = 63
+fabs(3.141590) = 3.141590
+fabs(-3.141590) = 3.141590
+fsqrt(3.141590) = 1.772453
diff --git a/test/regression/Results/builtins-powerpc b/test/regression/Results/builtins-powerpc
index a3c63ad6..a37bfc63 100644
--- a/test/regression/Results/builtins-powerpc
+++ b/test/regression/Results/builtins-powerpc
@@ -1,16 +1,7 @@
mulhw(12345678, deadbeef) = fda16776
mulhwu(12345678, deadbeef) = fd5bdee
-clz(12345678) = 3
-clzll(12345678) = 35
-clzll(1234567812345678) = 3
-clzll(78563412) = 33
-bswap(12345678) = 78563412
-bswap16(1234) = 3412
fmadd(3.141590, 2.718000, 1.414000) = 9.952842
fmsub(3.141590, 2.718000, 1.414000) = 7.124842
-fabs(3.141590) = 3.141590
-fabs(-3.141590) = 3.141590
-fsqrt(3.141590) = 1.772453
frsqrte(3.141590) = OK
fres(3.141590) = OK
fsel(3.141590, 2.718000, 1.414000) = 2.718000
diff --git a/test/regression/Results/builtins-riscV b/test/regression/Results/builtins-riscV
index 1576b252..a14b7677 100644
--- a/test/regression/Results/builtins-riscV
+++ b/test/regression/Results/builtins-riscV
@@ -1,12 +1,6 @@
-bswap16(1234) = 3412
-bswap32(12345678) = 78563412
-bswap64(123456789abcdef0) = f0debc9a78563412
fmadd(3.141590, 2.718000, 1.414000) = 9.952842
fmsub(3.141590, 2.718000, 1.414000) = 7.124842
fnmadd(3.141590, 2.718000, 1.414000) = -9.952842
fnmsub(3.141590, 2.718000, 1.414000) = -7.124842
-fabs(3.141590) = 3.141590
-fabs(-3.141590) = 3.141590
-fsqrt(3.141590) = 1.772453
fmax(3.141590, 2.718000) = 3.141590
fmin(3.141590, 2.718000) = 2.718000
diff --git a/test/regression/Results/builtins-x86 b/test/regression/Results/builtins-x86
index 393ac1fd..7cd8838b 100644
--- a/test/regression/Results/builtins-x86
+++ b/test/regression/Results/builtins-x86
@@ -1,15 +1,3 @@
-bswap(12345678) = 78563412
-bswap16(1234) = 3412
-bswap64(123456789abcdef0) = f0debc9a78563412
-clz(12345678) = 3
-clzll(12345678) = 35
-clzll(1234567812345678) = 3
-clzll(78563412) = 33
-ctz(1234) = 2
-ctzll(1234567812345678) = 3
-ctzll(1234567800000000) = 35
-ctzll(78563412) = 1
-fsqrt(3.141590) = 1.772453
fmin(3.141590, 2.718000) = 2.718000
fmax(3.141590, 2.718000) = 3.141590
read_16_rev = 3412
diff --git a/test/regression/builtins-aarch64.c b/test/regression/builtins-aarch64.c
index 2cfa2d09..671f65e3 100644
--- a/test/regression/builtins-aarch64.c
+++ b/test/regression/builtins-aarch64.c
@@ -1,43 +1,25 @@
-/* Fun with builtin functions */
+/* AArch64-specific builtin functions */
#include <stdio.h>
int main(int argc, char ** argv)
{
- unsigned int x = 0x12345678;
- unsigned int y = 0xDEADBEEF;
- unsigned long long xx = 0x1234567812345678ULL;
- unsigned long long yy = 0x1234567800000000ULL;
- unsigned long long zz = 0x123456789ABCDEF0ULL;
- unsigned z;
double a = 3.14159;
double b = 2.718;
double c = 1.414;
- unsigned short s = 0x1234;
signed int u = 1234567;
signed int v = -9999;
- printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
- printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
- printf("bswap64(%llx) = %llx\n", zz, __builtin_bswap64(zz));
- printf("clz(%x) = %d\n", x, __builtin_clz(x));
- printf("clzll(%llx) = %d\n", (unsigned long long) x, __builtin_clzll(x));
- printf("clzll(%llx) = %d\n", xx, __builtin_clzll(xx));
printf("cls(%d) = %d\n", u, __builtin_cls(u));
printf("cls(%d) = %d\n", v, __builtin_cls(v));
printf("clsll(%lld) = %d\n", (signed long long) u, __builtin_clsll(u));
printf("clsll(%lld) = %d\n", (signed long long) v, __builtin_clsll(v));
- printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
printf("fmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fmadd(a, b, c));
printf("fmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fmsub(a, b, c));
printf("fnmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmadd(a, b, c));
printf("fnmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmsub(a, b, c));
- /* Make sure that ignoring the result of a builtin
- doesn't cause an internal error */
- (void) __builtin_bswap(x);
- (void) __builtin_fsqrt(a);
return 0;
}
diff --git a/test/regression/builtins-arm.c b/test/regression/builtins-arm.c
index d06e8e5e..85b611e8 100644
--- a/test/regression/builtins-arm.c
+++ b/test/regression/builtins-arm.c
@@ -1,10 +1,9 @@
-/* Fun with builtins */
+/* ARM-specific builtins */
#include <stdio.h>
unsigned int x = 0x12345678;
unsigned int y = 0xDEADBEEF;
-unsigned long long xx = 0x1234567812345678ULL;
double a = 3.14159;
unsigned short s = 0x1234;
@@ -12,13 +11,6 @@ int main(int argc, char ** argv)
{
unsigned z;
- printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
- printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
- printf("clz(%x) = %d\n", x, __builtin_clz(x));
- printf("clzll(%llx) = %d\n", (unsigned long long) x, __builtin_clzll(x));
- printf("clzll(%llx) = %d\n", xx, __builtin_clzll(xx));
- z = __builtin_bswap(x);
- printf("clzll(%lx) = %d\n", z, __builtin_clzll(z));
printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
printf ("read_16_rev = %x\n", __builtin_read16_reversed(&s));
diff --git a/test/regression/builtins-common.c b/test/regression/builtins-common.c
new file mode 100644
index 00000000..7d975f0a
--- /dev/null
+++ b/test/regression/builtins-common.c
@@ -0,0 +1,52 @@
+/* Builtin functions that are implemented on all target processors */
+
+#include <stdio.h>
+
+unsigned int x = 0x12345678;
+unsigned int y = 0xDEADBEEF;
+unsigned long long xx = 0x123456789ABCDEF0ULL;
+double a = 3.14159;
+double b = 2.718;
+double c = 1.414;
+unsigned short s = 0x1234;
+
+int main(int argc, char ** argv)
+{
+ printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
+ printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
+ printf("bswap64(%llx) = %llx\n", xx, __builtin_bswap64(xx));
+ for (int i = 0; i < 32; i++) {
+ unsigned z = 0xFFFFFFFFU >> i;
+ printf("clz(%08x) = %d\n", z, __builtin_clz(z));
+ z = 0x80000000U >> i;
+ printf("clz(%08x) = %d\n", z, __builtin_clz(z));
+ }
+ for (int i = 0; i < 64; i++) {
+ unsigned long long z = 0xFFFFFFFFFFFFFFFFULL >> i;
+ printf("clzll(%016llx) = %d\n", z, __builtin_clzll(z));
+ z = 0x8000000000000000ULL >> i;
+ printf("clzll(%016llx) = %d\n", z, __builtin_clzll(z));
+ }
+ for (int i = 0; i < 32; i++) {
+ unsigned z = 1U << i;
+ printf("ctz(%08x) = %d\n", z, __builtin_ctz(z));
+ z = 0xFFFFFFFFU << i;
+ printf("ctz(%08x) = %d\n", z, __builtin_ctz(z));
+ }
+ for (int i = 0; i < 64; i++) {
+ unsigned long long z = 1ULL << i;
+ printf("ctzll(%016llx) = %d\n", z, __builtin_ctzll(z));
+ z = 0xFFFFFFFFFFFFFFFFULL << i;
+ printf("ctzll(%016llx) = %d\n", z, __builtin_ctzll(z));
+ }
+ printf("fabs(%f) = %f\n", a, __builtin_fabs(a));
+ printf("fabs(%f) = %f\n", -a, __builtin_fabs(-a));
+ printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
+
+ /* Make sure that ignoring the result of a builtin
+ doesn't cause an internal error */
+ (void) __builtin_bswap(x);
+ (void) __builtin_fsqrt(a);
+ (void) __builtin_sel(a > 0.0, x, y);
+ return 0;
+}
diff --git a/test/regression/builtins-powerpc.c b/test/regression/builtins-powerpc.c
index 8fd5818b..55809106 100644
--- a/test/regression/builtins-powerpc.c
+++ b/test/regression/builtins-powerpc.c
@@ -1,4 +1,4 @@
-/* Fun with builtins */
+/* PowerPC-specific builtins */
#include <stdio.h>
#include <math.h>
@@ -11,7 +11,6 @@ char * check_relative_error(double exact, double actual, double precision)
unsigned int x = 0x12345678;
unsigned int y = 0xDEADBEEF;
-unsigned long long xx = 0x1234567812345678ULL;
double a = 3.14159;
double b = 2.718;
double c = 1.414;
@@ -23,19 +22,9 @@ int main(int argc, char ** argv)
printf("mulhw(%x, %x) = %x\n", x, y, __builtin_mulhw(x, y));
printf("mulhwu(%x, %x) = %x\n", x, y, __builtin_mulhwu(x, y));
- printf("clz(%x) = %d\n", x, __builtin_clz(x));
- printf("clzll(%llx) = %d\n", (unsigned long long) x, __builtin_clzll(x));
- printf("clzll(%llx) = %d\n", xx, __builtin_clzll(xx));
- z = __builtin_bswap(x);
- printf("clzll(%lx) = %d\n", z, __builtin_clzll(z));
- printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
- printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
printf("fmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fmadd(a, b, c));
printf("fmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fmsub(a, b, c));
- printf("fabs(%f) = %f\n", a, __builtin_fabs(a));
- printf("fabs(%f) = %f\n", -a, __builtin_fabs(-a));
- printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
printf("frsqrte(%f) = %s\n",
a, check_relative_error(1.0 / sqrt(a), __builtin_frsqrte(a), 1./32.));
printf("fres(%f) = %s\n",
diff --git a/test/regression/builtins-riscV.c b/test/regression/builtins-riscV.c
index c34fdf2c..acd98e49 100644
--- a/test/regression/builtins-riscV.c
+++ b/test/regression/builtins-riscV.c
@@ -1,4 +1,4 @@
-/* Fun with builtins */
+/* RISC-V specific builtin functions */
#include <stdio.h>
@@ -11,20 +11,11 @@ double c = 1.414;
int main(int argc, char ** argv)
{
- printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
- printf("bswap32(%x) = %x\n", x, __builtin_bswap32(x));
- printf("bswap64(%llx) = %llx\n", zz, __builtin_bswap64(zz));
printf("fmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fmadd(a, b, c));
printf("fmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fmsub(a, b, c));
printf("fnmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmadd(a, b, c));
printf("fnmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmsub(a, b, c));
- printf("fabs(%f) = %f\n", a, __builtin_fabs(a));
- printf("fabs(%f) = %f\n", -a, __builtin_fabs(-a));
- printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
printf("fmax(%f, %f) = %f\n", a, b, __builtin_fmax(a, b));
printf("fmin(%f, %f) = %f\n", a, b, __builtin_fmin(a, b));
- /* Make sure that ignoring the result of a builtin
- doesn't cause an internal error */
- (void) __builtin_fsqrt(a);
return 0;
}
diff --git a/test/regression/builtins-x86.c b/test/regression/builtins-x86.c
index 6233f9fd..05d3ab93 100644
--- a/test/regression/builtins-x86.c
+++ b/test/regression/builtins-x86.c
@@ -4,9 +4,6 @@
unsigned int x = 0x12345678;
unsigned int y = 0xDEADBEEF;
-unsigned long long xx = 0x1234567812345678ULL;
-unsigned long long yy = 0x1234567800000000ULL;
-unsigned long long zz = 0x123456789ABCDEF0ULL;
double a = 3.14159;
double b = 2.718;
double c = 1.414;
@@ -14,22 +11,6 @@ unsigned short s = 0x1234;
int main(int argc, char ** argv)
{
- unsigned z;
-
- printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
- printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
- printf("bswap64(%llx) = %llx\n", zz, __builtin_bswap64(zz));
- printf("clz(%x) = %d\n", x, __builtin_clz(x));
- printf("clzll(%llx) = %d\n", (unsigned long long) x, __builtin_clzll(x));
- printf("clzll(%llx) = %d\n", xx, __builtin_clzll(xx));
- z = __builtin_bswap(x);
- printf("clzll(%lx) = %d\n", z, __builtin_clzll(z));
- printf("ctz(%x) = %d\n", s, __builtin_ctz(s));
- printf("ctzll(%llx) = %d\n", xx, __builtin_ctzll(xx));
- printf("ctzll(%llx) = %d\n", yy, __builtin_ctzll(yy));
- printf("ctzll(%lx) = %d\n", z, __builtin_ctzll(z));
-
- printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
printf("fmin(%f, %f) = %f\n", a, b, __builtin_fmin(a, b));
printf("fmax(%f, %f) = %f\n", a, b, __builtin_fmax(a, b));