Tôi quan tâm đến việc tìm nhanh nhất (số chu kỳ thấp nhất) so sánh các giá trị được lưu trữ trong thanh ghi NEON (nói Q0 và Q3) trên lõi Cortex-A9 (hướng dẫn VFP).ARM NEON: so sánh các giá trị bit 128
Cho đến nay tôi có như sau:
(1) Sử dụng dấu chấm động so VFP:
vcmp.f64 d0, d6
vmrs APSR_nzcv, fpscr
vcmpeq.f64 d1, d7
vmrseq APSR_nzcv, fpscr
Nếu 64bit "nổi" tương đương với NaN, phiên bản này sẽ không hoạt động.
(2) Sử dụng thu hẹp NEON và so sánh VFP (thời gian này chỉ một lần và trong một cách NaN-safe):
vceq.i32 q15, q0, q3
vmovn.i32 d31, q15
vshl.s16 d31, d31, #8
vcmp.f64 d31, d29
vmrs APSR_nzcv, fpscr
Sổ đăng ký D29 trước đây được cài đặt sẵn với mẫu 16bit đúng:
vmov.i16 d29, #65280 ; 0xff00
Câu hỏi của tôi là: có tốt hơn điều này không? Tôi đang giám sát một số cách rõ ràng để làm điều đó?
Các HƯỚNG DẪN đầu tiên "ghi đè" cả Q15 (ví dụ: D30 và D31), trong khi thứ hai chỉ có D31 như một _destination_, do đó một số thông tin bị mất và việc so sánh sẽ không luôn luôn mang lại kết quả đúng. – Mircea
Khi bạn sử dụng vceq.i32, nó đặt tất cả 1 hoặc tất cả 0 vào mỗi trong số 4 làn đường 32 bit. Lệnh đầu tiên kết hợp các thông tin hữu ích từ D30 và D31 vào D31 (16 bit thấp hơn của tất cả 4 so sánh). Lệnh thứ hai so sánh 64 bit thấp hơn HAS tất cả các thông tin hữu ích. – BitBank
Hướng dẫn đầu tiên (ví dụ: vceq.i32) không "kết hợp" bất kỳ thứ gì. Hơn nữa, thứ hai không sử dụng D31 làm đầu vào ... – Mircea