Optimize asm matmul dma software path

This commit is contained in:
2026-07-06 00:13:01 +08:00
parent 094157ff05
commit 93d2fbd935
7 changed files with 422 additions and 714 deletions

View File

@@ -1,49 +1,9 @@
00000010100000000000000000000001
00000010100000000000000000000010
00000010100000000000000000000011
00000010100000000000000000000100
00000010100000000000000000000101
00000010100000000000000000000110
00000010100000000000000000000111
00000010100000000000000000001000
00000010100000000000000000001001
00000010100000000000000000001010
00000010100000000000000000001011
00000010100000000000000000001100
00000010100000000000000000001101
00000010100000000000000000001110
00000010100000000000000000001111
00000010100000000000000000010000
00000010100000000000000000010001
00000010100000000000000000010010
00000010100000000000000000010011
00000010100000000000000000010100
00000010100000000000000000010101
00000010100000000000000000010110
00000010100000000000000000010111
00000010100000000000000000011000
00000010100000000000000000011001
00000010100000000000000000011010
00000010100000000000000000011011
00000010100000000000000000011100
00000010100000000000000000011101
00000010100000000000000000011110
00000010100000000000000000011111
00000000000101010000000000001100
00000011100001000000000000001110
00000000010000001001000110001101
00000110000000000000000110100000
00000110000000000000010110100000
00000110000000000000000110100001
00000110000000000000010110100001
00000010100000000000010110001100
01011111111111111110100110001110
00000011100000000010000000001100 00000011100000000010000000001100
00000011100000000110000000001101 00000011100000000110000000001101
00000100000000000000000110101100 00000100000000000000000110101100
00000100000001100000000000100000 00000100000001100000000000100000
00000100000001100000010000100000 00000100000001100000010000100000
00000011100000000010010000001100 00000011100000000110010000001100
00000100000001100000000000101100 00000100000001100000000000101100
00010101010000000000000000001100 00010101010000000000000000001100
00000011100000000010010110001100 00000011100000000010010110001100
@@ -51,671 +11,211 @@
00000011100000000100000000001100 00000011100000000100000000001100
00000011100000000110000000001101 00000011100000000110000000001101
00000100000000000000000110101100 00000100000000000000000110101100
00011100000000000000000000101100 00000011100000000001000000001100
00000010101010001011000110001100 00000100000000000000000110000000
00011100000000000001000000001101
00000010101111001001000110101101
00011100000000000001000000001110
00000010101111010111000111001110
01101100000000000001100110101110
00101000100000000000000110001111
00101001100000000000000110101111
00000010100000000001000110001100
00000010100000000001000110101101
01101011111111111111000110101110
00011100000000000001000000001100
00000010101111001111000110001100
00011100000000000001000000001101
00000010101111001101000110101101
01101100000000000001000110001101
00101001100000000000000110000000
00000010100000000001000110001100
01101011111111111111100110001101
00000011100000000110010000001100
00000100000001100000000000101100
00011100000000000001000000001100
00000010101111000001000110001100
00101000100000000000000110001101
00000011100000000001110000001110
00101001000000000000100110101110
00000011100000100000000000001110
00101001000000000000110110101110
00000000000101010000000000001110
00101001000000000000010110101110
00010101011111100100000111101111
00000011100101000000000111101111
00101000100000000000000111101111
00000011100000000110110000001110
01011000000000000000100000001111
00000011100000000000010000001110
00101001000000000000000110101110
00000011100000000000110000001110
00101001000000000000110110101110
00000000000101010000000000001110
00101001000000000001000110101110
00011100000000000000000000001100
00000010100010100001000110001100
00000100000000000011000000101100
00000011100000000000010000001101
00000100000000010001000000101101
00000011100000000001000000001101
00000100000000000000000110100000
00000100000000000000010000100000 00000100000000000000010000100000
00010100000000000000000000101101
00000011101111111111110110101101
00000100000000000001000000100000 00000100000000000001000000100000
00000100000000000001000000101101 00010101011111100000000000001100
00000011100000000001110000001101
00101001000000000000100110001101
00000011100000100000000000001101
00101001000000000000110110001101
00101001000000000000010110000000
00010101011111100100000111101110
00000011100101000000000111001110
00101000100000000000000111001110
00000011100000000110110000001101
01011000000000000000100000001110
00000011100000000000010000001101
00101001000000000000000110001101
00000011100000000000110000001101
00101001000000000000110110001101
00101001000000000001000110000000
00011100000000000010000000000011 00011100000000000010000000000011
00000010101110010101000001100011 00000010101111011111000001100011
00000000000101010000000000000100 00000000000101010000000000000100
00000000000101010000000000000101 00000000000101010000000000000101
01010100000000001000010000000000 01010100000000000000110000000000
01010100000000000100000000000000
01010000000000000000000000000000 01010000000000000000000000000000
00000000000000000000000000000000 00000000000000000000000000000000
00000000000000000000000000000000 00010101011111100000000000001100
00000000000000000000000000000000 00000010100000010011010000010000
00000000000000000000000000000000 00101001000000000000000110010000
00000000000000000000000000000000 00000010100000010000010000010010
00000000000000000000000000000000 00101001000000000000000110010010
00000000000000000000000000000000 00000010100000010101000000001111
00000000000000000000000000000000 00101001000000000000000110001111
00000000000000000000000000000000 00101001000000000000000110010000
00000000000000000000000000000000 00000010100000010101010000000110
00000000000000000000000000000000 00101001000000000000000110000110
00000000000000000000000000000000 00000010100000010011000000001010
00000000000000000000000000000000 00101001000000000000000110001010
00000000000000000000000000000000 00000010100000010111110000000101
01010000000000000000000000000000 00101001000000000000000110000101
00000000000000000000000000000000 00000010100000010100110000010100
00000000000000000000000000000000 00101001000000000000000110010100
00000000000000000000000000000000 00101001000000000000000110001111
00000000000000000000000000000000 00101001000000000000000110010010
00000000000000000000000000000000 00000010100000010100100000000100
00000000000000000000000000000000 00101001000000000000000110000100
00000000000000000000000000000000 00010101011111101010000000001101
00000000000000000000000000000000 00101001000000000000000110001111
00000000000000000000000000000000 00000011100000000100000110110011
00000000000000000000000000000000 00101001100000000000001001100000
00000000000000000000000000000000 00000011100000000001000110101110
00000000000000000000000000000000 00000010100000000101100000001001
00000000000000000000000000000000 00101001100000000000000111001001
00000000000000000000000000000000 00000011100000001000000110100111
00000000000000000000000000000000 00010100001110001000000000001000
00010101011111100000000000010000 00010100001110001001001110010001
00101001100000000000000011101000
00000011100000001001000110100110
00000011100100000000001000110001
00010100000000000000000000110000
00101001100000000000000011010001
00000011100000001010000110100101
00000011100011100010001000010000
00101001100000000000000010110000
00000011100000001011000110110100
00000010100000100000000000000100
00101001100000000000001010000100
00000011100000001100000110110010
00000010100000110000000000010011
00000010100001000000000000001100
00101001100000000000001001010011
00000010101111111100000001100011 00000010101111111100000001100011
00000010100000010011010000001100 00010101011111101010000000001111
00011100000000000001000000001111 00101001100000000000000110101100
00000010101101101101000111101111 00101000100000000000000111001100
00000011100000000001011000001101
00101001100000000011000001101100
00101010000000000011000001101110
00000010100000000000010111101111
00101010000000000000000110101100
00000011010000001000000110001100
01011011111111111111100110000000
00101001000000000000001000001110
00101000000000000000000111101100
01011111111111111110000110000000
00010101011111101010000000001100
00000011100000000100000110001111
00101001100000000000000111100000
00000010100000000101100000010010
00000011100000000001000110001101
00101001100000000000000110110010
00010100001110001000000000010001
00000011100000001000000110010000
00010100001110001001001110001110
00101001100000000000001000010001
00000011100100000000000111001110
00000011100000001001000110000101
00010100000000000000000000101111
00101001100000000000000010101110
00000011100000001010000110000100
00000011100011100010000111101111
00101001100000000000000010001111
00000011100000001011000110010011
00000010100000100000000000010100
00101001100000000000001001110100
00000011100000001100000110010001
00000010100000110000000000010010
00000010100001000000000000010000
00101001100000000000001000110010
00010101011111101010000000001110
00101001100000000000000110010000
00101000100000000000000110101100
00000011010000000100000110001100 00000011010000000100000110001100
01011011111111111111100110000000 01011011111111111111100110000000
00000010100000000100000000001111 00000010100000000100000000010000
00101001100000000000000110101111 00000011100000000100000111101100
00000011100000000100000111001110 00101001100000000000000111010000
00101000100000000000000111010001 00101000100000000000000110001110
00010101011111100000000000010000 00010101011111100000000000001101
00000010100000010011010000001100 00000011100000000001010110101111
00011100000000000001000000001111 00101010000000000000000111101100
00000010101101000010000111101111
00000011100000000001011000001101
00101001100000000011000001101100
00101010000000000011000001101110
00000010100000000000010111101111
00101010000000000000000110101100
00000011010000001000000110001100 00000011010000001000000110001100
01011011111111111111100110000000 01011011111111111111100110000000
00101001000000000000001000001110 00000010100000010011010000010000
00101000000000000000000111101100 00101001000000000000000110110000
01011111111111111110000110000000 00000010100000010000010000001100
00010101011111100000000000010000 00101001000000000000000110101100
00000010100000000111000000001110 00000010100000010101000000010001
00000010100000000010010000010011 00101001000000000000000110110001
00000010101111111111000000010010 00000000010001001111000111001100
00000011100000000001011000001101 00101001100000000011000001101100
00000011010000000000000000000000 00101010000000000011000001110001
00000000000101111011101000101100 00000010100000010101010000001000
00101001000000000000000110110000
00101001000000000000000110101000
00000010100000010011000000000111
00101001000000000000000110100111
00000010100000010111110000000110
00101001000000000000000110100110
00000010100000010000110000001111
00101001000000000000000110101111
00000010100000010100100000000101
00101001000000000000000110100101
00101001000000000000000110101111
00000010100000001100110000000100
00101001000000000000000110100100
00000010100000001100100000010100
00000010100000001111010000010011
00101001000000000000000110110100
00000010100000000010010000010010
00101001000000000000000110110011
00000010100000010101111000110000
01101000000000000000101001001100
00000010100000001100001000110000
00010101011111100000000000001101
00000000010001001110000111001100
00000011010000000011110110001100 00000011010000000011110110001100
00101001000000000000000110110000
00000010100000000010010000001111
00000010100000010101110110001101
01101000000000000000100111101100
00000010100000001100000110001101
00010101011111100000000000001111
00000000010001001101000111001100
00000011010000000011110110001100
00101001000000000000000111101101
00000010100000000010010000010000
00000010100000010101110110001111 00000010100000010101110110001111
01101000000000000000101001101100 01101100000000010001101000001100
00000010100000001100000110001111 00010101011111100000000000001101
00101001000000000000000110101111
00000011100000000001010110101101
00101010000000000000000110101100 00101010000000000000000110101100
00000011010000001000000110001100 00000011010000001000000110001100
01011011111111111111100110000000 01011011111111111111100110000000
00101001000000000000001000001111 00000000010001001100000111001100
00000010101111111111000111001110 00000011010000000011110110001100
01011111111111111101100111010010 00000010100000000010010000001111
00000010100000010101110110001101
01101000000000000000100111101100
00000010100000001100000110001101
00010101011111100000000000010000 00010101011111100000000000010000
00000010100000000011010000001100 00000000010001001011000111001100
00011100000000000001000000001111 00000011010000000011110110001100
00000010101100100111000111101111 00101001000000000000001000001101
00000011100000000001011000001101 00000010100000000010010000001111
00101001100000000011000001101100 00000010100000010101110110001101
00101010000000000011000001101110 01101000000000000000100111101100
00000010100000000000010111101111 00000010100000001100000110001101
00000011010000000000000000000000 00010101011111100000000000010000
00101010000000000000000110101100 00000000010001001010000111001100
00000011010000001000000110001100 00000011010000000011110110001100
01011011111111111111100110000000 00101001000000000000001000001101
00101001000000000000001000001110 00000010100000000010010000001111
00101000000000000000000111101100 00000010100000010101110110001101
01011111111111111101110110000000 01101000000000000000100111101100
00000010100000001100000110001101
00010101011111100000000000010000
00000000010001001001000111001100
00000011010000000011110110001100
00101001000000000000001000001101
00000010100000000010010000001111
00000010100000010101110110001101
01101000000000000000100111101100
00000010100000001100000110001101
00010101011111100000000000001111
00000011010000000011110111001110
00101001000000000000000111101101
00000010100000000010010000001100
00000010100000010101110111001111
01101000000000000000100110001110
00000010100000001100000111001111
00010101011111100000000000001100
00101001000000000000000110001111
00000010100000010011010000001101
00101001000000000000000110001101
00000010100000010000010000001110
00101001000000000000000110001110
00000010100000010101000000000101
00101001000000000000000110000101
00101001000000000000000110001101
00000010100000010101010000010100
00101001000000000000000110010100
00000010100000010011000000010011
00101001000000000000000110010011
00000010100000010111110000010010
00101001000000000000000110010010
00000010100000010001000000010001
00101001000000000000000110010001
00000010100000010011110000010000
00101001000000000000000110010000
00000010100000010011100000001111
00101001000000000000000110001111
00000010100000010001010000001110
00101001000000000000000110001110
00000000000101010000000000000100 00000000000101010000000000000100
00000010100000000100000001100011 00000010100000000100000001100011
01001100000000000000000000100000 01001100000000000000000000100000
00000011010000000000000000000000 00000010100000001100000110001111
00000011010000000000000000000000 01010011111111101110101111111111
00000011010000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000010101111100001000001100011
00101001100000011110000001100001
00101001100000011101000001100010
00101001100000011100000001100011
00101001100000011011000001100100
00101001100000011010000001100101
00101001100000011001000001100110
00101001100000011000000001100111
00101001100000010111000001101000
00101001100000010110000001101001
00101001100000010101000001101010
00101001100000010100000001101011
00101001100000010011000001101100
00101001100000010010000001101101
00101001100000010001000001101110
00101001100000010000000001101111
00101001100000001111000001110000
00101001100000001110000001110001
00101001100000001101000001110010
00101001100000001100000001110011
00101001100000001011000001110100
00101001100000001010000001110101
00101001100000001001000001110110
00101001100000001000000001110111
00101001100000000111000001111000
00101001100000000110000001111001
00101001100000000101000001111010
00101001100000000100000001111011
00101001100000000011000001111100
00101001100000000010000001111101
00101001100000000001000001111110
00101001100000000000000001111111
00000100000000000001010000000100
00000100000000000001100000000101
00000000010001001100000010001100
01011100000000001001000000001100
00000011010011111111000010001100
00000000010001001000100110001101
00000000000101010000000110101110
00000011010000000000010111001110
00000011100000000000010000010100
01011000000000010000100111010100
00000000000101010000000110101110
00000011010000000000100111001110
00000011100000000000100000010100
01011000000000010000000111010100
00000000000101010000000110101110
00000011010000000001000111001110
00000011100000000001000000010100
01011000000000001111010111010100
00000000000101010000000110101110
00000011010000000010000111001110
00000011100000000010000000010100
01011000000000001110100111010100
00000000000101010000000110101110
00000011010000000100000111001110
00000011100000000100000000010100
01011000000000001101110111010100
00000000000101010000000110101110
00000011010000001000000111001110
00000011100000001000000000010100
01011000000000001101000111010100
00000000000101010000000110101110
00000011010000010000000111001110
00000011100000010000000000010100
01011000000000001100010111010100
00000000000101010000000110101110
00000011010000100000000111001110
00000011100000100000000000010100
01011000000000001011100111010100
01010000000000000001000000000000
00000010100000000001000010110100
00000100000000000001100000110100
01010000000000000000000000000000
00101000100000011110000001100001
00101000100000011101000001100010
00101000100000011100000001100011
00101000100000011011000001100100
00101000100000011010000001100101
00101000100000011001000001100110
00101000100000011000000001100111
00101000100000010111000001101000
00101000100000010110000001101001
00101000100000010101000001101010
00101000100000010100000001101011
00101000100000010011000001101100
00101000100000010010000001101101
00101000100000010001000001101110
00101000100000010000000001101111
00101000100000001111000001110000
00101000100000001110000001110001
00101000100000001101000001110010
00101000100000001100000001110011
00101000100000001011000001110100
00101000100000001010000001110101
00101000100000001001000001110110
00101000100000001000000001110111
00101000100000000111000001111000
00101000100000000110000001111001
00101000100000000101000001111010
00101000100000000100000001111011
00101000100000000011000001111100
00101000100000000010000001111101
00101000100000000001000001111110
00101000100000000000000001111111
00000010100000011111000001100011
00000110010010000011100000000000
01010100000000000010010000000000
01010011111111110111101111111111
01010011111111110111011111111111
01010011111111110111001111111111
01010011111111110110111111111111
01010011111111110110101111111111
01010011111111110110011111111111
01010011111111110110001111111111
01010011111111110101111111111111
01010000000000000000000000000000
00000011010000000000000000000000 00000011010000000000000000000000
00000011010000000000000000000000 00000011010000000000000000000000
00000011010000000000000000000000 00000011010000000000000000000000
00000011010000000000000000000000 00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000011010000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
01001101010101000100000101001101
01010011010111110100110001010101
01010100010100100100000101010100
00000000000000000000101000001101
01001101010101000100000101001101
01000011010111110100110001010101
00110010001100110100001101010010
00000000000000000000000000111101
01000001010011010000101000001101
01001100010101010100110101010100
01001110010011110100010001011111
00000000000010100000110101000101
10111111000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000

