1 /* ALU operations with zero extended operands. */
2
3 /* { dg-do compile } */
4 /* { dg-options "-O1" } */
5
6 /* -O1 in the options is significant. Without it the zero extension might not
7 be coalesced into the ALU instruction. */
8
9 unsigned int
10 test_zext_plus_hi (unsigned char val1, unsigned short val2)
11 {
12 /* { dg-final { scan-assembler "add\\tr14, r14.b0, r14.w1" } } */
13 return val1 + val2;
14 }
15
16 unsigned int
17 test_zext_minus_hi (unsigned char val1, unsigned short val2)
18 {
19 /* { dg-final { scan-assembler "sub\\tr14, r14.b0, r14.w1" } } */
20 return val1 - val2;
21 }
22
23 unsigned int
24 test_zext_xor_hi (unsigned char val1, unsigned short val2)
25 {
26 /* { dg-final { scan-assembler "xor\\tr14, r14.b0, r14.w1" } } */
27 return val1 ^ val2;
28 }
29
30 unsigned int
31 test_zext_or_hi (unsigned char val1, unsigned short val2)
32 {
33 /* { dg-final { scan-assembler "or\\tr14, r14.b0, r14.w1" } } */
34 return val1 | val2;
35 }
36
37 unsigned int
38 test_zext_ashl_hi (unsigned char val1, unsigned short val2)
39 {
40 /* { dg-final { scan-assembler "lsl\\tr14, r14.b0, r14.w1" } } */
41 return val1 << val2;
42 }
43