Blame view

arch/x86/include/asm/nops.h 4.21 KB
1965aae3c   H. Peter Anvin   x86: Fix ASM_X86_...
1
2
  #ifndef _ASM_X86_NOPS_H
  #define _ASM_X86_NOPS_H
bd61643ef   Andi Kleen   x86: move nop dec...
3

dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
4
5
6
7
8
9
10
  /*
   * Define nops for use with alternative() and for tracing.
   *
   * *_NOP5_ATOMIC must be a single instruction.
   */
  
  #define NOP_DS_PREFIX 0x3e
bd61643ef   Andi Kleen   x86: move nop dec...
11

4cd20952d   H. Peter Anvin   x86: add comments...
12
13
  /* generic versions from gas
     1: nop
5d570cbbf   Mikael Pettersson   x86: correct/clar...
14
15
     the following instructions are NOT nops in 64-bit mode,
     for 64-bit mode use K8 or P6 nops instead
4cd20952d   H. Peter Anvin   x86: add comments...
16
17
18
19
20
21
     2: movl %esi,%esi
     3: leal 0x00(%esi),%esi
     4: leal 0x00(,%esi,1),%esi
     6: leal 0x00000000(%esi),%esi
     7: leal 0x00000000(,%esi,1),%esi
  */
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
22
23
24
25
26
27
28
29
30
  #define GENERIC_NOP1 0x90
  #define GENERIC_NOP2 0x89,0xf6
  #define GENERIC_NOP3 0x8d,0x76,0x00
  #define GENERIC_NOP4 0x8d,0x74,0x26,0x00
  #define GENERIC_NOP5 GENERIC_NOP1,GENERIC_NOP4
  #define GENERIC_NOP6 0x8d,0xb6,0x00,0x00,0x00,0x00
  #define GENERIC_NOP7 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00
  #define GENERIC_NOP8 GENERIC_NOP1,GENERIC_NOP7
  #define GENERIC_NOP5_ATOMIC NOP_DS_PREFIX,GENERIC_NOP4
bd61643ef   Andi Kleen   x86: move nop dec...
31

4cd20952d   H. Peter Anvin   x86: add comments...
32
33
34
35
36
37
  /* Opteron 64bit nops
     1: nop
     2: osp nop
     3: osp osp nop
     4: osp osp osp nop
  */
bd61643ef   Andi Kleen   x86: move nop dec...
38
  #define K8_NOP1 GENERIC_NOP1
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
39
40
41
42
43
44
45
46
  #define K8_NOP2	0x66,K8_NOP1
  #define K8_NOP3	0x66,K8_NOP2
  #define K8_NOP4	0x66,K8_NOP3
  #define K8_NOP5	K8_NOP3,K8_NOP2
  #define K8_NOP6	K8_NOP3,K8_NOP3
  #define K8_NOP7	K8_NOP4,K8_NOP3
  #define K8_NOP8	K8_NOP4,K8_NOP4
  #define K8_NOP5_ATOMIC 0x66,K8_NOP4
bd61643ef   Andi Kleen   x86: move nop dec...
47

4cd20952d   H. Peter Anvin   x86: add comments...
48
  /* K7 nops
0d2eb44f6   Lucas De Marchi   x86: Fix common m...
49
     uses eax dependencies (arbitrary choice)
4cd20952d   H. Peter Anvin   x86: add comments...
50
51
52
53
54
55
56
57
     1: nop
     2: movl %eax,%eax
     3: leal (,%eax,1),%eax
     4: leal 0x00(,%eax,1),%eax
     6: leal 0x00000000(%eax),%eax
     7: leal 0x00000000(,%eax,1),%eax
  */
  #define K7_NOP1	GENERIC_NOP1
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
58
59
60
61
62
63
64
65
  #define K7_NOP2	0x8b,0xc0
  #define K7_NOP3	0x8d,0x04,0x20
  #define K7_NOP4	0x8d,0x44,0x20,0x00
  #define K7_NOP5	K7_NOP4,K7_NOP1
  #define K7_NOP6	0x8d,0x80,0,0,0,0
  #define K7_NOP7	0x8D,0x04,0x05,0,0,0,0
  #define K7_NOP8	K7_NOP7,K7_NOP1
  #define K7_NOP5_ATOMIC NOP_DS_PREFIX,K7_NOP4
bd61643ef   Andi Kleen   x86: move nop dec...
66

4cd20952d   H. Peter Anvin   x86: add comments...
67
68
69
70
71
72
73
74
75
76
  /* P6 nops
     uses eax dependencies (Intel-recommended choice)
     1: nop
     2: osp nop
     3: nopl (%eax)
     4: nopl 0x00(%eax)
     5: nopl 0x00(%eax,%eax,1)
     6: osp nopl 0x00(%eax,%eax,1)
     7: nopl 0x00000000(%eax)
     8: nopl 0x00000000(%eax,%eax,1)
fc06b8520   Steven Rostedt   x86/tracing: comm...
77
78
     Note: All the above are assumed to be a single instruction.
  	There is kernel code that depends on this.
4cd20952d   H. Peter Anvin   x86: add comments...
79
  */
