This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: How to inline a huge m68k code?
- From: Ian Lance Taylor <iant at google dot com>
- To: ami_stuff <ami_stuff at o2 dot pl>
- Cc: gcc-help at gcc dot gnu dot org
- Date: Sun, 12 Jul 2009 23:00:49 -0700
- Subject: Re: How to inline a huge m68k code?
- References: <792d79d7.6fd9f7d1.4a5a55eb.b3c4b@o2.pl>
ami_stuff <ami_stuff@o2.pl> writes:
> I want to ask for help with a huge m68k code which I try to inline.
>
> This is optimized 32x32->64 function for 68060 processor (68020/030/04 CPUs have
> this function in the hardware).
I don't understand what your actual question is. What do you want gcc
to do differently?
gcc's longlong.h already has inlined assembly code for 32x32->64
multiplication. For the 68060 it looks like this:
#define umul_ppmm(xh, xl, a, b) \
__asm__ ("| Inlined umul_ppmm\n" \
" move%.l %2,%/d0\n" \
" move%.l %3,%/d1\n" \
" move%.l %/d0,%/d2\n" \
" swap %/d0\n" \
" move%.l %/d1,%/d3\n" \
" swap %/d1\n" \
" move%.w %/d2,%/d4\n" \
" mulu %/d3,%/d4\n" \
" mulu %/d1,%/d2\n" \
" mulu %/d0,%/d3\n" \
" mulu %/d0,%/d1\n" \
" move%.l %/d4,%/d0\n" \
" eor%.w %/d0,%/d0\n" \
" swap %/d0\n" \
" add%.l %/d0,%/d2\n" \
" add%.l %/d3,%/d2\n" \
" jcc 1f\n" \
" add%.l %#65536,%/d1\n" \
"1: swap %/d2\n" \
" moveq %#0,%/d0\n" \
" move%.w %/d2,%/d0\n" \
" move%.w %/d4,%/d2\n" \
" move%.l %/d2,%1\n" \
" add%.l %/d1,%/d0\n" \
" move%.l %/d0,%0" \
: "=g" ((USItype) (xh)), \
"=g" ((USItype) (xl)) \
: "g" ((USItype) (a)), \
"g" ((USItype) (b)) \
: "d0", "d1", "d2", "d3", "d4")
Ian