Blame thirdparty/openblas/xianyi-OpenBLAS-e6e87a2/kernel/mips64/cgemm_kernel_loongson3a_4x2_ps.S

kusano 2b45e8
##define REALNAME gemm 
kusano 2b45e8
#define ASSEMBLER
kusano 2b45e8
#include "common.h"
kusano 2b45e8
kusano 2b45e8
#define FETCH	ld
kusano 2b45e8
#define	STACKSIZE	192
kusano 2b45e8
#define gsLQC1(base,fq,ft,offset) .word(0x32<<26|base<<21|ft<<16|0x1<<15|offset<<6|0x1<<5|fq)
kusano 2b45e8
#define gsSQC1(base,fq,ft,offset) .word(0x3A<<26|base<<21|ft<<16|0x1<<15|offset<<6|0x1<<5|fq)
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#####	Parameter registers	####
kusano 2b45e8
#define M	$4
kusano 2b45e8
#define	N	$5
kusano 2b45e8
#define	K	$6
kusano 2b45e8
#define A	$9
kusano 2b45e8
#define B	$10
kusano 2b45e8
#define C	$11
kusano 2b45e8
#define LDC	$8
kusano 2b45e8
kusano 2b45e8
####	Pointer A, B, C	####
kusano 2b45e8
#define AO	$12
kusano 2b45e8
#define BO	$13
kusano 2b45e8
kusano 2b45e8
#define CO1	$14
kusano 2b45e8
#define CO2	$15
kusano 2b45e8
kusano 2b45e8
#define PREA	$18
kusano 2b45e8
#define PREB	$19
kusano 2b45e8
kusano 2b45e8
####	Used registers	####
kusano 2b45e8
#define A1	$f0
kusano 2b45e8
#define A2	$f1
kusano 2b45e8
#define A3	$f2
kusano 2b45e8
#define A4	$f3
kusano 2b45e8
#define A5	$f4
kusano 2b45e8
#define	A6	$f5
kusano 2b45e8
#define	A7	$f6
kusano 2b45e8
#define	A8	$f7
kusano 2b45e8
kusano 2b45e8
#define B1	$f8
kusano 2b45e8
#define B2	$f9
kusano 2b45e8
#define B3	$f10
kusano 2b45e8
#define B4	$f11
kusano 2b45e8
#define B5	$f12
kusano 2b45e8
#define	B6	$f13
kusano 2b45e8
#define	B7	$f14
kusano 2b45e8
#define	B8	$f15
kusano 2b45e8
kusano 2b45e8
#define C11	$f16
kusano 2b45e8
#define C12	$f17
kusano 2b45e8
#define C21	$f18
kusano 2b45e8
#define C22	$f19
kusano 2b45e8
#define C31	$f20
kusano 2b45e8
#define C32	$f21
kusano 2b45e8
#define C41	$f22
kusano 2b45e8
#define C42	$f23
kusano 2b45e8
#define C13	$f24
kusano 2b45e8
#define C14	$f25
kusano 2b45e8
#define C23	$f26
kusano 2b45e8
#define C24	$f27
kusano 2b45e8
#define C33	$f28
kusano 2b45e8
#define C34	$f29
kusano 2b45e8
#define C43	$f30
kusano 2b45e8
#define C44	$f31
kusano 2b45e8
kusano 2b45e8
#define I	$2
kusano 2b45e8
#define J	$3
kusano 2b45e8
#define L	$7
kusano 2b45e8
kusano 2b45e8
####	Alpha register	####
kusano 2b45e8
#define ALPHA	$f15
kusano 2b45e8
kusano 2b45e8
#define F31 31
kusano 2b45e8
#define F30 30
kusano 2b45e8
#define F29 29
kusano 2b45e8
#define F28 28
kusano 2b45e8
#define F27 27
kusano 2b45e8
#define F26 26
kusano 2b45e8
#define F25 25
kusano 2b45e8
#define F24 24 
kusano 2b45e8
#define F23 23
kusano 2b45e8
#define F22 22
kusano 2b45e8
#define F21 21
kusano 2b45e8
#define F20 20
kusano 2b45e8
#define F19 19
kusano 2b45e8
#define F18 18
kusano 2b45e8
#define F17 17
kusano 2b45e8
#define F16 16 
kusano 2b45e8
#define F15 15
kusano 2b45e8
#define F14 14
kusano 2b45e8
#define F13 13
kusano 2b45e8
#define F12 12
kusano 2b45e8
#define F11 11
kusano 2b45e8
#define F10 10
kusano 2b45e8
#define F9 9
kusano 2b45e8
#define F8 8
kusano 2b45e8
#define F7 7
kusano 2b45e8
#define F6 6
kusano 2b45e8
#define F5 5
kusano 2b45e8
#define F4 4 
kusano 2b45e8
#define F3 3 
kusano 2b45e8
#define F2 2 
kusano 2b45e8
#define F1 1 
kusano 2b45e8
#define F0 0
kusano 2b45e8
kusano 2b45e8
#define	R12	12
kusano 2b45e8
#define	R13	13
kusano 2b45e8
kusano 2b45e8
#define R14	14
kusano 2b45e8
#define R15	15
kusano 2b45e8
#define	R16	16
kusano 2b45e8
#define	R17	17
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#define	OFFSET	$23
kusano 2b45e8
#define	KK		$24
kusano 2b45e8
#define TEMP	$25
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	PROLOGUE
kusano 2b45e8
kusano 2b45e8
	LDARG	LDC,   0($sp)
kusano 2b45e8
	daddiu	$sp,$sp,-STACKSIZE
kusano 2b45e8
kusano 2b45e8
	sd	$16,   0($sp)
kusano 2b45e8
	sd	$17,   8($sp)
kusano 2b45e8
	sd	$18,  16($sp)
kusano 2b45e8
	sd	$19,  24($sp)
kusano 2b45e8
	sd	$20,  32($sp)
kusano 2b45e8
	sd	$21,  40($sp)
kusano 2b45e8
	sd	$22,  48($sp)
kusano 2b45e8
kusano 2b45e8
	ST	$f24, 56($sp)
kusano 2b45e8
	ST	$f25, 64($sp)
kusano 2b45e8
	ST	$f26, 72($sp)
kusano 2b45e8
	ST	$f27, 80($sp)
kusano 2b45e8
	ST	$f28, 88($sp)
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
	sd	$23,  96($sp)
kusano 2b45e8
	sd	$24, 104($sp)
kusano 2b45e8
	sd	$25, 112($sp)
kusano 2b45e8
kusano 2b45e8
	LDARG	OFFSET, STACKSIZE+8($sp)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifndef __64BIT__
kusano 2b45e8
	ST	$f20,120($sp)
kusano 2b45e8
	ST	$f21,128($sp)
kusano 2b45e8
	ST	$f22,136($sp)
kusano 2b45e8
	ST	$f23,144($sp)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L2:
kusano 2b45e8
	dsra	J, N, 1				#	NR=2
kusano 2b45e8
	ST		$f15, 152($sp)
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL) && !defined(LEFT)
kusano 2b45e8
	neg	KK, OFFSET
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	dsll	LDC, LDC, ZBASE_SHIFT#	LDC*SIZE
kusano 2b45e8
	blez	J, .L1
