Re: Gnu C compiler RTL question

lehotsky@tiac.net (Alan Lehotsky)
18 Sep 1998 23:04:29 -0400

          From comp.compilers

Related articles
Gnu C compiler RTL question dadorran@my-dejanews.com (1998-09-13)
Re: Gnu C compiler RTL question kong@ece.ucdavis.edu (Timothy Kong) (1998-09-18)
Re: Gnu C compiler RTL question lehotsky@tiac.net (1998-09-18)
Re: Gnu C compiler RTL question misar@rbg.informatik.tu-darmstadt.de (1998-09-18)
| List of all articles for this month |

From: lehotsky@tiac.net (Alan Lehotsky)
Newsgroups: comp.compilers
Date: 18 Sep 1998 23:04:29 -0400
Organization: Quality Software Management
References: 98-09-034
Keywords: GCC

>>>I read somewhere that the RTL is independent of the machine description, but
>>>looking at some compiled code shows that it does depend on the registers used
>>>as the stack and frame pointers.
>>>
>>>Are thes the only instances where this occurs??
>>>


      GCC RTL is only independent of the machine description in principle.


      e.g., RTL can describe a wide variety of architectures. The
      machine description tailors RTL to a specific architecture by
      providing code generation sequences for patterns (such as
      adding integers, conditional tests, etc.). In addition, the
      implementer of a port provides information on how to pass parameters
      and how to allocate stack frames, etc.


      The impressive thing about GCC and RTL is that all the machine
      dependencies are segregated into about 6 files


                  target/target.h
                  target/target.c
                  target/target.md


      plus a couple of make file fragments and shell scripts for configuration.


      RTL is simple enough to provide generalized patterns and rich
      enough to describe very complex code sequences. For example,
      the code below show the multiply-and-accumulate instruction
      for the SHARC DSP in a form that the compiler can use to
      recognize opportunities to emit these instructions.


            (define_insn ""
                [(set (match_operand:SI 0 "mr_operand" "+f")
                  (plus:SI (match_dup 0)
                          (mult:SI (match_operand:SI 1 "datareg_operand" "d")
                                  (match_operand:SI 2 "datareg_operand" "d"))))]
                ""
              "%0=%0+%1*%2 (ssi);"
                [(set (attr "type") (const_string "compute"))])


-- Al Lehotsky


--
                                Quality Software Management
                          http://www.tiac.net/users/lehotsky


Process Improvement | Management Consulting | Compiler Implementation
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.