Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.target/csky/ck801-branch.c @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
/* { dg-do compile } */ /* { dg-csky-options "-mcpu=ck801 -O1 -fno-reorder-blocks" } */ /* Test branch generation on CK801, which cannot rely on assembler branch relaxation because long branches clobber lr. */ #define nop8 asm ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop") #define nop64 nop8; nop8; nop8; nop8; nop8; nop8; nop8; nop8 #define nop512 nop64; nop64; nop64; nop64; nop64; nop64; nop64; nop64 #define nop4k nop512; nop512; nop512; nop512; nop512; nop512; nop512; nop512 #define nop32k nop4k; nop4k; nop4k; nop4k; nop4k; nop4k; nop4k; nop4k extern void g (int); int f (int x, int y, int z) { if (x == 0) // cmpnei; jbt { nop64; x = y; } if (y == 0) // cmpnei; jbf; jbr { nop512; y = z; } if (z == 0) // cmpnei; jbf; bsr { nop32k; z = x; } return x + y + z; } /* { dg-final { scan-assembler "push.*lr" } } */ /* { dg-final { scan-assembler "pop.*lr" } } */ /* { dg-final { scan-assembler-times "cmpnei" 3 } } */ /* { dg-final { scan-assembler-times "jbt" 1 } } */ /* { dg-final { scan-assembler-times "jbf" 2 } } */ /* { dg-final { scan-assembler-times "jbr" 1 } } */ /* { dg-final { scan-assembler-times "bsr" 1 } } */