Tôi đang trong tình huống sau đây:SSE trở lại đăng ký với SSE tàn tật
- Tôi viết mã cho một hạt nhân không cho phép các chỉ lệnh SSE
- tôi cần phải làm dấu chấm động số học
- tôi 'm biên dịch cho một nền tảng x86_64
đây là một mẫu mã mà minh họa các vấn đề:
int
main(int argc, char** argv)
{
double d = 0.0, dbase;
uint64_t base_value = 300;
d = (2200.0 - 1000.0)/(1000.0);
dbase = d * base_value;
printf("d = %f, dbase = %f\n", d, dbase);
base_value = dbase;
printf("base_value = %llu\n", (long long unsigned)base_value);
return 0;
}
Và đây là dòng có liên quan từ makefile:
CFLAGS += -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow \
-msoft-float -fno-asynchronous-unwind-tables -fno-omit-frame-pointer
Khi tôi chạy một build tôi nhận được lỗi này:
SSE register return with SSE disabled
(Những điểm lỗi đến dòng đó sẽ nhân d và BASE_VALUE)
Bất kỳ ý tưởng nào tôi có thể làm để khắc phục sự cố này? Loại bỏ -mno-sse không phải là một lựa chọn, nhưng có vẻ như trình biên dịch sẽ có thể tạo ra mã không phải là sse để làm nhân.
Cảm ơn Nathan
Có thể gcc không thể xử lý trường hợp này vì nó giả định rằng tất cả các bộ xử lý x86-64 đều có SSE. – Amok
Điều này có nghĩa là không ai bao giờ nhân bất cứ thứ gì bên trong hạt nhân FreeBSD trên bản dựng 64 bit không? – Nathan
Bất kỳ hạt nhân nào tôi đã làm việc có xu hướng tránh điểm nổi càng nhiều càng tốt. –