[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-sparc
Subject:    Re: Another gcc 3.4 fix
From:       Mathieu Chouquet-Stringer <mchouque () online ! fr>
Date:       2004-05-12 19:59:13
Message-ID: 20040512195913.GA15908 () localhost
[Download RAW message or body]

On Wed, May 12, 2004 at 12:50:11PM -0700, David S. Miller wrote:
> Please send the full output gcc-3.4 gives for kernel_unaligned_trap().
> There is no way it can delete that whole asm statement that has
> the kernel_unaligned_trap_fault definition, the asm is marked
> volatile afterall.

I hope I cut at the right places:

	.section	".text"
	.align 4
	.align 32
	.global kernel_unaligned_trap
	.type	kernel_unaligned_trap, #function
	.proc	020
kernel_unaligned_trap:
	.register	%g7, #scratch
	!#PROLOGUE# 0
	save	%sp, -208, %sp
	!#PROLOGUE# 1
	srl	%i1, 21, %g1
	mov	0, %l2
	and	%g1, 1, %g1
	brz,pt	%g1, .LL69
	srl	%i1, 19, %g5
	and	%g5, 15, %g1
	mov	2, %l2
	cmp	%g1, 15
	movne	%icc, 1, %l2
.LL69:
	and	%g5, 15, %g2
	xor	%g2, 11, %g1
	xor	%g2, 14, %g2
	subcc	%g0, %g1, %g0
	subx	%g0, -1, %g3
	subcc	%g0, %g2, %g0
	subx	%g0, -1, %g1
	orcc	%g3, %g1, %g0
	bne,pt	%icc, .LL75
	mov	8, %l4
	andcc	%g5, 3, %g2
	bne,pt	%icc, .LL113
	mov	4, %l4
.LL75:
	srl	%i1, 24, %g1
	andcc	%g1, 1, %g0
	bne,pn	%xcc, .LL83
	mov	%l4, %l0
	cmp	%l2, 2
	bne,pn	%icc, .LL82
	srl	%i1, 25, %g1
.LL83:
	ldx	[%i0+136], %o1
	sethi	%hi(.LLC8), %o0
	call	printk, 0
	or	%o0, %lo(.LLC8), %o0
	sethi	%hi(.LLC9), %o0
	mov	%i0, %o1
	call	die_if_kernel, 0
	or	%o0, %lo(.LLC9), %o0
.LL113:
	cmp	%g2, 3
	be,pn	%icc, .LL75
	mov	16, %l4
	cmp	%g2, 2
	be,pt	%icc, .LL75
	mov	2, %l4
	srl	%i1, 0, %o1
	sethi	%hi(.LLC6), %o0
	call	printk, 0
	or	%o0, %lo(.LLC6), %o0
	sethi	%hi(.LLC7), %o0
	ldx	[%g6+40], %o1
	call	die_if_kernel, 0
	or	%o0, %lo(.LLC7), %o0
.LL82:
	mov	%i0, %o0
	srl	%i1, 0, %o1
	and	%g1, 31, %l1
	srl	%l1, 0, %l3
	call	compute_effective_address, 0
	mov	%l3, %o2
	cmp	%l2, 0
	be,pn	%icc, .LL89
	mov	%o0, %l5
	cmp	%l2, 1
	bne,pn	%icc, .LL114
	cmp	%l0, 16
	stx	%g0, [%fp+2023]
	be,pn	%icc, .LL115
	add	%fp, 2023, %l4
	cmp	%l1, 0
	bne,a,pn %icc, .LL116
	mov	%l3, %o0
.LL100:
	srl	%i1, 23, %g1
	andcc	%g1, 1, %g0
	be,pt	%xcc, .LL104
	mov	128, %g3
	srl	%i1, 5, %g1
	srl	%i1, 13, %g2
	andcc	%g2, 1, %g0
	be,pt	%xcc, .LL104
	and	%g1, 0xff, %g3
	ldub	[%i0+132], %g3
.LL104:
	wr	%g3, 0, %asi
	ldx	[%l4], %l1
cmp	%l0, 2
	be,pn	%icc, 2f
	 cmp	%l0, 4
	be,pt	%icc, 1f
	 srlx	%l1, 24, %l2
	srlx	%l1, 56, %g1
	srlx	%l1, 48, %g7
4:	stba	%g1, [%l5] %asi
	srlx	%l1, 40, %g1
5:	stba	%g7, [%l5 + 1] %asi
	srlx	%l1, 32, %g7
6:	stba	%g1, [%l5 + 2] %asi
7:	stba	%g7, [%l5 + 3] %asi
	srlx	%l1, 16, %g1
8:	stba	%l2, [%l5 + 4] %asi
	srlx	%l1, 8, %g7
9:	stba	%g1, [%l5 + 5] %asi
10:	stba	%g7, [%l5 + 6] %asi
	ba,pt	%xcc, 0f
11:	 stba	%l1, [%l5 + 7] %asi
1:	srl	%l1, 16, %g7
12:	stba	%l2, [%l5] %asi
	srl	%l1, 8, %l2
13:	stba	%g7, [%l5 + 1] %asi
14:	stba	%l2, [%l5 + 2] %asi
	ba,pt	%xcc, 0f
15:	 stba	%l1, [%l5 + 3] %asi
2:	srl	%l1, 8, %l2
16:	stba	%l2, [%l5] %asi
17:	stba	%l1, [%l5 + 1] %asi
0:
	wr	%g0, 17, %asi

	.section __ex_table
	.word	4b, kernel_unaligned_trap_fault
	.word	5b, kernel_unaligned_trap_fault
	.word	6b, kernel_unaligned_trap_fault
	.word	7b, kernel_unaligned_trap_fault
	.word	8b, kernel_unaligned_trap_fault
	.word	9b, kernel_unaligned_trap_fault
	.word	10b, kernel_unaligned_trap_fault
	.word	11b, kernel_unaligned_trap_fault
	.word	12b, kernel_unaligned_trap_fault
	.word	13b, kernel_unaligned_trap_fault
	.word	14b, kernel_unaligned_trap_fault
	.word	15b, kernel_unaligned_trap_fault
	.word	16b, kernel_unaligned_trap_fault
	.word	17b, kernel_unaligned_trap_fault

	.previous
	
	ldx	[%i0+144], %g3
.LL118:
	stx	%g3, [%i0+136]
	add	%g3, 4, %g2
	stx	%g2, [%i0+144]
	ldx	[%g6+8], %g1
	andcc	%g1, 128, %g0
	be,pt	%xcc, .LL67
	mov	-1, %g1
	srlx	%g1, 32, %g1
	and	%g2, %g1, %g2
	and	%g3, %g1, %g1
	stx	%g2, [%i0+144]
	ba,pt	%xcc, .LL67
	stx	%g1, [%i0+136]
.LL89:
	mov	%l3, %o0
	call	fetch_reg_addr, 0
	mov	%i0, %o1
	srl	%i1, 23, %g2
	sethi	%hi(4194304), %g1
	and	%i1, %g1, %g5
	andcc	%g2, 1, %g0
	be,pt	%xcc, .LL93
	mov	128, %g3
	srl	%i1, 5, %g1
	srl	%i1, 13, %g2
	andcc	%g2, 1, %g0
	be,pt	%xcc, .LL93
	and	%g1, 0xff, %g3
	ldub	[%i0+132], %g3
.LL93:
	wr	%g3, 0, %asi
	cmp	%l4, 8
	bge,pn	%icc, 9f
	 cmp	%l4, 4
	be,pt	%icc, 6f
4:	 lduba	[%l5] %asi, %l1
5:	lduba	[%l5 + 1] %asi, %l2
	sll	%l1, 8, %l1
	brz,pt	%g5, 3f
	 add	%l1, %l2, %l1
	sllx	%l1, 48, %l1
	srax	%l1, 48, %l1
3:	ba,pt	%xcc, 0f
	 stx	%l1, [%o0]
6:	lduba	[%l5 + 1] %asi, %l2
	sll	%l1, 24, %l1
7:	lduba	[%l5 + 2] %asi, %g7
	sll	%l2, 16, %l2
8:	lduba	[%l5 + 3] %asi, %g1
	sll	%g7, 8, %g7
	or	%l1, %l2, %l1
	or	%g7, %g1, %g7
	or	%l1, %g7, %l1
	brnz,a,pt %g5, 3f
	 sra	%l1, 0, %l1
3:	ba,pt	%xcc, 0f
	 stx	%l1, [%o0]
9:	lduba	[%l5] %asi, %l1
10:	lduba	[%l5 + 1] %asi, %l2
	sllx	%l1, 56, %l1
11:	lduba	[%l5 + 2] %asi, %g7
	sllx	%l2, 48, %l2
12:	lduba	[%l5 + 3] %asi, %g1
	sllx	%g7, 40, %g7
	sllx	%g1, 32, %g1
	or	%l1, %l2, %l1
	or	%g7, %g1, %g7
13:	lduba	[%l5 + 4] %asi, %l2
	or	%l1, %g7, %g7
14:	lduba	[%l5 + 5] %asi, %g1
	sllx	%l2, 24, %l2
15:	lduba	[%l5 + 6] %asi, %l1
	sllx	%g1, 16, %g1
	or	%g7, %l2, %g7
16:	lduba	[%l5 + 7] %asi, %l2
	sllx	%l1, 8, %l1
	or	%g7, %g1, %g7
	or	%l1, %l2, %l1
	or	%g7, %l1, %g7
	cmp	%l4, 8
	be,a,pt %icc, 0f
	 stx	%g7, [%o0]
	srlx	%g7, 32, %l1
	sra	%g7, 0, %g7
	stx	%l1, [%o0]
	stx	%g7, [%o0 + 8]
0:
	wr	%g0, 17, %asi

	.section __ex_table
	.word	4b, kernel_unaligned_trap_fault
	.word	5b, kernel_unaligned_trap_fault
	.word	6b, kernel_unaligned_trap_fault
	.word	7b, kernel_unaligned_trap_fault
	.word	8b, kernel_unaligned_trap_fault
	.word	9b, kernel_unaligned_trap_fault
	.word	10b, kernel_unaligned_trap_fault
	.word	11b, kernel_unaligned_trap_fault
	.word	12b, kernel_unaligned_trap_fault
	.word	13b, kernel_unaligned_trap_fault
	.word	14b, kernel_unaligned_trap_fault
	.word	15b, kernel_unaligned_trap_fault
	.word	16b, kernel_unaligned_trap_fault

	.previous
	
	ba,pt	%xcc, .LL118
	ldx	[%i0+144], %g3
.LL116:
	call	fetch_reg_addr, 0
	mov	%i0, %o1
	ba,pt	%xcc, .LL100
	mov	%o0, %l4
.LL115:
	add	%l1, 1, %o0
	mov	%i0, %o1
	and	%o0, 63, %o0
	call	fetch_reg, 0
	mov	8, %l0
	srl	%o0, 0, %l2
	cmp	%l1, 0
	bne,pn	%icc, .LL117
	mov	%l2, %o0
	ba,pt	%xcc, .LL100
	stx	%o0, [%fp+2023]
.LL117:
	mov	%l3, %o0
	call	fetch_reg, 0
	mov	%i0, %o1
	sllx	%o0, 32, %o0
	or	%o0, %l2, %o0
	ba,pt	%xcc, .LL100
	stx	%o0, [%fp+2023]
.LL114:
	sethi	%hi(.LLC10), %o0
	call	panic, 0
	or	%o0, %lo(.LLC10), %o0
.LL67:
	nop
	return	%i7+8
	nop
	.size	kernel_unaligned_trap, .-kernel_unaligned_trap

-- 
Mathieu Chouquet-Stringer                 E-Mail: mchouque@online.fr
       Never attribute to malice that which can be adequately
                    explained by stupidity.
                     -- Hanlon's Razor --
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic