riscv-gnu-toolchain
riscv-gnu-toolchain copied to clipboard
[xxlcz] addibne Generation in Matrix Multiplication Code
addibne.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
uint32_t test_1[16];
uint16_t test_2[16];
uint16_t test_3[16];
void matrix_mul_matrix_xxx(uint32_t N, uint32_t* C, uint16_t* A, uint16_t* B) {
uint32_t i, j, k;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
C[i * N + j] = 0;
for (k = 0; k < N; k++) {
C[i * N + j] += (int)A[i * N + k] * (int)B[k * N + j];
}
}
}
}
int main() {}
Compilation Command:
riscv64-unknown-elf-gcc -march=rv32imac_xxlcz -mabi=ilp32 -Os addibne.c -o addibne -nostartfiles
riscv64-unknown-elf-objdump -rd addibne
addibne: file format elf32-littleriscv
Disassembly of section .text:
000100b4 <main>:
100b4: 4501 li a0,0
100b6: 8082 ret
000100b8 <matrix_mul_matrix_xxx>:
100b8: 4e01 li t3,0
100ba: 00151393 slli t2,a0,0x1
100be: 4801 li a6,0
100c0: 00ae1563 bne t3,a0,100ca <matrix_mul_matrix_xxx+0x12>
100c4: 8082 ret
100c6: 88ba mv a7,a4
100c8: a811 j 100dc <matrix_mul_matrix_xxx+0x24>
100ca: 1141 addi sp,sp,-16
100cc: c622 sw s0,12(sp)
100ce: 00281793 slli a5,a6,0x2
100d2: 00181f13 slli t5,a6,0x1
100d6: 97ae add a5,a5,a1
100d8: 9f32 add t5,t5,a2
100da: 4881 li a7,0
100dc: 00189713 slli a4,a7,0x1
100e0: 9736 add a4,a4,a3
100e2: 82fa mv t0,t5
100e4: 4e81 li t4,0
100e6: 4301 li t1,0
100e8: 00075403 lhu s0,0(a4)
100ec: 30129ffb xl.lhu t6,2(t0)
100f0: 971e add a4,a4,t2
100f2: 028f8fb3 mul t6,t6,s0
100f6: 9efe add t4,t4,t6
100f8: 8f9a mv t6,t1
100fa: 9f75737b xl.addibne t1,a0,0,100e8 <matrix_mul_matrix_xxx+0x30>
100fe: 01d7a023 sw t4,0(a5)
10102: 00188713 addi a4,a7,1
10106: 0791 addi a5,a5,4
10108: fbf89fe3 bne a7,t6,100c6 <matrix_mul_matrix_xxx+0xe>
1010c: 0e05 addi t3,t3,1
1010e: 982a add a6,a6,a0
10110: faae1fe3 bne t3,a0,100ce <matrix_mul_matrix_xxx+0x16>
10114: 4432 lw s0,12(sp)
10116: 0141 addi sp,sp,16
10118: 8082 ret