kusano 2b45e8
	ST		$f16, 160($sp)
kusano 2b45e8
kusano 2b45e8
.L24:
kusano 2b45e8
#if defined(TRMMKERNEL) &&  defined(LEFT)
kusano 2b45e8
	move	KK, OFFSET
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	dsra	I, M, 2				#	MR=8
kusano 2b45e8
	move	AO, A				#	Reset A
kusano 2b45e8
kusano 2b45e8
	dsll	PREA, K, 1 + ZBASE_SHIFT
kusano 2b45e8
	move	CO1, C
kusano 2b45e8
kusano 2b45e8
	daddu	CO2, C,   LDC
kusano 2b45e8
	daddu	PREA, AO, PREA
kusano 2b45e8
kusano 2b45e8
	blez	I, .L22
kusano 2b45e8
	daddu	C,   CO2, LDC
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L241:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	L, KK, 2 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, KK, 1 + ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
kusano 2b45e8
	dsll	PREB, K, ZBASE_SHIFT
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	MOV		C22, C11
kusano 2b45e8
	
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MOV		C31, C11
kusano 2b45e8
	MOV		C32, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C41, C11
kusano 2b45e8
	MOV		C42, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
	MOV		C24, C11
kusano 2b45e8
kusano 2b45e8
	MOV		C33, C11
kusano 2b45e8
	MOV		C34, C11
kusano 2b45e8
	
kusano 2b45e8
	MOV		C43, C11
kusano 2b45e8
	MOV		C44, C11
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
	daddu	PREB, BO, PREB
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO2)
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 4
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, KK, 2
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L242
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
kusano 2b45e8
	dsll	PREB, K, ZBASE_SHIFT
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	MOV		C22, C11
kusano 2b45e8
	
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MOV		C31, C11
kusano 2b45e8
	MOV		C32, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C41, C11
kusano 2b45e8
	MOV		C42, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
	MOV		C24, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
	MOV		C33, C11
kusano 2b45e8
	MOV		C34, C11
kusano 2b45e8
kusano 2b45e8
	MOV		C43, C11
kusano 2b45e8
	MOV		C44, C11
kusano 2b45e8
	daddu	PREB, BO, PREB
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
	
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	blez	L, .L242
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L2410:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(PREB)
kusano 2b45e8
	MADPS	C32, C32, A3, B2
kusano 2b45e8
	MADPS	C42, C42, A4, B2
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(PREA)
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	daddu	PREB, PREB, 8 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A3, B4
kusano 2b45e8
	MADPS	C44, C44, A4, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 2)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A5, B5
kusano 2b45e8
	MADPS	C21, C21, A6, B5
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 4)		#	A1 A2
kusano 2b45e8
	MADPS	C12, C12, A5, B6
kusano 2b45e8
	MADPS	C22, C22, A6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 5)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B5
kusano 2b45e8
	MADPS	C41, C41, A8, B5
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 8 * SIZE(PREA)
kusano 2b45e8
	MADPS	C32, C32, A7, B6
kusano 2b45e8
	MADPS	C42, C42, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B7
kusano 2b45e8
	MADPS	C23, C23, A6, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B7
kusano 2b45e8
	MADPS	C43, C43, A8, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A5, B8
kusano 2b45e8
	MADPS	C24, C24, A6, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A7, B8
kusano 2b45e8
	MADPS	C44, C44, A8, B8
kusano 2b45e8
	
kusano 2b45e8
	gsLQC1(R13, F13, F12, 3)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F5, F4, 6)		#	A5 A6
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 7)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
	daddiu	BO, BO, 4 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 16 * SIZE(PREA)
kusano 2b45e8
	MADPS	C32, C32, A3, B2
kusano 2b45e8
	MADPS	C42, C42, A4, B2
kusano 2b45e8
	daddiu	AO, AO, 8 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A3, B4
kusano 2b45e8
	MADPS	C44, C44, A4, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A5, B5
kusano 2b45e8
	MADPS	C21, C21, A6, B5
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C12, C12, A5, B6
kusano 2b45e8
	MADPS	C22, C22, A6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B5
kusano 2b45e8
	MADPS	C41, C41, A8, B5
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 24 * SIZE(PREA)
kusano 2b45e8
	MADPS	C32, C32, A7, B6
kusano 2b45e8
	MADPS	C42, C42, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B7
kusano 2b45e8
	MADPS	C23, C23, A6, B7
kusano 2b45e8
	daddu	PREA, PREA, 32 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B7
kusano 2b45e8
	MADPS	C43, C43, A8, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A5, B8
kusano 2b45e8
	MADPS	C24, C24, A6, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A7, B8
kusano 2b45e8
	bgtz	L, .L2410
kusano 2b45e8
	MADPS	C44, C44, A8, B8
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L242:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L247
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	MADPS	C32, C32, A3, B2
kusano 2b45e8
	MADPS	C42, C42, A4, B2
kusano 2b45e8
	daddiu	AO, AO, 4 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A3, B4
kusano 2b45e8
	MADPS	C44, C44, A4, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A5, B5
kusano 2b45e8
	MADPS	C21, C21, A6, B5
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C12, C12, A5, B6
kusano 2b45e8
	MADPS	C22, C22, A6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B5
kusano 2b45e8
	MADPS	C41, C41, A8, B5
kusano 2b45e8
kusano 2b45e8
	MADPS	C32, C32, A7, B6
kusano 2b45e8
	MADPS	C42, C42, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B7
kusano 2b45e8
	MADPS	C23, C23, A6, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B7
kusano 2b45e8
	MADPS	C43, C43, A8, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A5, B8
kusano 2b45e8
	MADPS	C24, C24, A6, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A7, B8
kusano 2b45e8
	MADPS	C44, C44, A8, B8
kusano 2b45e8
	
kusano 2b45e8
	.align	4
kusano 2b45e8
.L247:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L240
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
	daddiu	BO, BO, 1 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	MADPS	C32, C32, A3, B2
kusano 2b45e8
	MADPS	C42, C42, A4, B2
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	MADPS	C34, C34, A3, B4
kusano 2b45e8
	MADPS	C44, C44, A4, B4
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L240:							#	Write Back
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C31
kusano 2b45e8
	CVTU	A4, C41
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C13
kusano 2b45e8
	CVTU	A6, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C33
kusano 2b45e8
	CVTU	A8, C43
kusano 2b45e8
kusano 2b45e8
	CVTU	B1, C12
kusano 2b45e8
	CVTU	B2, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	B3, C32
kusano 2b45e8
	CVTU	B4, C42
kusano 2b45e8
kusano 2b45e8
	CVTU	B5, C14
kusano 2b45e8
	CVTU	B6, C24
kusano 2b45e8
kusano 2b45e8
	CVTU	B7, C34
kusano 2b45e8
	CVTU	B8, C44
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	SUB		C12, C12, B1
kusano 2b45e8
	SUB		C22, C22, B2
kusano 2b45e8
	SUB		C32, C32, B3
kusano 2b45e8
	SUB		C42, C42, B4
kusano 2b45e8
	ADD		C14, B5, C14
