Obecne nemusi, i kdyz soucasna jadra (snad vsechna) jsou zpetne kompatibilni s ARMv-7A
Mne se to nejak nezda. Ve specifikaci ARMv8 je:
ARM defines three architecture profiles:
A Application profile, described in this manual: ... Supports the A64, A32 and T32 instruction sets.
Takze asi to bude povinne.
Je to nekde v praxi zapotrebi?
Pro ruzne SBC jako Raspi nejsou prakticky pouzitelne 64bitove distribuce. Takze fallback do 32bitoveho rezimu je nutny, i kdyz je tam 64bitovy procesor.
To jsou ale dve veci - ARMv8 je architektura se sadami ARM32 (A32), Thumb (T32) a (A64). ARM32+Thumb se ted oznacuje AArch32, A64 ma instrukcni sadu AArch64. Tady to ma ARM rozdelene do chlivecku:
https://www.arm.com/assets/images/V5_to_V8_Architecture.jpg
Ale nikde uz IMHO neni psano, ze budouci procesory (treba ARMv8.3-A nebo neco uplne jineho) budou mit vzdy jak AArch32 tak i AArch64, to nema smysl. Stejne jako u Cortexu-M odrezali A32.
Dokonce je to uz ted tak volne, ze ani neni specifikovano, jestli po resetu je CPU ve stavu A32 nebo A64.
Jeste jednou a pomaleji. Tazatel se ptal: ,,Musi CPU s architekturou AArch64 umet provadet i instrukce 32-bit ARM''.
Podle soucasne specifikace profilu A, kde se A64 pouziva, je odpoved: Ano.
Mimochodem hned v uvodu specifikace mas:
An important feature of the ARMv8 architecture is backwards compatibility, combined with the freedom for optimal implementation in a wide range of standard and more specialized use cases. The ARMv8 architecture supports:
A 64-bit Execution state, AArch64.
A 32-bit Execution state, AArch32, that is compatible with previous versions of the ARM architecture.
Ale nikde uz IMHO neni psano, ze budouci procesory (treba ARMv8.3-A nebo neco uplne jineho) budou mit vzdy jak AArch32 tak i AArch64
To je naprosto zbytecna relativizace s nulovou informacni hodnotou. Stejne tak nikde neni napsane, ze zemi neovladnou mravenci.
Ano, tazatel se skutecne ptal: ,,Musi CPU s architekturou AArch64 umet provadet i instrukce 32-bit ARM''.
Z toho (DNES) muzeme vyvodit, ze asi myslel spis ARMv8-A. Obecne to ale to nemusi a jsem si jisty ze ani nebude pravda pro vsechny CPU s AArch64, protoze nikde neni napsana ekvivalence ARMv8-A == AArch64, je to jen implikace.
Vidim, ze jsem podcenil zaludnost dotazu a je treba jej upresnit. Proc jsem se ptal. Narazil jsem na problem, ze se mi nedari spustit 32-bit kod na 64-bit ARM. Jedna se o ARM64-2 server v cloudu "Scaleway". Jen jsem zkusil rozchodit klienta pro Boinc (Asteroids@home), a nepodarilo se mi to, ten 32 bitovy kod rychle skoncil chybou. Duvodu muze byt cela rada, napadlo me mimo jine i to, ze na tech CPU jiz nejsou podporovany 32-bit instrukce. Doma mi podobna konfigurace bezi na ODROID-C2 dobre (64-bit Ubuntu, 32-bit aplikace pro Asteroids@home).
https://blog.online.net/2017/04/27/scaleway-disruptive-armv8-cloud-servers/
http://www.cavium.com/ThunderX_ARM_Processors.html
https://m4gu5.tumblr.com/post/146102127922/odroid-c2-dedicated-linux-boinc-cruncher-how-to
Jen pro zajimavost, u tech ARM procesoru se toho moc nepozna, je to chaoticke, kazdy vyrobce to dela trosicku jinak.. :-(
# cat /proc/cpuinfo
processor : 0
BogoMIPS : 200.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics
CPU implementer : 0x43
CPU architecture: 8
CPU variant : 0x1
CPU part : 0x0a1
CPU revision : 1
Jeste jsem doufal, ze bude treba jen problem v konfiguraci kernelu, ze nebude povolano spousteni 32-bit kodu.
Po mnoha dnech cekani jsem dostal vyjadreni od supportu, ze ty procesory neumoznuji spoustet 32-bit kod a nejde to zmenit. Rozumim tomu tak, ze procesorum ARM ThunderX firmy Cavium skutecne chybi podpora pro 32-bit instrukce, ze je podporovana jen instrukcni sada AArch64. Jsou to vykonne serverove procesory, zrejme bylo vyhodnejsi obetovat 32-bit instrukce pro zvyseni poctu jader na jednom cipu...
Pravděpodobně budou existovat výrobci, kteří ve snaze zjednodušit a hlavně zefektivnit procesor odříznou podporu 32b úplně. Například Apple už v letošní (budoucí) verzi iOS nebude podporovat 32b procesory a iOS bude kompetně 64b (nebude obsahovat ani 32b knihovny pro běh 32b aplikací).
Si hovorim, ze by som ARM asm vyskusal ale ako zacat? Aky prekladac? Ake prostredie? Volakedy som assembler robil na Z80 dost intenzivne, prostredie sa volalo MRS (asi...) a bol to integrovany editor a debugger. Dnes asi nejake IDE-cko? Doma sa mi par dosiek s ARM-mom povaluje. Poradi p. Tisnovsky?
Hm, běžně inline v gcc nebo jiném kompilátoru, případně normálně GNU as (assembler).
Případně pro inspiraci třeba Linux kernel asm/aarch64/* či glibc atd. Ale dneska se psát něco většího je sebevražda a hlavně nesmysl, znalost assembleru se hodí pro rychlé utility, které nejdou napsat v C (kryptování, atomické operace a jiné speciality, obvykle na pár řádků) a pak inline nebo call z high level jazyka.