View File

@@ -19,27 +19,34 @@ CFLAGS += -nostartfiles -nostdlib -nostdinc -static -fno-builtin
CFLAGS += -DCLOCKS_PER_SEC=CORE_CLOCKS_PER_SEC -D_CLOCKS_PER_SEC_=CORE_CLOCKS_PER_SEC CFLAGS += -DCLOCKS_PER_SEC=CORE_CLOCKS_PER_SEC -D_CLOCKS_PER_SEC_=CORE_CLOCKS_PER_SEC
CFLAGS += -DUSE_CPU_CLOCK_COUNT CFLAGS += -DUSE_CPU_CLOCK_COUNT
LINKER_SCRIPT ?= $(COMMON_DIR)/env/script.lds
BSP_STARTUP ?= $(COMMON_DIR)/env/start.S
BSP_USE_TRAP ?= 1
BSP_USE_DRIVERS ?= 1
#若使用 newlib , 将下面的 -lsemihost 替换为 -lgloss #若使用 newlib , 将下面的 -lsemihost 替换为 -lgloss
LDFLAGS += -T $(LINKER_SCRIPT) \ LDFLAGS += -T $(LINKER_SCRIPT) \
-Wl,--gc-sections -Wl,--check-sections \ -Wl,--gc-sections -Wl,--check-sections \
-lc -lm -lg -lsemihost -lgcc -L$(PICOLIBC_DIR)/lib -lc -lm -lg -lsemihost -lgcc -L$(PICOLIBC_DIR)/lib
LINKER_SCRIPT := $(COMMON_DIR)/env/script.lds ASM_SRCS += $(BSP_STARTUP)
ASM_SRCS += $(COMMON_DIR)/env/start.S
ifeq ($(BSP_USE_TRAP),1)
ifeq ($(TARGET), RTThread_Nano) ifeq ($(TARGET), RTThread_Nano)
else else
ASM_SRCS += $(COMMON_DIR)/env/trap_handler.S ASM_SRCS += $(COMMON_DIR)/env/trap_handler.S
endif endif
endif
ifeq ($(BSP_USE_DRIVERS),1)
C_SRCS += $(COMMON_DIR)/drivers/confreg_time.c C_SRCS += $(COMMON_DIR)/drivers/confreg_time.c
C_SRCS += $(COMMON_DIR)/drivers/core_time.c C_SRCS += $(COMMON_DIR)/drivers/core_time.c
C_SRCS += $(COMMON_DIR)/drivers/common_func.c C_SRCS += $(COMMON_DIR)/drivers/common_func.c
C_SRCS += $(COMMON_DIR)/drivers/dvi.c \ C_SRCS += $(COMMON_DIR)/drivers/dvi.c \
$(COMMON_DIR)/drivers/led.c \ $(COMMON_DIR)/drivers/led.c \
$(COMMON_DIR)/drivers/seg7.c $(COMMON_DIR)/drivers/seg7.c
endif
INCLUDES += -I./ \ INCLUDES += -I./ \
-I$(COMMON_DIR)/include \ -I$(COMMON_DIR)/include \