kusano 2b45e8
	ADD		C24, B6, C24
kusano 2b45e8
	ADD		C34, B7, C34
kusano 2b45e8
	ADD		C44, B8, C44
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	LD		C13, 0 * SIZE(CO2)
kusano 2b45e8
	LD		C23, 2 * SIZE(CO2)
kusano 2b45e8
	LD		C33, 4 * SIZE(CO2)
kusano 2b45e8
	LD		C43, 6 * SIZE(CO2)
kusano 2b45e8
	LD		C11, 1 * SIZE(CO2)
kusano 2b45e8
	LD		C21, 3 * SIZE(CO2)
kusano 2b45e8
	LD		C31, 5 * SIZE(CO2)
kusano 2b45e8
	LD		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	C13, C13, C12, A1
kusano 2b45e8
	MADD	C23, C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	MADD	C33, C33, C32, A1
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C43, C43, C42, A1
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C14, A1
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C21, C21, C24, A1
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C31, C31, C34, A1
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C41, C41, C44, A1
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A6, C23
kusano 2b45e8
	SUB		C33, A7, C33
kusano 2b45e8
	SUB		C43, A8, C43
kusano 2b45e8
	ADD		C12, B1, C12
kusano 2b45e8
	ADD		C22, B2, C22
kusano 2b45e8
	ADD		C32, B3, C32
kusano 2b45e8
	ADD		C42, B4, C42
kusano 2b45e8
	SUB		C14, B5, C14
kusano 2b45e8
	SUB		C24, B6, C24
kusano 2b45e8
	SUB		C34, B7, C34
kusano 2b45e8
	SUB		C44, B8, C44
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	LD		C13, 0 * SIZE(CO2)
kusano 2b45e8
	LD		C23, 2 * SIZE(CO2)
kusano 2b45e8
	LD		C33, 4 * SIZE(CO2)
kusano 2b45e8
	LD		C43, 6 * SIZE(CO2)
kusano 2b45e8
	LD		C11, 1 * SIZE(CO2)
kusano 2b45e8
	LD		C21, 3 * SIZE(CO2)
kusano 2b45e8
	LD		C31, 5 * SIZE(CO2)
kusano 2b45e8
	LD		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	C13, C13, C12, A1
kusano 2b45e8
	MADD	C23, C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	MADD	C33, C33, C32, A1
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C43, C43, C42, A1
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C14, A1
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C21, C21, C24, A1
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C31, C31, C34, A1
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C41, C41, C44, A1
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	SUB		C13, C13, A5		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A6
kusano 2b45e8
	SUB		C33, C33, A7
kusano 2b45e8
	SUB		C43, C43, A8
kusano 2b45e8
	ADD		C12, B1, C12
kusano 2b45e8
	ADD		C22, B2, C22
kusano 2b45e8
	ADD		C32, B3, C32
kusano 2b45e8
	ADD		C42, B4, C42
kusano 2b45e8
	SUB		C14, C14, B5
kusano 2b45e8
	SUB		C24, C24, B6
kusano 2b45e8
	SUB		C34, C34, B7
kusano 2b45e8
	SUB		C44, C44, B8
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	LD		C13, 0 * SIZE(CO2)
kusano 2b45e8
	LD		C23, 2 * SIZE(CO2)
kusano 2b45e8
	LD		C33, 4 * SIZE(CO2)
kusano 2b45e8
	LD		C43, 6 * SIZE(CO2)
kusano 2b45e8
	LD		C11, 1 * SIZE(CO2)
kusano 2b45e8
	LD		C21, 3 * SIZE(CO2)
kusano 2b45e8
	LD		C31, 5 * SIZE(CO2)
kusano 2b45e8
	LD		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	C13, C13, C12, A1
kusano 2b45e8
	MADD	C23, C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	MADD	C33, C33, C32, A1
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C43, C43, C42, A1
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C14, A1
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C21, C21, C24, A1
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C31, C31, C34, A1
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C41, C41, C44, A1
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	SUB		C12, C12, B1
kusano 2b45e8
	SUB		C22, C22, B2
kusano 2b45e8
	SUB		C32, C32, B3
kusano 2b45e8
	SUB		C42, C42, B4
kusano 2b45e8
	ADD		C14, B5, C14
kusano 2b45e8
	ADD		C24, B6, C24
kusano 2b45e8
	ADD		C34, B7, C34
kusano 2b45e8
	ADD		C44, B8, C44
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C33, C33
kusano 2b45e8
	NEG		C43, C43
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
	NEG		C24, C24
kusano 2b45e8
	NEG		C34, C34
kusano 2b45e8
	NEG		C44, C44
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	LD		C13, 0 * SIZE(CO2)
kusano 2b45e8
	LD		C43, 6 * SIZE(CO2)
kusano 2b45e8
	LD		C23, 2 * SIZE(CO2)
kusano 2b45e8
	LD		C33, 4 * SIZE(CO2)
kusano 2b45e8
	LD		C11, 1 * SIZE(CO2)
kusano 2b45e8
	LD		C21, 3 * SIZE(CO2)
kusano 2b45e8
	LD		C31, 5 * SIZE(CO2)
kusano 2b45e8
	LD		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	C13, C13, C12, A1
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C23, C23, C22, A1
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C33, C33, C32, A1
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C43, C43, C42, A1
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C14, A1
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C21, C21, C24, A1
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C31, C31, C34, A1
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	C41, C41, C44, A1
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C31
kusano 2b45e8
	CVTU	A4, C41
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C13
kusano 2b45e8
	CVTU	A6, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C33
kusano 2b45e8
	CVTU	A8, C43
kusano 2b45e8
kusano 2b45e8
	CVTU	B1, C12
kusano 2b45e8
	CVTU	B2, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	B3, C32
kusano 2b45e8
	CVTU	B4, C42
kusano 2b45e8
kusano 2b45e8
	CVTU	B5, C14
kusano 2b45e8
	CVTU	B6, C24
kusano 2b45e8
kusano 2b45e8
	CVTU	B7, C34
kusano 2b45e8
	CVTU	B8, C44
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	SUB		C12, C12, B1
kusano 2b45e8
	SUB		C22, C22, B2
kusano 2b45e8
	SUB		C32, C32, B3
kusano 2b45e8
	SUB		C42, C42, B4
kusano 2b45e8
	ADD		C14, B5, C14
kusano 2b45e8
	ADD		C24, B6, C24
kusano 2b45e8
	ADD		C34, B7, C34
kusano 2b45e8
	ADD		C44, B8, C44
kusano 2b45e8
kusano 2b45e8
	MUL		B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL		B3, C21, A1
kusano 2b45e8
	MUL		B5, C31, A1
kusano 2b45e8
	MUL		B7, C41, A1
kusano 2b45e8
	MUL		B2, C13, A1
kusano 2b45e8
	MUL		B4, C23, A1
kusano 2b45e8
	MUL		B6, C33, A1
kusano 2b45e8
	MUL		B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL		C13, C12, A1
kusano 2b45e8
	MUL		C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	MUL		C33, C32, A1
kusano 2b45e8
	MUL		C43, C42, A1
