รหัส asm ที่สอดคล้องกันสำหรับ ARMv8 aarch64

ด้านล่างนี้เป็นโค้ดสำหรับโค้ด X86-64 ซึ่งมีแอสเซมบลีบางส่วน โปรดช่วยเราแปลงแอสเซมบลีสำหรับ ARMv8 aarch64

__asm__ __volatile__ ("lock; cmpxchgw %1,%2"
                      : "=a"(sPrev)
                      : "q"(aWith),
                        "m"(*(volatile acp_sint16_t *)aAddr),
                        "0"(aCmp)
                      : "memory");

__asm__ __volatile__ ("mov %%ebx,%%eax\n\t"
                      "mov %%ecx,%%edx\n\t"
                      "lock; cmpxchg8b %1"
                      : "=&A"(sVal)
                      : "m"(*(volatile acp_sint64_t *)aAddr)
                      : "cc");

__asm__ __volatile__ ("lock; xaddq %0,%1"
                      : "+r"(sPrev), "+m"(*(volatile acp_sint64_t *)aAddr)
                      :
                      : "memory");

person Jason    schedule 14.06.2018    source แหล่งที่มา


คำตอบ (1)


สภาพแวดล้อมการพัฒนาของคุณมีความเทียบเท่าใน stdatomic.h บางรูปแบบอยู่แล้ว แนวคิดที่สำคัญเหมือนกัน ยกเว้นคุณจะต้องเลือกระหว่างรูปแบบที่เข้าใจยาก เช่น "อ่อนแอ" และ "แข็งแกร่ง"...

อย่างน้อยที่สุด รักษาแนวทางตามโปรโตคอลของโปรแกรมของคุณกับตัวแปรเหล่านี้ นั่นคือการปฏิบัติต่อพวกมันเหมือนคุกกี้วิเศษที่ห้องสมุดลึกลับเท่านั้นที่สามารถใช้งานได้ มาตรฐาน-du-jour สนับสนุนคำจำกัดความที่คลุมเครือที่น่าเศร้าที่จะนำไปใช้โดยตรงจากคอมไพเลอร์ ผลลัพธ์ที่ดีที่สุดที่ฉันจินตนาการได้คือการดีบักคอมไพเลอร์/รันไทม์เป็นเวลาหลายชั่วโมง.....

เป็นวิศวกรรมซอฟต์แวร์ที่ดีเสมอที่จะแยกเครื่องหรือการดำเนินการที่ขึ้นต่อกันเฉพาะ

person mevets    schedule 18.06.2018