View File

@@ -1,7 +1,8 @@
TARGET = user-sample TARGET = user-sample
MATMUL_GROUP_NUM ?= 5000 MATMUL_GROUP_NUM ?= 5000
CFLAGS += -O3 -g -DMATMUL_GROUP_NUM=$(MATMUL_GROUP_NUM) MATMUL_FAST_START ?= 1
CFLAGS += -O3 -g -DMATMUL_GROUP_NUM=$(MATMUL_GROUP_NUM) -DMATMUL_FAST_START=$(MATMUL_FAST_START)
C_SRCS := $(wildcard ./*.c ) C_SRCS := $(wildcard ./*.c )
@@ -9,6 +10,14 @@ OBJDIR = obj
COMMON_DIR = ../../bsp COMMON_DIR = ../../bsp
GCC_DIR=../../../toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch32r-linux-gnusf-v2.0 GCC_DIR=../../../toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch32r-linux-gnusf-v2.0
PICOLIBC_DIR=../../../toolchains/picolibc PICOLIBC_DIR=../../../toolchains/picolibc
ifeq ($(MATMUL_FAST_START),1)
LINKER_SCRIPT := script_matmul_fast.lds
BSP_STARTUP := start_matmul_fast.S
BSP_USE_TRAP := 0
BSP_USE_DRIVERS := 0
endif
include ../../bsp/common.mk include ../../bsp/common.mk
# Strip picolibc: no -lc -lm -lg -lsemihost, keep -lgcc only # Strip picolibc: no -lc -lm -lg -lsemihost, keep -lgcc only

View File

@@ -0,0 +1,89 @@
OUTPUT_ARCH(loongarch)
ENTRY(_start)
MEMORY
{
isram (rwxai) : ORIGIN = 0x1c000000, LENGTH = 512K
dsram (rwxai) : ORIGIN = 0x1c080000, LENGTH = 512K
}
SECTIONS
{
__stack_size = DEFINED(__stack_size) ? __stack_size : 4K;
.init :
{
KEEP(*(SORT_NONE(.init)))
} >isram AT>isram
. = ALIGN(16);
.text :
{
_ftext = .;
*(.text.unlikely .text.unlikely.*)
*(.text.startup .text.startup.*)
*(.text .text.*)
*(.gnu.linkonce.t.*)
} >isram AT>isram
. = ALIGN(16);
.rodata :
{
*(.rdata)
*(.rodata .rodata.*)
*(.gnu.linkonce.r.*)
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
} >isram AT>isram
. = ALIGN(16);
PROVIDE(__etext = .);
PROVIDE(_etext = .);
PROVIDE(etext = .);
PROVIDE(_data_lma = .);
.data ORIGIN(dsram) :
{
PROVIDE(_data = .);
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(16);
PROVIDE(__global_pointer$ = . + 0x800);
*(.sdata .sdata.*)
*(.gnu.linkonce.s.*)
. = ALIGN(16);
PROVIDE(_edata = .);
PROVIDE(edata = .);
} >dsram AT>isram
.bss :
{
PROVIDE(__bss_start = .);
*(.sbss*)
*(.sbss.*)
*(.dynsbss)
*(.scommon)
*(.bss)
*(.bss.*)
*(.dynbss)
*(.gnu.linkonce.sb.*)
*(COMMON)
. = ALIGN(16);
PROVIDE(_end = .);
PROVIDE(end = .);
} >dsram AT>dsram
PROVIDE(__heap_start = _end);
.stack ORIGIN(dsram) + LENGTH(dsram) - __stack_size :
{
PROVIDE(_heap_end = .);
PROVIDE(__heap_end = _heap_end);
PROVIDE(__heap_size = __heap_end - __heap_start);
. = __stack_size;
PROVIDE(_stack = .);
} >dsram AT>dsram
}

View File

@@ -0,0 +1,54 @@
#include "regdef.h"
.section .init
.globl _start
.type _start, @function
_start:
/* Enable direct mapped windows used by SRAM and uncached peripherals. */
li.w t0, 0x8
li.w t1, 0x18
csrxchg t0, t1, csr_crmd
csrwr zero, csr_dmw0
csrwr zero, csr_dmw1
li.w t0, 0x19
csrwr t0, csr_dmw0
li.w t0, 0xa0000009
csrwr t0, csr_dmw1
li.w t0, 0x10
li.w t1, 0x18
csrxchg t0, t1, csr_crmd
/* Polling-only benchmark: keep interrupts disabled. */
li.w t0, 0x4
csrxchg zero, t0, csr_crmd
csrwr zero, csr_prmd
csrwr zero, csr_ecfg
/* UART0 init, 115200 baud with the same divisor selection as BSP start.S. */
li.w t0, 0xbf000000
li.w t1, 0x07
st.b t1, t0, 2
li.w t1, 0x80
st.b t1, t0, 3
st.b zero, t0, 1
li.w t2, 0xbf20f500
ld.w t2, t2, 0
li.w t1, 0x1b
beq zero, t2, 1f
li.w t1, 0x1
1:
st.b t1, t0, 0
li.w t1, 0x03
st.b t1, t0, 3
st.b zero, t0, 4
la.local sp, _stack
li.w a0, 0
li.w a1, 0
bl main
1:
b 1b

View File

@@ -1,42 +1,98 @@
/** /**
* user-sample - CIC-IEC 2026 Stage 3 Evaluation Program * user-sample - CIC-IEC 2026 Stage 3 Evaluation Program
* *
* Matmul AXI-master path. * Matmul AXI-master path with fast startup and low-overhead UART output.
*/ */
#include <dma.h> #include <dma.h>
/* ─── UART 16550 direct access (bypasses slow printf/picolibc) ──────── */
#define UART_THR (*(volatile unsigned char *)0xbf000000) #define UART_THR (*(volatile unsigned char *)0xbf000000)
#define UART_LSR (*(volatile unsigned char *)0xbf000005) #define UART_LSR (*(volatile unsigned char *)0xbf000005)
#define LSR_THRE 0x20 #define LSR_THRE 0x20
static inline void uart_tx(unsigned char c) { static inline void uart_tx(unsigned char c)
while (!(UART_LSR & LSR_THRE)) {} {
while ((UART_LSR & LSR_THRE) == 0) {
}
UART_THR = c; UART_THR = c;
} }
static void uart_puts(const char *s) { static void uart_put_matmul_start_fifo(void)
while (*s) uart_tx(*s++); {
UART_THR = 'M';
UART_THR = 'A';
UART_THR = 'T';
UART_THR = 'M';
UART_THR = 'U';
UART_THR = 'L';
UART_THR = '_';
UART_THR = 'S';
UART_THR = 'T';
UART_THR = 'A';
UART_THR = 'R';
UART_THR = 'T';
} }
static void uart_puthex(unsigned int val) { static inline void uart_wait_tx_empty(void)
int i; {
for (i = 28; i >= 0; i -= 4) { while ((UART_LSR & LSR_THRE) == 0) {
unsigned char nibble = (val >> i) & 0xF;
uart_tx(nibble < 10 ? '0' + nibble : 'a' + nibble - 10);
} }
} }
/* ─── Configurable group count (default 5000) ──────────────────────── */ static inline unsigned char hex_digit(unsigned int val, int shift)
{
unsigned char nibble = (unsigned char)((val >> shift) & 0xf);
return (unsigned char)(nibble < 10 ? ('0' + nibble) : ('a' + nibble - 10));
}
static void uart_put_result_fifo(unsigned int crc)
{
uart_wait_tx_empty();
UART_THR = 'M';
UART_THR = 'A';
UART_THR = 'T';
UART_THR = 'M';
UART_THR = 'U';
UART_THR = 'L';
UART_THR = '_';
UART_THR = 'C';
UART_THR = 'R';
UART_THR = 'C';
UART_THR = '3';
UART_THR = '2';
UART_THR = '=';
UART_THR = hex_digit(crc, 28);
UART_THR = hex_digit(crc, 24);
UART_THR = hex_digit(crc, 20);
uart_wait_tx_empty();
UART_THR = hex_digit(crc, 16);
UART_THR = hex_digit(crc, 12);
UART_THR = hex_digit(crc, 8);
UART_THR = hex_digit(crc, 4);
UART_THR = hex_digit(crc, 0);
UART_THR = 'M';
UART_THR = 'A';
UART_THR = 'T';
UART_THR = 'M';
UART_THR = 'U';
UART_THR = 'L';
UART_THR = '_';
UART_THR = 'D';
UART_THR = 'O';
UART_THR = 'N';
UART_THR = 'E';
}
#ifndef MATMUL_GROUP_NUM #ifndef MATMUL_GROUP_NUM
#define MATMUL_GROUP_NUM 5000 #define MATMUL_GROUP_NUM 5000
#endif #endif
/* ─── BSP globals ─────────────────────────────────────────────────── */ #if MATMUL_FAST_START == 0
unsigned long UART_BASE = 0xbf000000; unsigned long UART_BASE = 0xbf000000;
#endif
/* ─── Memory layout ────────────────────────────────────────────────── */
#define EXTRAM_BASE_PHYS 0x1c400000 #define EXTRAM_BASE_PHYS 0x1c400000
#define EXTRAM_BASE_UNCACHED (0xA0000000 | (EXTRAM_BASE_PHYS & 0x1FFFFFFF)) #define EXTRAM_BASE_UNCACHED (0xA0000000 | (EXTRAM_BASE_PHYS & 0x1FFFFFFF))
@@ -44,11 +100,9 @@ unsigned long UART_BASE = 0xbf000000;
#define DST_BASE_WORDS (SRC_BASE_WORDS + MATMUL_GROUP_NUM * 32) #define DST_BASE_WORDS (SRC_BASE_WORDS + MATMUL_GROUP_NUM * 32)
#define RESULT_WORDS (MATMUL_GROUP_NUM * 48) #define RESULT_WORDS (MATMUL_GROUP_NUM * 48)
/* ExtRAM Physical Addresses for DMA */
#define EXTRAM_PHYS_AB(g) (EXTRAM_BASE_PHYS + (SRC_BASE_WORDS * 4) + (g) * 128) #define EXTRAM_PHYS_AB(g) (EXTRAM_BASE_PHYS + (SRC_BASE_WORDS * 4) + (g) * 128)
#define EXTRAM_PHYS_C(g) (EXTRAM_BASE_PHYS + (DST_BASE_WORDS * 4) + (g) * 192) #define EXTRAM_PHYS_C(g) (EXTRAM_BASE_PHYS + (DST_BASE_WORDS * 4) + (g) * 192)
/* ─── MATMUL IP registers (Ping-Pong Memory Map) ──────────────────── */
#define MATMUL_BASE_PHYS 0x1f500000 #define MATMUL_BASE_PHYS 0x1f500000
#define MATMUL_BASE_UNCACHED 0xbf500000 #define MATMUL_BASE_UNCACHED 0xbf500000
@@ -70,24 +124,22 @@ unsigned long UART_BASE = 0xbf000000;
#define MATMUL_CRC (MATMUL_BASE_UNCACHED + 0x010) #define MATMUL_CRC (MATMUL_BASE_UNCACHED + 0x010)
/* ─── Pre-computed DMA burst control word ──────────────────────────── */
#define DMA_CTRL_VAL (CTRL_BURST_SIZE(2) | CTRL_BURST_LEN(63) | CTRL_START_BIT) #define DMA_CTRL_VAL (CTRL_BURST_SIZE(2) | CTRL_BURST_LEN(63) | CTRL_START_BIT)
#define MATMUL_EP_ID 0 #define MATMUL_EP_ID 0
/* ═══════════════════════════════════════════════════════════════════ */
int main(void) int main(void)
{ {
if (MATMUL_GROUP_NUM <= 0) return 0; if (MATMUL_GROUP_NUM <= 0) {
return 0;
}
/* ── Hot-path local volatile pointers (one-time addr calc) ──────── */
volatile unsigned int *mat_ctrl = (volatile unsigned int *)MATMUL_CTRL; volatile unsigned int *mat_ctrl = (volatile unsigned int *)MATMUL_CTRL;
volatile unsigned int *mat_status = (volatile unsigned int *)MATMUL_STATUS; volatile unsigned int *mat_status = (volatile unsigned int *)MATMUL_STATUS;
volatile unsigned int *mat_crc = (volatile unsigned int *)MATMUL_CRC; volatile unsigned int *mat_crc = (volatile unsigned int *)MATMUL_CRC;
unsigned int crc; unsigned int crc;
/* ── Start marker (must be first output) ──────────────────── */ uart_put_matmul_start_fifo();
uart_puts("MATMUL_START\n");
*(volatile unsigned int *)MATMUL_CRC = 0; *(volatile unsigned int *)MATMUL_CRC = 0;
*mat_status = STATUS_DMA_DONE | STATUS_DONE | STATUS_ERROR; *mat_status = STATUS_DMA_DONE | STATUS_DONE | STATUS_ERROR;
@@ -100,12 +152,9 @@ int main(void)
while (!(*mat_status & STATUS_DMA_DONE)) {} while (!(*mat_status & STATUS_DMA_DONE)) {}
*mat_status = STATUS_DMA_DONE; *mat_status = STATUS_DMA_DONE;
/* ── Read hardware CRC32 ──────────────────────────────────── */
crc = *mat_crc; crc = *mat_crc;
uart_puts("MATMUL_CRC32="); uart_put_result_fifo(crc);
uart_puthex(crc);
uart_puts("\nMATMUL_DONE\n");
return 0; return 0;
} }

Binary file not shown.