aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/avr/pr82931.c
blob: 477284fa12799927ddaa3b28b03c9670811604b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* { dg-options "-Os" } */
/* { dg-final { scan-assembler-times "bst" 4 } } */
/* { dg-final { scan-assembler-times "bld" 4 } } */

typedef __UINT8_TYPE__ uint8_t;
typedef __UINT16_TYPE__ uint16_t;

#define BitMask (1u << 14)
#define Bit8Mask ((uint8_t) (1u << 4))

void merge1_8 (uint8_t *dst, const uint8_t *src)
{
    *dst = (*src & Bit8Mask) | (*dst & ~ Bit8Mask);
}

void merge2_8 (uint8_t *dst, const uint8_t *src)
{
    *dst ^= (*dst ^ *src) & Bit8Mask;
}

void merge1_16 (uint16_t *dst, const uint16_t *src)
{
    *dst = (*src & BitMask) | (*dst & ~ BitMask);
}

void merge2_16 (uint16_t *dst, const uint16_t *src)
{
    *dst ^= (*dst ^ *src) & BitMask;
}