[LLVMbugs] [Bug 16701] New: [PowerPC] PPCAsmParser request: support darwin asm syntax in PPCAsmParser

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Jul 24 16:43:30 PDT 2013


http://llvm.org/bugs/show_bug.cgi?id=16701

            Bug ID: 16701
           Summary: [PowerPC] PPCAsmParser request: support darwin asm
                    syntax in PPCAsmParser
           Product: libraries
           Version: trunk
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: PowerPC
          Assignee: unassignedbugs at nondot.org
          Reporter: fang at csl.cornell.edu
                CC: hfinkel at anl.gov, llvmbugs at cs.uiuc.edu,
                    ulrich.weigand at de.ibm.com
    Classification: Unclassified

This is a feature request for supporting darwin asm syntax for PPC assembly.  
The most noticeable difference is in the naming of register operands.

% cat hello-puts.c
extern int puts(const char*);
int
main(int argc, char* argv[]) {
        puts("Hello, world!\n");
        return 0;
}

% make hello-puts.s
~/local/src/LLVM-svn/gcc40-cmake-build/bin/clang -v -fno-common -DPIC
-femit-all-decls -c hello-puts.c -S -o hello-puts.s
clang version 3.4 
Target: powerpc-apple-darwin8.11.0
Thread model: posix
 "/Volumes/Isolde/builds/LLVM/gcc40-cmake-build/bin/clang-3.4" -cc1 -triple
powerpc-apple-macosx10.4.0 -S -disable-free -main-file-name hello-puts.c
-mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -v
-coverage-file /Users/fang/temp/clang/hello-puts.s -resource-dir
/Volumes/Isolde/builds/LLVM/gcc40-cmake-build/bin/../lib/clang/3.4 -D PIC
-fdebug-compilation-dir /Users/fang/temp/clang -ferror-limit 19
-fmessage-length 80 -femit-all-decls -mstackrealign -fblocks
-fblocks-runtime-optional -fobjc-runtime=macosx-10.4.0
-fobjc-default-synthesize-properties -fencode-extended-block-signature
-fno-common -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -o
hello-puts.s -x c hello-puts.c
clang -cc1 version 3.4 based upon LLVM 3.4git-969f343 default target
powerpc-apple-darwin8.11.0
ignoring nonexistent directory "/usr/local/include"
#include "..." search starts here:
#include <...> search starts here:
 /Volumes/Isolde/builds/LLVM/gcc40-cmake-build/bin/../lib/clang/3.4/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

% cat hello-puts.s
        .machine ppc7400
        .section        __TEXT,__textcoal_nt,coalesced,pure_instructions
        .section       
__TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
        .section        __TEXT,__text,regular,pure_instructions
        .globl  _main
        .align  4
_main:                                  ; @main
; BB#0:                                 ; %entry
        mflr r0
        stw r31, -4(r1)
        stw r0, 8(r1)
        stwu r1, -96(r1)
        mr r31, r1
        bl L0$pb
L0$pb:
        mflr r2
        li r5, 0
        stw r5, 88(r31)
        stw r3, 84(r31)
        addis r2, r2, ha16(L_.str-L0$pb)
        stw r4, 80(r31)
        la r2, lo16(L_.str-L0$pb)(r2)
        stw r3, 76(r31)                 ; 4-byte Folded Spill
        mr r3, r2
        stw r4, 72(r31)                 ; 4-byte Folded Spill
        stw r5, 68(r31)                 ; 4-byte Folded Spill
        bl L_puts$stub
        lwz r2, 72(r31)                 ; 4-byte Folded Reload
        lwz r4, 76(r31)                 ; 4-byte Folded Reload
        lwz r5, 68(r31)                 ; 4-byte Folded Reload
        stw r3, 64(r31)                 ; 4-byte Folded Spill
        mr r3, r5
        stw r2, 60(r31)                 ; 4-byte Folded Spill
        stw r4, 56(r31)                 ; 4-byte Folded Spill
        addi r1, r1, 96
        lwz r0, 8(r1)
        lwz r31, -4(r1)
        mtlr r0
        blr

        .section       
__TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
        .align  4
L_puts$stub:
        .indirect_symbol        _puts
        mflr r0
        bcl 20, 31, L_puts$stub$tmp
L_puts$stub$tmp:
        mflr r11
        addis r11, r11, ha16(L_puts$lazy_ptr-L_puts$stub$tmp)
        mtlr r0
        lwzu r12, lo16(L_puts$lazy_ptr-L_puts$stub$tmp)(r11)
        mtctr r12
        bctr
        .section        __DATA,__la_symbol_ptr,lazy_symbol_pointers
L_puts$lazy_ptr:
        .indirect_symbol        _puts
        .long   dyld_stub_binding_helper

.subsections_via_symbols
        .section        __TEXT,__cstring,cstring_literals
L_.str:                                 ; @.str
        .asciz   "Hello, world!\n"


and attempting to use llvm-mc:
% /Volumes/Isolde/builds/LLVM/gcc40-cmake-build/bin/llvm-mc
-triple=powerpc-apple-darwin8 hello-puts.s 
        .section        __TEXT,__text,regular,pure_instructions
hello-puts.s:1:2: error: unrecognized machine type
        .machine ppc7400
        ^
hello-puts.s:1:2: error: unknown directive
        .machine ppc7400
        ^
        .section        __TEXT,__textcoal_nt,coalesced,pure_instructions
        .section       
__TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
        .section        __TEXT,__text,regular,pure_instructions
        .globl  _main
        .align  4
_main:

hello-puts.s:9:7: error: invalid operand for instruction
        mflr r0
             ^

hello-puts.s:10:6: error: invalid operand for instruction
        stw r31, -4(r1)
            ^

I've already taken a stab at accepting rX on memory operands with the following
patch:
<<PATCH>>
diff --git a/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
b/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index 3c677cc..e49cf08 100644
--- a/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -26,6 +26,8 @@
 #include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/raw_ostream.h"

+#define        ALLOW_DARWIN_ASM_SYNTAX                 1
+
 using namespace llvm;

 namespace {
@@ -1158,7 +1160,14 @@ ParseOperand(SmallVectorImpl<MCParsedAsmOperand*>
&Operands) {
           IntVal < 0 || IntVal > 31)
         return Error(S, "invalid register number");
       break;
-
+#if ALLOW_DARWIN_ASM_SYNTAX
+    case AsmToken::Identifier: // e.g. r31
+      unsigned RegNo2;
+      if (MatchRegisterName(Parser.getTok(), RegNo2, IntVal))
+        return Error(S, "invalid register name");
+      Parser.Lex(); // Eat the identifier token.
+      break;
+#endif
     default:
       return Error(S, "invalid memory operand");
     }
<<END-PATCH>>

but I wouldn't know how to proceed from here.
How difficult would this project be?

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20130724/a8e4613d/attachment.html>


More information about the llvm-bugs mailing list