diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-09-22 22:27:09 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-09-22 22:27:09 +0000 |
commit | 77169e561294e0496a5b4289974f6f417f42d1e6 (patch) | |
tree | 1bb1a0c7ed974b290958d7ab84cf473ef3fc2012 /gcc/longlong.h | |
parent | 704f5b3d2fe658cf86aa12bba1af57674525be67 (diff) | |
download | gcc-77169e561294e0496a5b4289974f6f417f42d1e6.tar.gz |
(pyr umul_ppmm): Use code `R' for REG.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10390 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/longlong.h')
-rw-r--r-- | gcc/longlong.h | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/gcc/longlong.h b/gcc/longlong.h index 9c39e98d16c..36b853d15f2 100644 --- a/gcc/longlong.h +++ b/gcc/longlong.h @@ -1,5 +1,5 @@ /* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc. This definition file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -730,20 +730,17 @@ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) -/* This insn doesn't work on ancient pyramids. */ +/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ #define umul_ppmm(w1, w0, u, v) \ - ({union { \ - UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __xx; \ - __xx.__i.__l = u; \ - __asm__ ("uemul %3,%0" \ - : "=r" (__xx.__i.__h), \ - "=r" (__xx.__i.__l) \ - : "1" (__xx.__i.__l), \ + ({union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("movw %1,%R0 + uemul %2,%0" \ + : "=&r" (__xx.__ll) \ + : "g" ((USItype) (u)), \ "g" ((USItype)(v))); \ - (w1) = __xx.__i.__h; \ - (w0) = __xx.__i.__l;}) + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #endif /* __pyr__ */ #if defined (__ibm032__) /* RT/ROMP */ @@ -1172,7 +1169,7 @@ extern const UQItype __clz_tab[]; } \ else \ { \ - for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \ + for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \ if (((__xr >> __a) & 0xff) != 0) \ break; \ } \ |