int main(int argc, char *argv[])
{
return 0x12345678;
}
C x86-64:
main: # @main
mov eax, 305419896
ret
C ARMv8:
main: // @main
mov w0, #22136
movk w0, #4660, lsl #16
ret
C++ x86-64:
main: # @main
mov eax, 305419896
ret
C++ ARMv8:
main: // @main
mov w0, #22136
movk w0, #4660, lsl #16
ret
const int x = 0x12345678;
int main(int argc, char *argv[])
{
return x;
}
C x86-64:
main: # @main
mov eax, 305419896
ret
x:
.long 305419896 # 0x12345678
C ARMv8:
main: // @main
mov w0, #22136
movk w0, #4660, lsl #16
ret
x:
.word 305419896 // 0x12345678
C++ x86-64:
main: # @main
mov eax, 305419896
ret
C++ ARMv8:
main: // @main
mov w0, #22136
movk w0, #4660, lsl #16
ret
C esetén - ha deklarálva volt - kirakta egy táblába a konstansot, de nem használta, ugyanúgy immediate értékként töltötte be; értelme mi...? A kód az összes esetben identikus volt, persze CPU-nként.
x86-64-en:
mov eax, 305419896
ARMv8-on:
mov w0, #22136
movk w0, #4660, lsl #16
A fordító minden esetben CLang 16 volt.
Mindenki megnyugodott? Elengedhetjük végre ezt a viccet?