kusano 2b45e8
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	MUL		C11, C14, A1
kusano 2b45e8
	MUL		C21, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	MUL		C31, C34, A1
kusano 2b45e8
	MUL		C41, C44, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A6, C23
kusano 2b45e8
	SUB		C33, A7, C33
kusano 2b45e8
	SUB		C43, A8, C43
kusano 2b45e8
	ADD		C12, B1, C12
kusano 2b45e8
	ADD		C22, B2, C22
kusano 2b45e8
	ADD		C32, B3, C32
kusano 2b45e8
	ADD		C42, B4, C42
kusano 2b45e8
	SUB		C14, B5, C14
kusano 2b45e8
	SUB		C24, B6, C24
kusano 2b45e8
	SUB		C34, B7, C34
kusano 2b45e8
	SUB		C44, B8, C44
kusano 2b45e8
kusano 2b45e8
	MUL		B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL		B3, C21, A1
kusano 2b45e8
	MUL		B5, C31, A1
kusano 2b45e8
	MUL	 	B7, C41, A1
kusano 2b45e8
	MUL		B2, C13, A1
kusano 2b45e8
	MUL		B4, C23, A1
kusano 2b45e8
	MUL		B6, C33, A1
kusano 2b45e8
	MUL		B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	MUL		C13, C12, A1
kusano 2b45e8
	MUL		C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL		C33, C32, A1
kusano 2b45e8
	MUL		C43, C42, A1
kusano 2b45e8
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	MUL		C11, C14, A1
kusano 2b45e8
	MUL		C21, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	MUL 	C31, C34, A1
kusano 2b45e8
	MUL 	C41, C44, A1
kusano 2b45e8
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	SUB		C13, C13, A5		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A6
kusano 2b45e8
	SUB		C33, C33, A7
kusano 2b45e8
	SUB		C43, C43, A8
kusano 2b45e8
	ADD		C12, B1, C12
kusano 2b45e8
	ADD		C22, B2, C22
kusano 2b45e8
	ADD		C32, B3, C32
kusano 2b45e8
	ADD		C42, B4, C42
kusano 2b45e8
	SUB		C14, C14, B5
kusano 2b45e8
	SUB		C24, C24, B6
kusano 2b45e8
kusano 2b45e8
	SUB		C34, C34, B7
kusano 2b45e8
	SUB		C44, C44, B8
kusano 2b45e8
kusano 2b45e8
	MUL	B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL	B3, C21, A1
kusano 2b45e8
	MUL	B5, C31, A1
kusano 2b45e8
	MUL	B7, C41, A1
kusano 2b45e8
	MUL	B2, C13, A1
kusano 2b45e8
	MUL	B4, C23, A1
kusano 2b45e8
	MUL	B6, C33, A1
kusano 2b45e8
	MUL	B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	MUL	C13, C12, A1
kusano 2b45e8
	MUL	C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL	C33, C32, A1
kusano 2b45e8
	MUL	C43, C42, A1
kusano 2b45e8
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	MUL	C11, C14, A1
kusano 2b45e8
	MUL	C21, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	MUL	C31, C34, A1
kusano 2b45e8
	MUL	C41, C44, A1
kusano 2b45e8
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	SUB		C12, C12, B1
kusano 2b45e8
	SUB		C22, C22, B2
kusano 2b45e8
	SUB		C32, C32, B3
kusano 2b45e8
	SUB		C42, C42, B4
kusano 2b45e8
	ADD		C14, B5, C14
kusano 2b45e8
	ADD		C24, B6, C24
kusano 2b45e8
	ADD		C34, B7, C34
kusano 2b45e8
	ADD		C44, B8, C44
kusano 2b45e8
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C33, C33
kusano 2b45e8
	NEG		C43, C43
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
	NEG		C24, C24
kusano 2b45e8
	NEG		C34, C34
kusano 2b45e8
	NEG		C44, C44
kusano 2b45e8
kusano 2b45e8
	MUL		B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL		B3, C21, A1
kusano 2b45e8
	MUL		B5, C31, A1
kusano 2b45e8
	MUL		B7, C41, A1
kusano 2b45e8
	MUL		B2, C13, A1
kusano 2b45e8
	MUL		B4, C23, A1
kusano 2b45e8
	MUL		B6, C33, A1
kusano 2b45e8
	MUL		B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL		C13, C12, A1
kusano 2b45e8
	MUL		C23, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	MUL		C33, C32, A1
kusano 2b45e8
	MUL		C43, C42, A1
kusano 2b45e8
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	MUL		C11, C14, A1
kusano 2b45e8
	MUL		C21, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	MUL		C31, C34, A1
kusano 2b45e8
	MUL		C41, C44, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C13, C13, C14, A2
kusano 2b45e8
	NMSUB	C23, C23, C24, A2
kusano 2b45e8
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	NMSUB	C33, C33, C34, A2
kusano 2b45e8
	NMSUB	C43, C43, C44, A2
kusano 2b45e8
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	MADD	C11, C11, C12, A2
kusano 2b45e8
	MADD	C21, C21, C22, A2
kusano 2b45e8
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
	MADD	C31, C31, C32, A2
kusano 2b45e8
	MADD	C41, C41, C42, A2
kusano 2b45e8
kusano 2b45e8
	ST		C13, 0 * SIZE(CO2)
kusano 2b45e8
	ST		C23, 2 * SIZE(CO2)
kusano 2b45e8
	ST		C33, 4 * SIZE(CO2)
kusano 2b45e8
	ST		C43, 6 * SIZE(CO2)
kusano 2b45e8
	ST		C11, 1 * SIZE(CO2)
kusano 2b45e8
	ST		C21, 3 * SIZE(CO2)
kusano 2b45e8
	ST		C31, 5 * SIZE(CO2)
kusano 2b45e8
	ST		C41, 7 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -4
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	dsll	L, TEMP, 2 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, TEMP, 1 + ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 4
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	daddiu	CO1, CO1, 8 * SIZE
kusano 2b45e8
	bgtz	I, .L241
kusano 2b45e8
	daddiu	CO2, CO2, 8 * SIZE
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L22:
kusano 2b45e8
	andi	I, M, 2				#	MR=4
kusano 2b45e8
	blez	I, .L21
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L221:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	TEMP, KK, 1 + ZBASE_SHIFT		#	NR=2
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, TEMP
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	MOV		C22, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	MOV		C24, C11
kusano 2b45e8
	
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 2							#	MR=2
kusano 2b45e8
#else	
kusano 2b45e8
	daddiu	TEMP, KK, 2							#	NR=2
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L222
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	MOV		C22, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	MOV		C24, C11
kusano 2b45e8
	
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	blez	L, .L222
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L2210:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 2)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A3, B5
kusano 2b45e8
	MADPS	C21, C21, A4, B5
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A3, B6
kusano 2b45e8
	MADPS	C22, C22, A4, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A3, B7
kusano 2b45e8
	MADPS	C23, C23, A4, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A3, B8
kusano 2b45e8
	MADPS	C24, C24, A4, B8
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F13, F12, 3)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A5, B1
kusano 2b45e8
	MADPS	C21, C21, A6, B1
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A5, B2
kusano 2b45e8
	MADPS	C22, C22, A6, B2
