summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-1929.c
blob: d48a3cf090e716fcf4eade2be455c144a236e7d5 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
   bug-1929.c 
 */

#include <testfwk.h>

#define MASK 0x0f

unsigned char reg0;
unsigned char reg1;
signed char reg2;
signed char reg3;

void tAnd (void)
{
  reg0 &= ~MASK;
  ASSERT (reg0 == 0xa0);

  reg1 &= MASK;
  ASSERT (reg1 == 0x0a);

  reg2 &= ~MASK;
  ASSERT ((unsigned char) reg2 == 0xa0);

  reg3 &= MASK;
  ASSERT (reg3 == 0x0a);
}

void tOr (void)
{
  reg0 |= ~MASK;
  ASSERT (reg0 == 0xfa);

  reg1 |= MASK;
  ASSERT (reg1 == 0xaf);

  reg2 |= ~MASK;
  ASSERT ((unsigned char) reg2 == 0xfa);

  reg3 |= MASK;
  ASSERT ((unsigned char) reg3 == 0xaf);
}

void tXor (void)
{
  reg0 ^= ~MASK;
  ASSERT (reg0 == 0x5a);

  reg1 ^= MASK;
  ASSERT (reg1 == 0xa5);

  reg2 ^= ~MASK;
  ASSERT (reg2 == 0x5a);

  reg3 ^= MASK;
  ASSERT ((unsigned char) reg3 == 0xa5);
}

void testBug (void)
{
  reg0 = reg1 = reg2 = reg3 = 0xaa;
  tAnd();

  reg0 = reg1 = reg2 = reg3 = 0xaa;
  tOr();

  reg0 = reg1 = reg2 = reg3 = 0xaa;
  tXor();
}