notaz
Certified Guru
Being a huge ARM architecture fan, and occasional assembly programmer, I'm somewhat disappointed with 64bit incarnation of it, so I'd like to hear some opinions about it from visitors of this forum. For those who don't know, the overview is available from ARM for a while now (you'll need to create an account to download):
http://infocenter.ar...197a/index.html
I'll start with things I think they have done wrong:
Things I like:
So in general it's becoming more MIPS64-like, and I'm mourning loss of conditional execution (they could have left it for ALU and stores at least..) plus loss of STM/LDM. I'm not sure the new immediate encoding for ALU instructions is any better too.
I suppose it's not worth thinking about it too much until any real CPUs come out, who knows, the situation may change dramatically and ARM no longer be relevant by then, but I still would much prefer coding for this than for messed up x86_64 instruction set.
http://infocenter.ar...197a/index.html
I'll start with things I think they have done wrong:
- First of all, getting rid of conditional execution. This was main thing that made ARM unique, and I'm really sad to see it go. I used conditional stores heavily in PicoDrive renderers, and is one of main reasons GP2X version at 200MHz would kick ass of PSP version at 333MHz.. Well at least there is still conditional select, but I'm not sure how useful it's going to be.
- Removing STM/LDM - are they crazy? Do they like long function prologues/epilogues and icache bloat? You usually need to load/store at least 10 registers (now there will be more because of larger register file), so at least 5 pair instructions (or more) instead of just 1 STM/LDM will have to be used..
- Making a "zero" register, why? Isn't zero immediate available any more for ALU instructions? What a waste.
- Making PC no longer accessible. I understand that writing to PC is slow on most modern CPUs because of long pipelines and other complications, but being able to read it anytime with any ALU instruction was handy.
- +-1MB conditional branches, +-128MB unconditional branches - sucks for recompilers. Direct block linking will be hard with just 1MB (much worse then current +-32MB), calling helper code from translation cache, while better than now with +-32MB, will still be problematic if you hope to use 1 instruction.
Things I like:
- Larger register file (32 registers) - oh yeah, always a good thing, especially for recompilers, although 1 of them is "wasted" by having zero register..
- Larger PC-relative load offsets. They say less literal pools will be needed with this (one of larger ARM problems), but I doubt gcc will make use of it (it's much easier to just drop them after each function..).
- Divide instruction - at last.
- Most useful addressing modes seem to still be there.
- Still using fixed-size 32bit instructions.
- compare-jump instructions.
So in general it's becoming more MIPS64-like, and I'm mourning loss of conditional execution (they could have left it for ALU and stores at least..) plus loss of STM/LDM. I'm not sure the new immediate encoding for ALU instructions is any better too.
I suppose it's not worth thinking about it too much until any real CPUs come out, who knows, the situation may change dramatically and ARM no longer be relevant by then, but I still would much prefer coding for this than for messed up x86_64 instruction set.
Last edited by a moderator: