1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/binutils/2.14.92/gccpr15247-fix.patch Sat Jun 02 15:50:45 2007 +0000
1.3 @@ -0,0 +1,192 @@
1.4 +See
1.5 +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15247
1.6 +
1.7 +Fixes spurious error
1.8 +/tmp/ccvNi4ou.s: Assembler messages:
1.9 +/tmp/ccvNi4ou.s:2310: Error: Illegal operands: There are only 32 single precision f registers; [0-31]
1.10 +make[2]: *** [/home/dank/wk/crosstool-0.28-rc10/build/sparc64-unknown-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/math/dosincos.o] Error 1
1.11 +
1.12 +when compiling glibc's dosincos.c with gcc-3.4.0
1.13 +
1.14 +===================================================================
1.15 +RCS file: /cvs/src/src/opcodes/sparc-opc.c,v
1.16 +retrieving revision 1.9
1.17 +retrieving revision 1.10
1.18 +diff -u -r1.9 -r1.10
1.19 +--- src/opcodes/sparc-opc.c 2004/01/18 23:46:32 1.9
1.20 ++++ src/opcodes/sparc-opc.c 2004/04/20 10:23:51 1.10
1.21 +@@ -1273,110 +1273,72 @@
1.22 + #define FM_DF 2 /* v9 */
1.23 + #define FM_QF 3 /* v9 */
1.24 +
1.25 +-#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \
1.26 +-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags, v9 }, \
1.27 +-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags, v9 }
1.28 +-
1.29 +-#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \
1.30 +-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
1.31 +-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
1.32 +-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
1.33 +-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
1.34 ++#define fmoviccx(opcode, fpsize, args, cond, flags) /* v9 */ \
1.35 ++{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags, v9 }, \
1.36 ++{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags, v9 }
1.37 ++
1.38 ++#define fmovfccx(opcode, fpsize, args, fcond, flags) /* v9 */ \
1.39 ++{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, v9 }, \
1.40 ++{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, v9 }, \
1.41 ++{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, v9 }, \
1.42 ++{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, v9 }
1.43 +
1.44 + /* FIXME: use fmovicc/fmovfcc? */ /* v9 */
1.45 +-#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \
1.46 +-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags | F_FLOAT, v9 }, \
1.47 +-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags | F_FLOAT, v9 }, \
1.48 +-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags | F_FLOAT, v9 }, \
1.49 +-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags | F_FLOAT, v9 }, \
1.50 +-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags | F_FLOAT, v9 }, \
1.51 +-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags | F_FLOAT, v9 }
1.52 +-
1.53 +-/* v9 */ fmovcc ("fmovda", FM_DF, CONDA, FCONDA, 0),
1.54 +-/* v9 */ fmovcc ("fmovqa", FM_QF, CONDA, FCONDA, 0),
1.55 +-/* v9 */ fmovcc ("fmovsa", FM_SF, CONDA, FCONDA, 0),
1.56 +-/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0),
1.57 +-/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0),
1.58 +-/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0),
1.59 +-/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0),
1.60 +-/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0),
1.61 +-/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0),
1.62 +-/* v9 */ fmovcc ("fmovde", FM_DF, CONDE, FCONDE, 0),
1.63 +-/* v9 */ fmovcc ("fmovqe", FM_QF, CONDE, FCONDE, 0),
1.64 +-/* v9 */ fmovcc ("fmovse", FM_SF, CONDE, FCONDE, 0),
1.65 +-/* v9 */ fmovcc ("fmovdg", FM_DF, CONDG, FCONDG, 0),
1.66 +-/* v9 */ fmovcc ("fmovqg", FM_QF, CONDG, FCONDG, 0),
1.67 +-/* v9 */ fmovcc ("fmovsg", FM_SF, CONDG, FCONDG, 0),
1.68 +-/* v9 */ fmovcc ("fmovdge", FM_DF, CONDGE, FCONDGE, 0),
1.69 +-/* v9 */ fmovcc ("fmovqge", FM_QF, CONDGE, FCONDGE, 0),
1.70 +-/* v9 */ fmovcc ("fmovsge", FM_SF, CONDGE, FCONDGE, 0),
1.71 +-/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS),
1.72 +-/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS),
1.73 +-/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS),
1.74 +-/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0),
1.75 +-/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0),
1.76 +-/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0),
1.77 +-/* v9 */ fmovcc ("fmovdl", FM_DF, CONDL, FCONDL, 0),
1.78 +-/* v9 */ fmovcc ("fmovql", FM_QF, CONDL, FCONDL, 0),
1.79 +-/* v9 */ fmovcc ("fmovsl", FM_SF, CONDL, FCONDL, 0),
1.80 +-/* v9 */ fmovcc ("fmovdle", FM_DF, CONDLE, FCONDLE, 0),
1.81 +-/* v9 */ fmovcc ("fmovqle", FM_QF, CONDLE, FCONDLE, 0),
1.82 +-/* v9 */ fmovcc ("fmovsle", FM_SF, CONDLE, FCONDLE, 0),
1.83 +-/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0),
1.84 +-/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0),
1.85 +-/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0),
1.86 +-/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0),
1.87 +-/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0),
1.88 +-/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0),
1.89 +-/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS),
1.90 +-/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS),
1.91 +-/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS),
1.92 +-/* v9 */ fmovcc ("fmovdn", FM_DF, CONDN, FCONDN, 0),
1.93 +-/* v9 */ fmovcc ("fmovqn", FM_QF, CONDN, FCONDN, 0),
1.94 +-/* v9 */ fmovcc ("fmovsn", FM_SF, CONDN, FCONDN, 0),
1.95 +-/* v9 */ fmovcc ("fmovdne", FM_DF, CONDNE, FCONDNE, 0),
1.96 +-/* v9 */ fmovcc ("fmovqne", FM_QF, CONDNE, FCONDNE, 0),
1.97 +-/* v9 */ fmovcc ("fmovsne", FM_SF, CONDNE, FCONDNE, 0),
1.98 +-/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0),
1.99 +-/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0),
1.100 +-/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0),
1.101 +-/* v9 */ fmovcc ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS),
1.102 +-/* v9 */ fmovcc ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS),
1.103 +-/* v9 */ fmovcc ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS),
1.104 +-/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0),
1.105 +-/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0),
1.106 +-/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0),
1.107 +-/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0),
1.108 +-/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0),
1.109 +-/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0),
1.110 +-/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0),
1.111 +-/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0),
1.112 +-/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0),
1.113 +-/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0),
1.114 +-/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0),
1.115 +-/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0),
1.116 +-/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0),
1.117 +-/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0),
1.118 +-/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0),
1.119 +-/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0),
1.120 +-/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0),
1.121 +-/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0),
1.122 +-/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0),
1.123 +-/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0),
1.124 +-/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0),
1.125 +-/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0),
1.126 +-/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0),
1.127 +-/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0),
1.128 +-/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0),
1.129 +-/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0),
1.130 +-/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0),
1.131 +-/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0),
1.132 +-/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0),
1.133 +-/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0),
1.134 +-/* v9 */ fmovcc ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS),
1.135 +-/* v9 */ fmovcc ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS),
1.136 +-/* v9 */ fmovcc ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS),
1.137 +-
1.138 ++#define fmovccx(opcode, fpsize, args, cond, fcond, flags) /* v9 */ \
1.139 ++{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags | F_FLOAT, v9 }, \
1.140 ++{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, v9 }, \
1.141 ++{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags | F_FLOAT, v9 }, \
1.142 ++{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, v9 }, \
1.143 ++{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, v9 }, \
1.144 ++{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, v9 }
1.145 ++
1.146 ++#define fmovicc(suffix, cond, flags) /* v9 */ \
1.147 ++fmoviccx("fmovd" suffix, FM_DF, "B,H", cond, flags), \
1.148 ++fmoviccx("fmovq" suffix, FM_QF, "R,J", cond, flags), \
1.149 ++fmoviccx("fmovs" suffix, FM_SF, "f,g", cond, flags)
1.150 ++
1.151 ++#define fmovfcc(suffix, fcond, flags) /* v9 */ \
1.152 ++fmovfccx("fmovd" suffix, FM_DF, "B,H", fcond, flags), \
1.153 ++fmovfccx("fmovq" suffix, FM_QF, "R,J", fcond, flags), \
1.154 ++fmovfccx("fmovs" suffix, FM_SF, "f,g", fcond, flags)
1.155 ++
1.156 ++#define fmovcc(suffix, cond, fcond, flags) /* v9 */ \
1.157 ++fmovccx("fmovd" suffix, FM_DF, "B,H", cond, fcond, flags), \
1.158 ++fmovccx("fmovq" suffix, FM_QF, "R,J", cond, fcond, flags), \
1.159 ++fmovccx("fmovs" suffix, FM_SF, "f,g", cond, fcond, flags)
1.160 ++
1.161 ++/* v9 */ fmovcc ("a", CONDA, FCONDA, 0),
1.162 ++/* v9 */ fmovicc ("cc", CONDCC, 0),
1.163 ++/* v9 */ fmovicc ("cs", CONDCS, 0),
1.164 ++/* v9 */ fmovcc ("e", CONDE, FCONDE, 0),
1.165 ++/* v9 */ fmovcc ("g", CONDG, FCONDG, 0),
1.166 ++/* v9 */ fmovcc ("ge", CONDGE, FCONDGE, 0),
1.167 ++/* v9 */ fmovicc ("geu", CONDGEU, F_ALIAS),
1.168 ++/* v9 */ fmovicc ("gu", CONDGU, 0),
1.169 ++/* v9 */ fmovcc ("l", CONDL, FCONDL, 0),
1.170 ++/* v9 */ fmovcc ("le", CONDLE, FCONDLE, 0),
1.171 ++/* v9 */ fmovicc ("leu", CONDLEU, 0),
1.172 ++/* v9 */ fmovfcc ("lg", FCONDLG, 0),
1.173 ++/* v9 */ fmovicc ("lu", CONDLU, F_ALIAS),
1.174 ++/* v9 */ fmovcc ("n", CONDN, FCONDN, 0),
1.175 ++/* v9 */ fmovcc ("ne", CONDNE, FCONDNE, 0),
1.176 ++/* v9 */ fmovicc ("neg", CONDNEG, 0),
1.177 ++/* v9 */ fmovcc ("nz", CONDNZ, FCONDNZ, F_ALIAS),
1.178 ++/* v9 */ fmovfcc ("o", FCONDO, 0),
1.179 ++/* v9 */ fmovicc ("pos", CONDPOS, 0),
1.180 ++/* v9 */ fmovfcc ("u", FCONDU, 0),
1.181 ++/* v9 */ fmovfcc ("ue", FCONDUE, 0),
1.182 ++/* v9 */ fmovfcc ("ug", FCONDUG, 0),
1.183 ++/* v9 */ fmovfcc ("uge", FCONDUGE, 0),
1.184 ++/* v9 */ fmovfcc ("ul", FCONDUL, 0),
1.185 ++/* v9 */ fmovfcc ("ule", FCONDULE, 0),
1.186 ++/* v9 */ fmovicc ("vc", CONDVC, 0),
1.187 ++/* v9 */ fmovicc ("vs", CONDVS, 0),
1.188 ++/* v9 */ fmovcc ("z", CONDZ, FCONDZ, F_ALIAS),
1.189 ++
1.190 ++#undef fmoviccx /* v9 */
1.191 ++#undef fmovfccx /* v9 */
1.192 ++#undef fmovccx /* v9 */
1.193 + #undef fmovicc /* v9 */
1.194 + #undef fmovfcc /* v9 */
1.195 + #undef fmovcc /* v9 */