| /* Check that there are no redundant zero extensions around logical right |
| shifts. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O1" } */ |
| /* { dg-final { scan-assembler-times "extu" 20 } } */ |
| |
| /* { dg-final { scan-assembler-times "shll" 2 { target { "! sh2a" && has_dyn_shift } } } } */ |
| /* { dg-final { scan-assembler-times "shll" 3 { target { "! sh2a" && "! has_dyn_shift" } } } } */ |
| /* { dg-final { scan-assembler-times "movt" 2 { target { ! sh2a } } } } */ |
| |
| /* { dg-final { scan-assembler-times "bld" 1 { target { sh2a } } } } */ |
| /* { dg-final { scan-assembler-times "movt" 1 { target { sh2a } } } } */ |
| /* { dg-final { scan-assembler-times "movrt" 1 { target { sh2a } } } } */ |
| /* { dg-final { scan-assembler-times "cmp/pz" 1 { target { sh2a } } } } */ |
| |
| /* { dg-final { scan-assembler-times "shld" 9 { target { has_dyn_shift } } } } */ |
| |
| void |
| test_0 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 1; |
| } |
| |
| void |
| test_1 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 2; |
| } |
| |
| void |
| test_2 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 3; |
| } |
| |
| void |
| test_3 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 4; |
| } |
| |
| void |
| test_4 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 5; |
| } |
| |
| void |
| test_5 (unsigned char* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 6; |
| } |
| |
| void |
| test_6 (unsigned char* x, unsigned int* y) |
| { |
| /* non-SH2A: shll, movt |
| SH2A: bld, movt */ |
| y[0] = x[1] >> 7; |
| } |
| |
| |
| void |
| test_100 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 1; |
| } |
| |
| void |
| test_101 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 2; |
| } |
| |
| void |
| test_102 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 3; |
| } |
| |
| void |
| test_103 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 4; |
| } |
| |
| void |
| test_104 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 5; |
| } |
| |
| void |
| test_105 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 6; |
| } |
| |
| void |
| test_106 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 7; |
| } |
| |
| void |
| test_107 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 8; |
| } |
| |
| void |
| test_108 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 9; |
| } |
| |
| void |
| test_109 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 10; |
| } |
| |
| void |
| test_110 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 11; |
| } |
| |
| void |
| test_111 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 12; |
| } |
| |
| void |
| test_112 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 13; |
| } |
| |
| void |
| test_113 (unsigned short* x, unsigned int* y) |
| { |
| y[0] = x[1] >> 14; |
| } |
| |
| void |
| test_114 (unsigned short* x, unsigned int* y) |
| { |
| /* non-SH2A: shll, movt |
| SH2A: cmp/pz, movrt */ |
| y[0] = x[1] >> 15; |
| } |