kusano 2b45e8
	daddiu	BO, BO, 4 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	daddiu	AO, AO, 4 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
	MADPS	C13, C13, A5, B3
kusano 2b45e8
	MADPS	C23, C23, A6, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A5, B4
kusano 2b45e8
	MADPS	C24, C24, A6, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A7, B5
kusano 2b45e8
	MADPS	C21, C21, A8, B5
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A7, B6
kusano 2b45e8
	MADPS	C22, C22, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A7, B7
kusano 2b45e8
	MADPS	C23, C23, A8, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A7, B8
kusano 2b45e8
	MADPS	C24, C24, A8, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	bgtz	L, .L2210
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L222:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L227
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE
kusano 2b45e8
	MADPS	C11, C11, A3, B5
kusano 2b45e8
	MADPS	C21, C21, A4, B5
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	A1 A2
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A3, B6
kusano 2b45e8
	MADPS	C22, C22, A4, B6
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A3, B7
kusano 2b45e8
	MADPS	C23, C23, A4, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A3, B8
kusano 2b45e8
	MADPS	C24, C24, A4, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L227:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L220
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
	daddiu	BO, BO, 4 * SIZE
kusano 2b45e8
	daddiu	AO, AO, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	MADPS	C22, C22, A2, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
	MADPS	C24, C24, A2, B4
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L220:							#	Write Back
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A4, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C12
kusano 2b45e8
	CVTU	A6, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C14
kusano 2b45e8
	CVTU	A8, C24
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	SUB		C22, C22, A6
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	ADD		C24, A8, C24
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B7, 2 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
	LD		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A1
kusano 2b45e8
	MADD	B7, B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C14, A1
kusano 2b45e8
	MADD	B8, B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	ADD		C22, A6, C22
kusano 2b45e8
	SUB		C14, A7, C14
kusano 2b45e8
	SUB		C24, A8, C24
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B7, 2 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
	LD		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A1
kusano 2b45e8
	MADD	B7, B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C14, A1
kusano 2b45e8
	MADD	B8, B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A4
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	ADD		C22, A6, C22
kusano 2b45e8
	SUB		C14, C14, A7
kusano 2b45e8
	SUB		C24, C24, A8
kusano 2b45e8
	
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B7, 2 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
	LD		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A1
kusano 2b45e8
	MADD	B7, B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C14, A1
kusano 2b45e8
	MADD	B8, B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	SUB		C22, C22, A6
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	ADD		C24, A8, C24
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
	NEG		C24, C24
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B7, 2 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
	LD		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A1
kusano 2b45e8
	MADD	B7, B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C14, A1
kusano 2b45e8
	MADD	B8, B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A4, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C12
kusano 2b45e8
	CVTU	A6, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C14
kusano 2b45e8
	CVTU	A8, C24
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	SUB		C22, C22, A6
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	ADD		C24, A8, C24
kusano 2b45e8
kusano 2b45e8
	MUL	B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL	B3, C21, A1
kusano 2b45e8
	MUL	B2, C13, A1
kusano 2b45e8
	MUL	B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	MUL	B5, C12, A1
kusano 2b45e8
	MUL	B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MUL	B6, C14, A1
kusano 2b45e8
	MUL	B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	ADD		C22, A6, C22
kusano 2b45e8
	SUB		C14, A7, C14
kusano 2b45e8
	SUB		C24, A8, C24
kusano 2b45e8
kusano 2b45e8
	MUL	B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL	B3, C21, A1
kusano 2b45e8
	MUL	B2, C13, A1
kusano 2b45e8
	MUL	B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	MUL	B5, C12, A1
kusano 2b45e8
	MUL	B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MUL	B6, C14, A1
kusano 2b45e8
	MUL	B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A4
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	ADD		C22, A6, C22
kusano 2b45e8
	SUB		C14, C14, A7
kusano 2b45e8
	SUB		C24, C24, A8
kusano 2b45e8
	
kusano 2b45e8
	MUL	B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL	B3, C21, A1
kusano 2b45e8
	MUL	B2, C13, A1
kusano 2b45e8
	MUL	B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	MUL	B5, C12, A1
kusano 2b45e8
	MUL	B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MUL	B6, C14, A1
kusano 2b45e8
	MUL	B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	SUB		C22, C22, A6
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	ADD		C24, A8, C24
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
	NEG		C24, C24
kusano 2b45e8
kusano 2b45e8
	MUL	B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL	B3, C21, A1
kusano 2b45e8
	MUL	B2, C13, A1
kusano 2b45e8
	MUL	B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	MUL	B5, C12, A1
kusano 2b45e8
	MUL	B7, C22, A1
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MUL	B6, C14, A1
kusano 2b45e8
	MUL	B8, C24, A1
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	NMSUB	B7, B7, C24, A2
kusano 2b45e8
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	MADD	B8, B8, C22, A2
kusano 2b45e8
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B7, 2 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
	ST		B8, 3 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -2
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -2
kusano 2b45e8
#endif
kusano 2b45e8
	dsll	TEMP, TEMP, 1 + ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, TEMP
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	daddiu	CO1, CO1, 4 * SIZE
kusano 2b45e8
	daddiu	CO2, CO2, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L21:
kusano 2b45e8
	andi	I, M, 1
kusano 2b45e8
	blez	I, .L20
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L211:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	L,    KK, ZBASE_SHIFT			#	MR=1
kusano 2b45e8
	dsll	TEMP, KK, 1 + ZBASE_SHIFT		#	NR=2
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 1							#	MR=1
kusano 2b45e8
#else	
kusano 2b45e8
	daddiu	TEMP, KK, 2							#	NR=2
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L212
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C12, C11		
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C14, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	blez	L, .L212
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L2110:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 2)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A2, B5
kusano 2b45e8
	MADPS	C12, C12, A2, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C13, C13, A2, B7
kusano 2b45e8
	MADPS	C14, C14, A2, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F13, F12, 3)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A3, B1
kusano 2b45e8
	MADPS	C12, C12, A3, B2
kusano 2b45e8
	daddiu	BO, BO, 4 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
	MADPS	C13, C13, A3, B3
kusano 2b45e8
	MADPS	C14, C14, A3, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A4, B5
kusano 2b45e8
	MADPS	C12, C12, A4, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C13, C13, A4, B7
kusano 2b45e8
	MADPS	C14, C14, A4, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	bgtz	L, .L2110
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L212:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L217
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A2, B5
kusano 2b45e8
	MADPS	C12, C12, A2, B6
kusano 2b45e8
	daddiu	AO, AO, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A2, B7
kusano 2b45e8
	MADPS	C14, C14, A2, B8
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A5 A6
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L217:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L210
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	daddiu	BO, BO, 4 * SIZE
kusano 2b45e8
	MADPS	C12, C12, A1, B2
kusano 2b45e8
	daddiu	AO, AO, 2 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C14, C14, A1, B4
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L210:							#	Write Back
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A5, C12
kusano 2b45e8
	CVTU	A7, C14
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MADD	B6, B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	SUB		C14, A7, C14
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MADD	B6, B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	SUB		C14, C14, A7
kusano 2b45e8
	
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MADD	B6, B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	LD		B5, 0 * SIZE(CO2)
kusano 2b45e8
	LD		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
	MADD	B5, B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MADD	B6, B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A5, C12
