RISC-V MCU中文社区

【分享】 浮点运算单元的实现——浮点指令内联汇编(三)

发表于 开源蜂鸟E203 2023-05-30 20:53:48
0
639
0

浮点运算单元的实现——浮点指令内联汇编(三)

团队编号:CICC1230

团队名称:少吃米饭多吃肉

代码实现

在编写完浮点指令相关的内联函数后,参考nice_demo的例子,将其全放在一个头文件中,并编写浮点指令测试代码,代码和结果如下。如有错误,欢迎大家评论指出。

主函数代码


int main(void)
{
    float op0= 2.223;
    float op1 =2.0;
    float op2 = 1;
    printf("op0=%f,op1=%f,op2=%f\r\n",op0,op1,op2);
    float result = 0;
//  //#############################R4 test############################//
    result = fmadds_test(op0,op1,op2);
    printf("fmadds_test : op0*op1+op2 = %f\r\n",result);

    result = fmsubs_test(op0,op1,op2);
    printf("fmsubs_test : op0*op1-op2 = %f\r\n",result);

    result = fnmadds_test(op0,op1,op2);
    printf("fnmadds_test : -op0*op1-op2 = %f\r\n",result);

    result = fnmsubs_test(op0,op1,op2);
    printf("fnmsubs_test : -op0*op1+op2 = %f\r\n",result);
    //#############################Standard ALU############################//

    result = fadds_test(op0,op1);
    printf("fadds_test : op0+op1 = %f\r\n",result);

    result = fsubs_test(op0,op1);
    printf("fsubs_test : op0-op1 = %f\r\n",result);

    result = fmuls_test(op0,op1);
    printf("fmuls_test : op0*op1= %f\r\n",result);

    result = fdivs_test(op0,op1);
    printf("fdivs_test : op0/op1 = %f\r\n",result);

    result = fsqrts_test(op0);
    printf("fsqrts_test : genhao op0 = %f\r\n",result);

//#################################min max###############################//

    result = fmins_test(op0,op1);
    printf("fmins_test : min(op0,op1)  %f\r\n",result);

    result = fmaxs_test(op0,op1);
    printf("fmaxs_test : max(op0,op1)  %f\r\n",result);

//#################################compare###############################//

    int result_i = feqs_test(op1,op1);
    printf("feqs_test : (op1==op1) ?  %d\r\n",result_i);

    result_i = fles_test(op1,op0);
    printf("fles_test : (op1<=op0) ?  %d\r\n",result_i);

    result_i = flts_test(op0,op1);
    printf("flts_test : (op0%d\r\n",result_i);

//#################################class###############################//
    result_i = fclass_test(op0);
    printf("fclasss_test : fclasss(op0)  %d\r\n",result_i);

//#################################fsgnj###############################//
    result = fsgnjs_test(op0,op1);
    printf("fsgnjs_test : fsgnjs_test(op0,op1) = %f\r\n",result);

    result = fsgnjns_test(op1,op0);
    printf("fsgnjns_test : fsgnjns_test(op1,op0) = %f\r\n",result);

    result = fsgnjxs_test(op1,op2);
    printf("fsgnjxs_test : fsgnjxs_test(op1,op2) = %f\r\n",result);

//#################################fcvt###############################//
    int fcvt_sw_test = 1;
    unsigned int fcvt_swu_test = 1;
    result = fcvts_sw_test(fcvt_sw_test);
    printf("fcvts_sw_test : fcvts_sw_test(1) = %f\r\n",result);

    result = fcvts_swu_test(fcvt_swu_test);
    printf("fcvts_swu_test : fcvts_swu_test(1) = %f\r\n",result);

    int fcvt_ws_result ;
    unsigned int fcvt_wus_result;
    fcvt_ws_result = fcvts_ws_test(op2);
    printf("fcvts_ws_test : fcvts_ws_test(op2) = %d\r\n",fcvt_ws_result);

    fcvt_wus_result = fcvts_wus_test(op2);
    printf("fcvts_wus_test : fcvts_wus_test(op2) = %d\r\n",fcvt_wus_result);

    printf(" secs %f\n\r",secs);

    //#################################fmv.x.w###############################//
    result_i = fmv_xw_test(op2);
    printf("fmv_xw_test : fmv_xw_test(op2) = %d\r\n",result_i);
    fcvt_sw_test = 1065353216;
    result   = fmv_wx_test(fcvt_sw_test);
    printf("fmv_wx_test : fmv_wx_test(fcvt_sw_test) = %f\r\n",result);

    return 0;
}

测试结果


喜欢0
用户评论
H.H

H.H 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板