VirtualBox

Changeset 94023 in vbox


Ignore:
Timestamp:
Mar 1, 2022 10:43:43 AM (3 years ago)
Author:
vboxsync
Message:

include/iprt/asm.h: Use the Q constraint instead of m for the arm64 atomic inline assembly stuff, m allows the compiler to generate a base register + immediate while Q results in a base register only which is required for some instructions (offset must be 0), bugref:9898

File:
1 edited

Legend:

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

    r93837 r94023  
    217217                         "stlxr     %w[rc], %w[uNew], %[pMem]\n\t" \
    218218                         "cbnz      %w[rc], .Ltry_again_" #name "_%=\n\t" \
    219                          : [pMem] "+m"  (*a_pu32Mem) \
     219                         : [pMem] "+Q"  (*a_pu32Mem) \
    220220                         , [uNew] "=&r" (u32NewRet) \
    221221                         , [rc]   "=&r" (rcSpill) \
     
    232232                         "stlxr     %w[rc], %w[uNew], %[pMem]\n\t" \
    233233                         "cbnz      %w[rc], .Ltry_again_" #name "_%=\n\t" \
    234                          : [pMem] "+m"  (*a_pu32Mem) \
     234                         : [pMem] "+Q"  (*a_pu32Mem) \
    235235                         , [uOld] "=&r" (u32OldRet) \
    236236                         , [uNew] "=&r" (u32NewSpill) \
     
    247247                         "stlxr     %w[rc], %[uNew], %[pMem]\n\t" \
    248248                         "cbnz      %w[rc], .Ltry_again_" #name "_%=\n\t" \
    249                          : [pMem] "+m"  (*a_pu64Mem) \
     249                         : [pMem] "+Q"  (*a_pu64Mem) \
    250250                         , [uNew] "=&r" (u64NewRet) \
    251251                         , [rc]   "=&r" (rcSpill) \
     
    262262                         "stlxr     %w[rc], %[uNew], %[pMem]\n\t" \
    263263                         "cbnz      %w[rc], .Ltry_again_" #name "_%=\n\t" \
    264                          : [pMem] "+m"  (*a_pu64Mem) \
     264                         : [pMem] "+Q"  (*a_pu64Mem) \
    265265                         , [uOld] "=&r" (u64OldRet) \
    266266                         , [uNew] "=&r" (u64NewSpill) \
     
    520520                         "bne       .Ltry_again_ASMAtomicXchgU8_%=\n\t"
    521521#  endif
    522                          : [pMem] "+m" (*pu8)
     522                         : [pMem] "+Q" (*pu8)
    523523                         , [uOld] "=&r" (uOld)
    524524                         , [rc]   "=&r" (rcSpill)
     
    617617                         "bne       .Ltry_again_ASMAtomicXchgU16_%=\n\t"
    618618#  endif
    619                          : [pMem] "+m" (*pu16)
     619                         : [pMem] "+Q" (*pu16)
    620620                         , [uOld] "=&r" (uOld)
    621621                         , [rc]   "=&r" (rcSpill)
     
    703703                         "bne       .Ltry_again_ASMAtomicXchgU32_%=\n\t"
    704704#  endif
    705                          : [pMem] "+m"  (*pu32)
     705                         : [pMem] "+Q"  (*pu32)
    706706                         , [uOld] "=&r" (uOld)
    707707                         , [rc]   "=&r" (rcSpill)
     
    829829                         "bne       .Ltry_again_ASMAtomicXchgU64_%=\n\t"
    830830#  endif
    831                          : [pMem] "+m"  (*pu64)
     831                         : [pMem] "+Q"  (*pu64)
    832832                         , [uOld] "=&r" (uOld)
    833833                         , [rc]   "=&r" (rcSpill)
     
    10941094#  endif
    10951095                         "1:\n\t"
    1096                          : [pMem]   "+m"  (*pu8)
     1096                         : [pMem]   "+Q"  (*pu8)
    10971097                         , [uOld]   "=&r" (u32Spill)
    10981098                         , [rc]     "=&r" (rcSpill)
     
    12311231#  endif
    12321232                         "1:\n\t"
    1233                          : [pMem]   "+m"  (*pu32)
     1233                         : [pMem]   "+Q"  (*pu32)
    12341234                         , [uOld]   "=&r" (u32Spill)
    12351235                         , [rc]     "=&r" (rcSpill)
     
    13941394#  endif
    13951395                         "1:\n\t"
    1396                          : [pMem]   "+m"  (*pu64)
     1396                         : [pMem]   "+Q"  (*pu64)
    13971397                         , [uOld]   "=&r" (u64Spill)
    13981398                         , [rc]     "=&r" (rcSpill)
     
    17381738#  endif
    17391739                         "1:\n\t"
    1740                          : [pMem]   "+m"  (*pu8)
     1740                         : [pMem]   "+Q"  (*pu8)
    17411741                         , [uOld]   "=&r" (u8ActualOld)
    17421742                         , [rc]     "=&r" (rcSpill)
     
    18631863#  endif
    18641864                         "1:\n\t"
    1865                          : [pMem]   "+m"  (*pu16)
     1865                         : [pMem]   "+Q"  (*pu16)
    18661866                         , [uOld]   "=&r" (u16ActualOld)
    18671867                         , [rc]     "=&r" (rcSpill)
     
    19881988#  endif
    19891989                         "1:\n\t"
    1990                          : [pMem]   "+m"  (*pu32)
     1990                         : [pMem]   "+Q"  (*pu32)
    19911991                         , [uOld]   "=&r" (u32ActualOld)
    19921992                         , [rc]     "=&r" (rcSpill)
     
    21542154#  endif
    21552155                         "1:\n\t"
    2156                          : [pMem]   "+m"  (*pu64)
     2156                         : [pMem]   "+Q"  (*pu64)
    21572157                         , [uOld]   "=&r" (u64ActualOld)
    21582158                         , [rc]     "=&r" (rcSpill)
Note: See TracChangeset for help on using the changeset viewer.

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