Kode asm yang sesuai untuk ARMv8 aarch64

Di bawah ini adalah kode untuk kode X86-64 yang berisi beberapa perakitan, bisakah Anda membantu kami mengonversi perakitan untuk 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 sumber


Jawaban (1)


Lingkungan pengembangan Anda sudah memiliki padanan di beberapa varian stdatomic.h. Konsep kritisnya sama, hanya saja Anda harus memilih antara varian yang tidak dapat dipahami seperti "lemah" dan "kuat"...

Setidaknya, pertahankan pendekatan berbasis protokol program Anda terhadap variabel-variabel ini; yaitu memperlakukannya seperti kue ajaib yang hanya dapat dioperasikan oleh perpustakaan misterius. Standard-du-jour mendorong definisi yang sangat kabur untuk diterapkan langsung oleh penyusun; hasil terbaik yang dapat saya bayangkan adalah berjam-jam men-debug kompiler/runtime.....

Itu selalu merupakan rekayasa perangkat lunak yang baik untuk mengisolasi ketergantungan spesifik mesin atau eksekusi.

person mevets    schedule 18.06.2018