Question

pourrait ne pas sembler trouver autre chose que des questions d'opinion sur les choses 64/32 bits quand je cherchais.

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

Après ces 2 instructions du registre contient la valeur mm2 0x30500004ffffffff selon mon débogueur Xcode (version asm inline en C ++). Maintenant, je suis nouveau à l'assemblage x86 et ma classe d'assemblage a été enseigné dans MIPS que je pris il y a toujours, mais je suppose que cela ne fonctionne pas parce que je suis la compilation (ce qui est une partie d'un plugin Photoshop) en mode 32 bits et RBX ( la version 64 bits de EBX, bx etc, non?) n'existe probablement pas sur le plan technique. J'ai essayé d'autres méthodes pour obtenir tous des 1 comme le chargement 0xfffffffful en mm2 et un autre registre et à multiplier mais cela ne semble pas aussi au travail.

Je fixation pour optimiser mon plug-in avec quelques instructions SIMD mais je ne peux pas sembler figurer dehors ou trouver toute la documentation qui ne me fait pas mal aux yeux. Toute aide est très appréciée!

Était-ce utile?

La solution

Bien que le code de interjay fait ce que vous voulez, il y a un moyen de mettre un registre MMX plus facile (ou registre XMM, pour cette question) à tous-1 (ici pour ce mm2):

pcmpeqw mm2, mm2

Autres conseils

Vous ne pouvez pas exécuter le code assembleur 64 bits dans un programme 32 bits. Vous pouvez lire la valeur dans le registre MMX à partir d'un emplacement de mémoire, ou utiliser quelque chose comme ceci:

mov ebx, 0xffffffff
movd mm2, ebx       //copy value to lower 32 bits
punpckldq mm2, mm2  //copy lower 32-bits to upper 32 bits
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top