o Move all files from sparc64/kernel/ to sparc/kernel - rename as appropriate o Update sparc/Makefile to the changes o Update sparc/kernel/Makefile to include the sparc64 files NOTE: This commit changes link order on sparc64! Link order had to change for either of sparc32 and sparc64. And assuming sparc64 see more testing than sparc32 change link order on sparc64 where issues will be caught faster. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			384 lines
		
	
	
	
		
			8.1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			384 lines
		
	
	
	
		
			8.1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
	/* This is trivial with the new code... */
 | 
						|
	.globl		do_fpdis
 | 
						|
	.type		do_fpdis,#function
 | 
						|
do_fpdis:
 | 
						|
	sethi		%hi(TSTATE_PEF), %g4
 | 
						|
	rdpr		%tstate, %g5
 | 
						|
	andcc		%g5, %g4, %g0
 | 
						|
	be,pt		%xcc, 1f
 | 
						|
	 nop
 | 
						|
	rd		%fprs, %g5
 | 
						|
	andcc		%g5, FPRS_FEF, %g0
 | 
						|
	be,pt		%xcc, 1f
 | 
						|
	 nop
 | 
						|
 | 
						|
	/* Legal state when DCR_IFPOE is set in Cheetah %dcr. */
 | 
						|
	sethi		%hi(109f), %g7
 | 
						|
	ba,pt		%xcc, etrap
 | 
						|
109:	 or		%g7, %lo(109b), %g7
 | 
						|
	add		%g0, %g0, %g0
 | 
						|
	ba,a,pt		%xcc, rtrap
 | 
						|
 | 
						|
1:	TRAP_LOAD_THREAD_REG(%g6, %g1)
 | 
						|
	ldub		[%g6 + TI_FPSAVED], %g5
 | 
						|
	wr		%g0, FPRS_FEF, %fprs
 | 
						|
	andcc		%g5, FPRS_FEF, %g0
 | 
						|
	be,a,pt		%icc, 1f
 | 
						|
	 clr		%g7
 | 
						|
	ldx		[%g6 + TI_GSR], %g7
 | 
						|
1:	andcc		%g5, FPRS_DL, %g0
 | 
						|
	bne,pn		%icc, 2f
 | 
						|
	 fzero		%f0
 | 
						|
	andcc		%g5, FPRS_DU, %g0
 | 
						|
	bne,pn		%icc, 1f
 | 
						|
	 fzero		%f2
 | 
						|
	faddd		%f0, %f2, %f4
 | 
						|
	fmuld		%f0, %f2, %f6
 | 
						|
	faddd		%f0, %f2, %f8
 | 
						|
	fmuld		%f0, %f2, %f10
 | 
						|
	faddd		%f0, %f2, %f12
 | 
						|
	fmuld		%f0, %f2, %f14
 | 
						|
	faddd		%f0, %f2, %f16
 | 
						|
	fmuld		%f0, %f2, %f18
 | 
						|
	faddd		%f0, %f2, %f20
 | 
						|
	fmuld		%f0, %f2, %f22
 | 
						|
	faddd		%f0, %f2, %f24
 | 
						|
	fmuld		%f0, %f2, %f26
 | 
						|
	faddd		%f0, %f2, %f28
 | 
						|
	fmuld		%f0, %f2, %f30
 | 
						|
	faddd		%f0, %f2, %f32
 | 
						|
	fmuld		%f0, %f2, %f34
 | 
						|
	faddd		%f0, %f2, %f36
 | 
						|
	fmuld		%f0, %f2, %f38
 | 
						|
	faddd		%f0, %f2, %f40
 | 
						|
	fmuld		%f0, %f2, %f42
 | 
						|
	faddd		%f0, %f2, %f44
 | 
						|
	fmuld		%f0, %f2, %f46
 | 
						|
	faddd		%f0, %f2, %f48
 | 
						|
	fmuld		%f0, %f2, %f50
 | 
						|
	faddd		%f0, %f2, %f52
 | 
						|
	fmuld		%f0, %f2, %f54
 | 
						|
	faddd		%f0, %f2, %f56
 | 
						|
	fmuld		%f0, %f2, %f58
 | 
						|
	b,pt		%xcc, fpdis_exit2
 | 
						|
	 faddd		%f0, %f2, %f60
 | 
						|
