Ich bin nicht in der Lage, den Unterschied zwischen vld4_f32
und vld4q_f32
in ARM NEON Anweisungen zu erkennen.ARM NEON: Was ist der Unterschied zwischen vld4_f32 und vld4q_f32?
Die Verwirrung begann, als ich meine Codierlevel erhöhte und anfing, die Assembleranweisungen anstatt die weniger informativen intrinsics zu betrachten.
Der Grund, warum ich hier vld4 Variante Anweisung verwenden müssen, weil, ich möchte float32_t
‚s aus jeder 4. Position meiner großen Array erfassen.
Die vld4_f32
Spezifika und die entsprechenden Montageanleitung wie folgt aussehen (From this link)
float32x2x4_t vld4_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
Die vld4q_f32
Spezifika und die entsprechende Montageanleitung wie folgt aussieht
float32x4x4_t vld4q_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
Nun, auf der intrinsischen Ebene Der Unterschied, den ich sehe, ist der Rückgabetyp, aber wenn ich mir die Assembleranweisung und die Anzahl der Register anschaue, sehen beide ähnlich aus. Wie wird der Compiler oder der Assembler den Unterschied zwischen den beiden wissen?
Kann jemand mehr dazu klären und auch erklären, wie ich erreichen kann Laden 4 float32_t Werte, die bei jedem 4. Speicherplatz in eine einzigen positioniert sind, registrieren?
Nun, vld4q Lasten 4 q Register, wie der Name schon sagt ... – jcayzac