bd61643ef   Andi Kleen   x86: move nop dec...
80
  #define P6_NOP1	GENERIC_NOP1
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
81
82
83
84
85
86
87
88
89
90
91
  #define P6_NOP2	0x66,0x90
  #define P6_NOP3	0x0f,0x1f,0x00
  #define P6_NOP4	0x0f,0x1f,0x40,0
  #define P6_NOP5	0x0f,0x1f,0x44,0x00,0
  #define P6_NOP6	0x66,0x0f,0x1f,0x44,0x00,0
  #define P6_NOP7	0x0f,0x1f,0x80,0,0,0,0
  #define P6_NOP8	0x0f,0x1f,0x84,0x00,0,0,0,0
  #define P6_NOP5_ATOMIC P6_NOP5
  
  #define _ASM_MK_NOP(x) ".byte " __stringify(x) "
  "
bd61643ef   Andi Kleen   x86: move nop dec...
92

871de9390   Suresh Siddha   x86: fix 64-bit a...
93
  #if defined(CONFIG_MK7)
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
94
95
96
97
98
99
100
101
102
  #define ASM_NOP1 _ASM_MK_NOP(K7_NOP1)
  #define ASM_NOP2 _ASM_MK_NOP(K7_NOP2)
  #define ASM_NOP3 _ASM_MK_NOP(K7_NOP3)
  #define ASM_NOP4 _ASM_MK_NOP(K7_NOP4)
  #define ASM_NOP5 _ASM_MK_NOP(K7_NOP5)
  #define ASM_NOP6 _ASM_MK_NOP(K7_NOP6)
  #define ASM_NOP7 _ASM_MK_NOP(K7_NOP7)
  #define ASM_NOP8 _ASM_MK_NOP(K7_NOP8)
  #define ASM_NOP5_ATOMIC _ASM_MK_NOP(K7_NOP5_ATOMIC)
7343b3b3a   H. Peter Anvin   x86: require fami...
103
  #elif defined(CONFIG_X86_P6_NOP)
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
104
105
106
107
108
109
110
111
112
  #define ASM_NOP1 _ASM_MK_NOP(P6_NOP1)
  #define ASM_NOP2 _ASM_MK_NOP(P6_NOP2)
  #define ASM_NOP3 _ASM_MK_NOP(P6_NOP3)
  #define ASM_NOP4 _ASM_MK_NOP(P6_NOP4)
  #define ASM_NOP5 _ASM_MK_NOP(P6_NOP5)
  #define ASM_NOP6 _ASM_MK_NOP(P6_NOP6)
  #define ASM_NOP7 _ASM_MK_NOP(P6_NOP7)
  #define ASM_NOP8 _ASM_MK_NOP(P6_NOP8)
  #define ASM_NOP5_ATOMIC _ASM_MK_NOP(P6_NOP5_ATOMIC)
871de9390   Suresh Siddha   x86: fix 64-bit a...
113
  #elif defined(CONFIG_X86_64)
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
114
115
116
117
118
119
120
121
122
  #define ASM_NOP1 _ASM_MK_NOP(K8_NOP1)
  #define ASM_NOP2 _ASM_MK_NOP(K8_NOP2)
  #define ASM_NOP3 _ASM_MK_NOP(K8_NOP3)
  #define ASM_NOP4 _ASM_MK_NOP(K8_NOP4)
  #define ASM_NOP5 _ASM_MK_NOP(K8_NOP5)
  #define ASM_NOP6 _ASM_MK_NOP(K8_NOP6)
  #define ASM_NOP7 _ASM_MK_NOP(K8_NOP7)
  #define ASM_NOP8 _ASM_MK_NOP(K8_NOP8)
  #define ASM_NOP5_ATOMIC _ASM_MK_NOP(K8_NOP5_ATOMIC)
bd61643ef   Andi Kleen   x86: move nop dec...
123
  #else
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
124
125
126
127
128
129
130
131
132
  #define ASM_NOP1 _ASM_MK_NOP(GENERIC_NOP1)
  #define ASM_NOP2 _ASM_MK_NOP(GENERIC_NOP2)
  #define ASM_NOP3 _ASM_MK_NOP(GENERIC_NOP3)
  #define ASM_NOP4 _ASM_MK_NOP(GENERIC_NOP4)
  #define ASM_NOP5 _ASM_MK_NOP(GENERIC_NOP5)
  #define ASM_NOP6 _ASM_MK_NOP(GENERIC_NOP6)
  #define ASM_NOP7 _ASM_MK_NOP(GENERIC_NOP7)
  #define ASM_NOP8 _ASM_MK_NOP(GENERIC_NOP8)
  #define ASM_NOP5_ATOMIC _ASM_MK_NOP(GENERIC_NOP5_ATOMIC)
bd61643ef   Andi Kleen   x86: move nop dec...
133
134
135
  #endif
  
  #define ASM_NOP_MAX 8
dc326fca2   H. Peter Anvin   x86, cpu: Clean u...
136
137
138
139
140
141
  #define NOP_ATOMIC5 (ASM_NOP_MAX+1)	/* Entry for the 5-byte atomic NOP */
  
  #ifndef __ASSEMBLY__
  extern const unsigned char * const *ideal_nops;
  extern void arch_init_ideal_nops(void);
  #endif
bd61643ef   Andi Kleen   x86: move nop dec...
142

1965aae3c   H. Peter Anvin   x86: Fix ASM_X86_...
143
  #endif /* _ASM_X86_NOPS_H */