1:	mov		SECONDARY_CONTEXT, %g3
 | 
						|
	add		%g6, TI_FPREGS + 0x80, %g1
 | 
						|
	faddd		%f0, %f2, %f4
 | 
						|
	fmuld		%f0, %f2, %f6
 | 
						|
 | 
						|
661:	ldxa		[%g3] ASI_DMMU, %g5
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	ldxa		[%g3] ASI_MMU, %g5
 | 
						|
	.previous
 | 
						|
 | 
						|
	sethi		%hi(sparc64_kern_sec_context), %g2
 | 
						|
	ldx		[%g2 + %lo(sparc64_kern_sec_context)], %g2
 | 
						|
 | 
						|
661:	stxa		%g2, [%g3] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g2, [%g3] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
	add		%g6, TI_FPREGS + 0xc0, %g2
 | 
						|
	faddd		%f0, %f2, %f8
 | 
						|
	fmuld		%f0, %f2, %f10
 | 
						|
	membar		#Sync
 | 
						|
	ldda		[%g1] ASI_BLK_S, %f32
 | 
						|
	ldda		[%g2] ASI_BLK_S, %f48
 | 
						|
	membar		#Sync
 | 
						|
	faddd		%f0, %f2, %f12
 | 
						|
	fmuld		%f0, %f2, %f14
 | 
						|
	faddd		%f0, %f2, %f16
 | 
						|
	fmuld		%f0, %f2, %f18
 | 
						|
	faddd		%f0, %f2, %f20
 | 
						|
	fmuld		%f0, %f2, %f22
 | 
						|
	faddd		%f0, %f2, %f24
 | 
						|
	fmuld		%f0, %f2, %f26
 | 
						|
	faddd		%f0, %f2, %f28
 | 
						|
	fmuld		%f0, %f2, %f30
 | 
						|
	b,pt		%xcc, fpdis_exit
 | 
						|
	 nop
 | 
						|
2:	andcc		%g5, FPRS_DU, %g0
 | 
						|
	bne,pt		%icc, 3f
 | 
						|
	 fzero		%f32
 | 
						|
	mov		SECONDARY_CONTEXT, %g3
 | 
						|
	fzero		%f34
 | 
						|
 | 
						|
661:	ldxa		[%g3] ASI_DMMU, %g5
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	ldxa		[%g3] ASI_MMU, %g5
 | 
						|
	.previous
 | 
						|
 | 
						|
	add		%g6, TI_FPREGS, %g1
 | 
						|
	sethi		%hi(sparc64_kern_sec_context), %g2
 | 
						|
	ldx		[%g2 + %lo(sparc64_kern_sec_context)], %g2
 | 
						|
 | 
						|
661:	stxa		%g2, [%g3] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g2, [%g3] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
	add		%g6, TI_FPREGS + 0x40, %g2
 | 
						|
	faddd		%f32, %f34, %f36
 | 
						|
	fmuld		%f32, %f34, %f38
 | 
						|
	membar		#Sync
 | 
						|
	ldda		[%g1] ASI_BLK_S, %f0
 | 
						|
	ldda		[%g2] ASI_BLK_S, %f16
 | 
						|
	membar		#Sync
 | 
						|
	faddd		%f32, %f34, %f40
 | 
						|
	fmuld		%f32, %f34, %f42
 | 
						|
	faddd		%f32, %f34, %f44
 | 
						|
	fmuld		%f32, %f34, %f46
 | 
						|
	faddd		%f32, %f34, %f48
 | 
						|
	fmuld		%f32, %f34, %f50
 | 
						|
	faddd		%f32, %f34, %f52
 | 
						|
	fmuld		%f32, %f34, %f54
 | 
						|
	faddd		%f32, %f34, %f56
 | 
						|
	fmuld		%f32, %f34, %f58
 | 
						|
	faddd		%f32, %f34, %f60
 | 
						|
	fmuld		%f32, %f34, %f62
 | 
						|
	ba,pt		%xcc, fpdis_exit
 | 
						|
	 nop
 | 
						|
