VirtualBox

Changeset 87172 in vbox for trunk/include/iprt


Ignore:
Timestamp:
Jan 4, 2021 9:47:15 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142101
Message:

iprt/asm.h: Missing memory ordering. Changed ASMMemoryFence from dsb to dmb. bugref:9898 bugref:9026

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asm.h

    r87171 r87172  
    303303    uint32_t uOld;
    304304    uint32_t rcSpill;
    305     __asm__ __volatile__(".Ltry_again%=:\n\t"
     305    __asm__ __volatile__(".Ltry_again_ASMAtomicXchgU8_%=:\n\t"
     306                         "dmb       sy\n\t"
    306307#  if defined(RT_ARCH_ARM64)
    307308                         "ldaxrb    %w0, [%3]\n\t"
    308309                         "stlxrb    %w1, %w2, [%3]\n\t"
    309                          "cbnz      %w1, .Ltry_again%=\n\t"
     310                         "cbnz      %w1, .Ltry_again_ASMAtomicXchgU8_%=\n\t"
    310311#  else
    311312                         "ldrexb    %0, [%3]\n\t"      /* ARMv6+ */
    312313                         "strexb    %1, %2, [%3]\n\t"
    313314                         "cmp       %1, #0\n\t"
    314                          "bne       .Ltry_again%=\n\t"
     315                         "bne       .Ltry_again_ASMAtomicXchgU8_%=\n\t"
    315316#  endif
    316317                         : "=&r" (uOld),
     
    399400    uint32_t uOld;
    400401    uint32_t rcSpill;
    401     __asm__ __volatile__(".Ltry_again%=:\n\t"
     402    __asm__ __volatile__(".Ltry_again_ASMAtomicXchgU16_%=:\n\t"
     403                         "dmb       sy\n\t"
    402404#  if defined(RT_ARCH_ARM64)
    403405                         "ldaxrh    %w0, [%3]\n\t"
    404406                         "stlxrh    %w1, %w2, [%3]\n\t"
    405                          "cbnz      %w1, .Ltry_again%=\n\t"
     407                         "cbnz      %w1, .Ltry_again_ASMAtomicXchgU16_%=\n\t"
    406408#  else
    407409                         "ldrexh    %0, [%3]\n\t"      /* ARMv6+ */
    408410                         "strexh    %1, %2, [%3]\n\t"
    409411                         "cmp       %1, #0\n\t"
    410                          "bne       .Ltry_again%=\n\t"
     412                         "bne       .Ltry_again_ASMAtomicXchgU16_%=\n\t"
    411413#  endif
    412414                         : "=&r" (uOld),
     
    484486    uint32_t uOld;
    485487    uint32_t rcSpill;
    486     __asm__ __volatile__(".Ltry_again%=:\n\t"
     488    __asm__ __volatile__(".Ltry_again_ASMAtomicXchgU32_%=:\n\t"
     489                         "dmb       sy\n\t"
    487490#  if defined(RT_ARCH_ARM64)
    488491                         "ldaxr     %w0, [%3]\n\t"
    489492                         "stlxr     %w1, %w2, [%3]\n\t"
    490                          "cbnz      %w1, .Ltry_again%=\n\t"
     493                         "cbnz      %w1, .Ltry_again_ASMAtomicXchgU32_%=\n\t"
    491494#  else
    492495                         "ldrex     %0, [%3]\n\t"      /* ARMv6+ */
    493496                         "strex     %1, %2, [%3]\n\t"
    494497                         "cmp       %1, #0\n\t"
    495                          "bne       .Ltry_again%=\n\t"
     498                         "bne       .Ltry_again_ASMAtomicXchgU32_%=\n\t"
    496499#  endif
    497500                         : "=&r" (uOld),
     
    603606# elif defined(RT_ARCH_ARM32) || defined(RT_ARCH_ARM64)
    604607    uint32_t rcSpill;
    605     __asm__ __volatile__(".Ltry_again%=:\n\t"
     608    __asm__ __volatile__(".Ltry_again_ASMAtomicXchgU64_%=:\n\t"
     609                         "dmb       sy\n\t"
    606610#  if defined(RT_ARCH_ARM64)
    607611                         "ldaxr     %0, [%3]\n\t"
    608612                         "stlxr     %w1, %2, [%3]\n\t"
    609                          "cbnz      %w1, .Ltry_again%=\n\t"
     613                         "cbnz      %w1, .Ltry_again_ASMAtomicXchgU64_%=\n\t"
    610614#  else
    611615                         "ldrexd    %H0, [%3]\n\t"      /* ARMv6+ */
    612616                         "strexd    %1, %H2, [%3]\n\t"
    613617                         "cmp       %1, #0\n\t"
    614                          "bne       .Ltry_again%=\n\t"
     618                         "bne       .Ltry_again_ASMAtomicXchgU64_%=\n\t"
    615619#  endif
    616620                         : "=&r" (u64),
     
    858862    uint32_t u32Spill;
    859863    uint32_t rcSpill;
    860     __asm__ __volatile__(".Ltry_again%=:\n\t"
     864    __asm__ __volatile__(".Ltry_again_ASMAtomicCmpXchgU8_%=:\n\t"
     865                         "dmb       sy\n\t"
    861866#  if defined(RT_ARCH_ARM64)
    862867                         "ldaxrb    %w0, [%5]\n\t"
     
    864869                         "bne       1f\n\t"   /* stop here if not equal */
    865870                         "stlxrb    %w1, %w4, [%5]\n\t"
    866                          "cbnz      %w1, .Ltry_again%=\n\t"
     871                         "cbnz      %w1, .Ltry_again_ASMAtomicCmpXchgU8_%=\n\t"
    867872                         "mov       %w2, #1\n\t"
    868873#  else
     
    872877                         "bne       1f\n\t"   /* stop here if not equal */
    873878                         "cmp       %1, #0\n\t"
    874                          "bne       .Ltry_again%=\n\t"
     879                         "bne       .Ltry_again_ASMAtomicCmpXchgU8_%=\n\t"
    875880                         "mov       %2, #1\n\t"
    876881#  endif
     
    990995    uint32_t u32Spill;
    991996    uint32_t rcSpill;
    992     __asm__ __volatile__(".Ltry_again%=:\n\t"
     997    __asm__ __volatile__(".Ltry_again_ASMAtomicCmpXchgU32_%=:\n\t"
     998                         "dmb       sy\n\t"
    993999#  if defined(RT_ARCH_ARM64)
    9941000                         "ldaxr     %w0, [%5]\n\t"
     
    9961002                         "bne       1f\n\t"   /* stop here if not equal */
    9971003                         "stlxr     %w1, %w4, [%5]\n\t"
    998                          "cbnz      %w1, .Ltry_again%=\n\t"
     1004                         "cbnz      %w1, .Ltry_again_ASMAtomicCmpXchgU32_%=\n\t"
    9991005                         "mov       %w2, #1\n\t"
    10001006#  else
     
    10041010                         "bne       1f\n\t"   /* stop here if not equal */
    10051011                         "cmp       %1, #0\n\t"
    1006                          "bne       .Ltry_again%=\n\t"
     1012                         "bne       .Ltry_again_ASMAtomicCmpXchgU32_%=\n\t"
    10071013                         "mov       %2, #1\n\t"
    10081014#  endif
     
    11461152    uint64_t u64Spill;
    11471153    uint32_t rcSpill;
    1148     __asm__ __volatile__(".Ltry_again%=:\n\t"
     1154    __asm__ __volatile__(".Ltry_again_ASMAtomicCmpXchgU64_%=:\n\t"
     1155                         "dmb       sy\n\t"
    11491156#  if defined(RT_ARCH_ARM64)
    11501157                         "ldaxr     %0, [%5]\n\t"
     
    11521159                         "bne       1f\n\t"   /* stop here if not equal */
    11531160                         "stlxr     %w1, %4, [%5]\n\t"
    1154                          "cbnz      %w1, .Ltry_again%=\n\t"
     1161                         "cbnz      %w1, .Ltry_again_ASMAtomicCmpXchgU64_%=\n\t"
    11551162                         "mov       %w2, #1\n\t"
    11561163#  else
     
    11611168                         "bne       1f\n\t"   /* stop here if not equal */
    11621169                         "cmp       %1, #0\n\t"
    1163                          "bne       .Ltry_again%=\n\t"
     1170                         "bne       .Ltry_again_ASMAtomicCmpXchgU64_%=\n\t"
    11641171                         "mov       %2, #1\n\t"
    11651172#  endif
     
    13741381    uint32_t u32ActualOld;
    13751382    uint32_t rcSpill;
    1376     __asm__ __volatile__(".Ltry_again%=:\n\t"
     1383    __asm__ __volatile__(".Ltry_again_ASMAtomicCmpXchgExU32_%=:\n\t"
     1384                         "dmb       sy\n\t"
    13771385#  if defined(RT_ARCH_ARM64)
    13781386                         "ldaxr     %w0, [%5]\n\t"
     
    13801388                         "bne       1f\n\t"   /* stop here if not equal */
    13811389                         "stlxr     %w1, %w4, [%5]\n\t"
    1382                          "cbnz      %w1, .Ltry_again%=\n\t"
     1390                         "cbnz      %w1, .Ltry_again_ASMAtomicCmpXchgExU32_%=\n\t"
    13831391                         "mov       %w2, #1\n\t"
    13841392#  else
     
    13881396                         "bne       1f\n\t"   /* stop here if not equal */
    13891397                         "cmp       %1, #0\n\t"
    1390                          "bne       .Ltry_again%=\n\t"
     1398                         "bne       .Ltry_again_ASMAtomicCmpXchgExU32_%=\n\t"
    13911399                         "mov       %2, #1\n\t"
    13921400#  endif
     
    15351543    uint64_t u64ActualOld;
    15361544    uint32_t rcSpill;
    1537     __asm__ __volatile__(".Ltry_again%=:\n\t"
     1545    __asm__ __volatile__(".Ltry_again_ASMAtomicCmpXchgExU64_%=:\n\t"
     1546                         "dmb       sy\n\t"
    15381547#  if defined(RT_ARCH_ARM64)
    15391548                         "ldaxr     %0, [%5]\n\t"
     
    15411550                         "bne       1f\n\t"   /* stop here if not equal */
    15421551                         "stlxr     %w1, %4, [%5]\n\t"
    1543                          "cbnz      %w1, .Ltry_again%=\n\t"
     1552                         "cbnz      %w1, .Ltry_again_ASMAtomicCmpXchgExU64_%=\n\t"
    15441553                         "mov       %w2, #1\n\t"
    15451554#  else
     
    15501559                         "bne       1f\n\t"   /* stop here if not equal */
    15511560                         "cmp       %1, #0\n\t"
    1552                          "bne       .Ltry_again%=\n\t"
     1561                         "bne       .Ltry_again_ASMAtomicCmpXchgExU64_%=\n\t"
    15531562                         "mov       %2, #1\n\t"
    15541563#  endif
     
    18751884#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
    18761885    /* Note! Only armv7 and later. */
    1877     __asm__ __volatile__ ("dsb sy\n\t" ::: "memory"); /** @todo dmb? */
     1886    __asm__ __volatile__ ("dmb sy\n\t" ::: "memory");
    18781887#elif ARCH_BITS == 16
    18791888    uint16_t volatile u16;
     
    21942203# elif defined(RT_ARCH_ARM32)
    21952204    Assert(!((uintptr_t)pu64 & 7));
    2196     __asm__ __volatile__("dsb sy\n\t" /** @todo dmb? */
     2205    __asm__ __volatile__("dmb sy\n\t"
    21972206                         "ldrexd    %0, %H0, [%1]\n\t"
    21982207                         : "=&r" (u64)
     
    31403149    uint32_t u32Spill;
    31413150    __asm__ __volatile__(".Ltry_again_add_u32_%=:\n\t"
     3151                         "dmb       sy\n\t"
    31423152#  if defined(RT_ARCH_ARM64)
    31433153                         "ldaxr     %w0, [%4]\n\t"
     
    32153225    uint64_t u64Spill;
    32163226    __asm__ __volatile__(".Ltry_again_add_u64_%=:\n\t"
     3227                         "dmb       sy\n\t"
    32173228#  if defined(RT_ARCH_ARM64)
    32183229                         "ldaxr     %0, [%4]\n\t"
     
    35053516    uint32_t rcSpill;
    35063517    __asm__ __volatile__(".Ltry_again_inc_u32_%=:\n\t"
     3518                         "dmb       sy\n\t"
    35073519#  if defined(RT_ARCH_ARM64)
    35083520                         "ldaxr     %w0, [%2]\n\t"
     
    35753587    uint32_t rcSpill;
    35763588    __asm__ __volatile__(".Ltry_again_inc_u64_%=:\n\t"
     3589                         "dmb       sy\n\t"
    35773590#  if defined(RT_ARCH_ARM64)
    35783591                         "ldaxr     %0, [%2]\n\t"
     
    37013714    uint32_t rcSpill;
    37023715    __asm__ __volatile__(".Ltry_again_dec_u32_%=:\n\t"
     3716                         "dmb       sy\n\t"
    37033717#  if defined(RT_ARCH_ARM64)
    37043718                         "ldaxr     %w0, [%2]\n\t"
     
    37713785    uint32_t rcSpill;
    37723786    __asm__ __volatile__(".Ltry_again_dec_u64_%=:\n\t"
     3787                         "dmb       sy\n\t"
    37733788#  if defined(RT_ARCH_ARM64)
    37743789                         "ldaxr     %0, [%2]\n\t"
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette