svn commit: r204184 - head/sys/ia64/ia64

Marcel Moolenaar marcel at FreeBSD.org
Mon Feb 22 01:23:42 UTC 2010


Author: marcel
Date: Mon Feb 22 01:23:41 2010
New Revision: 204184
URL: http://svn.freebsd.org/changeset/base/204184

Log:
  Prefer I-units and M-units for nop instructions. This works around
  McKinley flaws. It also avoids using the F-unit in the kernel for
  no reason.

Modified:
  head/sys/ia64/ia64/context.S
  head/sys/ia64/ia64/exception.S
  head/sys/ia64/ia64/locore.S
  head/sys/ia64/ia64/support.S
  head/sys/ia64/ia64/syscall.S

Modified: head/sys/ia64/ia64/context.S
==============================================================================
--- head/sys/ia64/ia64/context.S	Sun Feb 21 23:41:59 2010	(r204183)
+++ head/sys/ia64/ia64/context.S	Mon Feb 22 01:23:41 2010	(r204184)
@@ -286,7 +286,7 @@ ENTRY(swapctx, 2)
 (p15)	br.ret.sptk	rp
 	;;
 }
-{	.mfb
+{	.mib
 	mov		r32=r33
 	nop		0
 	br.sptk		restorectx
@@ -338,10 +338,10 @@ ENTRY(save_callee_saved, 1)
 	mov		r17=b5
 	;;
 }
-{	.mfi
+{	.mii
 	st8		[r14]=r17,16		// b5
-	nop		0
 	mov		r16=ar.lc
+	nop		0
 	;;
 }
 {	.mmb
@@ -363,13 +363,13 @@ ENTRY(restore_callee_saved, 1)
 	add		r31=-8,r32
 	;;
 }
-{	.mmb
+{	.mmi
 	ld8.fill	r4=[r31],16		// r4
 	ld8.fill	r5=[r32],16		// r5
 	nop		0
 	;;
 }
-{	.mmb
+{	.mmi
 	ld8.fill	r6=[r31],16		// r6
 	ld8.fill	r7=[r32],16		// r7
 	nop		0

Modified: head/sys/ia64/ia64/exception.S
==============================================================================
--- head/sys/ia64/ia64/exception.S	Sun Feb 21 23:41:59 2010	(r204183)
+++ head/sys/ia64/ia64/exception.S	Mon Feb 22 01:23:41 2010	(r204184)
@@ -89,10 +89,10 @@ xhead:	data8	xtrace
 	addl	r29=1024*5*8,r0 ;;		\
 (p15)	sub	r27=r28,r29 ;;			\
 } ;						\
-{	.mib ;					\
+{	.mmi ;					\
 	st8	[r28]=r27 ;			\
-	mov	pr=r25,0x1ffff ;		\
-	nop	0 ;;				\
+	nop	0 ;				\
+	mov	pr=r25,0x1ffff ;;		\
 }
 
 #else
@@ -148,10 +148,10 @@ ENTRY_NOPROFILE(exception_save, 0)
 	add		r31=8,r30
 	;;
 }
-{	.mib
+{	.mmi
 	mov		r22=cr.iip
-	addl		r29=NTLBRT_SAVE,r0	// 22-bit restart token.
 	nop		0
+	addl		r29=NTLBRT_SAVE,r0	// 22-bit restart token.
 	;;
 }
 
@@ -235,7 +235,7 @@ exception_save_restart:
 	nop		0
 	;;
 }
-{	.mmb
+{	.mmi
 (p13)	mov		ar.rnat=r19
 	mov		r18=ar.bsp
 	nop		0
@@ -248,7 +248,7 @@ exception_save_restart:
 	;;
 }
 	// r19=ifs, r22=iip
-{	.mmb
+{	.mmi
 	st8		[r31]=r18,16		// ndirty
 	st8		[r30]=r19,16		// cfm
 	nop		0
@@ -260,7 +260,7 @@ exception_save_restart:
 	add		r29=16,r30
 	;;
 }
-{	.mmb
+{	.mmi
 	st8		[r30]=r17,24		// ifa
 	st8		[r31]=r18,24		// isr
 	nop		0
@@ -407,7 +407,7 @@ exception_save_restart:
 	movl		gp=__gp
 	;;
 }
-{	.mfb
+{	.mib
 	srlz.d
 	nop		0
 	br.sptk		b7
@@ -567,7 +567,7 @@ ENTRY_NOPROFILE(exception_restore, 0)
 	cmp.le		p14,p15=5,r28
 	;;
 }
-{	.mmb
+{	.mmi
 	ld8		r25=[r30]		// cfm
 	ld8		r19=[r31]		// ip
 	nop		0
@@ -606,13 +606,13 @@ exception_restore_restart:
 	dep		r31=0,r31,0,13		// 8KB aligned
 	;;
 }
-{	.mmb
+{	.mmi
 	mov		ar.k6=r31
 	mov		ar.rnat=r21
 	nop		0
 	;;
 }
-{	.mmb
+{	.mmi
 	mov		ar.unat=r17
 	mov		cr.iip=r19
 	nop		0
@@ -656,7 +656,7 @@ END(exception_restore)
 	add		out1=16,sp ;		\
 	br.call.sptk	rp=_func_ ;;		\
 } ;						\
-{	.mfb ;					\
+{	.mib ;					\
 	nop		0 ;			\
 	nop		0 ;			\
 	br.sptk		exception_restore ;;	\
@@ -1021,10 +1021,10 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
 	movl		r27=kstack
 	;;
 }
-{	.mib
+{	.mmi
 	mov		r28=sp
-	addl		r27=KSTACK_PAGES*PAGE_SIZE-16,r0
 	nop		0
+	addl		r27=KSTACK_PAGES*PAGE_SIZE-16,r0
 	;;
 }
 {	.mmi
@@ -1287,13 +1287,13 @@ IVT_ENTRY(Break_Instruction, 0x2c00)
 (p11)	srlz.d
 	add		out1=16,sp
 }
-{	.mfb
+{	.mib
 	nop		0
 	nop		0
 	br.call.sptk	rp=trap
 	;;
 }
-{	.mfb
+{	.mib
 	nop		0
 	nop		0
 	br.sptk		exception_restore
@@ -1308,19 +1308,19 @@ IVT_ENTRY(External_Interrupt, 0x3000)
 	br.sptk		exception_save
 	;;
 }
-{	.mfb
+{	.mmi
 	alloc		r15=ar.pfs,0,0,1,0
 	nop		0
 	nop		0
 	;;
 }
-{	.mfb
+{	.mib
 	add		out0=16,sp
 	nop		0
 	br.call.sptk	rp=interrupt
 	;;
 }
-{	.mfb
+{	.mib
 	nop		0
 	nop		0
 	br.sptk		exception_restore

Modified: head/sys/ia64/ia64/locore.S
==============================================================================
--- head/sys/ia64/ia64/locore.S	Sun Feb 21 23:41:59 2010	(r204183)
+++ head/sys/ia64/ia64/locore.S	Mon Feb 22 01:23:41 2010	(r204184)
@@ -98,13 +98,13 @@ ENTRY_NOPROFILE(__start, 1)
 	mov	out0=r0			// we are linked at the right address 
 	;;				// we just need to process fptrs
 }
-{	.bbb
+{	.mib
 	nop	0
 	nop	0
 	br.call.sptk.many rp=_reloc
 	;;
 }
-{	.bbb
+{	.mib
 	nop	0
 	nop	0
 	br.call.sptk.many rp=ia64_init
@@ -112,21 +112,21 @@ ENTRY_NOPROFILE(__start, 1)
 }
 	// We have the new bspstore in r8 and the new sp in r9.
 	// Switch onto the new stack and call mi_startup().
-{
+{	.mmi
 	mov	ar.rsc = 0
 	;;
 	mov	ar.bspstore = r8
 	mov	sp = r9
 	;;
 }
-{
+{	.mmi
 	loadrs
 	;;
 	mov	ar.rsc = 3
 	nop	0
 	;;
 }
-{
+{	.mib
 	nop	0
 	nop	0
 	br.call.sptk.many rp=mi_startup
@@ -163,7 +163,7 @@ ENTRY(fork_trampoline, 0)
 	ld8		out1=[r16]
 	nop		0
 }
-{	.mfb
+{	.mib
 	add		out2=16,sp
 	nop		0
 	br.call.sptk	rp=fork_exit
@@ -174,7 +174,7 @@ ENTRY(fork_trampoline, 0)
 	.global		enter_userland
 	.type		enter_userland, @function
 enter_userland:
-{	.mfb
+{	.mib
 	nop		0
 	nop		0
 	br.sptk		epc_syscall_return
@@ -282,7 +282,7 @@ ENTRY_NOPROFILE(os_boot_rendez,0)
 	add	sp = r18, r16
 	;;
 }
-{	.mfb
+{	.mib
 	mov	ar.rsc = 3
 	nop	0
 	br.call.sptk.few rp = ia64_ap_startup
@@ -290,7 +290,7 @@ ENTRY_NOPROFILE(os_boot_rendez,0)
 }
 	/* NOT REACHED */
 9:
-{	.mfb
+{	.mib
 	nop	0
 	nop	0
 	br.sptk	9b

Modified: head/sys/ia64/ia64/support.S
==============================================================================
--- head/sys/ia64/ia64/support.S	Sun Feb 21 23:41:59 2010	(r204183)
+++ head/sys/ia64/ia64/support.S	Mon Feb 22 01:23:41 2010	(r204184)
@@ -227,14 +227,14 @@ ENTRY(casuword, 3)
 	nop		0
 	;;
 }
-{	.mfb
+{	.mib
 	st8.rel		[r15]=r0		// Clear onfault
 	nop		0
 	br.ret.sptk	rp
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -277,14 +277,14 @@ ENTRY(casuword32, 3)
 	nop		0
 	;;
 }
-{	.mfb
+{	.mib
 	st8.rel		[r15]=r0		// Clear onfault
 	nop		0
 	br.ret.sptk	rp
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -338,7 +338,7 @@ ENTRY(subyte, 2)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -384,7 +384,7 @@ ENTRY(suword16, 2)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -430,7 +430,7 @@ ENTRY(suword32, 2)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -477,7 +477,7 @@ XENTRY(suword)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -531,7 +531,7 @@ ENTRY(fubyte, 1)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -577,7 +577,7 @@ ENTRY(fuword16, 2)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -623,7 +623,7 @@ ENTRY(fuword32, 2)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -670,7 +670,7 @@ XENTRY(fuword)
 	;;
 }
 1:
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -684,7 +684,7 @@ END(fuword64)
  */
 
 ENTRY(fuswintr, 1)
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp
@@ -693,7 +693,7 @@ ENTRY(fuswintr, 1)
 END(fuswintr)
 
 ENTRY(suswintr, 0)
-{	.mfb
+{	.mib
 	add		ret0=-1,r0
 	nop		0
 	br.ret.sptk	rp

Modified: head/sys/ia64/ia64/syscall.S
==============================================================================
--- head/sys/ia64/ia64/syscall.S	Sun Feb 21 23:41:59 2010	(r204183)
+++ head/sys/ia64/ia64/syscall.S	Mon Feb 22 01:23:41 2010	(r204184)
@@ -102,13 +102,13 @@ gw_ret:
 	;;
 }
 gw_ret_ia32:
-{	.mfb
+{	.mmi
 	flushrs
 	nop		0
 	nop		0
 	;;
 }
-{	.mfb
+{	.mib
 	nop		0
 	nop		0
 	br.ia.sptk	b6
@@ -193,7 +193,7 @@ ENTRY_NOPROFILE(epc_sigtramp, 0)
 	mov		b7=r16
 	;;
 }
-{	.mmb
+{	.mmi
 	alloc		r14=ar.pfs, 0, 0, 3, 0
 	mov		ar.rsc=15
 	nop		0
@@ -204,7 +204,7 @@ ENTRY_NOPROFILE(epc_sigtramp, 0)
 	mov		out0=r8
 	mov		out1=r9
 }
-{	.mfb
+{	.mib
 	add		out2=16,sp
 	nop		0
 	br.call.sptk	rp=b7
@@ -257,7 +257,7 @@ ENTRY_NOPROFILE(epc_syscall, 8)
 	add		r31=8,r30
 	;;
 }
-{	.mib
+{	.mii
 	mov		r22=ar.fpsr
 	sub		r29=r14,r30
 	nop		0
@@ -380,7 +380,7 @@ ENTRY_NOPROFILE(epc_syscall, 8)
 }
 	.global		epc_syscall_return
 epc_syscall_return:
-{	.mfb
+{	.mib
 	add		out0=16,sp
 	nop		0
 	br.call.sptk	rp=do_ast
@@ -392,7 +392,7 @@ epc_syscall_return:
 (p15)	br.spnt		1b			// restart syscall
 	;;
 }
-{	.mfb
+{	.mmi
 	ld8		r14=[r14]		// tf_flags
 	nop		0
 	nop		0
@@ -422,7 +422,7 @@ epc_syscall_return:
 	add		r31=r31,sp
 	;;
 }
-{	.mmb
+{	.mmi
 	ld8		r19=[r15],16		// pr
 	ld8		r20=[r14],16		// pfs (syscall caller)
 	nop		0
@@ -434,7 +434,7 @@ epc_syscall_return:
 	mov		pr=r19,0x1fffe
 	;;
 }
-{	.mmb
+{	.mmi
 	ld8		r23=[r15],16		// tp
 	ld8		r24=[r14],16		// rsc
 	nop		0
@@ -488,7 +488,7 @@ epc_syscall_return:
 	dep		r30=0,r30,0,13		// 8KB aligned.
 	;;
 }
-{	.mib
+{	.mii
 	mov		ar.k6=r30
 	mov		r13=r23
 	nop		0


More information about the svn-src-head mailing list