mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 16:38:31 +00:00 
			
		
		
		
	 83a7a2ad2a
			
		
	
	
		83a7a2ad2a
		
	
	
	
	
		
			
			We already have cpufeature indicies above 255, so use a 16-bit number for the alternatives index. This consumes a padding field and so doesn't add any size, but it means that abusing the padding field to create assembly errors on overflow no longer works. We can retain the test simply by redirecting it to the .discard section, however. [ v3: updated to include open-coded locations ] Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> LKML-Reference: <tip-f88731e3068f9d1392ba71cc9f50f035d26a0d4f@git.kernel.org> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
		
			
				
	
	
		
			59 lines
		
	
	
		
			970 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			970 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include <linux/linkage.h>
 | |
| #include <asm/dwarf2.h>
 | |
| 
 | |
| /*
 | |
|  * Zero a page. 	
 | |
|  * rdi	page
 | |
|  */			
 | |
| ENTRY(clear_page_c)
 | |
| 	CFI_STARTPROC
 | |
| 	movl $4096/8,%ecx
 | |
| 	xorl %eax,%eax
 | |
| 	rep stosq
 | |
| 	ret
 | |
| 	CFI_ENDPROC
 | |
| ENDPROC(clear_page_c)
 | |
| 
 | |
| ENTRY(clear_page)
 | |
| 	CFI_STARTPROC
 | |
| 	xorl   %eax,%eax
 | |
| 	movl   $4096/64,%ecx
 | |
| 	.p2align 4
 | |
| .Lloop:
 | |
| 	decl	%ecx
 | |
| #define PUT(x) movq %rax,x*8(%rdi)
 | |
| 	movq %rax,(%rdi)
 | |
| 	PUT(1)
 | |
| 	PUT(2)
 | |
| 	PUT(3)
 | |
| 	PUT(4)
 | |
| 	PUT(5)
 | |
| 	PUT(6)
 | |
| 	PUT(7)
 | |
| 	leaq	64(%rdi),%rdi
 | |
| 	jnz	.Lloop
 | |
| 	nop
 | |
| 	ret
 | |
| 	CFI_ENDPROC
 | |
| .Lclear_page_end:
 | |
| ENDPROC(clear_page)
 | |
| 
 | |
| 	/* Some CPUs run faster using the string instructions.
 | |
| 	   It is also a lot simpler. Use this when possible */
 | |
| 
 | |
| #include <asm/cpufeature.h>
 | |
| 
 | |
| 	.section .altinstr_replacement,"ax"
 | |
| 1:	.byte 0xeb					/* jmp <disp8> */
 | |
| 	.byte (clear_page_c - clear_page) - (2f - 1b)	/* offset */
 | |
| 2:
 | |
| 	.previous
 | |
| 	.section .altinstructions,"a"
 | |
| 	.align 8
 | |
| 	.quad clear_page
 | |
| 	.quad 1b
 | |
| 	.word X86_FEATURE_REP_GOOD
 | |
| 	.byte .Lclear_page_end - clear_page
 | |
| 	.byte 2b - 1b
 | |
| 	.previous
 |