Fixed #24 drmm error on Loongson3A

This commit is contained in:
traz 2011-05-09 17:28:20 +00:00
parent 9320933520
commit 5a991b7149
1 changed files with 23 additions and 20 deletions

View File

@ -164,19 +164,12 @@
.align 5 # BACKUP .align 5 # BACKUP
.L0_N4: # Loop N .L0_N4: # Loop N
ST ALPHA,152($sp) # Backup ALPHA ST ALPHA,152($sp) # Backup ALPHA
move MCO,M # Backup M
#if defined(TRMMKERNEL) move MCO,M # Backup M
ld OFFSET,160($sp) #
#endif
move NCO,N # Backup N move NCO,N # Backup N
move KCO,K # Backup K move KCO,K # Backup K
#if defined(TRMMKERNEL) && !defined(LEFT)
neg KK,OFFSET
#endif
move AO,A # Backup A_addr move AO,A # Backup A_addr
dsra N,NCO,2 # N=NCO/2 dsra N,NCO,2 # N=NCO/2
@ -184,6 +177,15 @@
dsll SPANB,KCO,2+BASE_SHIFT # SPANB=KC*NR(4)*8Byte=KC*2^5 dsll SPANB,KCO,2+BASE_SHIFT # SPANB=KC*NR(4)*8Byte=KC*2^5
move BO,B # Backup B_addr move BO,B # Backup B_addr
#if defined(TRMMKERNEL)
LDARG OFFSET,160($sp) #
#endif
#if defined(TRMMKERNEL) && !defined(LEFT)
neg KK,OFFSET # right
#endif
beq N,$0,.L0_N2 # N=0,NCO<4 beq N,$0,.L0_N2 # N=0,NCO<4
dsll SPANA,KCO,1+BASE_SHIFT # SPANA = KCO*4mr*8Byte dsll SPANA,KCO,1+BASE_SHIFT # SPANA = KCO*4mr*8Byte
@ -197,13 +199,13 @@
daddu CO3,CO2,LDC daddu CO3,CO2,LDC
daddu PREB,BO,SPANB # PreB point next panelB daddu PREB,BO,SPANB # PreB point next panelB
#if defined(TRMMKERNEL) && defined(LEFT)
move KK,OFFSET
#endif
daddu CO4,CO3,LDC daddu CO4,CO3,LDC
daddu PREA,AO,SPANA daddu PREA,AO,SPANA
#if defined(TRMMKERNEL) && defined(LEFT)
move KK,OFFSET # left
#endif
beqz M,.L14_M2 beqz M,.L14_M2
daddu C,CO4,LDC daddu C,CO4,LDC
@ -212,12 +214,13 @@
#if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA)) #if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
move B,BO move B,BO
#else #else
dsll K,KK,2 + BASE_SHIFT dsll K,KK,2 + BASE_SHIFT # KK no data part
dsll TEMP,KK,2 + BASE_SHIFT dsll TEMP,KK,2 + BASE_SHIFT
daddu A,A,K daddu A,A,K # move A B to data part
daddu B,BO,TEMP daddu B,BO,TEMP
#endif #endif
MTC $0,t11 MTC $0,t11
MOV t21,t11 MOV t21,t11
gsLQC1(R8,F1,F0,0) #a0,a1 gsLQC1(R8,F1,F0,0) #a0,a1
@ -676,11 +679,11 @@
dsll K,TEMP,2 + BASE_SHIFT dsll K,TEMP,2 + BASE_SHIFT
dsll TEMP,TEMP,2 + BASE_SHIFT dsll TEMP,TEMP,2 + BASE_SHIFT
daddu A,A,K daddu A,A,K # mov A to the end of panel Ai
daddu B,B,TEMP daddu B,B,TEMP # mov B to the end of panel Bj
#endif #endif
#ifdef LEFT #ifdef LEFT # right control by N loop
daddiu KK, KK,4 daddiu KK, KK,4
#endif #endif
bnez M,.L10 # M!=0 bnez M,.L10 # M!=0
@ -1158,7 +1161,7 @@
dsll TEMP,TEMP, 2 + BASE_SHIFT dsll TEMP,TEMP, 2 + BASE_SHIFT
daddu A,A,K daddu A,A,K
daddu B,BO,TEMP daddu B,B,TEMP
#endif #endif
#ifdef LEFT #ifdef LEFT
@ -1883,7 +1886,7 @@
dsll K, KK, 2 + BASE_SHIFT dsll K, KK, 2 + BASE_SHIFT
dsll TEMP, KK, 0 + BASE_SHIFT dsll TEMP, KK, 0 + BASE_SHIFT
daddu AO, AO, K daddu A, A, K
daddu B, BO, TEMP daddu B, BO, TEMP
#endif #endif
gsLQC1(R9,F12,F8,0) gsLQC1(R9,F12,F8,0)