summaryrefslogtreecommitdiffstats
path: root/include/asm-blackfin/macros.h
blob: c0c04a2f2dd5ede7b320ad0e772eb0385a6b96ac (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/************************************************************************
 *
 * macros.h
 *
 * (c) Copyright 2001-2003 Analog Devices, Inc.  All rights reserved.
 *
 ************************************************************************/

/* Defines various assembly macros. */

#ifndef _MACROS_H
#define _MACROS_H

#define LO(con32) ((con32) & 0xFFFF)
#define lo(con32) ((con32) & 0xFFFF)
#define HI(con32) (((con32) >> 16) & 0xFFFF)
#define hi(con32) (((con32) >> 16) & 0xFFFF)

/*
 * Set the corresponding bits in a System Register (SR);
 * All bits set in "mask" will be set in the system register
 * specified by "sys_reg" bitset_SR(sys_reg, mask), where
 * sys_reg is the system register and mask are the bits to be set.
 */
#define bitset_SR(sys_reg, mask)\
		[--SP] = (R7:6);\
		r7 = sys_reg;\
		r6.l = (mask) & 0xffff;\
		r6.h = (mask) >> 16;\
		r7 = r7 | r6;\
		sys_reg = r7;\
		csync;\
		(R7:6) = [SP++]

/*
 * Clear the corresponding bits in a System Register (SR);
 * All bits set in "mask" will be cleared in the SR
 * specified by "sys_reg" bitclr_SR(sys_reg, mask), where
 * sys_reg is the SR and mask are the bits to be cleared.
 */
#define bitclr_SR(sys_reg, mask)\
		[--SP] = (R7:6);\
		r7 = sys_reg;\
		r7 =~ r7;\
		r6.l = (mask) & 0xffff;\
		r6.h = (mask) >> 16;\
		r7 = r7 | r6;\
		r7 =~ r7;\
		sys_reg = r7;\
		csync;\
		(R7:6) = [SP++]

/*
 * Set the corresponding bits in a Memory Mapped Register (MMR);
 * All bits set in "mask" will be set in the MMR specified by "mmr_reg"
 * bitset_MMR(mmr_reg, mask), where mmr_reg is the MMR and mask are
 * the bits to be set.
 */
#define bitset_MMR(mmr_reg, mask)\
		[--SP] = (R7:6);\
		[--SP] = P5;\
		p5.l = mmr_reg & 0xffff;\
		p5.h = mmr_reg >> 16;\
		r7 = [p5];\
		r6.l = (mask) & 0xffff;\
		r6.h = (mask) >> 16;\
		r7 = r7 | r6;\
		[p5] = r7;\
		csync;\
		p5 = [SP++];\
		(R7:6) = [SP++]

/*
 * Clear the corresponding bits in a Memory Mapped Register (MMR);
 * All bits set in "mask" will be cleared in the MMR specified by "mmr_reg"
 * bitclr_MMRreg(mmr_reg, mask), where sys_reg is the MMR and mask are
 * the bits to be cleared.
 */
#define bitclr_MMR(mmr_reg, mask)\
		[--SP] = (R7:6);\
		[--SP] = P5;\
		p5.l = mmr_reg & 0xffff;\
		p5.h = mmr_reg >> 16;\
		r7 = [p5];\
		r7 =~ r7;\
		r6.l = (mask) & 0xffff;\
		r6.h = (mask) >> 16;\
		r7 = r7 | r6;\
		r7 =~ r7;\
		[p5] = r7;\
		csync;\
		p5 = [SP++];\
		(R7:6) = [SP++]

#endif				/* _MACROS_H */