Domanda

non riusciva a trovare qualcosa oltre domande di opinione su roba 64/32 po 'quando ho cercato.

__asm__ {
  mov rbx, 0xFFFFffffFFFFffffull
  movq mm2, rbx 
}

Dopo queste 2 istruzioni registro mm2 contiene il valore 0x30500004ffffffff secondo il mio debugger Xcode (questo è asm inline in C ++). Ora sono di nuovo da 86 montaggio e la mia classe di assemblaggio è stato insegnato in MIPS che ho preso per sempre fa, ma suppongo che questo non sta funzionando perché sono la compilazione (questa è una parte di un plugin di Photoshop) in modalità a 32 bit e rbx ( la versione a 64 bit di EBX, BX ecc, giusto?), probabilmente non esiste tecnicamente. Ho cercato altri metodi per ottenere tutti i 1 'come carico 0xfffffffful in mm2 e un altro registro e moltiplicando, ma che anche non sembra funzionare.

Sono fissaggio a ottimizzare il mio plugin con alcune istruzioni SIMD, ma io non riesco a capirlo o trovare alcuna documentazione che non fa il mio male agli occhi. Ogni aiuto è molto apprezzato!

È stato utile?

Soluzione

Anche se il codice di interjay fa ciò che si vuole, c'è un modo più semplice per impostare un registro MMX (o registro XMM, se è per questo) per tutti i-1 (qui per mm2):

pcmpeqw mm2, mm2

Altri suggerimenti

Non è possibile eseguire codice assembly a 64 bit in un programma a 32 bit. O si può leggere il valore nel registro MMX da una locazione di memoria, o l'uso qualcosa di simile:

mov ebx, 0xffffffff
movd mm2, ebx       //copy value to lower 32 bits
punpckldq mm2, mm2  //copy lower 32-bits to upper 32 bits
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top