草庐IT

TARGET_ARCH_ABI

全部标签

linux - 为什么 golang clone syscall abi 与 x86-64 上的 linux 内核克隆不同

在glibc/sysdeps/unix/sysv/linux/x86_64/clone.S的linux内核克隆abi定义:Thekernelexpects:rax:systemcallnumberrdi:flagsrsi:child_stackrdx:TIDfieldinparentr10:TIDfieldinchildr8:threadpointer在go1.11.5/src/runtime/sys_linux_amd64.s的golang克隆系统调用://int32clone(int32flags,void*stk,M*mp,G*gp,void(*fn)(void));TEXTru

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

有一个比较newLinuxABIreferredtoasx32,其中x86-64处理器以32位模式运行,因此指针仍然只有32位,但仍然使用64位架构特定的寄存器。所以你仍然限制在正常32位中使用4GB最大内存,但是你的指针使用的缓存空间比在64位中少,你可以有效地进行64位算术,并且你可以访问更多寄存器(16)比普通32位(8)中的要多。假设您的工作负载正好适合4GB,x32的性能是否会比x86-64差?在我看来,如果您不需要额外的内存空间,则不会丢失任何东西——您应该始终获得相同的性能(当您已经适合缓存时)或更好(当指针空间节省让您适合更多时)在缓存中)。但如果有分页/TLB/等,我

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

有一个比较newLinuxABIreferredtoasx32,其中x86-64处理器以32位模式运行,因此指针仍然只有32位,但仍然使用64位架构特定的寄存器。所以你仍然限制在正常32位中使用4GB最大内存,但是你的指针使用的缓存空间比在64位中少,你可以有效地进行64位算术,并且你可以访问更多寄存器(16)比普通32位(8)中的要多。假设您的工作负载正好适合4GB,x32的性能是否会比x86-64差?在我看来,如果您不需要额外的内存空间,则不会丢失任何东西——您应该始终获得相同的性能(当您已经适合缓存时)或更好(当指针空间节省让您适合更多时)在缓存中)。但如果有分页/TLB/等,我

c - -mtune=i486 和 -arch=i486 有什么区别

我有一个旧代码需要在GCC中用-m486标志编译。但是没有那个标志。然后我找到了-mtune=i486和-arch=i486我读过这个page.但是仍然不知道哪个是最好的-m486? 最佳答案 -march选项定义可能使用的指令列表,-mtune选项修改之后的优化过程。您通常会使用-march来指定最低要求,并使用-mtune来针对大多数用户的需求进行优化。例如,IA32架构定义了各种用于字符串处理和指令重复的指令。在386和486上,它们比显式汇编代码更快更小,因为可以跳过指令获取和解码阶段,而在较新的型号上,这些指令会阻塞指令管

c - -mtune=i486 和 -arch=i486 有什么区别

我有一个旧代码需要在GCC中用-m486标志编译。但是没有那个标志。然后我找到了-mtune=i486和-arch=i486我读过这个page.但是仍然不知道哪个是最好的-m486? 最佳答案 -march选项定义可能使用的指令列表,-mtune选项修改之后的优化过程。您通常会使用-march来指定最低要求,并使用-mtune来针对大多数用户的需求进行优化。例如,IA32架构定义了各种用于字符串处理和指令重复的指令。在386和486上,它们比显式汇编代码更快更小,因为可以跳过指令获取和解码阶段,而在较新的型号上,这些指令会阻塞指令管

linux - 收到错误 : No rule to make target while compiling linux Kernel

我正在尝试编译我的linux内核,在自定义我的内核配置后,我录制了命令make开始编译但是出现如下错误:asma@ubuntu:/usr/src/linux$makemake[1]:***Noruletomaketarget`/usr/src/linux-headers-3.5.0-23/arch/x86/syscalls/syscall_32.tbl',neededby`arch/x86/syscalls/../include/generated/asm/unistd_32.h'.Stop.make:***[archheaders]Error2请问我该如何解决这个问题

linux - 收到错误 : No rule to make target while compiling linux Kernel

我正在尝试编译我的linux内核,在自定义我的内核配置后,我录制了命令make开始编译但是出现如下错误:asma@ubuntu:/usr/src/linux$makemake[1]:***Noruletomaketarget`/usr/src/linux-headers-3.5.0-23/arch/x86/syscalls/syscall_32.tbl',neededby`arch/x86/syscalls/../include/generated/asm/unistd_32.h'.Stop.make:***[archheaders]Error2请问我该如何解决这个问题

linux - 在 iMac 上对 "Target Display Mode"进行逆向工程

我有一个计算机实验室,里面有几台老式iMac(2011年左右)。大多数人现在只想将它们用作笔记本电脑的显示器,并且在MacOS中使用目标显示模式,这(大部分)工作正常。不过,我还想在Linux下支持此功能,它与MacOS并行安装在所有iMac上。我对Linux内核相当有经验(我已经编写了内核驱动程序),但我对MacOS基本上一无所知-因此,我正在寻找有关如何弄清楚TDM实际触发方式(即发生了什么在按下Cmd-F2后)。我猜这主要涉及编写一些IntelGPU寄存器,但我不知道MacOS的哪一部分实际上负责这个。有什么提示吗? 最佳答案

linux - 在 iMac 上对 "Target Display Mode"进行逆向工程

我有一个计算机实验室,里面有几台老式iMac(2011年左右)。大多数人现在只想将它们用作笔记本电脑的显示器,并且在MacOS中使用目标显示模式,这(大部分)工作正常。不过,我还想在Linux下支持此功能,它与MacOS并行安装在所有iMac上。我对Linux内核相当有经验(我已经编写了内核驱动程序),但我对MacOS基本上一无所知-因此,我正在寻找有关如何弄清楚TDM实际触发方式(即发生了什么在按下Cmd-F2后)。我猜这主要涉及编写一些IntelGPU寄存器,但我不知道MacOS的哪一部分实际上负责这个。有什么提示吗? 最佳答案

linux - x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许垃圾?

x86-64SysVABI指定了如何在寄存器中传递函数参数(在rdi中的第一个参数,然后是rsi等),以及如何将整数返回值传回(在rax和然后rdx对于非常大的值)。然而,我找不到的是,当传递小于64位的类型时,参数或返回值寄存器的高位应该是什么。例如,对于以下函数:voidfoo(unsignedx,unsignedy);...x将在rdi中通过和y在rsi,但它们只有32位。做rdi的高32位和rsi必须为零?直觉上,我会假设是的,但是codegenerated所有gcc、clang和icc都有特定的mov开始时的指令将高位清零,因此编译器似乎另有假设。同样,编译器似乎假定返回值的