Wie teile ich GCC asm mit, dass ein Eingaberegister überfüllt ist?
Ich versuche eine 64 = 32x32 Multiplikation über das x86 @ zu machmul
Anweisung, aber ich brauche nur das hohe Wort des Ergebnisses (dasedx
registrieren). Also habe ich natürlich versucht Listingedx
als Ausgangsregister undeax
als überladenes Register.
Das scheint mir natürlich, abereax
istebenfall ein Eingaberegister. Wenn ich versuche, GCC zu sagen, dasseax
ist verstopft, es wird eine Fehlermeldung ausgegeben.
__asm__("mull\t%2" : "=d"(div10) : "%a"(UINT32_C(0x1999999A)), "r"(number)
: "cc", "rax");
Wenn ich das versuche, wird diese Fehlermeldung ausgegeben:
divmod10.cpp:76:91: error: can’t find a register in class ‘AREG’ while reloading
‘asm’
divmod10.cpp:76:91: error: ‘asm’ operand has impossible constraints
Lassen es kompiliert, aber bricht den Code. GCC verlässt sich letztendlich aufeax
wird nicht überladen, was falsch ist:
movl $429496730, %eax
#APP
# 76 "divmod10.cpp" 1
mull %esi
# 0 "" 2
#NO_APP
movl %edx, %esi
#APP
# 78 "divmod10.cpp" 1
mull %edx
# 0 "" 2
#NO_APP
Wie mache ich was ich will?