19a90cd40c6e510484e018afd087a4c239b616ee0Brian Paul/*
29a90cd40c6e510484e018afd087a4c239b616ee0Brian Paul * Clip testing in SPARC assembly
39a90cd40c6e510484e018afd087a4c239b616ee0Brian Paul */
47943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
59f23a3a1bff6c8af93e651273c9887bbf119f555Ian Romanick#if __arch64__
67943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define LDPTR		ldx
77943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_DATA	0x00
87943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_START	0x08
97943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_COUNT	0x10
107943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_STRIDE	0x14
117943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_SIZE	0x18
127943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_FLAGS	0x1c
137943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#else
147943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define LDPTR		ld
157943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_DATA	0x00
167943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_START	0x04
177943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_COUNT	0x08
187943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_STRIDE	0x0c
197943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_SIZE	0x10
207943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define V4F_FLAGS	0x14
217943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#endif
227943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
237943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define VEC_SIZE_1   	1
247943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define VEC_SIZE_2   	3
257943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define VEC_SIZE_3   	7
267943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul#define VEC_SIZE_4   	15
277943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
28462183fe4cb6df6d90632d9e2cee881c8d26b1cbAlan Hourihane        .register %g2, #scratch
29462183fe4cb6df6d90632d9e2cee881c8d26b1cbAlan Hourihane        .register %g3, #scratch
30462183fe4cb6df6d90632d9e2cee881c8d26b1cbAlan Hourihane
317943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.text
327943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.align		64
337943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
347943b349d696f8030f0d2f836ad42a762f4c6026Brian Paulone_dot_zero:
357943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.word		0x3f800000	/* 1.0f */
367943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
377943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	/* This trick is shamelessly stolen from the x86
387943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * Mesa asm.  Very clever, and we can do it too
397943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * since we have the necessary add with carry
407943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * instructions on Sparc.
417943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 */
427943b349d696f8030f0d2f836ad42a762f4c6026Brian Paulclip_table:
437943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	 0,  1,  0,  2,  4,  5,  4,  6
447943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	 0,  1,  0,  2,  8,  9,  8, 10
457943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	32, 33, 32, 34, 36, 37, 36, 38
467943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	32, 33, 32, 34, 40, 41, 40, 42
477943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	 0,  1,  0,  2,  4,  5,  4,  6
487943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	 0,  1,  0,  2,  8,  9,  8, 10
497943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	16, 17, 16, 18, 20, 21, 20, 22
507943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	16, 17, 16, 18, 24, 25, 24, 26
517943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	63, 61, 63, 62, 55, 53, 55, 54
527943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	63, 61, 63, 62, 59, 57, 59, 58
537943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	47, 45, 47, 46, 39, 37, 39, 38
547943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	47, 45, 47, 46, 43, 41, 43, 42
557943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	63, 61, 63, 62, 55, 53, 55, 54
567943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	63, 61, 63, 62, 59, 57, 59, 58
577943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	31, 29, 31, 30, 23, 21, 23, 22
587943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.byte	31, 29, 31, 30, 27, 25, 27, 26
597943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
607943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul/* GLvector4f *clip_vec, GLvector4f *proj_vec,
61b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt   GLubyte clipMask[], GLubyte *orMask, GLubyte *andMask,
62b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt   GLboolean viewport_z_enable */
637943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
647943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.align		64
657943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul__pc_tramp:
667943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	retl
677943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 nop
687943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
697943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.globl		_mesa_sparc_cliptest_points4
707943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul_mesa_sparc_cliptest_points4:
717943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	save		%sp, -64, %sp
727943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	call		__pc_tramp
737943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 sub		%o7, (. - one_dot_zero - 4), %g1
747943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%g1 + 0x0], %f4
757943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%g1, 0x4, %g1
767943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
777943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + V4F_STRIDE], %l1
78bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	ld		[%i0 + V4F_COUNT], %l3
797943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	LDPTR		[%i0 + V4F_START], %i0
807943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	LDPTR		[%i1 + V4F_START], %i5
817943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%i3], %g2
827943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%i4], %g3
837943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	sll		%g3, 8, %g3
847943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g2, %g3, %g2
857943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
867943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i1 + V4F_FLAGS], %g3
877943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g3, VEC_SIZE_4, %g3
887943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%g3, [%i1 + V4F_FLAGS]
897943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	mov		3, %g3
907943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%g3, [%i1 + V4F_SIZE]
91bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	st		%l3, [%i1 + V4F_COUNT]
927943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	clr		%l2
937943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	clr		%l0
947943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
957943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	/* l0:	i
96bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	 * l3:	count
977943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * l1:	stride
987943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * l2:	c
997943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * g2:	(tmpAndMask << 8) | tmpOrMask
1007943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * g1:	clip_table
1017943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * i0:	from[stride][i]
1027943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * i2:	clipMask
1037943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * i5:	vProj[4][i]
1047943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 */
1057943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1067943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul1:	ld		[%i0 + 0x0c], %f3	! LSU	Group
1077943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x0c], %g5	! LSU	Group
1087943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x08], %g4	! LSU	Group
1097943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	fdivs		%f4, %f3, %f8		! FGM
1107943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g5, %g5, %g5		! IEU1	Group
1117943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g0, 0x0, %g3		! IEU1	Group
1127943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
1137943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1147943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
1157943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x04], %g4	! LSU	Group
1167943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1177943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
1187943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1197943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
1207943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x00], %g4	! LSU	Group
1217943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1227943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
1237943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1247943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
1257943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
1267943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%g1 + %g3], %g3	! LSU	Group
1277943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	cmp		%g3, 0			! IEU1	Group, stall
1287943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	be		2f			! CTI
1297943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 stb		%g3, [%i2]		! LSU
1307943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	sll		%g3, 8, %g4		! IEU1	Group
1317943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%l2, 1, %l2		! IEU0
1327943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%g0, [%i5 + 0x00]	! LSU
1337943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g4, 0xff, %g4		! IEU0	Group
1347943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g2, %g3, %g2		! IEU1
1357943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%g0, [%i5 + 0x04]	! LSU
1367943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	and		%g2, %g4, %g2		! IEU0	Group
1377943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%g0, [%i5 + 0x08]	! LSU
1387943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	b		3f			! CTI
1397943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 st		%f4, [%i5 + 0x0c]	! LSU	Group
1407943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul2:	ld		[%i0 + 0x00], %f0	! LSU	Group
1417943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x04], %f1	! LSU	Group
1427943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x08], %f2	! LSU	Group
1437943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	fmuls		%f0, %f8, %f0		! FGM
1447943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%f0, [%i5 + 0x00]	! LSU	Group
1457943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	fmuls		%f1, %f8, %f1		! FGM
1467943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%f1, [%i5 + 0x04]	! LSU	Group
1477943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	fmuls		%f2, %f8, %f2		! FGM
1487943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%f2, [%i5 + 0x08]	! LSU	Group
1497943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	st		%f8, [%i5 + 0x0c]	! LSU	Group
1507943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul3:	add		%i5, 0x10, %i5		! IEU1
1517943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%l0, 1, %l0		! IEU0	Group
1527943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%i2, 1, %i2		! IEU0	Group
153bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	cmp		%l0, %l3		! IEU1	Group
1547943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	bne		1b			! CTI
1557943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 add		%i0, %l1, %i0		! IEU0	Group
1567943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	stb		%g2, [%i3]		! LSU
1577943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	srl		%g2, 8, %g3		! IEU0	Group
158bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	cmp		%l2, %l3		! IEU1	Group
1597943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	bl,a		1f			! CTI
1607943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 clr		%g3			! IEU0
1617943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul1:	stb		%g3, [%i4]		! LSU	Group
1627943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ret					! CTI	Group
1637943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 restore	%i1, 0x0, %o0
1647943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1657943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	.globl		_mesa_sparc_cliptest_points4_np
1667943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul_mesa_sparc_cliptest_points4_np:
1677943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	save		%sp, -64, %sp
1687943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1697943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	call		__pc_tramp
1707943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 sub		%o7, (. - one_dot_zero - 4), %g1
1717943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%g1, 0x4, %g1
1727943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1737943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + V4F_STRIDE], %l1
174bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	ld		[%i0 + V4F_COUNT], %l3
1757943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	LDPTR		[%i0 + V4F_START], %i0
1767943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%i3], %g2
1777943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%i4], %g3
1787943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	sll		%g3, 8, %g3
1797943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g2, %g3, %g2
1807943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1817943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	clr		%l2
1827943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	clr		%l0
1837943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1847943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	/* l0:	i
185bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	 * l3:	count
1867943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * l1:	stride
1877943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * l2:	c
1887943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * g2:	(tmpAndMask << 8) | tmpOrMask
1897943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * g1:	clip_table
1907943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * i0:	from[stride][i]
1917943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 * i2:	clipMask
1927943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 */
1937943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul
1947943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul1:	ld		[%i0 + 0x0c], %g5	! LSU	Group
1957943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x08], %g4	! LSU	Group
1967943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g5, %g5, %g5		! IEU1	Group
1977943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g0, 0x0, %g3		! IEU1	Group
1987943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
1997943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2007943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
2017943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x04], %g4	! LSU	Group
2027943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2037943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
2047943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2057943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
2067943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ld		[%i0 + 0x00], %g4	! LSU	Group
2077943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2087943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addcc		%g4, %g4, %g4		! IEU1	Group
2097943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2107943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	subcc		%g5, %g4, %g0		! IEU1	Group
2117943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	addx		%g3, %g3, %g3		! IEU1	Group
2127943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ldub		[%g1 + %g3], %g3	! LSU	Group
2137943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	cmp		%g3, 0			! IEU1	Group, stall
2147943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	be		2f			! CTI
2157943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 stb		%g3, [%i2]		! LSU
2167943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	sll		%g3, 8, %g4		! IEU1	Group
2177943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%l2, 1, %l2		! IEU0
2187943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g4, 0xff, %g4		! IEU0	Group
2197943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	or		%g2, %g3, %g2		! IEU1
2207943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	and		%g2, %g4, %g2		! IEU0	Group
2217943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul2:	add		%l0, 1, %l0		! IEU0	Group
2227943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	add		%i2, 1, %i2		! IEU0	Group
223bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	cmp		%l0, %l3		! IEU1	Group
2247943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	bne		1b			! CTI
2257943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 add		%i0, %l1, %i0		! IEU0	Group
2267943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	stb		%g2, [%i3]		! LSU
2277943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	srl		%g2, 8, %g3		! IEU0	Group
228bde27b0d94dc2b3d0d4656e2c85ecbbd1245b3acDavid Miller	cmp		%l2, %l3		! IEU1	Group
2297943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	bl,a		1f			! CTI
2307943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 clr		%g3			! IEU0
2317943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul1:	stb		%g3, [%i4]		! LSU	Group
2327943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	ret					! CTI	Group
2337943b349d696f8030f0d2f836ad42a762f4c6026Brian Paul	 restore	%i1, 0x0, %o0
234