In the following assembly code, B0 is not decremented with SUB instruction. SUB instruction seems not to work.
03288265 LDW.D1T1 *+A10[4],A6
032882E7 || LDW.D2T2 *+B10[4],B6
0003E1A2 || SUB.S2 B0,1,B0
2FFFF693 [ B0] B.S2 LOOP (PC-76 = 0x1181e494)
06B1BE19 || ADDSP.S1X A13,B12,A13
06B1B21B || ADDSP.L2X B13,A12,B13
03A8C265 || LDW.D1T1 *+A10[6],A7
03A8C2E6 || LDW.D2T2 *+B10[6],B7
Please see the attached file for a series of assembly code:
07BE9DC2 SUBAW.D2 SP,0x14,SP 07BC18F1 OR.D1X 0,SP,FP 07BC22F4 || STW.D2T1 FP,*+SP[1] 073C42F5 STW.D2T1 A14,*+SP[2] 073CE276 || STW.D1T2 DP,*+FP[7] 06BC62F5 STW.D2T1 A13,*+SP[3] 06BD0276 || STW.D1T2 B13,*+FP[8] 063C82F5 STW.D2T1 A12,*+SP[4] 063D2276 || STW.D1T2 B12,*+FP[9] 05BCA2F5 STW.D2T1 A11,*+SP[5] 05BD4276 || STW.D1T2 B11,*+FP[10] 053CC2F5 STW.D2T1 A10,*+SP[6] 053D6276 || STW.D1T2 B10,*+FP[11] 071808F1 OR.D1 0,A6,A14 071816A3 || OR.S2X 0,A6,DP 051816A1 || OR.S1X 0,B6,A10 05183D42 || ADDAW.D2 B6,0x1,B10 029018F3 OR.D2X 0,A4,B5 029018F1 || OR.D1X 0,B4,A5 000002AA || MVK.S2 0x0005,B0 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 03280265 LDW.D1T1 *+A10[0],A6 032802E6 || LDW.D2T2 *+B10[0],B6 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 03A84265 LDW.D1T1 *+A10[2],A7 03A842E6 || LDW.D2T2 *+B10[2],B7 00000000 NOP LOOP: 06A0BE03 MPYSP.M2X B5,A8,B13 06911E00 || MPYSP.M1X A8,B4,A13 06249E03 MPYSP.M2X B4,A9,B12 06153E00 || MPYSP.M1X A9,B5,A12 06A0BE03 MPYSP.M2X B5,A8,B13 06911E00 || MPYSP.M1X A8,B4,A13 06249E03 MPYSP.M2X B4,A9,B12 06153E00 || MPYSP.M1X A9,B5,A12 0119BE1B ADDSP.S2X B13,A6,B2 0119BEB8 || SUBSP.S1X B6,A13,A2 05B018F1 OR.D1X 0,B12,A11 05B018F2 || OR.D2X 0,A12,B11 06B4FE19 ADDSP.S1X A7,B13,A13 06B4FE3A || SUBSP.S2X B7,A13,B13 00000000 NOP 05897E19 ADDSP.S1X A11,B2,A11 05897E1A || ADDSP.S2X B11,A2,B11 03288265 LDW.D1T1 *+A10[4],A6 032882E7 || LDW.D2T2 *+B10[4],B6 0003E1A2 || SUB.S2 B0,1,B0 2FFFF693 [ B0] B.S2 LOOP (PC-76 = 0x1181e494) 06B1BE19 || ADDSP.S1X A13,B12,A13 06B1B21B || ADDSP.L2X B13,A12,B13 03A8C265 || LDW.D1T1 *+A10[6],A7 03A8C2E6 || LDW.D2T2 *+B10[6],B7 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 05A85675 STW.D1T1 A11,*A10++[2] 05A856F6 || STW.D2T2 B11,*B10++[2] 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 06A85675 STW.D1T1 A13,*A10++[2] 06A856F6 || STW.D2T2 B13,*B10++[2] 00000000 NOP 07BC18F0 OR.D1X 0,SP,FP 053CC2E5 LDW.D2T1 *+SP[6],A10 053D6266 || LDW.D1T2 *+FP[11],B10 05BCA2E5 LDW.D2T1 *+SP[5],A11 05BD4266 || LDW.D1T2 *+FP[10],B11 063C82E5 LDW.D2T1 *+SP[4],A12 063D2266 || LDW.D1T2 *+FP[9],B12 06BC62E5 LDW.D2T1 *+SP[3],A13 06BD0266 || LDW.D1T2 *+FP[8],B13 073C42E5 LDW.D2T1 *+SP[2],A14 073CE267 || LDW.D1T2 *+FP[7],DP 000C0362 || B.S2 B3 07BC22E4 LDW.D2T1 *+SP[1],FP 178014FE ADDAW.D2 B15,20,SP 00000000 NOP 00000000 NOP 00000000 NOP
In the following assembly code, B0 is decremented with SUB instruction. SUB instruction works with .L2 unit.
03288265 LDW.D1T1 *+A10[4],A6
032882E7 || LDW.D2T2 *+B10[4],B6
0003E05A || SUB.L2 B0,1,B0
2FFFF693 [ B0] B.S2 LOOP (PC-76 = 0x1181e494)
06B1BE19 || ADDSP.S1X A13,B12,A13
06B1B21B || ADDSP.L2X B13,A12,B13
03A8C265 || LDW.D1T1 *+A10[6],A7
03A8C2E6 || LDW.D2T2 *+B10[6],B7
Please see the attached file for a series of assembly code:
07BE9DC2 SUBAW.D2 SP,0x14,SP 07BC18F1 OR.D1X 0,SP,FP 07BC22F4 || STW.D2T1 FP,*+SP[1] 073C42F5 STW.D2T1 A14,*+SP[2] 073CE276 || STW.D1T2 DP,*+FP[7] 06BC62F5 STW.D2T1 A13,*+SP[3] 06BD0276 || STW.D1T2 B13,*+FP[8] 063C82F5 STW.D2T1 A12,*+SP[4] 063D2276 || STW.D1T2 B12,*+FP[9] 05BCA2F5 STW.D2T1 A11,*+SP[5] 05BD4276 || STW.D1T2 B11,*+FP[10] 053CC2F5 STW.D2T1 A10,*+SP[6] 053D6276 || STW.D1T2 B10,*+FP[11] 071808F1 OR.D1 0,A6,A14 071816A3 || OR.S2X 0,A6,DP 051816A1 || OR.S1X 0,B6,A10 05183D42 || ADDAW.D2 B6,0x1,B10 029018F3 OR.D2X 0,A4,B5 029018F1 || OR.D1X 0,B4,A5 000002AA || MVK.S2 0x0005,B0 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 03280265 LDW.D1T1 *+A10[0],A6 032802E6 || LDW.D2T2 *+B10[0],B6 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 03A84265 LDW.D1T1 *+A10[2],A7 03A842E6 || LDW.D2T2 *+B10[2],B7 00000000 NOP LOOP: 06A0BE03 MPYSP.M2X B5,A8,B13 06911E00 || MPYSP.M1X A8,B4,A13 06249E03 MPYSP.M2X B4,A9,B12 06153E00 || MPYSP.M1X A9,B5,A12 06A0BE03 MPYSP.M2X B5,A8,B13 06911E00 || MPYSP.M1X A8,B4,A13 06249E03 MPYSP.M2X B4,A9,B12 06153E00 || MPYSP.M1X A9,B5,A12 0119BE1B ADDSP.S2X B13,A6,B2 0119BEB8 || SUBSP.S1X B6,A13,A2 05B018F1 OR.D1X 0,B12,A11 05B018F2 || OR.D2X 0,A12,B11 06B4FE19 ADDSP.S1X A7,B13,A13 06B4FE3A || SUBSP.S2X B7,A13,B13 00000000 NOP 05897E19 ADDSP.S1X A11,B2,A11 05897E1A || ADDSP.S2X B11,A2,B11 03288265 LDW.D1T1 *+A10[4],A6 032882E7 || LDW.D2T2 *+B10[4],B6 0003E05A || SUB.L2 B0,1,B0 2FFFF693 [ B0] B.S2 LOOP (PC-76 = 0x1181e494) 06B1BE19 || ADDSP.S1X A13,B12,A13 06B1B21B || ADDSP.L2X B13,A12,B13 03A8C265 || LDW.D1T1 *+A10[6],A7 03A8C2E6 || LDW.D2T2 *+B10[6],B7 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 05A85675 STW.D1T1 A11,*A10++[2] 05A856F6 || STW.D2T2 B11,*B10++[2] 04383765 LDDW.D1T1 *A14++[1],A9:A8 043837E6 || LDDW.D2T2 *DP++[1],B9:B8 06A85675 STW.D1T1 A13,*A10++[2] 06A856F6 || STW.D2T2 B13,*B10++[2] 00000000 NOP 07BC18F0 OR.D1X 0,SP,FP 053CC2E5 LDW.D2T1 *+SP[6],A10 053D6266 || LDW.D1T2 *+FP[11],B10 05BCA2E5 LDW.D2T1 *+SP[5],A11 05BD4266 || LDW.D1T2 *+FP[10],B11 063C82E5 LDW.D2T1 *+SP[4],A12 063D2266 || LDW.D1T2 *+FP[9],B12 06BC62E5 LDW.D2T1 *+SP[3],A13 06BD0266 || LDW.D1T2 *+FP[8],B13 073C42E5 LDW.D2T1 *+SP[2],A14 073CE267 || LDW.D1T2 *+FP[7],DP 000C0362 || B.S2 B3 07BC22E4 LDW.D2T1 *+SP[1],FP 178014FE ADDAW.D2 B15,20,SP 00000000 NOP 00000000 NOP 00000000 NOP
Why does the SUB instruction not work in the first assembly code?
Best regards,
Daisuke