GCC port rewrite for OpenRISC
Switch branches/tags
or1k-9.0.0 or1k-9.0.0-20180730 or1k-9.0.0-20180722 or1k-9.0.0-20180715 or1k-9.0.0-20180613 or1k-9.0.0-20180608 or1k-9.0.0-20180604 or1k-9.0.0-20180523 gcc_5_3_0_release gcc_5_2_0_release gcc-8_2_0-release gcc-8_1_0-release gcc-7_3_0-release gcc-7_2_0-release gcc-7_1_0-release gcc-6_4_0-release gcc-6_3_0-release gcc-6_2_0-release gcc-6_1_0-release gcc-5_5_0-release gcc-5_4_0-release gcc-5_3_0-release gcc-5_2_0-release gcc-5_1_0-release gcc-4_9_4-release gcc-4_9_3-release gcc-4_9_2-release gcc-4_9_1-release gcc-4_9_0-release gcc-4_8_5-release gcc-4_8_4-release gcc-4_8_3-release gcc-4_8_2-release gcc-4_8_1-release gcc-4_8_0-release gcc-4_7_4-release gcc-4_7_3-release gcc-4_7_2-release gcc-4_7_1-release gcc-4_7_0-release gcc-4_6_4-release gcc-4_6_3-release gcc-4_6_2-release gcc-4_6_1-release gcc-4_6_0-release gcc-4_5_4-release gcc-4_5_3-release gcc-4_5_2-release gcc-4_5_1-release gcc-4_5_0-release gcc-4_4_7-release gcc-4_4_6-release gcc-4_4_5-release gcc-4_4_4-release gcc-4_4_3-release gcc-4_4_2-release gcc-4_4_1-release gcc-4_4_0-release gcc-4_3_6-release gcc-4_3_5-release gcc-4_3_4-release gcc-4_3_3-release gcc-4_3_2-release gcc-4_3_1-release gcc-4_3_0-release gcc-4_2_4-release gcc-4_2_3-release gcc-4_2_2-release gcc-4_2_1-release gcc-4_2_0-release gcc-4_1_2-release gcc-4_1_1-release gcc-4_1_0-release gcc-4_0_4-release gcc-4_0_3-release gcc-4_0_2-release gcc-4_0_1-release gcc-4_0_0-release gcc-3_4_6-release gcc-3_4_5-release gcc-3_4_4-release gcc-3_4_3-release gcc-3_4_2-release gcc-3_4_1-release gcc-3_4_0-release gcc-3_3_4-release gcc-3_3_3-release gcc-3_3_2-release gcc-3_2_3-release gcc-3_2_2-release gcc-3_2_1-release gcc-3_2-release gcc-3_1_1-release gcc-3_1-release gcc-3_0_4-release gcc-3_0_3-release gcc-3_0_2-release gcc-3_0_1-release gcc-3_0-release gcc-2_95_3-release
Nothing to show
Clone or download
Pull request Compare This branch is 524 commits ahead, 145 commits behind stffrdhrn:or1k-port.
Cannot retrieve the latest commit at this time.
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
INSTALL
config
contrib
fixincludes
gcc
gnattools
gotools
include
intl
libada
libatomic
libbacktrace
libcc1
libcpp
libdecnumber
libffi
libgcc
libgfortran
libgo
libgomp
libhsail-rt
libiberty
libitm
libmpx
libobjc
liboffloadmic
libquadmath
libsanitizer
libssp
libstdc++-v3
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
ChangeLog
ChangeLog.jit
ChangeLog.tree-ssa
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
README
README.md
compile
config-ml.in
config.guess
config.rpath
config.sub
configure
configure.ac
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
missing
mkdep
mkinstalldirs
move-if-change
symlink-tree
ylwrap

README.md

OpenRISC GCC port

this is the start of a new OpenRISC fsf clean port for gcc.

Todo

These items should be done to get to a point where very basic things compile. DONE - just means something is in place so we can move on not done and tested.

  • build infra + basic files - DONE
  • register definitions - DONE
  • calling conventions - DONE
  • memory layout
  • load/store - DONE
  • moves - DONE
  • jump - DONE
  • branches - DONE
  • tuning
    • ensure varargs are to spec
    • ensure we can return 64-bit values in r11 and r12 - DONE (OOTB)
    • proper support for returning small structs/vectors in regs
    • optional support for frame pointers
    • delay slot - DONE
    • optional support for delay slot
    • correct predicates and constraints - OK

building

Stage 1 build

mkdir build
cd build
../gcc/configure --target=or1k-elf --disable-shared --enable-languages=c --prefix=/home/shorne/work/gnu-toolchain/local
make -j5 all-gcc
make install-gcc

../local/bin/or1k-elf-gcc -S ../gcc/test2.c -fdump-rtl-all

bootstrap tests

Below are some really basic test programs we can compile before we move on to the testsuite to check things. I pulled these from the ggx toolchain porting tutorial.

Verify types

/* Just test some types */
    int myint;
    short myshort;
    double mydouble;

Verify call/return

    int foo(int, int);
    int main()
    {
       return foo (111, 222);
    }

Verify prolog/epilog


    int g;

    int add(int a, int b, int c, int d, int e, int f)
    {
      return a + b + c + d + e + f + g;
    }

    int main()
    {
      g = 7;
      return (add (1, 2, 3, 4, 5, 6));
    }