From: Borja F. <bor...@gm...> - 2013-07-27 14:10:57
|
Restrict where? In avrlibc or llvm? El sábado, 27 de julio de 2013, Stepan Dyatkovskiy escribió: > Currently I'm learning avr-libc configs. How did you restrict to compile > it for avr5 only? > > -Stepan. > > Borja Ferrer wrote: > >> Ok I will take a look at that 01 character to see from where it's coming >> from. >> >> About the other issue, it's weird, i've managed to build a huge c file >> with avr-clang with no errors. Since i have avr-as and the rest of avr >> binutils in my PATH, avr-clang calls them automatically to assemble and >> link the program. The only thing i MUST do is pass mmcu=avr5 otherwise i >> get all those movw errors in the assembler. Remember to configure LLVM >> with the --target, --host, etc options to build it as a cross compiler. >> >> I'm also seeing a lot of references to avr2 and the at90s120 inside >> those cmd lines, I dont know if this makes any difference but again, we >> cant compile for those mcus now. >> >> >> >> 2013/7/26 Stepan Dyatkovskiy <stp...@na... <mailto:stp...@na... >> >> >> >> Borja Ferrer wrote: >> >> Hello Stepan, >> >> No problem with those fixes :) >> >> >> 2) It's interesting we get different IR, can you explain more >> what is >> going on here? This is the last bit of inline asm support, the >> sooner we >> fix it the better so we can move on to more interesting things. >> >> >> For next example: >> >> int a,b; >> extern long Calc(void) asm ("CALCULATE"); >> void f() { Calc(); } >> >> avr-clang emits: >> >> ; some header >> ; Function Attrs: noinline nounwind >> define void @f() #0 { >> entry: >> %call = call i32 @"\01CALCULATE"() ; Stepan: note \01 character. >> ret void >> } >> declare i32 @"\01CALCULATE"() #1 >> ; some footer >> >> arm-linux-gnueabi emits: >> >> ; some header >> ; Function Attrs: nounwind >> define void @f() #0 { >> entry: >> %call = call i32 @CALCULATE() ; Stepan: no \01 character. >> ret void >> } >> declare i32 @CALCULATE() #1 >> ;some footer >> >> But .S files looks fine. No \01 characters anywhere. >> >> >> >> About compiling avrlibc: >> >> >> Also avr-clang emits wrong sequense for .S files. So I'm >> using >> CCAS=avr-gcc. >> What do you mean with this? What is wrong? >> >> Directory: >> bash:$ cd $AVR_LIBC_OBJ/avr/lib/avr2/__**at90s1200 >> bash:$ avr-clang -DHAVE_CONFIG_H -I. >> -I../../../../../avr-libc/avr/**__lib/avr2/at90s1200 -I../../../.. >> -I../../../../../avr-libc/__**common >> -I../../../../../avr-libc/__**include -I../../../../include >> -I../../../../../avr-libc/__**common >> -I../../../../../avr-libc/__**include -I../../../../include -x >> assembler-with-cpp -mmcu=at90s1200 >> -DIOSYMFILE=\"iosym/at90s1200.**__S\" -MT gcrt1.o -MD -MP -MF >> .deps/gcrt1.Tpo -c -o gcrt1.o ../../../../../avr-libc/crt1/_** >> _gcrt1.S >> >> tons of errors. >> >> I suppose thats because clang driver uses different tools for asm >> files. >> >> For the -### command avr-clang shows the next: >> >> "avr-clang" "-cc1" "-triple" "avr" "-E" "-disable-free" >> "-main-file-name" "gcrt1.S" "-mrelocation-model" "static" >> "-mdisable-fp-elim" "-fmath-errno" "-mconstructor-aliases" >> "-target-linker-version" "2.22.90.20120924" "-coverage-file" >> "/tmp/gcrt1-fecbe5.s" "-resource-dir" >> "/media/stepan/workproj/llvm._**_project/2-avr/builds/llvm.__** >> debug-avr-arm-x86_64.build/__**Debug+Asserts/bin/../lib/__**clang/3.4" >> "-dependency-file" ".deps/gcrt1.Tpo" "-sys-header-deps" "-MP" "-MT" >> "gcrt1.o" "-D" "HAVE_CONFIG_H" "-D" >> "IOSYMFILE=\"iosym/at90s1200._**_S\"" "-I" "." "-I" >> "../../../../../avr-libc/avr/_**_lib/avr2/at90s1200" "-I" >> "../../../.." "-I" "../../../../../avr-libc/__**common" "-I" >> "../../../../../avr-libc/__**include" "-I" "../../../../include" "-I" >> "../../../../../avr-libc/__**common" "-I" >> "../../../../../avr-libc/__**include" "-I" "../../../../include" >> "-fno-dwarf-directory-asm" "-fdebug-compilation-dir" >> "/media/stepan/workproj/llvm._**_project/2-avr/avr-libc/trunk/** >> __build.opt/avr/lib/avr2/__**at90s1200" >> "-ferror-limit" "19" "-fmessage-length" "147" "-mstackrealign" >> "-fobjc-runtime=gcc" "-fobjc-default-synthesize-__**properties" >> "-fdiagnostics-show-option" "-fcolor-diagnostics" "-vectorize-loops" >> "-o" "/tmp/gcrt1-fecbe5.s" "-x" "assembler-with-cpp" >> "../../../../../avr-libc/crt1/**__gcrt1.S" >> >> "/usr/bin/avr-gcc" "-D" "HAVE_CONFIG_H" "-I" "." "-I" >> "../../../../../avr-libc/avr/_**_lib/avr2/at90s1200" "-I" >> "../../../.." "-I" "../../../../../avr-libc/__**common" "-I" >> "../../../../../avr-libc/__**include" "-I" "../../../../include" "-I" >> "../../../../../avr-libc/__**common" "-I" >> "../../../../../avr-libc/__**include" "-I" "../../../../include" >> "-mmcu=at90s1200" "-D" "IOSYMFILE=\"iosym/at90s1200._**_S\"" "-MT" >> "gcrt1.o" "-MD" "-MP" "-MF" ".deps/gcrt1.Tpo" "-c" "-o" "gcrt1.o" >> "-x" "assembler" "/tmp/gcrt1-fecbe5.s" >> >> While avr-gcc uses next sequence: >> >> /usr/lib/gcc/avr/4.7.0/cc1 -E -lang-asm -quiet -I . -I >> ../../../../../avr-libc/avr/__**lib/avr2/at90s1200 -I ../../../.. -I >> ../../../../../avr-libc/common -I ../../../../../avr-libc/__**include >> -I ../../../../include -I ../../../../../avr-libc/common -I >> ../../../../../avr-libc/__**include -I ../../../../include -MD >> gcrt1.d >> -MF .deps/gcrt1.Tpo -MP -MT gcrt1.o -D HAVE_CONFIG_H -D >> "IOSYMFILE=\"iosym/at90s1200._**_S\"" >> ../../../../../avr-libc/crt1/_**_gcrt1.S "-mmcu=at90s1200" >> -fno-directives-only -o /tmp/ccK7jMC3.s >> '-mmcu=at90s1200' '-D' 'IOSYMFILE="iosym/at90s1200.S"**__' '-MT' >> 'gcrt1.o' '-MD' '-MP' '-MF' '.deps/gcrt1.Tpo' '-c' '-o' 'gcrt1.o' >> >> /usr/lib/gcc/avr/4.7.0/../../.**__./avr/bin/as "-mmcu=at90s1200" >> -mno-skip-bug -o gcrt1.o /tmp/ccK7jMC3.s >> >> >> >> >> 2) Since I compile clang as a cross compiler this is not a >> problem for >> me, all llvm binaries are prefixed with avr. >> >> >> Currently compilation stopped with unsupported movw >> instruction for >> avr2. >> Yes, this is going to be a problem. Try to modify the build >> scripts to >> compile everything for mmcu=avr5. We don't support any smaller >> devices. >> >> >> OK. Will do. >> >> -Stepan >> >> >> >> >> 2013/7/26 Stepan Dyatkovskiy <stp...@na... >> <mailto:stp...@na...> <mailto:stp...@na... >> <mailto:stp...@na...>>> >> >> >> Hello Borja, >> >> Thanks for fixes! Especially my stupid pieces of code in >> AVRAsmPrinter.cpp >> >> >> Back to your post at 01.07.2013: >> >> You wrote: >> [quote] >> Yes but the first goal now is to have inline asm feature >> complete xD >> Then we can move into other places of the library. >> >> Taking a look at the previous emails this is what needs >> still to be >> done: >> 1) Implement the missed optimization above for the memory >> constraint. >> Also see if you can come with further cases. Remember to >> add a test >> case. >> 2) Implement the stuff in the "C names used in assembler >> code" section >> of the avrlibc manual. You mentioned some issues here in a >> previous >> email. >> 3) Implement the a0, a1, etc... constraints. >> [/quote] >> >> 1. Done. >> 2. I checked it again. It works, though way of IR >> generation differs >> from ARM back-end for example. >> 3. Done. >> >> Now, I suppose, we have to work more with clang. But it is >> difficult >> since our changes are presented as patches. >> >> I had tried to compile avr-libc again. I had found clang >> bug (generic >> one: mistreating with builtins): >> >> http://llvm.org/bugs/show_bug.**____cgi?id=16712<http://llvm.org/bugs/show_bug.____cgi?id=16712> >> <http://llvm.org/bugs/show_**bug.__cgi?id=16712<http://llvm.org/bugs/show_bug.__cgi?id=16712> >> > >> >> <http://llvm.org/bugs/show___**bug.cgi?id=16712<http://llvm.org/bugs/show___bug.cgi?id=16712> >> <http://llvm.org/bugs/show_**bug.cgi?id=16712<http://llvm.org/bugs/show_bug.cgi?id=16712> >> >> >> >> Also avr-clang emits wrong sequense for .S files. So I'm >> using >> CCAS=avr-gcc. >> >> Steps for avr-libc compilation: >> >> 0. I'm working with avr-libc, svn r2403. >> >> 1. We also need to apply several changes for it (see the >> patch in >> attachment). >> >> 2. Currently you should rename "clang" with "avr-clang". >> "ln -s" doesn't >> works. 'avr-gcc' name was hard-coded in configure.ac >> <http://configure.ac> >> <http://configure.ac>, so I did the same >> >> with 'avr-clang'. >> >> 3. Run configure script as below: >> $AVR_LIBC_DIR/configure CC=$LLVM_BIN_DIR/avr-clang --build= >> --host=avr >> CCAS=avr-gcc >> >> A have also attached my config.log file. >> >> Currently compilation stopped with unsupported movw >> instruction for >> avr2. >> >> -Stepan. >> >> Borja Ferrer wrote: >> >> Ok, you can commit the patch now. >> >> >> 2013/7/24 Stepan Dyatkovskiy <stp...@na... >> <mailto:stp...@na...> >> <mailto:stp...@na... <mailto:stp...@na...>> >> <mailto:stp...@na... <mailto:stp...@na...> >> >> <mailto:stp...@na... <mailto:stp...@na...>>>> >> >> Borja Ferrer wrote: >> >> 1) I agree. >> >> >> 3) What happens when you use multibyte >> constraints with >> "e" or "b". >> >> Just had checked it. It works :-) Though I'll add >> test-cases for >> them too. >> >> >> 4) Hah ok, btw no need to check for i64? >> >> In one of our previous mails we decided to >> restrict i64 >> usage, since >> avr-gcc doesn't support it properly. >> >> -Stepan >> >> >> >> 2013/7/24 Stepan Dyatkovskiy >> <stp...@na... <mailto:stp...@na...> >> <mailto:stp...@na... <mailto:stp...@na...>> >> <mailto:stp...@na... >> <mailto:stp...@na...> <mailto:stp...@na... >> <mailto:stp...@na...>>> >> <mailto:stp...@na... <mailto:stp...@na...> >> <mailto:stp...@na... <mailto:stp...@na...>> >> <mailto:stp...@na... >> <mailto:stp...@na...> <mailto:stp...@na... >> <mailto:stp...@na...>>>>> >> >> Hi Borja, >> >> >> > 1) You implemented the "aN" constraint >> by also >> allowing >> b,c,d >> > constraints. I'm not sure if gcc >> implements >> this, my >> guess is >> that only >> > "a" is needed. Please check to see >> what gcc >> does here. >> >> For b,c,d avr-gcc acts like it meet %a. I >> think >> its wrong and >> untested behaviour, so I just restricted >> usage to >> single >> 'a' character. >> >> >> > 2) Make getAlternativeRegName return a >> char >> instead of a >> string >> since we >> > only need to return one letter. >> >> Done >> >> >> > 3) Related to the changes in >> AVRISelLowering.cpp, do we >> need to care >> > about more register constraints apart >> of the >> ones you >> already >> covered? >> >> What you mean? I think all constraints >> are covered >> now. If >> no, we >> can find out it during compilation >> (avr-libc, >> arduino, etc). >> >> >> > 4) Now that wider types have been >> covered, >> please check >> if the >> assert I >> > commented out in AVRISelLowering.cpp >> in the >> inline asm >> code can be >> > removed or what. >> >> I replaced this assertion with error >> message. >> Suppose its >> better >> than killing the compiler :-) >> >> New patch is attached. >> >> -Stepan. >> >> >> Borja Ferrer wrote: >> >> Hello Stepan, >> The patch looks good, but I have some >> questions/comments: >> >> 1) You implemented the "aN" >> constraint by also >> allowing >> b,c,d >> constraints. I'm not sure if gcc >> implements >> this, my >> guess is >> that only >> "a" is needed. Please check to see >> what gcc >> does here. >> 2) Make getAlternativeRegName return >> a char >> instead of >> a string >> since we >> only need to return one letter. >> 3) Related to the changes in >> AVRISelLowering.cpp, do we >> need to care >> about more register constraints apart >> of the >> ones you >> already >> covered? >> 4) Now that wider types have been >> covered, >> please check >> if the >> assert I >> commented out in AVRISelLowering.cpp >> in the >> inline asm >> code can be >> removed or what. >> >> >> >> 2013/7/24 Stepan Dyatkovskiy >> <stp...@na... <mailto:stpworld@narod.r >> <mailto:stp...@na... <mailto:stp...@na...>>>>>> >> >> >> Hello Borja, >> Here is the new patch for >> multibyte >> reference. >> Please look >> at new >> tests to see what was >> implemented exactly. >> To fix issue I described in >> previous >> letter I've >> added new reg >> classes that contains pairs of 8 >> bit >> registers: >> If we pass i32 parameter that >> should be >> split onto >> four 8 >> bit regs, >> we set i16 register class first, >> then it >> would be >> replaced >> with 8 >> bit registers if needed. >> Currently I see >> it is the >> only >> > |