kusano 2b45e8
	CVTU	A7, C14
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	MUL B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	SUB		C14, A7, C14
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	MUL B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	ADD		C12, A5, C12
kusano 2b45e8
	SUB		C14, C14, A7
kusano 2b45e8
	
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	MUL B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
	
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	SUB		C12, C12, A5
kusano 2b45e8
	ADD		C14, A7, C14
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	NEG		C14, C14
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	MUL B5, C12, A4
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	MUL B6, C14, A4
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	NMSUB	B5, B5, C14, A2
kusano 2b45e8
	MADD	B6, B6, C12, A2
kusano 2b45e8
kusano 2b45e8
	ST		B5, 0 * SIZE(CO2)
kusano 2b45e8
	ST		B6, 1 * SIZE(CO2)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -1
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -2
kusano 2b45e8
#endif
kusano 2b45e8
	dsll	L,    TEMP, ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, TEMP, 1 + ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 1
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	daddiu	CO1, CO1, 2 * SIZE
kusano 2b45e8
	daddiu	CO2, CO2, 2 * SIZE
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L20:
kusano 2b45e8
	daddiu	J, J, -1
kusano 2b45e8
	move	B, BO
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL) && !defined(LEFT)
kusano 2b45e8
	daddiu	KK, KK, 2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	bgtz	J, .L24
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L1:
kusano 2b45e8
	andi	J, N, 1
kusano 2b45e8
	blez	J, .L999
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
.L14:
kusano 2b45e8
	dsra	I, M, 2				#	MR=8
kusano 2b45e8
	move	AO, A				#	Reset A
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL) &&  defined(LEFT)
kusano 2b45e8
	move	KK, OFFSET
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	move	CO1, C
kusano 2b45e8
	blez	I, .L12
kusano 2b45e8
	daddu	C,   CO1, LDC
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L141:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	L,    KK, 2 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, KK, ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C31, C11
kusano 2b45e8
	MOV		C41, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	MOV		C33, C11
kusano 2b45e8
	MOV		C43, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 4						#	define Mr=4
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, KK, 1						#	define	NR=1
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L142
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C31, C11
kusano 2b45e8
	MOV		C41, C11
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	MOV		C33, C11
kusano 2b45e8
	MOV		C43, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	blez	L, .L142
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L1410:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 4)		#	A1 A2
kusano 2b45e8
	MADPS	C11, C11, A5, B2
kusano 2b45e8
	MADPS	C21, C21, A6, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 5)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B2
kusano 2b45e8
	MADPS	C41, C41, A8, B2
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B4
kusano 2b45e8
	MADPS	C23, C23, A6, B4
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B4
kusano 2b45e8
	MADPS	C43, C43, A8, B4
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	
kusano 2b45e8
	MADPS	C11, C11, A1, B5
kusano 2b45e8
	MADPS	C21, C21, A2, B5
kusano 2b45e8
	gsLQC1(R12, F5, F4, 6)		#	A5 A6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 7)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B5
kusano 2b45e8
	MADPS	C41, C41, A4, B5
kusano 2b45e8
kusano 2b45e8
	daddiu	AO, AO, 8 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
	MADPS	C13, C13, A1, B7
kusano 2b45e8
	MADPS	C23, C23, A2, B7
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B7
kusano 2b45e8
	MADPS	C43, C43, A4, B7
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C11, C11, A5, B6
kusano 2b45e8
	MADPS	C21, C21, A6, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B6
kusano 2b45e8
	MADPS	C41, C41, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B8
kusano 2b45e8
	MADPS	C23, C23, A6, B8
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B8
kusano 2b45e8
	MADPS	C43, C43, A8, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	bgtz	L, .L1410
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L142:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L147
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
	daddiu	AO, AO, 4 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
	gsLQC1(R13, F13, F8, 1)	#	B3 B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C11, C11, A5, B2
kusano 2b45e8
	MADPS	C21, C21, A6, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C31, C31, A7, B2
kusano 2b45e8
	MADPS	C41, C41, A8, B2
kusano 2b45e8
	daddiu	BO, BO, 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A5, B4
kusano 2b45e8
	MADPS	C23, C23, A6, B4
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A7, B4
kusano 2b45e8
	MADPS	C43, C43, A8, B4
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
kusano 2b45e8
	
kusano 2b45e8
	.align	4
kusano 2b45e8
.L147:
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L140
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
	daddiu	BO, BO, 2 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C31, C31, A3, B1
kusano 2b45e8
	MADPS	C41, C41, A4, B1
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	MADPS	C33, C33, A3, B3
kusano 2b45e8
	MADPS	C43, C43, A4, B3
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L140:							#	Write Back
kusano 2b45e8
#ifndef TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C31
kusano 2b45e8
	CVTU	A4, C41
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C13
kusano 2b45e8
	CVTU	A6, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C33
kusano 2b45e8
	CVTU	A8, C43
kusano 2b45e8
kusano 2b45e8
	CVTU	B1, C12
kusano 2b45e8
	CVTU	B2, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	B3, C32
kusano 2b45e8
	CVTU	B4, C42
kusano 2b45e8
kusano 2b45e8
	CVTU	B5, C14
kusano 2b45e8
	CVTU	B6, C24
kusano 2b45e8
kusano 2b45e8
	CVTU	B7, C34
kusano 2b45e8
	CVTU	B8, C44
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A6, C23
kusano 2b45e8
	SUB		C33, A7, C33
kusano 2b45e8
	SUB		C43, A8, C43
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	SUB		C13, C13, A5		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A6
kusano 2b45e8
	SUB		C33, C33, A7
kusano 2b45e8
	SUB		C43, C43, A8
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	AC'+'BD
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	LOAD ALPHA_R
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	LOAD ALPHA_R
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	LOAD ALPHA_I
kusano 2b45e8
kusano 2b45e8
	ADD		C13, A5, C13		#	AD'+'CB
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	NEG		C13, C13		#	AD'+'CB
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C33, C33
kusano 2b45e8
	NEG		C43, C43
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B5, 4 * SIZE(CO1)
kusano 2b45e8
	LD		B7, 6 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
	LD		B6, 5 * SIZE(CO1)
kusano 2b45e8
	LD		B8, 7 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = ALPHA_R
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B5, B5, C31, A1
kusano 2b45e8
	MADD	B7, B7, C41, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	MADD	B6, B6, C33, A1
kusano 2b45e8
	MADD	B8, B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = ALPHA_I
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C31
kusano 2b45e8
	CVTU	A4, C41
kusano 2b45e8
kusano 2b45e8
	CVTU	A5, C13
kusano 2b45e8
	CVTU	A6, C23
kusano 2b45e8
kusano 2b45e8
	CVTU	A7, C33
kusano 2b45e8
	CVTU	A8, C43
kusano 2b45e8
kusano 2b45e8
	CVTU	B1, C12
kusano 2b45e8
	CVTU	B2, C22
kusano 2b45e8
kusano 2b45e8
	CVTU	B3, C32
