aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/bfin
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.target/bfin
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/bfin')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/20090411-1.c29
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-1.c39
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-2.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-3.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/arith.c48
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/bfin.exp87
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp39
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/circptr.c29
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c46
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c21
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/frmul.c149
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/l2.c38
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-1.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-2.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/loop-autoinc.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf522.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf523.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf524.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf525.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf526.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf527.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf531.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf532.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf533.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf534.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf536.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf537.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf538.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf539.c33
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542m.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544m.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547m.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548m.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c37
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549m.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf561.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf592.c31
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-default.c93
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/mul-combine.c45
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/saveall.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/shift.c73
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-1.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-2.c12
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-1.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-2.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-3.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-4.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-any.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-none.c27
212 files changed, 4958 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090411-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090411-1.c
new file mode 100644
index 000000000..e301518a5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090411-1.c
@@ -0,0 +1,29 @@
+/* { dg-do compile { target bfin-*-* } } */
+/* { dg-options "-O2" } */
+
+typedef short __v2hi __attribute__ ((vector_size (4)));
+typedef __v2hi raw2x16;
+typedef raw2x16 fract2x16;
+typedef short fract16;
+typedef struct complex_fract16
+{
+ fract16 re;
+ fract16 im;
+} __attribute__ ((aligned (4))) complex_fract16;
+
+
+__inline__ __attribute__ ((always_inline))
+ static complex_fract16 csqu_fr16 (complex_fract16 _a)
+{
+ complex_fract16 _x;
+ fract2x16 i =
+ __builtin_bfin_csqu_fr16 (__builtin_bfin_compose_2x16 ((_a).im, (_a).re));
+ (_x).re = __builtin_bfin_extract_lo (i);
+ (_x).im = __builtin_bfin_extract_hi (i);
+ return _x;
+}
+
+complex_fract16 f (complex_fract16 _a)
+{
+ return csqu_fr16 (_a);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-1.c
new file mode 100644
index 000000000..104454057
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-1.c
@@ -0,0 +1,39 @@
+/* { dg-do compile { target bfin-*-* } } */
+
+typedef short __v2hi __attribute__ ((vector_size (4)));
+typedef __v2hi raw2x16;
+typedef raw2x16 fract2x16;
+
+typedef short fract16;
+typedef struct complex_fract16
+{
+ fract16 re;
+ fract16 im;
+} __attribute__ ((aligned (4))) complex_fract16;
+
+typedef union composite_complex_fract16
+{
+ struct complex_fract16 x;
+ long raw;
+} composite_complex_fract16;
+
+__inline__ __attribute__ ((always_inline))
+static complex_fract16 cmsu_fr16 (complex_fract16 _sum,
+ complex_fract16 _a, complex_fract16 _b)
+{
+ complex_fract16 r;
+ fract2x16 i =
+ __builtin_bfin_cmplx_msu (__builtin_bfin_compose_2x16
+ ((_sum).im, (_sum).re),
+ __builtin_bfin_compose_2x16 ((_a).im, (_a).re),
+ __builtin_bfin_compose_2x16 ((_b).im, (_b).re));
+ (r).re = __builtin_bfin_extract_lo (i);
+ (r).im = __builtin_bfin_extract_hi (i);
+ return r;
+}
+
+composite_complex_fract16
+f (complex_fract16 _sum, complex_fract16 _a, complex_fract16 _b)
+{
+ return (composite_complex_fract16) cmsu_fr16 (_sum, _a, _b);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-2.c
new file mode 100644
index 000000000..55255d7a8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-2.c
@@ -0,0 +1,31 @@
+/* { dg-do compile { target bfin-*-* } } */
+
+typedef short fract16;
+typedef short __v2hi __attribute__ ((vector_size (4)));
+typedef __v2hi raw2x16;
+typedef raw2x16 fract2x16;
+typedef struct complex_fract16 {
+ fract16 re;
+ fract16 im;
+} __attribute__((aligned(4))) complex_fract16;
+
+
+__inline__
+__attribute__ ((always_inline))
+static complex_fract16 cmlt_fr16 (complex_fract16 _a,
+ complex_fract16 _b)
+{
+ complex_fract16 r;
+ fract2x16 i;
+
+ i = __builtin_bfin_cmplx_mul(__builtin_bfin_compose_2x16((_a).im, (_a).re),
+ __builtin_bfin_compose_2x16((_b).im, (_b).re));
+ (r).re = __builtin_bfin_extract_lo(i);
+ (r).im = __builtin_bfin_extract_hi(i);
+ return r;
+}
+
+
+complex_fract16 f(complex_fract16 a, complex_fract16 b) {
+ return cmlt_fr16(a, b);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-3.c
new file mode 100644
index 000000000..fb0a9e16c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/20090914-3.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target bfin-*-* } } */
+typedef long fract32;
+main() {
+ fract32 val_tmp;
+ fract32 val1 = 0x7FFFFFFF;
+ fract32 val2 = 0x40000000;
+ val_tmp = __builtin_bfin_mult_fr1x32x32 (0x06666667, val1);
+ val2 = __builtin_bfin_mult_fr1x32x32 (0x79999999, val2);
+ val2 = __builtin_bfin_add_fr1x32 (val_tmp, val2);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/arith.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/arith.c
new file mode 100644
index 000000000..35029ed32
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/arith.c
@@ -0,0 +1,48 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, d;
+ fract16 t1, t2;
+ a = __builtin_bfin_compose_2x16 (0x3000, 0x2000);
+ b = __builtin_bfin_compose_2x16 (0x7000, 0x5000);
+ c = __builtin_bfin_compose_2x16 (0x7000, 0xc000);
+
+ d = __builtin_bfin_add_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x7000 || t2 != 0x7fff)
+ abort ();
+
+ d = __builtin_bfin_sub_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != -0x3000 || t2 != -0x4000)
+ abort ();
+
+ d = __builtin_bfin_negate_fr2x16 (c);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x4000 || t2 != -0x7000)
+ abort ();
+
+ if (__builtin_bfin_add_fr1x32 (0x7fffffff, 1) != 0x7fffffff)
+ abort ();
+
+ if (__builtin_bfin_add_fr1x32 (0x80000000, -1) != 0x80000000)
+ abort ();
+
+ if (__builtin_bfin_add_fr1x32 (0x80000001, -1) != 0x80000000)
+ abort ();
+
+ if (__builtin_bfin_add_fr1x32 (0xFEDCBA98, 0x11111111) != 0x0FEDCBA9)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/bfin.exp b/gcc-4.9/gcc/testsuite/gcc.target/bfin/bfin.exp
new file mode 100644
index 000000000..a1b6707e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/bfin.exp
@@ -0,0 +1,87 @@
+# Copyright (C) 2007-2014 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 BFIN target.
+if ![istarget bfin-*-*] then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Like dg-options, but treats certain Blackfin-specific options specially:
+#
+# -mcpu=*
+# Select the target cpu. Skip the test if the multilib flags force
+# a different cpu.
+proc dg-bfin-options {args} {
+ upvar dg-extra-tool-flags extra_tool_flags
+ upvar dg-do-what do_what
+
+ set multilib_cpu ""
+ set cpu ""
+
+ foreach flag [target_info multilib_flags] {
+ regexp "^-mcpu=(.*)" $flag dummy multilib_cpu
+ }
+
+ set flags [lindex $args 1]
+
+ foreach flag $flags {
+ regexp "^-mcpu=(.*)" $flag dummy cpu
+ }
+
+ if {$multilib_cpu == "" || $multilib_cpu == $cpu} {
+ set extra_tool_flags $flags
+ } else {
+ set do_what [list [lindex $do_what 0] "N" "P"]
+ }
+}
+
+# dg-bfin-processors can be used to specify the processors which can
+# run the test case.
+proc dg-bfin-processors {args} {
+ upvar dg-extra-tool-flags extra_tool_flags
+ upvar dg-do-what do_what
+
+ set multilib_cpu ""
+ set cpu ""
+
+ foreach flag [target_info multilib_flags] {
+ regexp "^-mcpu=([^-]*)" $flag dummy multilib_cpu
+ }
+
+ set cpus [lindex $args 1]
+
+ foreach cpu $cpus {
+ if {$multilib_cpu == $cpu} {
+ return
+ }
+ }
+
+ set do_what [list [lindex $do_what 0] "N" "P"]
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] "" ""
+
+# All done.
+dg-finish
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c
new file mode 100644
index 000000000..9ca524d29
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_abs_fr1x16 (0x7777);
+ if (t1 != 0x7777)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c
new file mode 100644
index 000000000..00ef1dc16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_abs_fr1x16 (0x8000);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c
new file mode 100644
index 000000000..a464c02d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_abs_fr1x32 (0x77777777);
+ if (t != 0x77777777)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c
new file mode 100644
index 000000000..9d642b123
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_abs_fr1x32 (0x80000000);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c
new file mode 100644
index 000000000..86badedce
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+
+ t = __builtin_bfin_abs_fr2x16 (a);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x5fff || t2 != 0x1)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c
new file mode 100644
index 000000000..80844bdaf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/abs_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_abs_fr2x16 (a);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x1001 || t2 != 0x0001)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c
new file mode 100644
index 000000000..bd8f46d83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-1.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_add_fr1x16 (0x3000, 0x2000);
+ if (t1 != 0x5000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c
new file mode 100644
index 000000000..1054e95aa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x16-2.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_add_fr1x16 (0x3000, 0xd000);
+ if (t1 != 0x0)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c
new file mode 100644
index 000000000..a14ad688d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_add_fr1x32 (0x40003000, 0x50002000);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c
new file mode 100644
index 000000000..2345cb09e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_add_fr1x32 (0x40003000, 0xc000d000);
+ if (t != 0x00010000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c
new file mode 100644
index 000000000..69736978b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+ b = __builtin_bfin_compose_2x16 (0x8000, 0x5000);
+
+ t = __builtin_bfin_add_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffc000 || t2 != 0x7000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c
new file mode 100644
index 000000000..f7a309b8c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x7000, 0xc000);
+ b = __builtin_bfin_compose_2x16 (0x8000, 0xc000);
+
+ t = __builtin_bfin_add_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffff000 || t2 != 0xffff8000)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp
new file mode 100644
index 000000000..6ab9929e4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp
@@ -0,0 +1,39 @@
+# Copyright (C) 2009-2014 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 `c-torture.exp' driver, looping over
+# optimization options.
+
+load_lib c-torture.exp
+load_lib target-supports.exp
+load_lib torture-options.exp
+
+if { ![istarget bfin-*-*] } then {
+ return
+}
+
+
+torture-init
+set-torture-options [list {} -Os -O0 -O1 -O2 -O3 {-ffast-math -mfast-fp -O2} {-mfast-fp -O2} {-ffast-math -O2}]
+set additional_flags "-W -Wall"
+
+foreach src [lsort [find $srcdir/$subdir *.c]] {
+ if {[runtest_file_p $runtests $src]} {
+ c-torture-execute [list $src] $additional_flags
+ }
+}
+
+torture-finish
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/circptr.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/circptr.c
new file mode 100644
index 000000000..8419aa680
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/circptr.c
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+
+int t[] = { 1, 2, 3, 4, 5, 6, 7 };
+int expect[] = { 1, 3, 6, 10, 15, 21, 28, 29, 31, 34, 38, 43, 49, 56 };
+
+int foo (int n)
+{
+ int *p = t;
+ int sum = 0;
+ int i;
+ for (i = 0; i < n; i++) {
+ sum += *p;
+ p = __builtin_bfin_circptr (p, sizeof *p, t, sizeof t);
+ }
+ return sum;
+}
+
+int main ()
+{
+ int i;
+ int *p = expect;
+ for (i = 0; i < 14; i++) {
+ int sum = foo (i + 1);
+ if (sum != *p)
+ abort ();
+ p = __builtin_bfin_circptr (p, sizeof *p, expect, sizeof expect);
+ }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c
new file mode 100644
index 000000000..17344bf06
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ b = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ c = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+
+ t = __builtin_bfin_cmplx_mac (a, b, c);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x2800 || t2 != 0x0a00)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c
new file mode 100644
index 000000000..994711651
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ b = __builtin_bfin_compose_2x16 (0xb000, 0xe000);
+ c = __builtin_bfin_compose_2x16 (0xa000, 0x8000);
+
+ t = __builtin_bfin_cmplx_mac (a, b, c);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != 0xfffff400)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c
new file mode 100644
index 000000000..10fcd4ca4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x0000, 0x0000);
+ b = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ c = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+
+ t = __builtin_bfin_cmplx_msu (a, b, c);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffff800 || t2 != 0x600)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c
new file mode 100644
index 000000000..b2a7c5db3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_msu_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ b = __builtin_bfin_compose_2x16 (0xb000, 0xe000);
+ c = __builtin_bfin_compose_2x16 (0xa000, 0x8000);
+
+ t = __builtin_bfin_cmplx_msu (a, b, c);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffb800 || t2 != 0x2c00)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c
new file mode 100644
index 000000000..c6b12257e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+ b = __builtin_bfin_compose_2x16 (0x2000, 0x1000);
+
+ t = __builtin_bfin_cmplx_mul (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x800 || t2 != 0xfffffa00)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c
new file mode 100644
index 000000000..d31fc1567
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mul_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xa000, 0x8000);
+ b = __builtin_bfin_compose_2x16 (0xb000, 0xe000);
+
+ t = __builtin_bfin_cmplx_mul (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x6800 || t2 != 0xffffe400)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c
new file mode 100644
index 000000000..1d1c0f701
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+
+ t = __builtin_bfin_diff_hl_fr2x16 (a);
+ if (t != 0x6000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c
new file mode 100644
index 000000000..329ff2eb8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_hl_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_diff_hl_fr2x16 (a);
+ if (t != 0x1000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c
new file mode 100644
index 000000000..02d93e758
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+
+ t = __builtin_bfin_diff_lh_fr2x16 (a);
+ if (t != 0xffffa000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c
new file mode 100644
index 000000000..1e5dc699f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/diff_lh_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_diff_lh_fr2x16 (a);
+ if (t != -0x1000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c
new file mode 100644
index 000000000..cb66ecfb3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x3000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_dspaddsubsat (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != 0x1000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c
new file mode 100644
index 000000000..8d6cab691
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspaddsubsat_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xd000, 0x8000);
+ b = __builtin_bfin_compose_2x16 (0x1000, 0x5000);
+
+ t = __builtin_bfin_dspaddsubsat (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffe000 || t2 != 0xffff8000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c
new file mode 100644
index 000000000..0a16a4894
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x3000);
+ b = __builtin_bfin_compose_2x16 (0x6000, 0x6000);
+
+ t = __builtin_bfin_dspsubaddsat (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != -0x1000 || t2 != 0x7fff)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c
new file mode 100644
index 000000000..a69451eba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/dspsubaddsat_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xd000, 0xa000);
+ b = __builtin_bfin_compose_2x16 (0x1000, 0xc000);
+
+ t = __builtin_bfin_dspsubaddsat (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffc000 || t2 != 0xffff8000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c
new file mode 100644
index 000000000..4efbfd449
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/hisilh.c
@@ -0,0 +1,46 @@
+/* { dg-do run { target bfin*-*-* } } */
+/* { dg-options "-O2" } */
+#include <stdlib.h>
+typedef short raw2x16 __attribute__ ((vector_size(4)));
+
+int x;
+
+int ll(raw2x16 a, raw2x16 b)
+{
+ x = __builtin_bfin_mulhisill(a, b);
+ return x;
+}
+
+int lh(raw2x16 a, raw2x16 b)
+{
+ x = __builtin_bfin_mulhisilh(a, b);
+ return x;
+}
+
+int hl(raw2x16 a, raw2x16 b)
+{
+ x = __builtin_bfin_mulhisihl(a, b);
+ return x;
+}
+
+int hh(raw2x16 a, raw2x16 b)
+{
+ x = __builtin_bfin_mulhisihh(a, b);
+ return x;
+}
+
+int main ()
+{
+ raw2x16 a = __builtin_bfin_compose_2x16 (0x1234, 0x5678);
+ raw2x16 b = __builtin_bfin_compose_2x16 (0xFEDC, 0xBA98);
+ if (ll (a, b) != 0xe88e8740)
+ abort ();
+ if (lh (a, b) != 0xff9d5f20)
+ abort ();
+ if (hl (a, b) != 0xfb1096e0)
+ abort ();
+ if (hh (a, b) != 0xffeb3cb0)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c
new file mode 100644
index 000000000..c27d56a96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_lshl_fr1x16 (0x1101, 4);
+ if (t1 != 0x1010)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c
new file mode 100644
index 000000000..9be2abf88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_lshl_fr1x16 (0x4004, -4);
+ if (t1 != 0x0400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c
new file mode 100644
index 000000000..b9cf84f18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_lshl_fr2x16 (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffff0 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c
new file mode 100644
index 000000000..c2f13d57e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/lshl_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_lshl_fr2x16 (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x0cff || t2 != 0x0fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c
new file mode 100644
index 000000000..1d364b28a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_max_fr1x16 (0x7777, 0x7000);
+ if (t1 != 0x7777)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c
new file mode 100644
index 000000000..eadf2fb05
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_max_fr1x16 (0x8000, 0xc000);
+ if (t1 != -0x4000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c
new file mode 100644
index 000000000..90adcef06
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_max_fr1x32 (0x77777777, 0x70007000);
+ if (t != 0x77777777)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c
new file mode 100644
index 000000000..b2ed2afa8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_max_fr1x32 (0x80000000, 0xc0000000);
+ if (t != 0xc0000000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c
new file mode 100644
index 000000000..2d968fd33
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+ b = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_max_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x5fff || t2 != 0x0001)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c
new file mode 100644
index 000000000..369c20851
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/max_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0xd000);
+ b = __builtin_bfin_compose_2x16 (0xc000, 0x2000);
+
+ t = __builtin_bfin_max_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x5000 || t2 != 0x2000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c
new file mode 100644
index 000000000..686dcdcef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_min_fr1x16 (0x7777, 0x7000);
+ if (t1 != 0x7000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c
new file mode 100644
index 000000000..655804034
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_min_fr1x16 (0x7000, 0xc001);
+ if (t1 != -0x3fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c
new file mode 100644
index 000000000..a824e76ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_min_fr1x32 (0x77777777, 0x70007000);
+ if (t != 0x70007000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c
new file mode 100644
index 000000000..72151016e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_min_fr1x32 (0x70007000, 0xc000c000);
+ if (t != 0xc000c000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c
new file mode 100644
index 000000000..2f2b401e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+ b = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_min_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x1001 || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c
new file mode 100644
index 000000000..af564f431
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/min_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0xd000);
+ b = __builtin_bfin_compose_2x16 (0xc000, 0x2000);
+
+ t = __builtin_bfin_min_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffc000 || t2 != 0xffffd000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c
new file mode 100644
index 000000000..06790c94a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_mulhisihh (a, b);
+ if (t != 0x14000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c
new file mode 100644
index 000000000..ef070584e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihh_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0xc000, 0xa000);
+ b = __builtin_bfin_compose_2x16 (0x7000, 0x2000);
+
+ t = __builtin_bfin_mulhisihh (a, b);
+ if (t != 0xe4000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c
new file mode 100644
index 000000000..e2768e399
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_mulhisihl (a, b);
+ if (t != 0xa000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c
new file mode 100644
index 000000000..b64eabe6b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisihl_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0xa000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0xe000, 0x5000);
+
+ t = __builtin_bfin_mulhisihl (a, b);
+ if (t != 0xe2000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c
new file mode 100644
index 000000000..99faef51a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_mulhisilh (a, b);
+ if (t != 0x1c000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c
new file mode 100644
index 000000000..3aef80cf8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisilh_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0xa000, 0x5000);
+
+ t = __builtin_bfin_mulhisilh (a, b);
+ if (t != 0xd6000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c
new file mode 100644
index 000000000..acf1e9e1b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0x7000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_mulhisill (a, b);
+ if (t != 0xe000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c
new file mode 100644
index 000000000..147d8e14b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mulhisill_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b;
+ int t;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0xa000);
+ b = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+
+ t = __builtin_bfin_mulhisill (a, b);
+ if (t != 0xf4000000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c
new file mode 100644
index 000000000..614b44441
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_mult_fr1x16 (0x7777, 0x0007);
+ if (t1 != 0x0006)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c
new file mode 100644
index 000000000..aec3b7ccf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_mult_fr1x16 (0x0002, 0x0001);
+ if (t1 != 0x0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c
new file mode 100644
index 000000000..8c8ad87bd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32 (0x7777, 0x0001);
+ if (t != 0x0000eeee)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c
new file mode 100644
index 000000000..95d4f9d12
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32 (0x0002, 0x0001);
+ if (t != 0x0004)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c
new file mode 100644
index 000000000..ff41bf5cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32x32 (0x80000000, 0x80000000);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c
new file mode 100644
index 000000000..6f5d5cbdb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32x32 (0x7fff0000, 0x00000007);
+ if (t != 0x6)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c
new file mode 100644
index 000000000..9bdfae632
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32x32NS (0x80000000, 0x80000000);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c
new file mode 100644
index 000000000..cb3f18c50
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr1x32x32NS-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_mult_fr1x32x32NS (0x7fff0000, 0x00000007);
+ if (t != 0x6)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c
new file mode 100644
index 000000000..d15dd4516
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+ b = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_mult_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x0c00 || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c
new file mode 100644
index 000000000..6592eaf86
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/mult_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0xd000);
+ b = __builtin_bfin_compose_2x16 (0xc000, 0x2000);
+
+ t = __builtin_bfin_mult_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffd800 || t2 != 0xfffff400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c
new file mode 100644
index 000000000..3612d9320
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_multr_fr1x16 (0x7777, 0x0007);
+ if (t1 != 0x0007)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c
new file mode 100644
index 000000000..e5fb2173e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_multr_fr1x16 (0x0002, 0x0001);
+ if (t1 != 0x0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c
new file mode 100644
index 000000000..33d5b4a42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+ b = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_multr_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xc01 || t2 != 0x0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c
new file mode 100644
index 000000000..a2feed2f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/multr_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5000, 0xd000);
+ b = __builtin_bfin_compose_2x16 (0xc000, 0x2000);
+
+ t = __builtin_bfin_multr_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffffd800 || t2 != 0xfffff400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c
new file mode 100644
index 000000000..10b2626c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_negate_fr1x16 (0x7fff);
+ if (t1 != -0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c
new file mode 100644
index 000000000..c839dce32
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_negate_fr1x16 (0x8000);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c
new file mode 100644
index 000000000..0462de20a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x16-3.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_negate_fr1x16 (0xc000);
+ if (t1 != 0x4000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c
new file mode 100644
index 000000000..c7ba22c71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_negate_fr1x32 (0x7fffffff);
+ if (t != -0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c
new file mode 100644
index 000000000..70532f4ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_negate_fr1x32 (0x80000000);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c
new file mode 100644
index 000000000..449d8b8ac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+
+ t = __builtin_bfin_negate_fr2x16 (a);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != -0x5fff || t2 != 0x1)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c
new file mode 100644
index 000000000..db750648c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/negate_fr2x16-2.c
@@ -0,0 +1,21 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+ t = __builtin_bfin_negate_fr2x16 (a);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != -0x1001 || t2 != -0x1)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c
new file mode 100644
index 000000000..b8a53dd0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-1.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (0x1234);
+ if (a != 2)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c
new file mode 100644
index 000000000..2534e9ff9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-2.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 f = 0x1234, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (f);
+ g = f << a;
+ if (g != (fract16) 0x48d0)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c
new file mode 100644
index 000000000..24b6fcbee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-3.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (0xfedc);
+ if (a != 6)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c
new file mode 100644
index 000000000..986af6c55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-4.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 f = 0xfedc, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (f);
+ g = f << a;
+ if (g != (fract16) 0xb700)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c
new file mode 100644
index 000000000..f85ce96ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-5.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (0);
+ if (a != 15)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c
new file mode 100644
index 000000000..bc30f23da
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-6.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 f = 0, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (f);
+ g = f << a;
+ if (g != (fract16) 0)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c
new file mode 100644
index 000000000..4edb00f34
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-7.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (0xffff);
+ if (a != 15)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c
new file mode 100644
index 000000000..c04219f4d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm16-8.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 f = 0xffff, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x16 (f);
+ g = f << a;
+ if (g != (fract16) 0x8000)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c
new file mode 100644
index 000000000..f8c6b93ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-1.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0x12345678);
+ if (a != 2)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c
new file mode 100644
index 000000000..ba4ad920c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-10.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0x1234, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0x48d00000)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c
new file mode 100644
index 000000000..ae675b0d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-11.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0xfffffedc);
+ if (a != 22)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c
new file mode 100644
index 000000000..b7fbea7ac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-12.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0xfffffedc, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0xb7000000)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c
new file mode 100644
index 000000000..4972ed43d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-2.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0x12345678, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0x48d159e0)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c
new file mode 100644
index 000000000..cc565b729
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-3.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0xfedcba98);
+ if (a != 6)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c
new file mode 100644
index 000000000..1b3ae8dde
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-4.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0xfedcba98, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0xb72ea600)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c
new file mode 100644
index 000000000..33c927917
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-5.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0);
+ if (a != 31)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c
new file mode 100644
index 000000000..2150c5a98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-6.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c
new file mode 100644
index 000000000..87f4579f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-7.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0xffffffff);
+ if (a != 31)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c
new file mode 100644
index 000000000..4918a06a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-8.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef int fract32;
+
+int main ()
+{
+ fract32 f = 0xffffffff, g;
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (f);
+ g = f << a;
+ if (g != 0x80000000)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c
new file mode 100644
index 000000000..08468ac3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm32-9.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+extern void exit (int);
+
+int main ()
+{
+ int a;
+
+ a = __builtin_bfin_norm_fr1x32 (0x1234);
+ if (a != 18)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c
new file mode 100644
index 000000000..ad80cd4c1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ int m;
+
+ m = __builtin_bfin_norm_fr1x16 (0x1000);
+ if (m != 2)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c
new file mode 100644
index 000000000..59e868daa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ int m;
+
+ m = __builtin_bfin_norm_fr1x16 (0x4000);
+ if (m != 0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c
new file mode 100644
index 000000000..c769240b0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x16-3.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ int m;
+
+ m = __builtin_bfin_norm_fr1x16 (0xe000);
+ if (m != 2)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c
new file mode 100644
index 000000000..fe476f58f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-1.c
@@ -0,0 +1,13 @@
+extern void abort (void);
+
+int main ()
+{
+ int m;
+
+ m = __builtin_bfin_norm_fr1x32 (0xefffeff1);
+ if (m != 2)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c
new file mode 100644
index 000000000..7cf1ebeca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/norm_fr1x32-2.c
@@ -0,0 +1,13 @@
+extern void abort (void);
+
+int main ()
+{
+ int m;
+
+ m = __builtin_bfin_norm_fr1x32 (0x0000eff1);
+ if (m != 15)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c
new file mode 100644
index 000000000..f234bc9bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shl_fr1x16 (0x1101, 4);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c
new file mode 100644
index 000000000..95e3bfb0c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shl_fr1x16 (0x4004, -4);
+ if (t1 != 0x0400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c
new file mode 100644
index 000000000..1c77a7c01
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-3.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shl_fr1x16 (0xc101, 4);
+ if (t1 != 0xffff8000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c
new file mode 100644
index 000000000..7cb9e8c68
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-4.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shl_fr1x16 (0xd004, -4);
+ if (t1 != 0xfffffd00)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c
new file mode 100644
index 000000000..251ff1e18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-5.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x1101, 4);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c
new file mode 100644
index 000000000..8d50f2091
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-6.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x4004, -4);
+ if (t1 != 0x0400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c
new file mode 100644
index 000000000..f78303a18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-7.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0xc101, 4);
+ if (t1 != 0xffff8000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c
new file mode 100644
index 000000000..cea723f33
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x16-8.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0xd004, -4);
+ if (t1 != 0xfffffd00)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c
new file mode 100644
index 000000000..c85adfe56
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shl_fr1x32 (0x7feff4ff, 4);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c
new file mode 100644
index 000000000..0a42ddc76
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shl_fr1x32 (0x7feff4ff, -4);
+ if (t != 0x7feff4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c
new file mode 100644
index 000000000..a98bc0c98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-3.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shl_fr1x32 (0xc000e4ff, 4);
+ if (t != 0x80000000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c
new file mode 100644
index 000000000..f2d18b370
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-4.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shl_fr1x32 (0xc000e4ff, -4);
+ if (t != 0xfc000e4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c
new file mode 100644
index 000000000..2883c1875
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-5.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shl_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0x7feff4ff, 4);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c
new file mode 100644
index 000000000..94a4cde1d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-6.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shl_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0x7feff4ff, -4);
+ if (t != 0x7feff4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c
new file mode 100644
index 000000000..f32423500
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-7.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shl_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0xc000e4ff, 4);
+ if (t != 0x80000000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c
new file mode 100644
index 000000000..930065085
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-8.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shl_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0xc000e4ff, -4);
+ if (t != 0xfc000e4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c
new file mode 100644
index 000000000..f24a266cc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32-9.c
@@ -0,0 +1,19 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shl_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 f;
+
+ f = foo (0x12345678, 4);
+ if (f != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c
new file mode 100644
index 000000000..029378ad8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr1x32.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+typedef int fract32;
+
+extern void abort (void);
+
+int main ()
+{
+ fract32 f;
+
+ f = __builtin_bfin_shl_fr1x32 (0x12345678, 4);
+ if (f != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c
new file mode 100644
index 000000000..53ca96047
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shl_fr2x16 (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffff8000 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c
new file mode 100644
index 000000000..9e24db38b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shl_fr2x16 (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffcff || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c
new file mode 100644
index 000000000..6d91625d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-3.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_shl_fr2x16 (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != 0x10)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c
new file mode 100644
index 000000000..9b12e847a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-4.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_shl_fr2x16 (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x100 || t2 != 0x0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c
new file mode 100644
index 000000000..af9ac3f15
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-5.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffff8000 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c
new file mode 100644
index 000000000..cc0808678
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-6.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffcff || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c
new file mode 100644
index 000000000..dd235c891
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-7.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = foo (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != 0x10)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c
new file mode 100644
index 000000000..ed90541a4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shl_fr2x16-8.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = foo (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x100 || t2 != 0x0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c
new file mode 100644
index 000000000..5a9df3de2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shr_fr1x16 (0x1101, -4);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c
new file mode 100644
index 000000000..39dd3a999
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shr_fr1x16 (0x4004, 4);
+ if (t1 != 0x0400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c
new file mode 100644
index 000000000..fff331f6e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-3.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shr_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x1101, -4);
+ if (t1 != 0x7fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c
new file mode 100644
index 000000000..8425b7a83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x16-4.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shr_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x4004, 4);
+ if (t1 != 0x0400)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c
new file mode 100644
index 000000000..3a5e12fd6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shr_fr1x32 (0x7feff4ff, -4);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c
new file mode 100644
index 000000000..6f73462cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shr_fr1x32 (0x7feff4ff, 4);
+ if (t != 0x7feff4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c
new file mode 100644
index 000000000..664516365
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-3.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shr_fr1x32 (0xc000e4ff, -4);
+ if (t != 0x80000000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c
new file mode 100644
index 000000000..56ffe17c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-4.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_shr_fr1x32 (0xc000e4ff, 4);
+ if (t != 0xfc000e4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c
new file mode 100644
index 000000000..6dbb7f2e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-5.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shr_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0x7feff4ff, -4);
+ if (t != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c
new file mode 100644
index 000000000..ef8915474
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-6.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shr_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0x7feff4ff, 4);
+ if (t != 0x7feff4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c
new file mode 100644
index 000000000..720546a71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-7.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shr_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0xc000e4ff, -4);
+ if (t != 0x80000000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c
new file mode 100644
index 000000000..9422f790b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-8.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shr_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 t;
+
+ t = foo (0xc000e4ff, 4);
+ if (t != 0xfc000e4f)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c
new file mode 100644
index 000000000..caf17203d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32-9.c
@@ -0,0 +1,19 @@
+extern void abort (void);
+
+typedef long fract32;
+
+fract32 foo (fract32 f, short n)
+{
+ return __builtin_bfin_shr_fr1x32 (f, n);
+}
+
+int main ()
+{
+ fract32 f;
+
+ f = foo (0x87654321, 4);
+ if (f != 0xf8765432)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c
new file mode 100644
index 000000000..8be9ecfd1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr1x32.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+typedef int fract32;
+
+extern void abort (void);
+
+int main ()
+{
+ fract32 f;
+
+ f = __builtin_bfin_shr_fr1x32 (0x87654321, 4);
+ if (f != 0xf8765432)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c
new file mode 100644
index 000000000..6e9369547
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shr_fr2x16 (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffff8000 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c
new file mode 100644
index 000000000..1c83d2914
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shr_fr2x16 (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffcff || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c
new file mode 100644
index 000000000..5b6af8b4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-3.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shr_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xffff8000 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c
new file mode 100644
index 000000000..63bbb8bc7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shr_fr2x16-4.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shr_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffcff || t2 != 0xffffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c
new file mode 100644
index 000000000..0de251ee2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shrl_fr1x16 (0x8101, 4);
+ if (t1 != 0x0810)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c
new file mode 100644
index 000000000..c6b88b6d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_shrl_fr1x16 (0x4004, -4);
+ if (t1 != 0x0040)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c
new file mode 100644
index 000000000..0f8e168f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-3.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shrl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x8101, 4);
+ if (t1 != 0x0810)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c
new file mode 100644
index 000000000..d266ce095
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr1x16-4.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short fract16;
+
+fract16 foo (fract16 f, short n)
+{
+ return __builtin_bfin_shrl_fr1x16 (f, n);
+}
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = foo (0x4004, -4);
+ if (t1 != 0x0040)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c
new file mode 100644
index 000000000..1252b4d75
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-1.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shrl_fr2x16 (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffff0 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c
new file mode 100644
index 000000000..b4bec6e6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-2.c
@@ -0,0 +1,22 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = __builtin_bfin_shrl_fr2x16 (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x0cff || t2 != 0x0fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c
new file mode 100644
index 000000000..4036dbf53
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-3.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shrl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, -4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0xfffffff0 || t2 != 0xfffffff0)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c
new file mode 100644
index 000000000..b6473fa4d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/shrl_fr2x16-4.c
@@ -0,0 +1,27 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+fract2x16 foo (fract2x16 f, short n)
+{
+ return __builtin_bfin_shrl_fr2x16 (f, n);
+}
+
+int main ()
+{
+ fract2x16 a, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0xcfff, 0xffff);
+
+ t = foo (a, 4);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x0cff || t2 != 0x0fff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c
new file mode 100644
index 000000000..b97bf8d63
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-1.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_sub_fr1x16 (0x3000, 0x2000);
+ if (t1 != 0x1000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c
new file mode 100644
index 000000000..5e4568034
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x16-2.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+
+typedef short fract16;
+
+int main ()
+{
+ fract16 t1;
+
+ t1 = __builtin_bfin_sub_fr1x16 (0x3000, 0x4000);
+ if (t1 != -0x1000)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c
new file mode 100644
index 000000000..5aedd9199
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-1.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t1;
+
+ t1 = __builtin_bfin_sub_fr1x32 (0x40003000, 0xc0003000);
+ if (t1 != 0x7fffffff)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c
new file mode 100644
index 000000000..8ac4a5aad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr1x32-2.c
@@ -0,0 +1,15 @@
+extern void abort (void);
+
+typedef long fract32;
+
+int main ()
+{
+ fract32 t;
+
+ t = __builtin_bfin_sub_fr1x32 (0x40003000, 0x70002000);
+ if (t != 0xd0001000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c
new file mode 100644
index 000000000..34b8ac87d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-1.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x4000, 0x2000);
+ b = __builtin_bfin_compose_2x16 (0x8000, 0x5000);
+
+ t = __builtin_bfin_sub_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != -0x3000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c
new file mode 100644
index 000000000..52f7d8052
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sub_fr2x16-2.c
@@ -0,0 +1,23 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, t;
+ fract16 t1, t2;
+
+ a = __builtin_bfin_compose_2x16 (0x7000, 0xc000);
+ b = __builtin_bfin_compose_2x16 (0xc000, 0xd000);
+
+ t = __builtin_bfin_sub_fr2x16 (a, b);
+ t1 = __builtin_bfin_extract_hi (t);
+ t2 = __builtin_bfin_extract_lo (t);
+ if (t1 != 0x7fff || t2 != -0x1000)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c
new file mode 100644
index 000000000..56c4f191e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-1.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x5fff, 0xffff);
+
+ t = __builtin_bfin_sum_fr2x16 (a);
+ if (t != 0x5ffe)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c
new file mode 100644
index 000000000..2f75bfdfc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/builtins/sum_fr2x16-2.c
@@ -0,0 +1,20 @@
+extern void abort (void);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a;
+ fract16 t;
+
+ a = __builtin_bfin_compose_2x16 (0x1001, 0x0001);
+
+ t = __builtin_bfin_sum_fr2x16 (a);
+ if (t != 0x1002)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/frmul.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/frmul.c
new file mode 100644
index 000000000..61930bae5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/frmul.c
@@ -0,0 +1,149 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+#define GETVECT(HILO1,HILO2,IN1,IN2) \
+ __builtin_bfin_compose_2x16 ((HILO2) ? __builtin_bfin_extract_hi (IN1) : __builtin_bfin_extract_lo (IN1), \
+ (HILO1) ? __builtin_bfin_extract_hi (IN2) : __builtin_bfin_extract_lo (IN2))
+#define DOTEST(IN1, IN2, HL1, HL2, HL3, HL4) \
+ __builtin_bfin_multr_fr2x16 (GETVECT (HL1, HL2, IN1, IN1), \
+ GETVECT (HL3, HL4, IN2, IN2))
+
+#define FUNC(HL1, HL2, HL3, HL4) \
+ fract2x16 foo ## HL1 ## HL2 ## HL3 ## HL4 (fract2x16 a, fract2x16 b)\
+ { \
+ return DOTEST(a, b, HL1, HL2, HL3, HL4);\
+ }
+
+FUNC (0, 0, 0, 0)
+FUNC (1, 0, 0, 0)
+FUNC (0, 1, 0, 0)
+FUNC (1, 1, 0, 0)
+FUNC (0, 0, 1, 0)
+FUNC (1, 0, 1, 0)
+FUNC (0, 1, 1, 0)
+FUNC (1, 1, 1, 0)
+FUNC (0, 0, 0, 1)
+FUNC (1, 0, 0, 1)
+FUNC (0, 1, 0, 1)
+FUNC (1, 1, 0, 1)
+FUNC (0, 0, 1, 1)
+FUNC (1, 0, 1, 1)
+FUNC (0, 1, 1, 1)
+FUNC (1, 1, 1, 1)
+
+#define RES1 0x1400
+#define RES2 0x1e00
+#define RES3 0x1c00
+#define RES4 0x2a00
+
+
+int main ()
+{
+ fract2x16 a, b, c;
+ fract16 t1, t2;
+ a = __builtin_bfin_compose_2x16 (0x3000, 0x2000);
+ b = __builtin_bfin_compose_2x16 (0x7000, 0x5000);
+
+ c = foo0000 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES1 || t2 != RES1)
+ abort ();
+
+ c = foo1000 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES2 || t2 != RES1)
+ abort ();
+
+ c = foo0100 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES1 || t2 != RES2)
+ abort ();
+
+ c = foo1100 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES2 || t2 != RES2)
+ abort ();
+
+ c = foo0010 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES3 || t2 != RES1)
+ abort ();
+
+ c = foo1010 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES4 || t2 != RES1)
+ abort ();
+
+ c = foo0110 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES3 || t2 != RES2)
+ abort ();
+
+ c = foo1110 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES4 || t2 != RES2)
+ abort ();
+
+ c = foo0001 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES1 || t2 != RES3)
+ abort ();
+
+ c = foo1001 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES2 || t2 != RES3)
+ abort ();
+
+ c = foo0101 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES1 || t2 != RES4)
+ abort ();
+
+ c = foo1101 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES2 || t2 != RES4)
+ abort ();
+
+ c = foo0011 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES3 || t2 != RES3)
+ abort ();
+
+ c = foo1011 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES4 || t2 != RES3)
+ abort ();
+
+ c = foo0111 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES3 || t2 != RES4)
+ abort ();
+
+ c = foo1111 (a, b);
+ t1 = __builtin_bfin_extract_lo (c);
+ t2 = __builtin_bfin_extract_hi (c);
+ if (t1 != RES4 || t2 != RES4)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/l2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/l2.c
new file mode 100644
index 000000000..56f64cc82
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/l2.c
@@ -0,0 +1,38 @@
+/* { dg-do run { target bfin-*-linux-uclibc } } */
+/* { dg-bfin-processors bf544 bf547 bf548 bf549 bf561} */
+
+#if defined(__ADSPBF544__)
+#define L2_START 0xFEB00000
+#define L2_LENGTH 0x10000
+#else
+#define L2_START 0xFEB00000
+#define L2_LENGTH 0x20000
+#endif
+
+int n __attribute__ ((l2));
+
+int foo (int i) __attribute__ ((l2));
+
+int foo (int a)
+{
+ return a + 1;
+}
+
+int main ()
+{
+ int r;
+ unsigned long *p;
+
+ p = (unsigned long *) foo;
+ if (*p < L2_START || *p >= L2_START + L2_LENGTH)
+ return 1;
+
+ p = (unsigned long *) &n;
+ if ((unsigned long) p < L2_START || (unsigned long) p >= L2_START + L2_LENGTH)
+ return 2;
+
+ if (foo (0) != 1)
+ return 3;
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-1.c
new file mode 100644
index 000000000..138707e9e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-1.c
@@ -0,0 +1,33 @@
+/* { dg-do compile { target bfin-*-* } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-not "call\[^\\n\]*foo" } } */
+/* { dg-final { scan-assembler-not "jump\[^\\n\]*foo" } } */
+/* { dg-final { scan-assembler "call\[^\\n\]*baz" } } */
+/* { dg-final { scan-assembler "jump\[^\\n\]*baz" } } */
+/* { dg-final { scan-assembler "call\[^\\n\]*bar" } } */
+/* { dg-final { scan-assembler "jump\[^\\n\]*bar" } } */
+
+extern void foo () __attribute__((longcall));
+extern void bar () __attribute__((shortcall));
+extern void baz ();
+
+int t1 ()
+{
+ foo ();
+ bar ();
+ baz ();
+ return 4;
+}
+
+void t2 ()
+{
+ foo ();
+}
+void t3 ()
+{
+ bar ();
+}
+void t4 ()
+{
+ baz ();
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-2.c
new file mode 100644
index 000000000..33189b01f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/longcall-2.c
@@ -0,0 +1,33 @@
+/* { dg-do compile { target bfin-*-* } } */
+/* { dg-options "-O2 -mlong-calls" } */
+/* { dg-final { scan-assembler-not "call\[^\\n\]*foo" } } */
+/* { dg-final { scan-assembler-not "jump\[^\\n\]*foo" } } */
+/* { dg-final { scan-assembler-not "call\[^\\n\]*baz" } } */
+/* { dg-final { scan-assembler-not "jump\[^\\n\]*baz" } } */
+/* { dg-final { scan-assembler "call\[^\\n\]*bar" } } */
+/* { dg-final { scan-assembler "jump\[^\\n\]*bar" } } */
+
+extern void foo () __attribute__((longcall));
+extern void bar () __attribute__((shortcall));
+extern void baz ();
+
+int t1 ()
+{
+ foo ();
+ bar ();
+ baz ();
+ return 4;
+}
+
+void t2 ()
+{
+ foo ();
+}
+void t3 ()
+{
+ bar ();
+}
+void t4 ()
+{
+ baz ();
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/loop-autoinc.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/loop-autoinc.c
new file mode 100644
index 000000000..3dc718298
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/loop-autoinc.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler " = \\\[\[PI\].\\+\\+\\\];" } } */
+extern int x[];
+extern void bar();
+int foo ()
+{
+ int i;
+ int sum = 0;
+ for (i = 0; i < 100; i++) {
+ sum += x[i];
+ if (sum & 1)
+ sum *= sum;
+ }
+ return sum;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c
new file mode 100644
index 000000000..fa2d56d1a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf512.c
@@ -0,0 +1,31 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf512" } */
+
+#ifndef __ADSPBF512__
+#error "__ADSPBF512__ is not defined"
+#endif
+
+#ifndef __ADSPBF51x__
+#error "__ADSPBF51x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c
new file mode 100644
index 000000000..f6c082911
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf514.c
@@ -0,0 +1,31 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf514" } */
+
+#ifndef __ADSPBF514__
+#error "__ADSPBF514__ is not defined"
+#endif
+
+#ifndef __ADSPBF51x__
+#error "__ADSPBF51x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c
new file mode 100644
index 000000000..439b3f40e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf516.c
@@ -0,0 +1,31 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf516" } */
+
+#ifndef __ADSPBF516__
+#error "__ADSPBF516__ is not defined"
+#endif
+
+#ifndef __ADSPBF51x__
+#error "__ADSPBF51x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c
new file mode 100644
index 000000000..aff7f6989
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf518.c
@@ -0,0 +1,31 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf518" } */
+
+#ifndef __ADSPBF518__
+#error "__ADSPBF518__ is not defined"
+#endif
+
+#ifndef __ADSPBF51x__
+#error "__ADSPBF51x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf522.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf522.c
new file mode 100644
index 000000000..58c325e0c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf522.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf522" } */
+
+#ifndef __ADSPBF522__
+#error "__ADSPBF522__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf523.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf523.c
new file mode 100644
index 000000000..10f71eddb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf523.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf523" } */
+
+#ifndef __ADSPBF523__
+#error "__ADSPBF523__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf524.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf524.c
new file mode 100644
index 000000000..d8e30c4f5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf524.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf524" } */
+
+#ifndef __ADSPBF524__
+#error "__ADSPBF524__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf525.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf525.c
new file mode 100644
index 000000000..0e021e46f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf525.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf525" } */
+
+#ifndef __ADSPBF525__
+#error "__ADSPBF525__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf526.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf526.c
new file mode 100644
index 000000000..e3e248a9b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf526.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf526" } */
+
+#ifndef __ADSPBF526__
+#error "__ADSPBF526__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf527.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf527.c
new file mode 100644
index 000000000..41f493114
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf527.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf527" } */
+
+#ifndef __ADSPBF527__
+#error "__ADSPBF527__ is not defined"
+#endif
+
+#ifndef __ADSPBF52x__
+#error "__ADSPBF52x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0002
+#error "__SILICON_REVISION__ is not 0x0002"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf531.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf531.c
new file mode 100644
index 000000000..ebcf39822
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf531.c
@@ -0,0 +1,33 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf531" } */
+
+#ifndef __ADSPBF531__
+#error "__ADSPBF531__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0006
+#error "__SILICON_REVISION__ is not 0x0006"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0005
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf532.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf532.c
new file mode 100644
index 000000000..18ff74a4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf532.c
@@ -0,0 +1,33 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf532" } */
+
+#ifndef __ADSPBF532__
+#error "__ADSPBF532__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0006
+#error "__SILICON_REVISION__ is not 0x0006"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0005
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf533.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf533.c
new file mode 100644
index 000000000..d961d7a72
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf533.c
@@ -0,0 +1,33 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf533" } */
+
+#ifndef __ADSPBF533__
+#error "__ADSPBF533__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0006
+#error "__SILICON_REVISION__ is not 0x0006"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0005
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf534.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf534.c
new file mode 100644
index 000000000..cd354596d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf534.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf534" } */
+
+#ifndef __ADSPBF534__
+#error "__ADSPBF534__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf536.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf536.c
new file mode 100644
index 000000000..0ac9ebf9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf536.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf536" } */
+
+#ifndef __ADSPBF536__
+#error "__ADSPBF536__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf537.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf537.c
new file mode 100644
index 000000000..66a87c045
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf537.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf537" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf538.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf538.c
new file mode 100644
index 000000000..188f8708c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf538.c
@@ -0,0 +1,33 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf538" } */
+
+#ifndef __ADSPBF538__
+#error "__ADSPBF538__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0005
+#error "__SILICON_REVISION__ is not 0x0005"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0004
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf539.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf539.c
new file mode 100644
index 000000000..acb0d8936
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf539.c
@@ -0,0 +1,33 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf539" } */
+
+#ifndef __ADSPBF539__
+#error "__ADSPBF539__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0005
+#error "__SILICON_REVISION__ is not 0x0005"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0004
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c
new file mode 100644
index 000000000..c8999713d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf542" } */
+
+#ifndef __ADSPBF542__
+#error "__ADSPBF542__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0004
+#error "__SILICON_REVISION__ is not 0x0004"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542m.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542m.c
new file mode 100644
index 000000000..74d377045
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf542m.c
@@ -0,0 +1,41 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf542m" } */
+
+#ifndef __ADSPBF542__
+#error "__ADSPBF542__ is not defined"
+#endif
+
+#ifndef __ADSPBF542M__
+#error "__ADSPBF542M__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c
new file mode 100644
index 000000000..926978505
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf544" } */
+
+#ifndef __ADSPBF544__
+#error "__ADSPBF544__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0004
+#error "__SILICON_REVISION__ is not 0x0004"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544m.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544m.c
new file mode 100644
index 000000000..a0289378c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf544m.c
@@ -0,0 +1,41 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf544m" } */
+
+#ifndef __ADSPBF544__
+#error "__ADSPBF544__ is not defined"
+#endif
+
+#ifndef __ADSPBF544M__
+#error "__ADSPBF544M__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c
new file mode 100644
index 000000000..8f724335c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf547" } */
+
+#ifndef __ADSPBF547__
+#error "__ADSPBF547__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0004
+#error "__SILICON_REVISION__ is not 0x0004"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547m.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547m.c
new file mode 100644
index 000000000..e5e1f9b30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf547m.c
@@ -0,0 +1,41 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf547m" } */
+
+#ifndef __ADSPBF547__
+#error "__ADSPBF547__ is not defined"
+#endif
+
+#ifndef __ADSPBF547M__
+#error "__ADSPBF547M__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c
new file mode 100644
index 000000000..7b1d2ff2d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf548" } */
+
+#ifndef __ADSPBF548__
+#error "__ADSPBF548__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0004
+#error "__SILICON_REVISION__ is not 0x0004"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548m.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548m.c
new file mode 100644
index 000000000..47afafffe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf548m.c
@@ -0,0 +1,41 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf548m" } */
+
+#ifndef __ADSPBF548__
+#error "__ADSPBF548__ is not defined"
+#endif
+
+#ifndef __ADSPBF548M__
+#error "__ADSPBF548M__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c
new file mode 100644
index 000000000..83c79de3f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549.c
@@ -0,0 +1,37 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf549" } */
+
+#ifndef __ADSPBF549__
+#error "__ADSPBF549__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0004
+#error "__SILICON_REVISION__ is not 0x0004"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549m.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549m.c
new file mode 100644
index 000000000..8aa7ad560
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf549m.c
@@ -0,0 +1,41 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf549m" } */
+
+#ifndef __ADSPBF549__
+#error "__ADSPBF549__ is not defined"
+#endif
+
+#ifndef __ADSPBF549M__
+#error "__ADSPBF549M__ is not defined"
+#endif
+
+#ifndef __ADSPBF54x__
+#error "__ADSPBF54x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#if __SILICON_REVISION__ <= 0x0001
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+#else
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf561.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf561.c
new file mode 100644
index 000000000..e2eab3ba3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf561.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf561" } */
+
+#ifndef __ADSPBF561__
+#error "__ADSPBF561__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0005
+#error "__SILICON_REVISION__ is not 0x0005"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf592.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf592.c
new file mode 100644
index 000000000..27e865e55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-bf592.c
@@ -0,0 +1,31 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf592" } */
+
+#ifndef __ADSPBF592__
+#error "__ADSPBF592__ is not defined"
+#endif
+
+#ifndef __ADSPBF59x__
+#error "__ADSPBF59x__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0001
+#error "__SILICON_REVISION__ is not 0x0001"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-default.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-default.c
new file mode 100644
index 000000000..9109701cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mcpu-default.c
@@ -0,0 +1,93 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "" } */
+
+#ifdef __ADSPBF522__
+#error "__ADSPBF522__ is defined"
+#endif
+#ifdef __ADSPBF523__
+#error "__ADSPBF523__ is defined"
+#endif
+#ifdef __ADSPBF524__
+#error "__ADSPBF524__ is defined"
+#endif
+#ifdef __ADSPBF525__
+#error "__ADSPBF525__ is defined"
+#endif
+#ifdef __ADSPBF526__
+#error "__ADSPBF526__ is defined"
+#endif
+#ifdef __ADSPBF527__
+#error "__ADSPBF527__ is defined"
+#endif
+
+
+#ifdef __ADSPBF531__
+#error "__ADSPBF531__ is defined"
+#endif
+#ifdef __ADSPBF532__
+#error "__ADSPBF532__ is defined"
+#endif
+#ifdef __ADSPBF533__
+#error "__ADSPBF533__ is defined"
+#endif
+#ifdef __ADSPBF534__
+#error "__ADSPBF534__ is defined"
+#endif
+#ifdef __ADSPBF536__
+#error "__ADSPBF536__ is defined"
+#endif
+#ifdef __ADSPBF537__
+#error "__ADSPBF537__ is defined"
+#endif
+#ifdef __ADSPBF538__
+#error "__ADSPBF538__ is defined"
+#endif
+#ifdef __ADSPBF539__
+#error "__ADSPBF539__ is defined"
+#endif
+
+#ifdef __ADSPBF542__
+#error "__ADSPBF542__ is defined"
+#endif
+#ifdef __ADSPBF544__
+#error "__ADSPBF544__ is defined"
+#endif
+#ifdef __ADSPBF547__
+#error "__ADSPBF547__ is defined"
+#endif
+#ifdef __ADSPBF548__
+#error "__ADSPBF548__ is defined"
+#endif
+#ifdef __ADSPBF549__
+#error "__ADSPBF548__ is defined"
+#endif
+
+#ifdef __ADSPBF561__
+#error "__ADSPBF561__ is defined"
+#endif
+
+
+#ifndef __SILICON_REVISION__
+#error "__SILICON_REVISION__ is not defined"
+#else
+#if __SILICON_REVISION__ != 0xffff
+#error "__SILICON_REVISION__ is not 0xFFFF"
+#endif
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is not defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/mul-combine.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mul-combine.c
new file mode 100644
index 000000000..2a811b332
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/mul-combine.c
@@ -0,0 +1,45 @@
+/* Make sure combine eliminates all unnecessary instructions for the
+ sixteen cases of hi/lo multiplications. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+/* { dg-final { scan-assembler-not "<<" } } */
+/* { dg-final { scan-assembler-not "PACK" } } */
+
+extern void abort (void);
+extern void exit (int);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+#define GETVECT(HILO1,HILO2,IN1,IN2) \
+ __builtin_bfin_compose_2x16 ((HILO2) ? __builtin_bfin_extract_hi (IN1) : __builtin_bfin_extract_lo (IN1), \
+ (HILO1) ? __builtin_bfin_extract_hi (IN2) : __builtin_bfin_extract_lo (IN2))
+#define DOTEST(IN1, IN2, HL1, HL2, HL3, HL4) \
+ __builtin_bfin_multr_fr2x16 (GETVECT (HL1, HL2, IN1, IN1), \
+ GETVECT (HL3, HL4, IN2, IN2))
+
+#define FUNC(HL1, HL2, HL3, HL4) \
+ fract2x16 foo ## HL1 ## HL2 ## HL3 ## HL4 (fract2x16 a, fract2x16 b)\
+ { \
+ return DOTEST(a, b, HL1, HL2, HL3, HL4);\
+ }
+
+FUNC (0, 0, 0, 0)
+FUNC (1, 0, 0, 0)
+FUNC (0, 1, 0, 0)
+FUNC (1, 1, 0, 0)
+FUNC (0, 0, 1, 0)
+FUNC (1, 0, 1, 0)
+FUNC (0, 1, 1, 0)
+FUNC (1, 1, 1, 0)
+FUNC (0, 0, 0, 1)
+FUNC (1, 0, 0, 1)
+FUNC (0, 1, 0, 1)
+FUNC (1, 1, 0, 1)
+FUNC (0, 0, 1, 1)
+FUNC (1, 0, 1, 1)
+FUNC (0, 1, 1, 1)
+FUNC (1, 1, 1, 1)
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/saveall.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/saveall.c
new file mode 100644
index 000000000..19f9decd7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/saveall.c
@@ -0,0 +1,14 @@
+/* { dg-do run { target bfin*-*-* } } */
+/* { dg-options "-fomit-frame-pointer" } */
+
+void foo (void) __attribute__ ((saveall));
+void foo ()
+{
+ asm ("R0 = 0; RETS = R0;");
+}
+
+int main ()
+{
+ foo ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/shift.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/shift.c
new file mode 100644
index 000000000..4a0e9175c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/shift.c
@@ -0,0 +1,73 @@
+extern void abort (void);
+extern void exit (int);
+
+typedef short __v2hi __attribute ((vector_size(4)));
+typedef __v2hi fract2x16;
+typedef short fract16;
+
+int main ()
+{
+ fract2x16 a, b, c, d;
+ fract16 t1, t2;
+ a = __builtin_bfin_compose_2x16 (0xe005, 0x1000);
+ b = __builtin_bfin_compose_2x16 (0x7000, 0x5000);
+ c = __builtin_bfin_compose_2x16 (0x7000, 0xc000);
+
+ d = __builtin_bfin_shl_fr2x16 (c, 2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if ((unsigned short)t1 != 0x8000 || t2 != 0x7fff)
+ abort ();
+
+ d = __builtin_bfin_shl_fr2x16 (c, -2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if ((unsigned short)t1 != 0xf000 || t2 != 0x1c00)
+ abort ();
+
+ d = __builtin_bfin_shl_fr2x16 (a, 2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x4000 || (unsigned short)t2 != 0x8014)
+ abort ();
+
+ d = __builtin_bfin_shl_fr2x16 (c, -4);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if ((unsigned short)t1 != 0xfc00 || t2 != 0x0700)
+ abort ();
+
+ d = __builtin_bfin_shl_fr2x16 (c, 2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if ((unsigned short)t1 != 0x8000 || t2 != 0x7fff)
+ abort ();
+
+ d = __builtin_bfin_shl_fr2x16 (a, -2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x0400 || (unsigned short)t2 != 0xf801)
+ abort ();
+
+ /* lsh */
+ d = __builtin_bfin_lshl_fr2x16 (c, -4);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x0c00 || t2 != 0x0700)
+ abort ();
+
+ d = __builtin_bfin_lshl_fr2x16 (c, 2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x0000 || t2 != -0x4000)
+ abort ();
+
+ d = __builtin_bfin_lshl_fr2x16 (a, -2);
+ t1 = __builtin_bfin_extract_lo (d);
+ t2 = __builtin_bfin_extract_hi (d);
+ if (t1 != 0x0400 || (unsigned short)t2 != 0x3801)
+ abort ();
+
+ exit (0);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-1.c
new file mode 100644
index 000000000..f17fc199e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int mac(const short *a, const short *b, int sqr, int *sum)
+{
+ int i;
+ int dotp = *sum;
+
+ for (i = 0; i < 150; i++) {
+ dotp += b[i] * a[i];
+ sqr += b[i] * b[i];
+ }
+
+ *sum = dotp;
+ return sqr;
+}
+
+/* { dg-final { scan-assembler-times "\\(IS\\)" 2 } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-2.c
new file mode 100644
index 000000000..2f2d2527e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/wmul-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void vec_mpy(int y[], const short x[], short scaler)
+{
+ int i;
+
+ for (i = 0; i < 150; i++)
+ y[i] += ((scaler * x[i]) >> 31);
+}
+
+/* { dg-final { scan-assembler-times "\\(IS\\)" 1 } } */
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-1.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-1.c
new file mode 100644
index 000000000..53ca1d7b7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-1.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcsync-anomaly -mcpu=bf537" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-2.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-2.c
new file mode 100644
index 000000000..c639a204e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-2.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mno-specld-anomaly -mcpu=bf537" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0x0003
+#error "__SILICON_REVISION__ is not 0x0003"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-3.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-3.c
new file mode 100644
index 000000000..3209f2348
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-3.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf537-none" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#ifdef __SILICON_REVISION__
+#error "__SILICON_REVISION__ is defined"
+#endif
+
+#ifdef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-4.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-4.c
new file mode 100644
index 000000000..62bd382b7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-4.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf537-any" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0xffff
+#error "__SILICON_REVISION__ is not 0xffff"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-any.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-any.c
new file mode 100644
index 000000000..62bd382b7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-any.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf537-any" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#if __SILICON_REVISION__ != 0xffff
+#error "__SILICON_REVISION__ is not 0xffff"
+#endif
+
+#ifndef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is not defined"
+#endif
+
+#ifndef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is not defined"
+#endif
+
+#ifndef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-none.c b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-none.c
new file mode 100644
index 000000000..3209f2348
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/bfin/workarounds-none.c
@@ -0,0 +1,27 @@
+/* Test for -mcpu=. */
+/* { dg-do preprocess } */
+/* { dg-bfin-options "-mcpu=bf537-none" } */
+
+#ifndef __ADSPBF537__
+#error "__ADSPBF537__ is not defined"
+#endif
+
+#ifdef __SILICON_REVISION__
+#error "__SILICON_REVISION__ is defined"
+#endif
+
+#ifdef __WORKAROUNDS_ENABLED
+#error "__WORKAROUNDS_ENABLED is defined"
+#endif
+
+#ifdef __WORKAROUND_RETS
+#error "__WORKAROUND_RETS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_LOADS
+#error "__WORKAROUND_SPECULATIVE_LOADS is defined"
+#endif
+
+#ifdef __WORKAROUND_SPECULATIVE_SYNCS
+#error "__WORKAROUND_SPECULATIVE_SYNCS is defined"
+#endif