编译报错:"错误:已禁用 SSE 却在 SSE 寄存器中返回"是什么原因?如何解决?

问题说明

c语言编写的内核模块代码编译时报错:

 错误:已禁用 SSE 却在 SSE 寄存器中返回
                     struct eemtcp_subflow_item *sorted_subflow, int *base_round, int *base_rtt) {
                            ^~~~~~~~~~~~~~~~~~~

背景

  1. 编译器版本:c90
  2. 编写的是linux核心模块代码
  3. 问题代码:

    • 主要方法代码

      /* 根据公式计算平均吞吐量 */
      float get_loss_throughput_model_value(int k, int send_file_lengths[], int send_rounds[], 
                          struct eemtcp_subflow_item *sorted_subflow, int *base_round, int *base_rtt) {
        float throughput_sum = 0;
        float later_sum = 0;
        float throughput;
        int i;
        for(i = 0; i < k; i++) {
          throughput = send_file_lengths[i]/(send_rounds[i] * get_sock_rtt(sorted_subflow[i].subflow_sock));
          throughput_sum += throughput;
          if(sorted_subflow[i].is_wifi_port){
            later_sum += WIFI_POWER_PER_BIT * throughput + WIFI_OTHER_POWER ;
          } else {
            later_sum += LTE_POWER_PER_BIT * throughput + LTE_OTHER_POWER ;
          }
        }
        return (float) throughput_sum - (*base_round) * (*base_rtt) * later_sum;
      }
      
    • struct eemtcp_subflow_item声明代码

      struct eemtcp_subflow_item {
        struct sock *subflow_sock;
        float power_per_bit;
        int rtt;
        bool is_wifi_port;
      };
      
    • get_loss_throughput_model_value使用代码

      int send_file_lengths[i];
      int send_rounds[i];
      int base_round = 1;
      int base_rtt = sorted_subflow[i - 1].rtt;
      
      get_nr(sorted_subflow, send_file_lengths, send_rounds, &base_round, &base_rtt, i, skb->len);
      package_loss_transport_model[i] = 
            get_loss_throughput_model_value(i, send_file_lengths, send_rounds, sorted_subflow, &base_round, &base_rtt);

google找不到该错误相关信息, 程序中其他地方也使用了该结构体,但是没有这个错误。不知道是什么原因导致的报错。程序中也没有使用sse指令集代码。请问该如何解决?

阅读 3.6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进