Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以调用Linux内核中的任何GCC内置函数吗?_C_Linux_Gcc_Linux Kernel_X86 - Fatal编程技术网

我可以调用Linux内核中的任何GCC内置函数吗?

我可以调用Linux内核中的任何GCC内置函数吗?,c,linux,gcc,linux-kernel,x86,C,Linux,Gcc,Linux Kernel,X86,GCC的一些内置函数处理浮点值: 由于Linux内核默认不支持浮点操作,这是否意味着我不能在Linux内核模块中使用这些内置GCC函数 如果我做了这样的事情(假设我在x86系统上),我是否能够使用它们: Linux内核不允许在内核中使用浮点,因为x86上的浮点使用了一个特殊的寄存器堆栈,保存/恢复成本很高。需要非整数的(非常)几个地方,使用定点(即,具有假定小数点或二进制点的整数运算)。这些地方很可能使用浮点寄存器。我还担心您会破坏用户浮点寄存器状态。您可能可以调用内核中的非浮点GCC内置函数(

GCC的一些内置函数处理浮点值:

由于Linux内核默认不支持浮点操作,这是否意味着我不能在Linux内核模块中使用这些内置GCC函数

如果我做了这样的事情(假设我在x86系统上),我是否能够使用它们:


Linux内核不允许在内核中使用浮点,因为x86上的浮点使用了一个特殊的寄存器堆栈,保存/恢复成本很高。需要非整数的(非常)几个地方,使用定点(即,具有假定小数点或二进制点的整数运算)。

这些地方很可能使用浮点寄存器。我还担心您会破坏用户浮点寄存器状态。您可能可以调用内核中的非浮点GCC内置函数(例如,
\uuuuuuuBuiltin\uPrefetch
),但您希望在内核中使用浮点,这是不可能的。另请参阅:我知道,但我一直在想,在最近的处理器内核中启用浮点是否会像人们说的那样昂贵(无论是在代码补丁还是在运行时性能方面)…我(疯狂地)猜测它会变得(相对地)昂贵。。。处理器要快得多,内存也不多。但缓存确实更大(而且速度更快)+1请参见:和。如果你愿意花点功夫来编写它,定点几乎总是更好的。@artlessnoise,Linux并没有把它保存在内核中。如果我的进程执行系统调用并返回,则浮点状态未更改-->Win!
kernel_fpu_begin();

float x = 3.14;
x = __builtin_ceil(x);

kernel_fpu_end();