Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
GNU Binutils 2.42 Released – CFI, AArch64, RISC-V Intel, s390x improvements (sourceware.org)
6 points by edelsohn on Jan 29, 2024 | hide | past | favorite | 9 comments


wait... Intel APX is a real thing???


Sure .. x86 is practically a RISC now! 32 GPRs, 3-address instructions, new instruction encodings ...

It won't stop the Aarch64 and RISC-V freight train though.


I meant, they are actually doing it? soon? Or only for xeon and "consumer" will get APX in 1 billion years?

Because I really know that 32 regs are night and day while programming assembly.


As far as I am aware Intel has not yet announced chips or their plans for chips.

16 registers is not awful, but for sure 32 gives a lot more flexibility. Amd64 has gotten by with 16 for 20 years, and 32 bit Arm for a long time. Also VAX and 68000 just a few years before Arm. But it's tight -- Arm32 and Amd64 on Windows only allow four function arguments to be passed in registers, six in the SysV ABI for Amd64. VAX and 68000 ABIs sadly and (really, unnecessarily) used the stack, leaving a lot of performance on the table.

I'm amused that the Intel 4004 in 1971 had 16 GPRs, plus accumulator, double the 8086 and more than double the 8008/8080. Narrower, of course.


>VAX and 68000 ABIs sadly and (really, unnecessarily) used the stack, leaving a lot of performance on the table.

AmigaOS uses registers for parameter passing on m68k.

a0/a1 and d0/d1 are scratch (and also the first to be used to pass or return pointers or values). The rest you're meant to preserve.

Atari TOS (probably inherited from CP/M for m68k) unfortunately uses the stack.


Well, in the recent various assembly code paths I did program lately, much more of the, if not the whole, algorithm state would have be in registers.


Have you tried spilling things to SSE registers instead of to the stack? I've never done something that might benefit from that on x86, but my understanding is that by the time you get to ... maybe Sandy Bridge? ... it's all one big register pool and the moves are just register renaming, not physical movement.


If I recall properly I was warned (kind of a long time ago) that moving data between the general registers and the vector registers is not that cheap, to a point it may be better to deal with the stack (~L1 cache memory).

Any leads on that topic? Because I suspect the answers to be micro-architecture dependent and hidden deep in those abominations of llvm and gcc.


I don't have. It's something I thought about trying for an update of rv8 (to assign almost all RISC-V registers to x86 registers), but have never got around to.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: