ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
944077
klen (03.09.2019 10:25 - 10:37, просмотров: 12711)
к вопросу о RISC-V, GD32VF103, итд... подсобрал тулсы riscv32imac-kgp-elf, можно попробывать! вчера позавчера очень актуально оттопились по это теме http://caxapa.ru/760263.html, спасибо Evgeny_CD! подсобрал тулсы как обычно binutils (bu+gdb) gcc/g++ newlib собрано под прицел на процессоры rv32imac Bamblebee которые используют GD32VF103, если ничего не втыкать компиллеру по поводу архитектуры то по умолчанию настроил -march=rv32imac -mabi=ilp32 -mcmodel=medlow попытался выяснить есть операция целочисленного деления или нет, я ее не внес, если окажется она есть в этой, мне еще непонятной, реализации risc-v то можете тупо воткнуть -mdiv и Ваш код заюзает инструкции цел. деления, а я пересоберу пакет с поддержкой деления. klen.org/Files/DevTools/x86_64-kgp-linux-gnu/riscv32imac-kgp-elf_@_x86_64_avx_kgp-linux-gnu_20190903_LUPINE.tar.7z хост процессор не ниже ivy c avx собранно в свежей xubuntu системе поэтому может на взлететь на старых где используется glibc версии ниже 2.29 последние два пункта сильно ограничат возможность заиспытать данное творение но если у кого то проканает то я спущу эти требования до уровня "чтоб работало везде" для следующей сборке (гиморно это - сборка для быстрых процов.. сборка для компиляции "на наручных часах"), сначала надо убедится в правильности концепции в целом и необходимости пыжытся на данную тему ;) с risc-v я только начал знакомится но уже по выходному коду (инструкциям) вижу что у этих изобретателей risc-v и в мыслях даже небыло имень хоть один транзистор на котором бы они не сэкономили при имплементации :) но тут в защиту - модульная ISA - можно ненапрягаясь и не разламывая ничего концептуального добавить быстрые инструкции под ситуацию. да... fpga просто плачат по этой ISA вот пример что на выходе вылезло: src: char c (const char a, const char b) {return (a+b)/(a-b) ;} short s (const short a, const short b) {return (a+b)/(a-b) ;} int i (const int a, const int b) {return (a+b)/(a-b) ;} float f (const float a, const float b) {return (a+b)/(a-b) ;} double d (const double a, const double b){return (a+b)/(a-b) ;} riscv32-kgp-elf-gcc -mdiv -Os -S ./a.c -o a.s .file "a.c" .option nopic .attribute arch, "rv32i2p0_m2p0_a2p0_c2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 1 .globl c .type c, @function c: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 andi a0,a0,0xff ret .size c, .-c .align 1 .globl s .type s, @function s: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 slli a0,a0,16 srai a0,a0,16 ret .size s, .-s .align 1 .globl i .type i, @function i: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 ret .size i, .-i .globl __addsf3 .globl __subsf3 .globl __divsf3 .align 1 .globl f .type f, @function f: addi sp,sp,-16 sw ra,12(sp) sw s0,8(sp) sw s1,4(sp) sw s2,0(sp) mv s1,a0 mv s2,a1 call __addsf3 mv s0,a0 mv a1,s2 mv a0,s1 call __subsf3 mv a1,a0 mv a0,s0 call __divsf3 lw ra,12(sp) lw s0,8(sp) lw s1,4(sp) lw s2,0(sp) addi sp,sp,16 jr ra .size f, .-f .globl __adddf3 .globl __subdf3 .globl __divdf3 .align 1 .globl d .type d, @function d: addi sp,sp,-32 sw ra,28(sp) sw s0,24(sp) sw s1,20(sp) sw s2,16(sp) sw s3,12(sp) sw s4,8(sp) sw s5,4(sp) mv s3,a0 mv s2,a1 mv s5,a2 mv s4,a3 call __adddf3 mv s1,a0 mv s0,a1 mv a2,s5 mv a3,s4 mv a0,s3 mv a1,s2 call __subdf3 mv a2,a0 mv a3,a1 mv a0,s1 mv a1,s0 call __divdf3 lw ra,28(sp) lw s0,24(sp) lw s1,20(sp) lw s2,16(sp) lw s3,12(sp) lw s4,8(sp) lw s5,4(sp) addi sp,sp,32 jr ra .size d, .-d .ident "GCC: (Klen's GNU package (KGP) for target::riscv32imac(ilp32)-kgp-elf @ host::x86_64-kgp-linux-gnu, << LUPINE >>) 10.0.0 20190902 (experimental)" riscv32-kgp-elf-gcc -Os -S ./a.c -o a.s .file "a.c" .option nopic .attribute arch, "rv32i2p0_m2p0_a2p0_c2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 1 .globl c .type c, @function c: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 andi a0,a0,0xff ret .size c, .-c .align 1 .globl s .type s, @function s: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 slli a0,a0,16 srai a0,a0,16 ret .size s, .-s .align 1 .globl i .type i, @function i: add a5,a0,a1 sub a0,a0,a1 div a0,a5,a0 ret .size i, .-i .globl __addsf3 .globl __subsf3 .globl __divsf3 .align 1 .globl f .type f, @function f: addi sp,sp,-16 sw ra,12(sp) sw s0,8(sp) sw s1,4(sp) sw s2,0(sp) mv s1,a0 mv s2,a1 call __addsf3 mv s0,a0 mv a1,s2 mv a0,s1 call __subsf3 mv a1,a0 mv a0,s0 call __divsf3 lw ra,12(sp) lw s0,8(sp) lw s1,4(sp) lw s2,0(sp) addi sp,sp,16 jr ra .size f, .-f .globl __adddf3 .globl __subdf3 .globl __divdf3 .align 1 .globl d .type d, @function d: addi sp,sp,-32 sw ra,28(sp) sw s0,24(sp) sw s1,20(sp) sw s2,16(sp) sw s3,12(sp) sw s4,8(sp) sw s5,4(sp) mv s3,a0 mv s2,a1 mv s5,a2 mv s4,a3 call __adddf3 mv s1,a0 mv s0,a1 mv a2,s5 mv a3,s4 mv a0,s3 mv a1,s2 call __subdf3 mv a2,a0 mv a3,a1 mv a0,s1 mv a1,s0 call __divdf3 lw ra,28(sp) lw s0,24(sp) lw s1,20(sp) lw s2,16(sp) lw s3,12(sp) lw s4,8(sp) lw s5,4(sp) addi sp,sp,32 jr ra .size d, .-d .ident "GCC: (Klen's GNU package (KGP) for target::riscv32imac(ilp32)-kgp-elf @ host::x86_64-kgp-linux-gnu, << LUPINE >>) 10.0.0 20190902 (experimental)" riscv32-kgp-elf-gcc -S ./a.c -o a.s asm: .file "a.c" .option nopic .attribute arch, "rv32i2p0_m2p0_a2p0_c2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 1 .globl c .type c, @function c: addi sp,sp,-32 sw s0,28(sp) addi s0,sp,32 mv a5,a0 mv a4,a1 sb a5,-17(s0) mv a5,a4 sb a5,-18(s0) lbu a4,-17(s0) lbu a5,-18(s0) add a4,a4,a5 lbu a3,-17(s0) lbu a5,-18(s0) sub a5,a3,a5 div a5,a4,a5 andi a5,a5,0xff mv a0,a5 lw s0,28(sp) addi sp,sp,32 jr ra .size c, .-c .align 1 .globl s .type s, @function s: addi sp,sp,-32 sw s0,28(sp) addi s0,sp,32 mv a5,a0 mv a4,a1 sh a5,-18(s0) mv a5,a4 sh a5,-20(s0) lh a4,-18(s0) lh a5,-20(s0) add a4,a4,a5 lh a3,-18(s0) lh a5,-20(s0) sub a5,a3,a5 div a5,a4,a5 slli a5,a5,16 srai a5,a5,16 mv a0,a5 lw s0,28(sp) addi sp,sp,32 jr ra .size s, .-s .align 1 .globl i .type i, @function i: addi sp,sp,-32 sw s0,28(sp) addi s0,sp,32 sw a0,-20(s0) sw a1,-24(s0) lw a4,-20(s0) lw a5,-24(s0) add a4,a4,a5 lw a3,-20(s0) lw a5,-24(s0) sub a5,a3,a5 div a5,a4,a5 mv a0,a5 lw s0,28(sp) addi sp,sp,32 jr ra .size i, .-i .globl __addsf3 .globl __subsf3 .globl __divsf3 .align 1 .globl f .type f, @function f: addi sp,sp,-32 sw ra,28(sp) sw s0,24(sp) sw s1,20(sp) addi s0,sp,32 sw a0,-20(s0) sw a1,-24(s0) lw a1,-24(s0) lw a0,-20(s0) call __addsf3 mv a5,a0 mv s1,a5 lw a1,-24(s0) lw a0,-20(s0) call __subsf3 mv a5,a0 mv a1,a5 mv a0,s1 call __divsf3 mv a5,a0 mv a0,a5 lw ra,28(sp) lw s0,24(sp) lw s1,20(sp) addi sp,sp,32 jr ra .size f, .-f .globl __adddf3 .globl __subdf3 .globl __divdf3 .align 1 .globl d .type d, @function d: addi sp,sp,-32 sw ra,28(sp) sw s0,24(sp) sw s2,20(sp) sw s3,16(sp) addi s0,sp,32 sw a0,-24(s0) sw a1,-20(s0) sw a2,-32(s0) sw a3,-28(s0) lw a2,-32(s0) lw a3,-28(s0) lw a0,-24(s0) lw a1,-20(s0) call __adddf3 mv a4,a0 mv a5,a1 mv s2,a4 mv s3,a5 lw a2,-32(s0) lw a3,-28(s0) lw a0,-24(s0) lw a1,-20(s0) call __subdf3 mv a4,a0 mv a5,a1 mv a2,a4 mv a3,a5 mv a0,s2 mv a1,s3 call __divdf3 mv a4,a0 mv a5,a1 mv a0,a4 mv a1,a5 lw ra,28(sp) lw s0,24(sp) lw s2,20(sp) lw s3,16(sp) addi sp,sp,32 jr ra .size d, .-d .ident "GCC: (Klen's GNU package (KGP) for target::riscv32imac(ilp32)-kgp-elf @ host::x86_64-kgp-linux-gnu, << LUPINE >>) 10.0.0 20190902 (experimental)"