3:	mov		SECONDARY_CONTEXT, %g3
 | 
						|
	add		%g6, TI_FPREGS, %g1
 | 
						|
 | 
						|
661:	ldxa		[%g3] ASI_DMMU, %g5
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	ldxa		[%g3] ASI_MMU, %g5
 | 
						|
	.previous
 | 
						|
 | 
						|
	sethi		%hi(sparc64_kern_sec_context), %g2
 | 
						|
	ldx		[%g2 + %lo(sparc64_kern_sec_context)], %g2
 | 
						|
 | 
						|
661:	stxa		%g2, [%g3] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g2, [%g3] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
	mov		0x40, %g2
 | 
						|
	membar		#Sync
 | 
						|
	ldda		[%g1] ASI_BLK_S, %f0
 | 
						|
	ldda		[%g1 + %g2] ASI_BLK_S, %f16
 | 
						|
	add		%g1, 0x80, %g1
 | 
						|
	ldda		[%g1] ASI_BLK_S, %f32
 | 
						|
	ldda		[%g1 + %g2] ASI_BLK_S, %f48
 | 
						|
	membar		#Sync
 | 
						|
fpdis_exit:
 | 
						|
 | 
						|
661:	stxa		%g5, [%g3] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g5, [%g3] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
fpdis_exit2:
 | 
						|
	wr		%g7, 0, %gsr
 | 
						|
	ldx		[%g6 + TI_XFSR], %fsr
 | 
						|
	rdpr		%tstate, %g3
 | 
						|
	or		%g3, %g4, %g3		! anal...
 | 
						|
	wrpr		%g3, %tstate
 | 
						|
	wr		%g0, FPRS_FEF, %fprs	! clean DU/DL bits
 | 
						|
	retry
 | 
						|
	.size		do_fpdis,.-do_fpdis
 | 
						|
 | 
						|
	.align		32
 | 
						|
	.type		fp_other_bounce,#function
 | 
						|
fp_other_bounce:
 | 
						|
	call		do_fpother
 | 
						|
	 add		%sp, PTREGS_OFF, %o0
 | 
						|
	ba,pt		%xcc, rtrap
 | 
						|
	 nop
 | 
						|
	.size		fp_other_bounce,.-fp_other_bounce
 | 
						|
 | 
						|
	.align		32
 | 
						|
	.globl		do_fpother_check_fitos
 | 
						|
	.type		do_fpother_check_fitos,#function
 | 
						|
do_fpother_check_fitos:
 | 
						|
	TRAP_LOAD_THREAD_REG(%g6, %g1)
 | 
						|
	sethi		%hi(fp_other_bounce - 4), %g7
 | 
						|
	or		%g7, %lo(fp_other_bounce - 4), %g7
 | 
						|
 | 
						|
	/* NOTE: Need to preserve %g7 until we fully commit
 | 
						|
	 *       to the fitos fixup.
 | 
						|
	 */
 | 
						|
	stx		%fsr, [%g6 + TI_XFSR]
 | 
						|
	rdpr		%tstate, %g3
 | 
						|
	andcc		%g3, TSTATE_PRIV, %g0
 | 
						|
	bne,pn		%xcc, do_fptrap_after_fsr
 | 
						|
	 nop
 | 
						|
	ldx		[%g6 + TI_XFSR], %g3
 | 
						|
	srlx		%g3, 14, %g1
 | 
						|
	and		%g1, 7, %g1
 | 
						|
	cmp		%g1, 2			! Unfinished FP-OP
 | 
						|
	bne,pn		%xcc, do_fptrap_after_fsr
 | 
						|
	 sethi		%hi(1 << 23), %g1	! Inexact
 | 
						|
	andcc		%g3, %g1, %g0
 | 
						|
	bne,pn		%xcc, do_fptrap_after_fsr
 | 
						|
	 rdpr		%tpc, %g1
 | 
						|
	lduwa		[%g1] ASI_AIUP, %g3	! This cannot ever fail
 | 
						|