kusano 2b45e8
	CVTU	B4, C42
kusano 2b45e8
kusano 2b45e8
	CVTU	B5, C14
kusano 2b45e8
	CVTU	B6, C24
kusano 2b45e8
kusano 2b45e8
	CVTU	B7, C34
kusano 2b45e8
	CVTU	B8, C44
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	ADD		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B5, C31, A1
kusano 2b45e8
	MUL B7, C41, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	MUL B6, C33, A1
kusano 2b45e8
	MUL B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	SUB		C13, A5, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A6, C23
kusano 2b45e8
	SUB		C33, A7, C33
kusano 2b45e8
	SUB		C43, A8, C43
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B5, C31, A1
kusano 2b45e8
	MUL B7, C41, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	MUL B6, C33, A1
kusano 2b45e8
	MUL B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C31, A3, C31
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	ADD		C41, A4, C41
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	SUB		C13, C13, A5		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A6
kusano 2b45e8
	SUB		C33, C33, A7
kusano 2b45e8
	SUB		C43, C43, A8
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B5, C31, A1
kusano 2b45e8
	MUL B7, C41, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	MUL B6, C33, A1
kusano 2b45e8
	MUL B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	AC'+'BD
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	SUB		C31, C31, A3
kusano 2b45e8
	LD		A1, 152($sp)		#	LOAD ALPHA_R
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	LOAD ALPHA_R
kusano 2b45e8
	SUB		C41, C41, A4
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	LOAD ALPHA_I
kusano 2b45e8
kusano 2b45e8
	ADD		C13, A5, C13		#	AD'+'CB
kusano 2b45e8
	ADD		C23, A6, C23
kusano 2b45e8
	ADD		C33, A7, C33
kusano 2b45e8
	ADD		C43, A8, C43
kusano 2b45e8
	NEG		C13, C13		#	AD'+'CB
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
	NEG		C33, C33
kusano 2b45e8
	NEG		C43, C43
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = ALPHA_R
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B5, C31, A1
kusano 2b45e8
	MUL B7, C41, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	MUL B6, C33, A1
kusano 2b45e8
	MUL B8, C43, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = ALPHA_I
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	NMSUB	B5, B5, C33, A2
kusano 2b45e8
	NMSUB	B7, B7, C43, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
	MADD	B6, B6, C31, A2
kusano 2b45e8
	MADD	B8, B8, C41, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B5, 4 * SIZE(CO1)
kusano 2b45e8
	ST		B7, 6 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
	ST		B6, 5 * SIZE(CO1)
kusano 2b45e8
	ST		B8, 7 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -4
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -1
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	dsll	L,    TEMP, 2 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, TEMP, ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 4
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	bgtz	I, .L141
kusano 2b45e8
	daddiu	CO1, CO1, 8 * SIZE
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L12:
kusano 2b45e8
	andi	I, M, 2				#	MR=4
kusano 2b45e8
	blez	I, .L11
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L121:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	L, KK, 1 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, KK,  ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 2
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, KK, 1
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L122
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	MOV		C21, C11
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
	MOV		C23, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
	FETCH	$0, 8 * SIZE(CO1)
kusano 2b45e8
	
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	blez	L, .L122
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L1210:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F5, F4, 2)		#	A5 A6
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A3, B2
kusano 2b45e8
	MADPS	C21, C21, A4, B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F7, F6, 3)		#	A7 A8
kusano 2b45e8
	MADPS	C13, C13, A3, B4
kusano 2b45e8
	MADPS	C23, C23, A4, B4
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A5, B5
kusano 2b45e8
	MADPS	C21, C21, A6, B5
kusano 2b45e8
	daddiu	AO, AO, 4 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C13, C13, A5, B7
kusano 2b45e8
	MADPS	C23, C23, A6, B7
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C11, C11, A7, B6
kusano 2b45e8
	MADPS	C21, C21, A8, B6
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A7, B8
kusano 2b45e8
	MADPS	C23, C23, A8, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	bgtz	L, .L1210
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L122:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L127
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	daddiu	BO, BO, 1 * 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE
kusano 2b45e8
	MADPS	C11, C11, A3, B2
kusano 2b45e8
	MADPS	C21, C21, A4, B2
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A3, B4
kusano 2b45e8
	MADPS	C23, C23, A4, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)
kusano 2b45e8
	PLU		B3, B1, B1
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L127:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L120
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C21, C21, A2, B1
kusano 2b45e8
	daddiu	BO, BO, 2 * SIZE
kusano 2b45e8
	daddiu	AO, AO, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	MADPS	C23, C23, A2, B3
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L120:							#	Write Back
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A4, C23
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A4
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	NEG		C13, C13		#	ad'+'cb
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B3, 2 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
	LD		B4, 3 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MADD	B3, B3, C21, A1
kusano 2b45e8
	MADD	B2, B2, C13, A1
kusano 2b45e8
	MADD	B4, B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A2, C21
kusano 2b45e8
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
	CVTU	A4, C23
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	SUB		C23, A4, C23
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	ADD		C21, A2, C21
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	SUB		C23, C23, A4
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	SUB		C21, C21, A2
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	ADD		C23, A4, C23
kusano 2b45e8
	LD		A1, 152($sp)		#	load alpha_r
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
	NEG		C13, C13		#	ad'+'cb
kusano 2b45e8
	NEG		C23, C23
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A1		#	A1 = alpha_r
kusano 2b45e8
	MUL B3, C21, A1
kusano 2b45e8
	MUL B2, C13, A1
kusano 2b45e8
	MUL B4, C23, A1
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	NMSUB	B3, B3, C23, A2
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
	MADD	B4, B4, C21, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B3, 2 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
	ST		B4, 3 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -2
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -1
kusano 2b45e8
#endif
kusano 2b45e8
	dsll	L, TEMP, 1 + ZBASE_SHIFT
kusano 2b45e8
	dsll	TEMP, TEMP, ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, L
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	daddiu	CO1, CO1, 4 * SIZE
kusano 2b45e8
	daddiu	CO2, CO2, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L11:
kusano 2b45e8
	andi	I, M, 1
kusano 2b45e8
	blez	I, .L10
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L111:
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
#if (defined(LEFT) &&  defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	move	BO,  B
kusano 2b45e8
#else
kusano 2b45e8
	dsll	TEMP, KK,  ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, TEMP
kusano 2b45e8
	daddu	BO, B,  TEMP
kusano 2b45e8
#endif
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#elif defined(LEFT)
kusano 2b45e8
	daddiu	TEMP, KK, 1
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, KK, 1
kusano 2b45e8
#endif
kusano 2b45e8
	dsra	L,  TEMP, 2
kusano 2b45e8
	blez	L, .L112
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	move	BO, B				#	Reset	B
kusano 2b45e8
	dsra	L, K, 2				#	UnRoll	K=64
kusano 2b45e8
kusano 2b45e8
	MTC		$0, C11				#	CLEAR REAULTS REGISTERS
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MOV		C13, C11
kusano 2b45e8
kusano 2b45e8
	FETCH	$0, 0 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	blez	L, .L112
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L1110:
kusano 2b45e8
	daddiu	L, L, -1
