From mboxrd@z Thu Jan 1 00:00:00 1970 From: Feng Wu Subject: [PATCH v3 2/5] x86: Add definitions for NOP operation Date: Fri, 30 May 2014 16:56:22 +0800 Message-ID: <1401440185-11266-3-git-send-email-feng.wu@intel.com> References: <1401440185-11266-1-git-send-email-feng.wu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1401440185-11266-1-git-send-email-feng.wu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Feng Wu , ian.campbell@citrix.com, andrew.cooper3@citrix.com, tim@xen.org, keir.xen@gmail.com, stefano.stabellini@citrix.com, JBeulich@suse.com, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org This patch adds definitions for different length of NOP operation. Signed-off-by: Feng Wu Reviewed-by: Andrew Cooper --- xen/include/asm-x86/nops.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 xen/include/asm-x86/nops.h diff --git a/xen/include/asm-x86/nops.h b/xen/include/asm-x86/nops.h new file mode 100644 index 0000000..05f9162 --- /dev/null +++ b/xen/include/asm-x86/nops.h @@ -0,0 +1,66 @@ +#ifndef __X86_ASM_NOPS_H__ +#define __X86_ASM_NOPS_H__ + +#include + +/* + * Define nops for use with alternative(). + */ + +/* + * Opteron 64bit nops + * 1: nop + * 2: osp nop + * 3: osp osp nop + * 4: osp osp osp nop + */ +#define K8_NOP1 0x90 +#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 + +/* + * 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) + * Note: All the above are assumed to be a single instruction. + * There is kernel code that depends on this. + */ +#define P6_NOP1 0x90 +#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 + +#ifdef __ASSEMBLY__ +#define _ASM_MK_NOP(x) .byte x +#else +#define _ASM_MK_NOP(x) ".byte " __stringify(x) "\n" +#endif + +#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_NOP_MAX 8 + +#endif /* __X86_ASM_NOPS_H__ */ -- 1.8.3.1