#define FITOS_MASK	0xc1f83fe0
 | 
						|
#define FITOS_COMPARE	0x81a01880
 | 
						|
	sethi		%hi(FITOS_MASK), %g1
 | 
						|
	or		%g1, %lo(FITOS_MASK), %g1
 | 
						|
	and		%g3, %g1, %g1
 | 
						|
	sethi		%hi(FITOS_COMPARE), %g2
 | 
						|
	or		%g2, %lo(FITOS_COMPARE), %g2
 | 
						|
	cmp		%g1, %g2
 | 
						|
	bne,pn		%xcc, do_fptrap_after_fsr
 | 
						|
	 nop
 | 
						|
	std		%f62, [%g6 + TI_FPREGS + (62 * 4)]
 | 
						|
	sethi		%hi(fitos_table_1), %g1
 | 
						|
	and		%g3, 0x1f, %g2
 | 
						|
	or		%g1, %lo(fitos_table_1),  %g1
 | 
						|
	sllx		%g2, 2, %g2
 | 
						|
	jmpl		%g1 + %g2, %g0
 | 
						|
	 ba,pt		%xcc, fitos_emul_continue
 | 
						|
 | 
						|
fitos_table_1:
 | 
						|
	fitod		%f0, %f62
 | 
						|
	fitod		%f1, %f62
 | 
						|
	fitod		%f2, %f62
 | 
						|
	fitod		%f3, %f62
 | 
						|
	fitod		%f4, %f62
 | 
						|
	fitod		%f5, %f62
 | 
						|
	fitod		%f6, %f62
 | 
						|
	fitod		%f7, %f62
 | 
						|
	fitod		%f8, %f62
 | 
						|
	fitod		%f9, %f62
 | 
						|
	fitod		%f10, %f62
 | 
						|
	fitod		%f11, %f62
 | 
						|
	fitod		%f12, %f62
 | 
						|
	fitod		%f13, %f62
 | 
						|
	fitod		%f14, %f62
 | 
						|
	fitod		%f15, %f62
 | 
						|
	fitod		%f16, %f62
 | 
						|
	fitod		%f17, %f62
 | 
						|
	fitod		%f18, %f62
 | 
						|
	fitod		%f19, %f62
 | 
						|
	fitod		%f20, %f62
 | 
						|
	fitod		%f21, %f62
 | 
						|
	fitod		%f22, %f62
 | 
						|
	fitod		%f23, %f62
 | 
						|
	fitod		%f24, %f62
 | 
						|
	fitod		%f25, %f62
 | 
						|
	fitod		%f26, %f62
 | 
						|
	fitod		%f27, %f62
 | 
						|
	fitod		%f28, %f62
 | 
						|
	fitod		%f29, %f62
 | 
						|
	fitod		%f30, %f62
 | 
						|
	fitod		%f31, %f62
 | 
						|
 | 
						|
fitos_emul_continue:
 | 
						|
	sethi		%hi(fitos_table_2), %g1
 | 
						|
	srl		%g3, 25, %g2
 | 
						|
	or		%g1, %lo(fitos_table_2), %g1
 | 
						|
	and		%g2, 0x1f, %g2
 | 
						|
	sllx		%g2, 2, %g2
 | 
						|
	jmpl		%g1 + %g2, %g0
 | 
						|
	 ba,pt		%xcc, fitos_emul_fini
 | 
						|
 | 
						|