kusano 2b45e8
	gsLQC1(R13, F13, F12, 1)	#	B3 B4
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F3, F2, 1)		#	A3 A4
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	daddiu	BO, BO, 2 * 4 * SIZE	#	4KR*4NR
kusano 2b45e8
kusano 2b45e8
	PLU		B7,	B5, B5
kusano 2b45e8
	PLU		B8, B6, B6
kusano 2b45e8
	daddiu	AO, AO, 2 * 4 * SIZE 	#	4KR*8MR
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A2, B2
kusano 2b45e8
	MADPS	C13, C13, A2, B4
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A3, B5
kusano 2b45e8
	MADPS	C13, C13, A3, B7
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)		#	B1 B2
kusano 2b45e8
	MADPS	C11, C11, A4, B6
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)		#	A1 A2
kusano 2b45e8
	MADPS	C13, C13, A4, B8
kusano 2b45e8
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
	bgtz	L, .L1110
kusano 2b45e8
	PLU		B4, B2, B2
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L112:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 2
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 2
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L117
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
	daddiu	BO, BO, 4 * SIZE
kusano 2b45e8
	daddiu	AO, AO, 4 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A2, B2
kusano 2b45e8
	MADPS	C13, C13, A2, B4
kusano 2b45e8
kusano 2b45e8
	gsLQC1(R13, F9, F8, 0)
kusano 2b45e8
	gsLQC1(R12, F1, F0, 0)
kusano 2b45e8
	PLU		B3,	B1, B1
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L117:
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	andi	L, K, 1
kusano 2b45e8
#else
kusano 2b45e8
	andi	L, TEMP, 1
kusano 2b45e8
#endif
kusano 2b45e8
	blez	L, .L110
kusano 2b45e8
	NOP
kusano 2b45e8
kusano 2b45e8
	daddiu	BO, BO, 2 * SIZE
kusano 2b45e8
	daddiu	AO, AO, 2 * SIZE
kusano 2b45e8
kusano 2b45e8
	MADPS	C11, C11, A1, B1
kusano 2b45e8
	MADPS	C13, C13, A1, B3
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L110:							#	Write Back
kusano 2b45e8
#ifndef	TRMMKERNEL
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
	
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
kusano 2b45e8
	LD		B1, 0 * SIZE(CO1)
kusano 2b45e8
	LD		B2, 1 * SIZE(CO1)
kusano 2b45e8
kusano 2b45e8
	MADD	B1, B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MADD	B2, B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	I, I, -1
kusano 2b45e8
	CVTU	A1, C11
kusano 2b45e8
	CVTU	A3, C13
kusano 2b45e8
kusano 2b45e8
#if   defined(NN) || defined(NT) || defined(TN) || defined(TT)
kusano 2b45e8
	/*	(a + bi) * (c + di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
#	LD		A1, 0 * SIZE(A)		#	load alpha_r
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
#	LD		A2, 0 * SIZE(A)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(NR) || defined(NC) || defined(TR) || defined(TC)
kusano 2b45e8
	/*	(a + bi) * (c - di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if	  defined(RN) || defined(RT) || defined(CN) || defined(CT)
kusano 2b45e8
	/*	(a - bi) * (c + di) */
kusano 2b45e8
	ADD		C11, A1, C11		#	ac'+'bd
kusano 2b45e8
	SUB		C13, C13, A3		#	ad'+'cb
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)		#	load alpha_i
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#if   defined(RR) || defined(RC) || defined(CR) || defined(CC)
kusano 2b45e8
	/*	(a - bi) * (c - di) */
kusano 2b45e8
	SUB		C11, C11, A1		#	ac'+'bd
kusano 2b45e8
	ADD		C13, A3, C13		#	ad'+'cb
kusano 2b45e8
	NEG		C13, C13
kusano 2b45e8
	LD		A4, 152($sp)		#	load alpha_r
kusano 2b45e8
	LD		A2, 160($sp)
kusano 2b45e8
kusano 2b45e8
	MUL B1, C11, A4		#	A1 = alpha_r
kusano 2b45e8
	MUL B2, C13, A4
kusano 2b45e8
	NMSUB	B1, B1, C13, A2		#	A2 = alpha_i
kusano 2b45e8
	MADD	B2, B2, C11, A2
kusano 2b45e8
kusano 2b45e8
	ST		B1, 0 * SIZE(CO1)
kusano 2b45e8
	ST		B2, 1 * SIZE(CO1)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
#if ( defined(LEFT) &&  defined(TRANSA)) || \
kusano 2b45e8
    (!defined(LEFT) && !defined(TRANSA))
kusano 2b45e8
	dsubu	TEMP, K, KK
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	TEMP, TEMP, -1
kusano 2b45e8
#else
kusano 2b45e8
	daddiu	TEMP, TEMP, -1
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	dsll	TEMP, TEMP, ZBASE_SHIFT
kusano 2b45e8
kusano 2b45e8
	daddu	AO, AO, TEMP
kusano 2b45e8
	daddu	BO, BO, TEMP
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifdef LEFT
kusano 2b45e8
	daddiu	KK, KK, 1
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#endif
kusano 2b45e8
	daddiu	CO1, CO1, 2 * SIZE
kusano 2b45e8
	daddiu	CO2, CO2, 2 * SIZE
kusano 2b45e8
kusano 2b45e8
kusano 2b45e8
	.align	4
kusano 2b45e8
.L10:
kusano 2b45e8
	move	B, BO
kusano 2b45e8
#if defined(TRMMKERNEL) && !defined(LEFT)
kusano 2b45e8
	daddiu	KK, KK, 1
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
.L999:
kusano 2b45e8
	ld	$16,   0($sp)
kusano 2b45e8
	ld	$17,   8($sp)
kusano 2b45e8
	ld	$18,  16($sp)
kusano 2b45e8
	ld	$19,  24($sp)
kusano 2b45e8
	ld	$20,  32($sp)
kusano 2b45e8
	ld	$21,  40($sp)
kusano 2b45e8
	ld	$22,  48($sp)
kusano 2b45e8
kusano 2b45e8
	LD	$f24, 56($sp)
kusano 2b45e8
	LD	$f25, 64($sp)
kusano 2b45e8
	LD	$f26, 72($sp)
kusano 2b45e8
	LD	$f27, 80($sp)
kusano 2b45e8
	LD	$f28, 88($sp)
kusano 2b45e8
kusano 2b45e8
#if defined(TRMMKERNEL)
kusano 2b45e8
	ld	$23,  96($sp)
kusano 2b45e8
	ld	$24, 104($sp)
kusano 2b45e8
	ld	$25, 112($sp)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
#ifndef __64BIT__
kusano 2b45e8
	LD	$f20,120($sp)
kusano 2b45e8
	LD	$f21,128($sp)
kusano 2b45e8
	LD	$f22,136($sp)
kusano 2b45e8
	LD	$f23,144($sp)
kusano 2b45e8
#endif
kusano 2b45e8
kusano 2b45e8
	daddiu	$sp,$sp,STACKSIZE
kusano 2b45e8
	j	$31
kusano 2b45e8
	nop
kusano 2b45e8
kusano 2b45e8
	EPILOGUE