Skip to content
  • Ulrich Weigand's avatar
    · 266db7fe
    Ulrich Weigand authored
    [PowerPC] Always use "assembler dialect" 1
    
    A setting in MCAsmInfo defines the "assembler dialect" to use.  This is used
    by common code to choose between alternatives in a multi-alternative GNU
    inline asm statement like the following:
    
      __asm__ ("{sfe|subfe} %0,%1,%2" : "=r" (out) : "r" (in1), "r" (in2));
    
    The meaning of these dialects is platform specific, and GCC defines those
    for PowerPC to use dialect 0 for old-style (POWER) mnemonics and 1 for
    new-style (PowerPC) mnemonics, like in the example above.
    
    To be compatible with inline asm used with GCC, LLVM ought to do the same.
    Specifically, this means we should always use assembler dialect 1 since
    old-style mnemonics really aren't supported on any current platform.
    
    However, the current LLVM back-end uses:
      AssemblerDialect = 1;           // New-Style mnemonics.
    in PPCMCAsmInfoDarwin, and
      AssemblerDialect = 0;           // Old-Style mnemonics.
    in PPCLinuxMCAsmInfo.
    
    The Linux setting really isn't correct, we should be using new-style
    mnemonics everywhere.  This is changed by this commit.
    
    Unfortunately, the setting of this variable is overloaded in the back-end
    to decide whether or not we are on a Darwin target.  This is done in
    PPCInstPrinter (the "SyntaxVariant" is initialized from the MCAsmInfo
    AssemblerDialect setting), and also in PPCMCExpr.  Setting AssemblerDialect
    to 1 for both Darwin and Linux no longer allows us to make this distinction.
    
    Instead, this patch uses the MCSubtargetInfo passed to createPPCMCInstPrinter
    to distinguish Darwin targets, and ignores the SyntaxVariant parameter.
    As to PPCMCExpr, this patch adds an explicit isDarwin argument that needs
    to be passed in by the caller when creating a target MCExpr.  (To do so
    this patch implicitly also reverts commit 184441.)
    
    llvm-svn: 185858
    266db7fe
Loading