Assembly Itanium
No post anterior, mostrei os registradores da plataforma x64 e um exemplo de uma listagem em assembly. Como curiosidade, resolvi compilar um programa para a plataforma Itanium.
Rotina comando() :
__int64 comando(__int64 a, __int64 b, __int64 c, __int64 d, __int64 e) { return a+b+c+d+e; }
Disassembly: A plataforma Itanium são processadores RISC de 64-bits e utilizam instruções Explicitly Parallel Instruction Computing (EPIC). Ao ler a listagem do código em assembly, verificamos que não há semelhanças com a plataforma x64. Apesar de serem processadores 64-bits, a plataforma Itanium e x64 são incompatíveis.
alloc r38 = ar.pfs,8,0,2,0 movl r27 = 0xCCCCCCCCCCCCCCCC adds sp = -0x30,sp adds r39 = 0,gp addl r28 = 4,zero ;; ld8.nta r2 = [sp] mov r37 = b0 adds r3 = 8,sp ;; adds r2 = 0,sp nop.m 0 nop.b 0 ;; st8 [r2] = r27,0x10 st8 [r3] = r27,0x10 cmp.eq.unc p15,p14 = 1,r28 adds r28 = -1,r28 nop.m 0 br.cond.dptk.many Console64!comando+0 adds r31 = 0x10,sp adds r30 = 0x18,sp adds r29 = 0x20,sp adds r28 = 0x28,sp adds r27 = 0x30,sp nop.b 0 ;; st8 [r31] = r32 st8 [r30] = r33 nop.b 0 ;; st8 [r29] = r34 st8 [r28] = r35 nop.b 0 ;; st8 [r27] = r36 ;; adds r26 = 0x10,sp adds r22 = 0x18,sp adds r19 = 0x20,sp adds r16 = 0x28,sp adds r10 = 0x30,sp ;; ld8 r25 = [r26] ld8 r21 = [r22] adds gp = 0,r39 ;; ld8 r18 = [r19] ld8 r15 = [r16] add r20 = r25,r21 ;; ld8 r9 = [r10] add r17 = r20,r18 ;; add r11 = r17,r15 ;; add r36 = r11,r9 ;; adds v0 = 0,r36 nop.i 0 ;; adds sp = 0x30,sp mov b0 = r37,Console64!comando+0x100 mov.i ar.pfs = r38 nop.m 0 nop.m 0 br.ret.sptk.many b0 ;;