OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [tree-ssa/] [pr49516.C] - Blame information for rev 693

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
/* { dg-do run } */
2
/* { dg-options "-O2" } */
3
 
4
extern "C" void abort (void);
5
 
6
typedef int int32;
7
typedef unsigned int uint32;
8
typedef unsigned long long uint64;
9
typedef short int16;
10
 
11
class Tp {
12
 public:
13
  Tp(int, const int segment, const int index) __attribute__((noinline));
14
 
15
  inline bool operator==(const Tp& other) const;
16
  inline bool operator!=(const Tp& other) const;
17
  int GetType() const { return type_; }
18
  int GetSegment() const { return segment_; }
19
  int GetIndex() const { return index_; }
20
 private:
21
  inline static bool IsValidSegment(const int segment);
22
  static const int kSegmentBits = 28;
23
  static const int kTypeBits = 4;
24
  static const int kMaxSegment = (1 << kSegmentBits) - 1;
25
 
26
  union {
27
 
28
    struct {
29
      int32 index_;
30
      uint32 segment_ : kSegmentBits;
31
      uint32 type_ : kTypeBits;
32
    };
33
    struct {
34
      int32 dummy_;
35
      uint32 type_and_segment_;
36
    };
37
    uint64 value_;
38
  };
39
};
40
 
41
Tp::Tp(int t, const int segment, const int index)
42
 : index_(index), segment_(segment), type_(t) {}
43
 
44
inline bool Tp::operator==(const Tp& other) const {
45
  return value_ == other.value_;
46
}
47
inline bool Tp::operator!=(const Tp& other) const {
48
  return value_ != other.value_;
49
}
50
 
51
class Range {
52
 public:
53
  inline Range(const Tp& position, const int count) __attribute__((always_inline));
54
  inline Tp GetBeginTokenPosition() const;
55
  inline Tp GetEndTokenPosition() const;
56
 private:
57
  Tp position_;
58
  int count_;
59
  int16 begin_index_;
60
  int16 end_index_;
61
};
62
 
63
inline Range::Range(const Tp& position,
64
                    const int count)
65
    : position_(position), count_(count), begin_index_(0), end_index_(0)
66
    { }
67
 
68
inline Tp Range::GetBeginTokenPosition() const {
69
  return position_;
70
}
71
inline Tp Range::GetEndTokenPosition() const {
72
  return Tp(position_.GetType(), position_.GetSegment(),
73
            position_.GetIndex() + count_);
74
}
75
 
76
int main ()
77
{
78
  Range range(Tp(0, 0, 3), 0);
79
  if (!(range.GetBeginTokenPosition() == Tp(0, 0, 3)))
80
    abort ();
81
 
82
  if (!(range.GetEndTokenPosition() == Tp(0, 0, 3)))
83
    abort();
84
 
85
  return 0;
86
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.