fitos_table_2:
 | 
						|
	fdtos		%f62, %f0
 | 
						|
	fdtos		%f62, %f1
 | 
						|
	fdtos		%f62, %f2
 | 
						|
	fdtos		%f62, %f3
 | 
						|
	fdtos		%f62, %f4
 | 
						|
	fdtos		%f62, %f5
 | 
						|
	fdtos		%f62, %f6
 | 
						|
	fdtos		%f62, %f7
 | 
						|
	fdtos		%f62, %f8
 | 
						|
	fdtos		%f62, %f9
 | 
						|
	fdtos		%f62, %f10
 | 
						|
	fdtos		%f62, %f11
 | 
						|
	fdtos		%f62, %f12
 | 
						|
	fdtos		%f62, %f13
 | 
						|
	fdtos		%f62, %f14
 | 
						|
	fdtos		%f62, %f15
 | 
						|
	fdtos		%f62, %f16
 | 
						|
	fdtos		%f62, %f17
 | 
						|
	fdtos		%f62, %f18
 | 
						|
	fdtos		%f62, %f19
 | 
						|
	fdtos		%f62, %f20
 | 
						|
	fdtos		%f62, %f21
 | 
						|
	fdtos		%f62, %f22
 | 
						|
	fdtos		%f62, %f23
 | 
						|
	fdtos		%f62, %f24
 | 
						|
	fdtos		%f62, %f25
 | 
						|
	fdtos		%f62, %f26
 | 
						|
	fdtos		%f62, %f27
 | 
						|
	fdtos		%f62, %f28
 | 
						|
	fdtos		%f62, %f29
 | 
						|
	fdtos		%f62, %f30
 | 
						|
	fdtos		%f62, %f31
 | 
						|
 | 
						|
fitos_emul_fini:
 | 
						|
	ldd		[%g6 + TI_FPREGS + (62 * 4)], %f62
 | 
						|
	done
 | 
						|
	.size		do_fpother_check_fitos,.-do_fpother_check_fitos
 | 
						|
 | 
						|
	.align		32
 | 
						|
	.globl		do_fptrap
 | 
						|
	.type		do_fptrap,#function
 | 
						|
do_fptrap:
 | 
						|
	TRAP_LOAD_THREAD_REG(%g6, %g1)
 | 
						|
	stx		%fsr, [%g6 + TI_XFSR]
 | 
						|
do_fptrap_after_fsr:
 | 
						|
	ldub		[%g6 + TI_FPSAVED], %g3
 | 
						|
	rd		%fprs, %g1
 | 
						|
	or		%g3, %g1, %g3
 | 
						|
	stb		%g3, [%g6 + TI_FPSAVED]
 | 
						|
	rd		%gsr, %g3
 | 
						|
	stx		%g3, [%g6 + TI_GSR]
 | 
						|
	mov		SECONDARY_CONTEXT, %g3
 | 
						|
 | 
						|
661:	ldxa		[%g3] ASI_DMMU, %g5
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	ldxa		[%g3] ASI_MMU, %g5
 | 
						|
	.previous
 | 
						|
 | 
						|
	sethi		%hi(sparc64_kern_sec_context), %g2
 | 
						|
	ldx		[%g2 + %lo(sparc64_kern_sec_context)], %g2
 | 
						|
 | 
						|
661:	stxa		%g2, [%g3] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g2, [%g3] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
	add		%g6, TI_FPREGS, %g2
 | 
						|
	andcc		%g1, FPRS_DL, %g0
 | 
						|
	be,pn		%icc, 4f
 | 
						|
	 mov		0x40, %g3
 | 
						|
	stda		%f0, [%g2] ASI_BLK_S
 | 
						|
	stda		%f16, [%g2 + %g3] ASI_BLK_S
 | 
						|
	andcc		%g1, FPRS_DU, %g0
 | 
						|
	be,pn		%icc, 5f
 | 
						|
4:       add		%g2, 128, %g2
 | 
						|
	stda		%f32, [%g2] ASI_BLK_S
 | 
						|
	stda		%f48, [%g2 + %g3] ASI_BLK_S
 | 
						|
5:	mov		SECONDARY_CONTEXT, %g1
 | 
						|
	membar		#Sync
 | 
						|
 | 
						|
661:	stxa		%g5, [%g1] ASI_DMMU
 | 
						|
	.section	.sun4v_1insn_patch, "ax"
 | 
						|
	.word		661b
 | 
						|
	stxa		%g5, [%g1] ASI_MMU
 | 
						|
	.previous
 | 
						|
 | 
						|
	membar		#Sync
 | 
						|
	ba,pt		%xcc, etrap
 | 
						|
	 wr		%g0, 0, %fprs
 | 
						|
	.size		do_fptrap,.-do_fptrap
 |