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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-arm/] [arch-sa1100/] [bitfield.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/*
2
 *      FILE            bitfield.h
3
 *
4
 *      Version         1.1
5
 *      Author          Copyright (c) Marc A. Viredaz, 1998
6
 *                      DEC Western Research Laboratory, Palo Alto, CA
7
 *      Date            April 1998 (April 1997)
8
 *      System          Advanced RISC Machine (ARM)
9
 *      Language        C or ARM Assembly
10
 *      Purpose         Definition of macros to operate on bit fields.
11
 */
12
 
13
 
14
 
15
#ifndef __BITFIELD_H
16
#define __BITFIELD_H
17
 
18
#ifndef __ASSEMBLY__
19
#define UData(Data)     ((unsigned long) (Data))
20
#else
21
#define UData(Data)     (Data)
22
#endif
23
 
24
 
25
/*
26
 * MACRO: Fld
27
 *
28
 * Purpose
29
 *    The macro "Fld" encodes a bit field, given its size and its shift value
30
 *    with respect to bit 0.
31
 *
32
 * Note
33
 *    A more intuitive way to encode bit fields would have been to use their
34
 *    mask. However, extracting size and shift value information from a bit
35
 *    field's mask is cumbersome and might break the assembler (255-character
36
 *    line-size limit).
37
 *
38
 * Input
39
 *    Size              Size of the bit field, in number of bits.
40
 *    Shft              Shift value of the bit field with respect to bit 0.
41
 *
42
 * Output
43
 *    Fld               Encoded bit field.
44
 */
45
 
46
#define Fld(Size, Shft) (((Size) << 16) + (Shft))
47
 
48
 
49
/*
50
 * MACROS: FSize, FShft, FMsk, FAlnMsk, F1stBit
51
 *
52
 * Purpose
53
 *    The macros "FSize", "FShft", "FMsk", "FAlnMsk", and "F1stBit" return
54
 *    the size, shift value, mask, aligned mask, and first bit of a
55
 *    bit field.
56
 *
57
 * Input
58
 *    Field             Encoded bit field (using the macro "Fld").
59
 *
60
 * Output
61
 *    FSize             Size of the bit field, in number of bits.
62
 *    FShft             Shift value of the bit field with respect to bit 0.
63
 *    FMsk              Mask for the bit field.
64
 *    FAlnMsk           Mask for the bit field, aligned on bit 0.
65
 *    F1stBit           First bit of the bit field.
66
 */
67
 
68
#define FSize(Field)    ((Field) >> 16)
69
#define FShft(Field)    ((Field) & 0x0000FFFF)
70
#define FMsk(Field)     (((UData (1) << FSize (Field)) - 1) << FShft (Field))
71
#define FAlnMsk(Field)  ((UData (1) << FSize (Field)) - 1)
72
#define F1stBit(Field)  (UData (1) << FShft (Field))
73
 
74
 
75
/*
76
 * MACRO: FInsrt
77
 *
78
 * Purpose
79
 *    The macro "FInsrt" inserts a value into a bit field by shifting the
80
 *    former appropriately.
81
 *
82
 * Input
83
 *    Value             Bit-field value.
84
 *    Field             Encoded bit field (using the macro "Fld").
85
 *
86
 * Output
87
 *    FInsrt            Bit-field value positioned appropriately.
88
 */
89
 
90
#define FInsrt(Value, Field) \
91
                        (UData (Value) << FShft (Field))
92
 
93
 
94
/*
95
 * MACRO: FExtr
96
 *
97
 * Purpose
98
 *    The macro "FExtr" extracts the value of a bit field by masking and
99
 *    shifting it appropriately.
100
 *
101
 * Input
102
 *    Data              Data containing the bit-field to be extracted.
103
 *    Field             Encoded bit field (using the macro "Fld").
104
 *
105
 * Output
106
 *    FExtr             Bit-field value.
107
 */
108
 
109
#define FExtr(Data, Field) \
110
                        ((UData (Data) >> FShft (Field)) & FAlnMsk (Field))
111
 
112
 
113
#endif /* __BITFIELD_H */

powered by: WebSVN 2.1.0

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