| 1 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/freebsd.h gcc-2.5.8/config/i386/freebsd.h |
| 2 | *** gcc-2.5.8.gnu/config/i386/freebsd.h Thu Jan 1 01:00:00 1970 |
| 3 | --- gcc-2.5.8/config/i386/freebsd.h Sun Feb 27 00:40:55 1994 |
| 4 | *************** |
| 5 | *** 0 **** |
| 6 | --- 1,341 ---- |
| 7 | + /* Configuration for an i386 running FreeBSD as the target machine. |
| 8 | + * |
| 9 | + * 7th feb 1994, Poul-Henning Kamp <phk@login.dkuug.dk> |
| 10 | + * Made to fit FreeBSD 1.1 and GCC 2.5.8 |
| 11 | + */ |
| 12 | + |
| 13 | + /* This goes away when the math-emulator is fixed */ |
| 14 | + #define TARGET_CPU_DEFAULT 0400 /* TARGET_NO_FANCY_MATH_387 */ |
| 15 | + |
| 16 | + /* Just in case. (Cross-compilations &c) */ |
| 17 | + #ifndef __FreeBSD__ |
| 18 | + #define __FreeBSD__ 1 |
| 19 | + #endif |
| 20 | + |
| 21 | + /* This is tested by i386gas.h. */ |
| 22 | + #define YES_UNDERSCORES |
| 23 | + |
| 24 | + #include "i386/gstabs.h" |
| 25 | + |
| 26 | + /* Get perform_* macros to build libgcc.a. */ |
| 27 | + #include "i386/perform.h" |
| 28 | + |
| 29 | + #undef CPP_PREDEFINES |
| 30 | + #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)" |
| 31 | + |
| 32 | + #define INCLUDE_DEFAULTS { \ |
| 33 | + { "/usr/include", 0 }, \ |
| 34 | + { "/usr/include/g++", 1 }, \ |
| 35 | + { 0, 0} \ |
| 36 | + } |
| 37 | + |
| 38 | + /* Like the default, except no -lg. */ |
| 39 | + #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" |
| 40 | + |
| 41 | + #undef SIZE_TYPE |
| 42 | + #define SIZE_TYPE "unsigned int" |
| 43 | + |
| 44 | + #undef PTRDIFF_TYPE |
| 45 | + #define PTRDIFF_TYPE "int" |
| 46 | + |
| 47 | + #undef WCHAR_TYPE |
| 48 | + #define WCHAR_TYPE "short unsigned int" |
| 49 | + |
| 50 | + #define WCHAR_UNSIGNED 1 |
| 51 | + |
| 52 | + #undef WCHAR_TYPE_SIZE |
| 53 | + #define WCHAR_TYPE_SIZE 16 |
| 54 | + |
| 55 | + #define HAVE_ATEXIT |
| 56 | + |
| 57 | + /* Redefine this to use %eax instead of %edx. */ |
| 58 | + #undef FUNCTION_PROFILER |
| 59 | + #define FUNCTION_PROFILER(FILE, LABELNO) \ |
| 60 | + { \ |
| 61 | + if (flag_pic) \ |
| 62 | + { \ |
| 63 | + fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \ |
| 64 | + LPREFIX, (LABELNO)); \ |
| 65 | + fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \ |
| 66 | + } \ |
| 67 | + else \ |
| 68 | + { \ |
| 69 | + fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \ |
| 70 | + fprintf (FILE, "\tcall mcount\n"); \ |
| 71 | + } \ |
| 72 | + } |
| 73 | + |
| 74 | + /* There are conflicting reports about whether this system uses |
| 75 | + a different assembler syntax. wilson@cygnus.com says # is right. */ |
| 76 | + #undef COMMENT_BEGIN |
| 77 | + #define COMMENT_BEGIN "#" |
| 78 | + |
| 79 | + #undef ASM_APP_ON |
| 80 | + #define ASM_APP_ON "#APP\n" |
| 81 | + |
| 82 | + #undef ASM_APP_OFF |
| 83 | + #define ASM_APP_OFF "#NO_APP\n" |
| 84 | + \f |
| 85 | + /* The following macros are stolen from i386v4.h */ |
| 86 | + /* These have to be defined to get PIC code correct */ |
| 87 | + |
| 88 | + /* This is how to output an element of a case-vector that is relative. |
| 89 | + This is only used for PIC code. See comments by the `casesi' insn in |
| 90 | + i386.md for an explanation of the expression this outputs. */ |
| 91 | + |
| 92 | + #undef ASM_OUTPUT_ADDR_DIFF_ELT |
| 93 | + #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ |
| 94 | + fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) |
| 95 | + |
| 96 | + /* Indicate that jump tables go in the text section. This is |
| 97 | + necessary when compiling PIC code. */ |
| 98 | + |
| 99 | + #define JUMP_TABLES_IN_TEXT_SECTION |
| 100 | + |
| 101 | + /* Don't default to pcc-struct-return, because gcc is the only compiler, and |
| 102 | + we want to retain compatibility with older gcc versions. */ |
| 103 | + #define DEFAULT_PCC_STRUCT_RETURN 0 |
| 104 | + |
| 105 | + /* |
| 106 | + * Some imports from svr4.h in support of shared libraries. |
| 107 | + * Currently, we need the DECLARE_OBJECT_SIZE stuff. |
| 108 | + */ |
| 109 | + |
| 110 | + /* Define the strings used for the special svr4 .type and .size directives. |
| 111 | + These strings generally do not vary from one system running svr4 to |
| 112 | + another, but if a given system (e.g. m88k running svr) needs to use |
| 113 | + different pseudo-op names for these, they may be overridden in the |
| 114 | + file which includes this one. */ |
| 115 | + |
| 116 | + #define TYPE_ASM_OP ".type" |
| 117 | + #define SIZE_ASM_OP ".size" |
| 118 | + #define WEAK_ASM_OP ".weak" |
| 119 | + |
| 120 | + /* The following macro defines the format used to output the second |
| 121 | + operand of the .type assembler directive. Different svr4 assemblers |
| 122 | + expect various different forms for this operand. The one given here |
| 123 | + is just a default. You may need to override it in your machine- |
| 124 | + specific tm.h file (depending upon the particulars of your assembler). */ |
| 125 | + |
| 126 | + #define TYPE_OPERAND_FMT "@%s" |
| 127 | + |
| 128 | + /* Write the extra assembler code needed to declare a function's result. |
| 129 | + Most svr4 assemblers don't require any special declaration of the |
| 130 | + result value, but there are exceptions. */ |
| 131 | + |
| 132 | + #ifndef ASM_DECLARE_RESULT |
| 133 | + #define ASM_DECLARE_RESULT(FILE, RESULT) |
| 134 | + #endif |
| 135 | + |
| 136 | + /* These macros generate the special .type and .size directives which |
| 137 | + are used to set the corresponding fields of the linker symbol table |
| 138 | + entries in an ELF object file under SVR4. These macros also output |
| 139 | + the starting labels for the relevant functions/objects. */ |
| 140 | + |
| 141 | + /* Write the extra assembler code needed to declare a function properly. |
| 142 | + Some svr4 assemblers need to also have something extra said about the |
| 143 | + function's return value. We allow for that here. */ |
| 144 | + |
| 145 | + #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ |
| 146 | + do { \ |
| 147 | + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ |
| 148 | + assemble_name (FILE, NAME); \ |
| 149 | + putc (',', FILE); \ |
| 150 | + fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ |
| 151 | + putc ('\n', FILE); \ |
| 152 | + ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ |
| 153 | + ASM_OUTPUT_LABEL(FILE, NAME); \ |
| 154 | + } while (0) |
| 155 | + |
| 156 | + /* Write the extra assembler code needed to declare an object properly. */ |
| 157 | + |
| 158 | + #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ |
| 159 | + do { \ |
| 160 | + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ |
| 161 | + assemble_name (FILE, NAME); \ |
| 162 | + putc (',', FILE); \ |
| 163 | + fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ |
| 164 | + putc ('\n', FILE); \ |
| 165 | + size_directive_output = 0; \ |
| 166 | + if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ |
| 167 | + { \ |
| 168 | + size_directive_output = 1; \ |
| 169 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ |
| 170 | + assemble_name (FILE, NAME); \ |
| 171 | + fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ |
| 172 | + } \ |
| 173 | + ASM_OUTPUT_LABEL(FILE, NAME); \ |
| 174 | + } while (0) |
| 175 | + |
| 176 | + /* Output the size directive for a decl in rest_of_decl_compilation |
| 177 | + in the case where we did not do so before the initializer. |
| 178 | + Once we find the error_mark_node, we know that the value of |
| 179 | + size_directive_output was set |
| 180 | + by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */ |
| 181 | + |
| 182 | + #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ |
| 183 | + do { \ |
| 184 | + char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ |
| 185 | + if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ |
| 186 | + && ! AT_END && TOP_LEVEL \ |
| 187 | + && DECL_INITIAL (DECL) == error_mark_node \ |
| 188 | + && !size_directive_output) \ |
| 189 | + { \ |
| 190 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ |
| 191 | + assemble_name (FILE, name); \ |
| 192 | + fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\ |
| 193 | + } \ |
| 194 | + } while (0) |
| 195 | + |
| 196 | + |
| 197 | + /* This is how to declare the size of a function. */ |
| 198 | + |
| 199 | + #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ |
| 200 | + do { \ |
| 201 | + if (!flag_inhibit_size_directive) \ |
| 202 | + { \ |
| 203 | + char label[256]; \ |
| 204 | + static int labelno; \ |
| 205 | + labelno++; \ |
| 206 | + ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ |
| 207 | + ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ |
| 208 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ |
| 209 | + assemble_name (FILE, (FNAME)); \ |
| 210 | + fprintf (FILE, ","); \ |
| 211 | + assemble_name (FILE, label); \ |
| 212 | + fprintf (FILE, "-"); \ |
| 213 | + assemble_name (FILE, (FNAME)); \ |
| 214 | + putc ('\n', FILE); \ |
| 215 | + } \ |
| 216 | + } while (0) |
| 217 | + |
| 218 | + #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}" |
| 219 | + #define LINK_SPEC \ |
| 220 | + "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}" |
| 221 | + |
| 222 | + #define CUSTOM_DEFAULT_COMPILERS \ |
| 223 | + /***** ljo's Fortran rule *****/ \ |
| 224 | + {".f", "@f2c"}, \ |
| 225 | + {"@f2c", \ |
| 226 | + "f2c %{checksubscripts:-C} %{I2} %{onetrip} %{honorcase:-U} %{u} %{w}\ |
| 227 | + %{ANSIC:-A} %{a} %{C++}\ |
| 228 | + %{c} %{E} %{ec} %{ext} %{f} %{72} %{g} %{h} %{i2} %{kr}\ |
| 229 | + %{P} %{p} %{r} %{r8} %{s} %{w8} %{z} %{N*}\ |
| 230 | + %i %{!pipe: -o %g.c} %{pipe:-o -}|\n", \ |
| 231 | + "gcpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\ |
| 232 | + %{C:%{!E:%eGNU C does not support -C without using -E}}\ |
| 233 | + %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d}\ |
| 234 | + -undef -D__GNUC__=2 %{ansi:-trigraphs -$ -D__STRICT_ANSI__}\ |
| 235 | + %{!undef:%{!ansi:%p} %P} %{trigraphs} \ |
| 236 | + %c %{O*:%{!O0:-D__OPTIMIZE__}} %{traditional} %{ftraditional:-traditional}\ |
| 237 | + %{traditional-cpp:-traditional}\ |
| 238 | + %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*}\ |
| 239 | + %{pipe:-} %{!pipe:%g.c} %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n", \ |
| 240 | + "%{!M:%{!MM:%{!E:gcc1 %{!pipe:%g.i} %1 \ |
| 241 | + %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a}\ |
| 242 | + %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi} \ |
| 243 | + %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\ |
| 244 | + %{aux-info*}\ |
| 245 | + %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ |
| 246 | + %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\ |
| 247 | + %{!S:as %{R} %{j} %{J} %{h} %{d2} %a %Y\ |
| 248 | + %{c:%W{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%u.o}\ |
| 249 | + %{!pipe:%g.s} %A\n }}}}"}, \ |
| 250 | + /***** End of ljo's Fortran rule *****/ |
| 251 | + |
| 252 | + /* This section stolen from i386/osfrose.h */ |
| 253 | + |
| 254 | + /* A C statement or compound statement to output to FILE some |
| 255 | + assembler code to initialize basic-block profiling for the current |
| 256 | + object module. This code should call the subroutine |
| 257 | + `__bb_init_func' once per object module, passing it as its sole |
| 258 | + argument the address of a block allocated in the object module. |
| 259 | + |
| 260 | + The name of the block is a local symbol made with this statement: |
| 261 | + |
| 262 | + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); |
| 263 | + |
| 264 | + Of course, since you are writing the definition of |
| 265 | + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you |
| 266 | + can take a short cut in the definition of this macro and use the |
| 267 | + name that you know will result. |
| 268 | + |
| 269 | + The first word of this block is a flag which will be nonzero if the |
| 270 | + object module has already been initialized. So test this word |
| 271 | + first, and do not call `__bb_init_func' if the flag is nonzero. */ |
| 272 | + |
| 273 | + #undef FUNCTION_BLOCK_PROFILER |
| 274 | + #define FUNCTION_BLOCK_PROFILER(STREAM, LABELNO) \ |
| 275 | + do \ |
| 276 | + { \ |
| 277 | + if (!flag_pic) \ |
| 278 | + { \ |
| 279 | + fprintf (STREAM, "\tcmpl $0,%sPBX0\n", LPREFIX); \ |
| 280 | + fprintf (STREAM, "\tjne 0f\n"); \ |
| 281 | + fprintf (STREAM, "\tpushl $%sPBX0\n", LPREFIX); \ |
| 282 | + fprintf (STREAM, "\tcall ___bb_init_func\n"); \ |
| 283 | + fprintf (STREAM, "0:\n"); \ |
| 284 | + } \ |
| 285 | + else \ |
| 286 | + { \ |
| 287 | + fprintf (STREAM, "\tpushl %eax\n"); \ |
| 288 | + fprintf (STREAM, "\tmovl %sPBX0@GOT(%ebx),%eax\n"); \ |
| 289 | + fprintf (STREAM, "\tcmpl $0,(%eax)\n"); \ |
| 290 | + fprintf (STREAM, "\tjne 0f\n"); \ |
| 291 | + fprintf (STREAM, "\tpushl %eax\n"); \ |
| 292 | + fprintf (STREAM, "\tcall ___bb_init_func@PLT\n"); \ |
| 293 | + fprintf (STREAM, "0:\n"); \ |
| 294 | + fprintf (STREAM, "\tpopl %eax\n"); \ |
| 295 | + } \ |
| 296 | + } \ |
| 297 | + while (0) |
| 298 | + |
| 299 | + /* A C statement or compound statement to increment the count |
| 300 | + associated with the basic block number BLOCKNO. Basic blocks are |
| 301 | + numbered separately from zero within each compilation. The count |
| 302 | + associated with block number BLOCKNO is at index BLOCKNO in a |
| 303 | + vector of words; the name of this array is a local symbol made |
| 304 | + with this statement: |
| 305 | + |
| 306 | + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); |
| 307 | + |
| 308 | + Of course, since you are writing the definition of |
| 309 | + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you |
| 310 | + can take a short cut in the definition of this macro and use the |
| 311 | + name that you know will result. */ |
| 312 | + |
| 313 | + #undef BLOCK_PROFILER |
| 314 | + #define BLOCK_PROFILER(STREAM, BLOCKNO) \ |
| 315 | + do \ |
| 316 | + { \ |
| 317 | + if (!flag_pic) \ |
| 318 | + fprintf (STREAM, "\tincl %sPBX2+%d\n", LPREFIX, (BLOCKNO)*4); \ |
| 319 | + else \ |
| 320 | + { \ |
| 321 | + fprintf (STREAM, "\tpushl %eax\n"); \ |
| 322 | + fprintf (STREAM, "\tmovl %sPBX2@GOT(%ebx),%eax\n", LPREFIX); \ |
| 323 | + fprintf (STREAM, "\tincl %d(%eax)\n", (BLOCKNO)*4); \ |
| 324 | + fprintf (STREAM, "\tpopl %eax\n"); \ |
| 325 | + } \ |
| 326 | + } \ |
| 327 | + while (0) |
| 328 | + |
| 329 | + /* This is defined when gcc is compiled in the BSD-directory-tree, and must |
| 330 | + * make up for the gap to all the stuff done in the GNU-makefiles. |
| 331 | + * XXX Do these right |
| 332 | + */ |
| 333 | + |
| 334 | + #ifdef FREEBSD_NATIVE |
| 335 | + |
| 336 | + #undef MD_EXEC_PREFIX |
| 337 | + #define MD_EXEC_PREFIX "/usr/libexec/" |
| 338 | + |
| 339 | + #undef STANDARD_STARTFILE_PREFIX |
| 340 | + #define STANDARD_STARTFILE_PREFIX "/usr/lib" |
| 341 | + |
| 342 | + #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0" |
| 343 | + #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" |
| 344 | + #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include" |
| 345 | + #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" |
| 346 | + |
| 347 | + #endif /* FREEBSD_NATIVE */ |
| 348 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/i386.h gcc-2.5.8/config/i386/i386.h |
| 349 | *** gcc-2.5.8.gnu/config/i386/i386.h Wed Oct 13 07:02:27 1993 |
| 350 | --- gcc-2.5.8/config/i386/i386.h Sun Feb 27 00:40:56 1994 |
| 351 | *************** |
| 352 | *** 90,95 **** |
| 353 | --- 90,99 ---- |
| 354 | the 387 to be used, which is compatible with most calling conventions. */ |
| 355 | #define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & 0200) |
| 356 | |
| 357 | + /* Disable generation of FP sin, cos and sqrt operations for 387. |
| 358 | + This is because FreeBSD lacks these in the math-emulator-code */ |
| 359 | + #define TARGET_NO_FANCY_MATH_387 (target_flags & 0400) |
| 360 | + |
| 361 | /* Macro to define tables used to set the flags. |
| 362 | This is a list in braces of pairs in braces, |
| 363 | each pair being { "NAME", VALUE } |
| 364 | *************** |
| 365 | *** 114,119 **** |
| 366 | --- 118,125 ---- |
| 367 | { "no-ieee-fp", -0100}, \ |
| 368 | { "fp-ret-in-387", 0200}, \ |
| 369 | { "no-fp-ret-in-387", -0200}, \ |
| 370 | + { "no-fancy-math-387", 0400}, \ |
| 371 | + { "fancy-math-387", -0400}, \ |
| 372 | SUBTARGET_SWITCHES \ |
| 373 | { "", TARGET_DEFAULT | TARGET_CPU_DEFAULT}} |
| 374 | |
| 375 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/i386.md gcc-2.5.8/config/i386/i386.md |
| 376 | *** gcc-2.5.8.gnu/config/i386/i386.md Tue Oct 5 06:43:30 1993 |
| 377 | --- gcc-2.5.8/config/i386/i386.md Sun Feb 27 00:40:59 1994 |
| 378 | *************** |
| 379 | *** 2935,3012 **** |
| 380 | (define_insn "sqrtsf2" |
| 381 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 382 | (sqrt:SF (match_operand:SF 1 "general_operand" "0")))] |
| 383 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 384 | "fsqrt") |
| 385 | |
| 386 | (define_insn "sqrtdf2" |
| 387 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 388 | (sqrt:DF (match_operand:DF 1 "general_operand" "0")))] |
| 389 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 390 | "fsqrt") |
| 391 | |
| 392 | (define_insn "" |
| 393 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 394 | (sqrt:DF (float_extend:DF |
| 395 | (match_operand:SF 1 "general_operand" "0"))))] |
| 396 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 397 | "fsqrt") |
| 398 | |
| 399 | (define_insn "sqrtxf2" |
| 400 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 401 | (sqrt:XF (match_operand:XF 1 "general_operand" "0")))] |
| 402 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 403 | "fsqrt") |
| 404 | |
| 405 | (define_insn "" |
| 406 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 407 | (sqrt:XF (float_extend:XF |
| 408 | (match_operand:DF 1 "general_operand" "0"))))] |
| 409 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 410 | "fsqrt") |
| 411 | |
| 412 | (define_insn "" |
| 413 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 414 | (sqrt:XF (float_extend:XF |
| 415 | (match_operand:SF 1 "general_operand" "0"))))] |
| 416 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 417 | "fsqrt") |
| 418 | |
| 419 | (define_insn "sindf2" |
| 420 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 421 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] |
| 422 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 423 | "fsin") |
| 424 | |
| 425 | (define_insn "sinsf2" |
| 426 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 427 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] |
| 428 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 429 | "fsin") |
| 430 | |
| 431 | (define_insn "" |
| 432 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 433 | (unspec:DF [(float_extend:DF |
| 434 | (match_operand:SF 1 "register_operand" "0"))] 1))] |
| 435 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 436 | "fsin") |
| 437 | |
| 438 | (define_insn "cosdf2" |
| 439 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 440 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] |
| 441 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 442 | "fcos") |
| 443 | |
| 444 | (define_insn "cossf2" |
| 445 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 446 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] |
| 447 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 448 | "fcos") |
| 449 | |
| 450 | (define_insn "" |
| 451 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 452 | (unspec:DF [(float_extend:DF |
| 453 | (match_operand:SF 1 "register_operand" "0"))] 2))] |
| 454 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" |
| 455 | "fcos") |
| 456 | \f |
| 457 | ;;- one complement instructions |
| 458 | --- 2935,3024 ---- |
| 459 | (define_insn "sqrtsf2" |
| 460 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 461 | (sqrt:SF (match_operand:SF 1 "general_operand" "0")))] |
| 462 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 463 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 464 | "fsqrt") |
| 465 | |
| 466 | (define_insn "sqrtdf2" |
| 467 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 468 | (sqrt:DF (match_operand:DF 1 "general_operand" "0")))] |
| 469 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 470 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 471 | "fsqrt") |
| 472 | |
| 473 | (define_insn "" |
| 474 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 475 | (sqrt:DF (float_extend:DF |
| 476 | (match_operand:SF 1 "general_operand" "0"))))] |
| 477 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 478 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 479 | "fsqrt") |
| 480 | |
| 481 | (define_insn "sqrtxf2" |
| 482 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 483 | (sqrt:XF (match_operand:XF 1 "general_operand" "0")))] |
| 484 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 485 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 486 | "fsqrt") |
| 487 | |
| 488 | (define_insn "" |
| 489 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 490 | (sqrt:XF (float_extend:XF |
| 491 | (match_operand:DF 1 "general_operand" "0"))))] |
| 492 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 493 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 494 | "fsqrt") |
| 495 | |
| 496 | (define_insn "" |
| 497 | [(set (match_operand:XF 0 "register_operand" "=f") |
| 498 | (sqrt:XF (float_extend:XF |
| 499 | (match_operand:SF 1 "general_operand" "0"))))] |
| 500 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 501 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 502 | "fsqrt") |
| 503 | |
| 504 | (define_insn "sindf2" |
| 505 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 506 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] |
| 507 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 508 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 509 | "fsin") |
| 510 | |
| 511 | (define_insn "sinsf2" |
| 512 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 513 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] |
| 514 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 515 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 516 | "fsin") |
| 517 | |
| 518 | (define_insn "" |
| 519 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 520 | (unspec:DF [(float_extend:DF |
| 521 | (match_operand:SF 1 "register_operand" "0"))] 1))] |
| 522 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 523 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 524 | "fsin") |
| 525 | |
| 526 | (define_insn "cosdf2" |
| 527 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 528 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] |
| 529 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 530 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 531 | "fcos") |
| 532 | |
| 533 | (define_insn "cossf2" |
| 534 | [(set (match_operand:SF 0 "register_operand" "=f") |
| 535 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] |
| 536 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 537 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 538 | "fcos") |
| 539 | |
| 540 | (define_insn "" |
| 541 | [(set (match_operand:DF 0 "register_operand" "=f") |
| 542 | (unspec:DF [(float_extend:DF |
| 543 | (match_operand:SF 1 "register_operand" "0"))] 2))] |
| 544 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && |
| 545 | ! (TARGET_IEEE_FP || flag_fast_math) " |
| 546 | "fcos") |
| 547 | \f |
| 548 | ;;- one complement instructions |
| 549 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config.guess gcc-2.5.8/config.guess |
| 550 | *** gcc-2.5.8.gnu/config.guess Sun Dec 12 12:50:10 1993 |
| 551 | --- gcc-2.5.8/config.guess Sun Feb 27 00:41:00 1994 |
| 552 | *************** |
| 553 | *** 171,176 **** |
| 554 | --- 171,179 ---- |
| 555 | hp3[0-9][05]:NetBSD:*:*) |
| 556 | echo m68k-hp-netbsd${UNAME_RELEASE} |
| 557 | exit 0 ;; |
| 558 | + i[34]86:FreeBSD:*:*) |
| 559 | + echo ${UNAME_MACHINE}-unknown-freebsd |
| 560 | + exit 0 ;; |
| 561 | i[34]86:NetBSD:*:*) |
| 562 | echo ${UNAME_MACHINE}-unknown-netbsd${UNAME_RELEASE} |
| 563 | exit 0 ;; |
| 564 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config.sub gcc-2.5.8/config.sub |
| 565 | *** gcc-2.5.8.gnu/config.sub Thu Jan 13 11:43:23 1994 |
| 566 | --- gcc-2.5.8/config.sub Sun Feb 27 00:41:00 1994 |
| 567 | *************** |
| 568 | *** 534,540 **** |
| 569 | | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ |
| 570 | | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ |
| 571 | | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ |
| 572 | ! | -hiux* | -386bsd* | -netbsd* | -riscix* | -lynxos*) |
| 573 | ;; |
| 574 | -sunos5*) |
| 575 | os=`echo $os | sed -e 's|sunos5|solaris2|'` |
| 576 | --- 534,540 ---- |
| 577 | | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ |
| 578 | | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ |
| 579 | | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ |
| 580 | ! | -hiux* | -386bsd* | -netbsd* | -riscix* | -lynxos* | -freebsd*) |
| 581 | ;; |
| 582 | -sunos5*) |
| 583 | os=`echo $os | sed -e 's|sunos5|solaris2|'` |
| 584 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/configure gcc-2.5.8/configure |
| 585 | *** gcc-2.5.8.gnu/configure Fri Nov 19 22:44:16 1993 |
| 586 | --- gcc-2.5.8/configure Sun Feb 27 00:41:03 1994 |
| 587 | *************** |
| 588 | *** 385,390 **** |
| 589 | --- 385,394 ---- |
| 590 | tmake_file=i386/t-next |
| 591 | xmake_file=i386/x-next |
| 592 | ;; |
| 593 | + i[34]86-*-freebsd*) |
| 594 | + cpu_type=i386 |
| 595 | + tm_file=i386/freebsd.h |
| 596 | + ;; |
| 597 | i[34]86-*-bsd*) |
| 598 | cpu_type=i386 |
| 599 | tm_file=i386/386bsd.h |
| 600 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/expmed.c gcc-2.5.8/expmed.c |
| 601 | *** gcc-2.5.8.gnu/expmed.c Sun Nov 14 04:50:40 1993 |
| 602 | --- gcc-2.5.8/expmed.c Sun Feb 27 22:17:01 1994 |
| 603 | *************** |
| 604 | *** 1,6 **** |
| 605 | /* Medium-level subroutines: convert bit-field store and extract |
| 606 | and shifts, multiplies and divides to rtl instructions. |
| 607 | ! Copyright (C) 1987, 1988, 1989, 1992, 1993 Free Software Foundation, Inc. |
| 608 | |
| 609 | This file is part of GNU CC. |
| 610 | |
| 611 | --- 1,6 ---- |
| 612 | /* Medium-level subroutines: convert bit-field store and extract |
| 613 | and shifts, multiplies and divides to rtl instructions. |
| 614 | ! Copyright (C) 1987, 88, 89, 92, 93, 1994 Free Software Foundation, Inc. |
| 615 | |
| 616 | This file is part of GNU CC. |
| 617 | |
| 618 | *************** |
| 619 | *** 421,427 **** |
| 620 | /* If xop0 is a register, we need it in MAXMODE |
| 621 | to make it acceptable to the format of insv. */ |
| 622 | if (GET_CODE (xop0) == SUBREG) |
| 623 | ! PUT_MODE (xop0, maxmode); |
| 624 | if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) |
| 625 | xop0 = gen_rtx (SUBREG, maxmode, xop0, 0); |
| 626 | |
| 627 | --- 421,429 ---- |
| 628 | /* If xop0 is a register, we need it in MAXMODE |
| 629 | to make it acceptable to the format of insv. */ |
| 630 | if (GET_CODE (xop0) == SUBREG) |
| 631 | ! /* We can't just change the mode, because this might clobber op0, |
| 632 | ! and we will need the original value of op0 if insv fails. */ |
| 633 | ! xop0 = gen_rtx (SUBREG, maxmode, SUBREG_REG (xop0), SUBREG_WORD (xop0)); |
| 634 | if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) |
| 635 | xop0 = gen_rtx (SUBREG, maxmode, xop0, 0); |
| 636 | |
| 637 | *************** |
| 638 | *** 556,561 **** |
| 639 | --- 558,573 ---- |
| 640 | |
| 641 | total_bits = GET_MODE_BITSIZE (mode); |
| 642 | |
| 643 | + /* Make sure bitpos is valid for the chosen mode. Adjust BITPOS to |
| 644 | + be be in the range 0 to total_bits-1, and put any excess bytes in |
| 645 | + OFFSET. */ |
| 646 | + if (bitpos >= total_bits) |
| 647 | + { |
| 648 | + offset += (bitpos / total_bits) * (total_bits / BITS_PER_UNIT); |
| 649 | + bitpos -= ((bitpos / total_bits) * (total_bits / BITS_PER_UNIT) |
| 650 | + * BITS_PER_UNIT); |
| 651 | + } |
| 652 | + |
| 653 | /* Get ref to an aligned byte, halfword, or word containing the field. |
| 654 | Adjust BITPOS to be position within a word, |
| 655 | and OFFSET to be the offset of that word. |
| 656 | *************** |
| 657 | *** 691,697 **** |
| 658 | { |
| 659 | rtx word = gen_lowpart_common (word_mode, value); |
| 660 | |
| 661 | ! if (word) |
| 662 | value = word; |
| 663 | else |
| 664 | value = gen_lowpart_common (word_mode, |
| 665 | --- 703,709 ---- |
| 666 | { |
| 667 | rtx word = gen_lowpart_common (word_mode, value); |
| 668 | |
| 669 | ! if (word && (value != word)) |
| 670 | value = word; |
| 671 | else |
| 672 | value = gen_lowpart_common (word_mode, |
| 673 | *************** |
| 674 | *** 721,731 **** |
| 675 | >> (bitsize - bitsdone - thissize)) |
| 676 | & (((HOST_WIDE_INT) 1 << thissize) - 1)); |
| 677 | else |
| 678 | ! /* The args are chosen so that the last part |
| 679 | ! includes the lsb. */ |
| 680 | ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, |
| 681 | ! BITS_PER_WORD - bitsize + bitsdone, |
| 682 | ! NULL_RTX, 1, align); |
| 683 | #else |
| 684 | /* Fetch successively more significant portions. */ |
| 685 | if (GET_CODE (value) == CONST_INT) |
| 686 | --- 733,751 ---- |
| 687 | >> (bitsize - bitsdone - thissize)) |
| 688 | & (((HOST_WIDE_INT) 1 << thissize) - 1)); |
| 689 | else |
| 690 | ! { |
| 691 | ! /* The args are chosen so that the last part |
| 692 | ! includes the lsb. */ |
| 693 | ! int bit_offset = 0; |
| 694 | ! /* If the value isn't in memory, then it must be right aligned |
| 695 | ! if a register, so skip past the padding on the left. If it |
| 696 | ! is in memory, then there is no padding on the left. */ |
| 697 | ! if (GET_CODE (value) != MEM) |
| 698 | ! bit_offset = BITS_PER_WORD - bitsize; |
| 699 | ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, |
| 700 | ! bit_offset + bitsdone, |
| 701 | ! NULL_RTX, 1, align); |
| 702 | ! } |
| 703 | #else |
| 704 | /* Fetch successively more significant portions. */ |
| 705 | if (GET_CODE (value) == CONST_INT) |
| 706 | *************** |
| 707 | *** 1592,1597 **** |
| 708 | --- 1612,1625 ---- |
| 709 | |
| 710 | op1 = expand_expr (amount, NULL_RTX, VOIDmode, 0); |
| 711 | |
| 712 | + #if SHIFT_COUNT_TRUNCATED |
| 713 | + if (SHIFT_COUNT_TRUNCATED |
| 714 | + && GET_CODE (op1) == CONST_INT |
| 715 | + && (unsigned HOST_WIDE_INT) INTVAL (op1) >= GET_MODE_BITSIZE (mode)) |
| 716 | + op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1) |
| 717 | + % GET_MODE_BITSIZE (mode)); |
| 718 | + #endif |
| 719 | + |
| 720 | if (op1 == const0_rtx) |
| 721 | return shifted; |
| 722 | |
| 723 | *************** |
| 724 | *** 1843,1852 **** |
| 725 | int cost_limit; |
| 726 | { |
| 727 | int m; |
| 728 | ! struct algorithm *best_alg |
| 729 | ! = (struct algorithm *)alloca (sizeof (struct algorithm)); |
| 730 | ! struct algorithm *alg_in |
| 731 | ! = (struct algorithm *)alloca (sizeof (struct algorithm)); |
| 732 | unsigned int cost; |
| 733 | unsigned HOST_WIDE_INT q; |
| 734 | |
| 735 | --- 1871,1877 ---- |
| 736 | int cost_limit; |
| 737 | { |
| 738 | int m; |
| 739 | ! struct algorithm *alg_in, *best_alg; |
| 740 | unsigned int cost; |
| 741 | unsigned HOST_WIDE_INT q; |
| 742 | |
| 743 | *************** |
| 744 | *** 1881,1886 **** |
| 745 | --- 1906,1916 ---- |
| 746 | } |
| 747 | } |
| 748 | |
| 749 | + /* We'll be needing a couple extra algorithm structures now. */ |
| 750 | + |
| 751 | + alg_in = (struct algorithm *)alloca (sizeof (struct algorithm)); |
| 752 | + best_alg = (struct algorithm *)alloca (sizeof (struct algorithm)); |
| 753 | + |
| 754 | /* If we have a group of zero bits at the low-order part of T, try |
| 755 | multiplying by the remaining bits and then doing a shift. */ |
| 756 | |
| 757 | *************** |
| 758 | *** 2043,2058 **** |
| 759 | } |
| 760 | } |
| 761 | |
| 762 | - /* If we are getting a too long sequence for `struct algorithm' |
| 763 | - to record, make this search fail. */ |
| 764 | - if (best_alg->ops == MAX_BITS_PER_WORD) |
| 765 | - return; |
| 766 | - |
| 767 | /* If cost_limit has not decreased since we stored it in alg_out->cost, |
| 768 | we have not found any algorithm. */ |
| 769 | if (cost_limit == alg_out->cost) |
| 770 | return; |
| 771 | |
| 772 | /* Copy the algorithm from temporary space to the space at alg_out. |
| 773 | We avoid using structure assignment because the majority of |
| 774 | best_alg is normally undefined, and this is a critical function. */ |
| 775 | --- 2073,2088 ---- |
| 776 | } |
| 777 | } |
| 778 | |
| 779 | /* If cost_limit has not decreased since we stored it in alg_out->cost, |
| 780 | we have not found any algorithm. */ |
| 781 | if (cost_limit == alg_out->cost) |
| 782 | return; |
| 783 | |
| 784 | + /* If we are getting a too long sequence for `struct algorithm' |
| 785 | + to record, make this search fail. */ |
| 786 | + if (best_alg->ops == MAX_BITS_PER_WORD) |
| 787 | + return; |
| 788 | + |
| 789 | /* Copy the algorithm from temporary space to the space at alg_out. |
| 790 | We avoid using structure assignment because the majority of |
| 791 | best_alg is normally undefined, and this is a critical function. */ |
| 792 | *************** |
| 793 | *** 2153,2161 **** |
| 794 | for (opno = 1; opno < alg.ops; opno++) |
| 795 | { |
| 796 | int log = alg.log[opno]; |
| 797 | ! rtx shift_subtarget = preserve_subexpressions_p () ? 0 : accum; |
| 798 | rtx add_target = opno == alg.ops - 1 && target != 0 ? target : 0; |
| 799 | ! |
| 800 | switch (alg.op[opno]) |
| 801 | { |
| 802 | case alg_shift: |
| 803 | --- 2183,2193 ---- |
| 804 | for (opno = 1; opno < alg.ops; opno++) |
| 805 | { |
| 806 | int log = alg.log[opno]; |
| 807 | ! int preserve = preserve_subexpressions_p (); |
| 808 | ! rtx shift_subtarget = preserve ? 0 : accum; |
| 809 | rtx add_target = opno == alg.ops - 1 && target != 0 ? target : 0; |
| 810 | ! rtx accum_target = preserve ? 0 : accum; |
| 811 | ! |
| 812 | switch (alg.op[opno]) |
| 813 | { |
| 814 | case alg_shift: |
| 815 | *************** |
| 816 | *** 2168,2174 **** |
| 817 | tem = expand_shift (LSHIFT_EXPR, mode, op0, |
| 818 | build_int_2 (log, 0), NULL_RTX, 0); |
| 819 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), |
| 820 | ! add_target ? add_target : accum); |
| 821 | val_so_far += (HOST_WIDE_INT) 1 << log; |
| 822 | break; |
| 823 | |
| 824 | --- 2200,2206 ---- |
| 825 | tem = expand_shift (LSHIFT_EXPR, mode, op0, |
| 826 | build_int_2 (log, 0), NULL_RTX, 0); |
| 827 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), |
| 828 | ! add_target ? add_target : accum_target); |
| 829 | val_so_far += (HOST_WIDE_INT) 1 << log; |
| 830 | break; |
| 831 | |
| 832 | *************** |
| 833 | *** 2176,2198 **** |
| 834 | tem = expand_shift (LSHIFT_EXPR, mode, op0, |
| 835 | build_int_2 (log, 0), NULL_RTX, 0); |
| 836 | accum = force_operand (gen_rtx (MINUS, mode, accum, tem), |
| 837 | ! add_target ? add_target : accum); |
| 838 | val_so_far -= (HOST_WIDE_INT) 1 << log; |
| 839 | break; |
| 840 | |
| 841 | case alg_add_t2_m: |
| 842 | accum = expand_shift (LSHIFT_EXPR, mode, accum, |
| 843 | ! build_int_2 (log, 0), accum, 0); |
| 844 | accum = force_operand (gen_rtx (PLUS, mode, accum, op0), |
| 845 | ! add_target ? add_target : accum); |
| 846 | val_so_far = (val_so_far << log) + 1; |
| 847 | break; |
| 848 | |
| 849 | case alg_sub_t2_m: |
| 850 | accum = expand_shift (LSHIFT_EXPR, mode, accum, |
| 851 | ! build_int_2 (log, 0), accum, 0); |
| 852 | accum = force_operand (gen_rtx (MINUS, mode, accum, op0), |
| 853 | ! add_target ? add_target : accum); |
| 854 | val_so_far = (val_so_far << log) - 1; |
| 855 | break; |
| 856 | |
| 857 | --- 2208,2232 ---- |
| 858 | tem = expand_shift (LSHIFT_EXPR, mode, op0, |
| 859 | build_int_2 (log, 0), NULL_RTX, 0); |
| 860 | accum = force_operand (gen_rtx (MINUS, mode, accum, tem), |
| 861 | ! add_target ? add_target : accum_target); |
| 862 | val_so_far -= (HOST_WIDE_INT) 1 << log; |
| 863 | break; |
| 864 | |
| 865 | case alg_add_t2_m: |
| 866 | accum = expand_shift (LSHIFT_EXPR, mode, accum, |
| 867 | ! build_int_2 (log, 0), shift_subtarget, |
| 868 | ! 0); |
| 869 | accum = force_operand (gen_rtx (PLUS, mode, accum, op0), |
| 870 | ! add_target ? add_target : accum_target); |
| 871 | val_so_far = (val_so_far << log) + 1; |
| 872 | break; |
| 873 | |
| 874 | case alg_sub_t2_m: |
| 875 | accum = expand_shift (LSHIFT_EXPR, mode, accum, |
| 876 | ! build_int_2 (log, 0), shift_subtarget, |
| 877 | ! 0); |
| 878 | accum = force_operand (gen_rtx (MINUS, mode, accum, op0), |
| 879 | ! add_target ? add_target : accum_target); |
| 880 | val_so_far = (val_so_far << log) - 1; |
| 881 | break; |
| 882 | |
| 883 | *************** |
| 884 | *** 2200,2206 **** |
| 885 | tem = expand_shift (LSHIFT_EXPR, mode, accum, |
| 886 | build_int_2 (log, 0), NULL_RTX, 0); |
| 887 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), |
| 888 | ! add_target ? add_target : accum); |
| 889 | val_so_far += val_so_far << log; |
| 890 | break; |
| 891 | |
| 892 | --- 2234,2240 ---- |
| 893 | tem = expand_shift (LSHIFT_EXPR, mode, accum, |
| 894 | build_int_2 (log, 0), NULL_RTX, 0); |
| 895 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), |
| 896 | ! add_target ? add_target : accum_target); |
| 897 | val_so_far += val_so_far << log; |
| 898 | break; |
| 899 | |
| 900 | *************** |
| 901 | *** 2208,2214 **** |
| 902 | tem = expand_shift (LSHIFT_EXPR, mode, accum, |
| 903 | build_int_2 (log, 0), NULL_RTX, 0); |
| 904 | accum = force_operand (gen_rtx (MINUS, mode, tem, accum), |
| 905 | ! add_target ? add_target : tem); |
| 906 | val_so_far = (val_so_far << log) - val_so_far; |
| 907 | break; |
| 908 | |
| 909 | --- 2242,2249 ---- |
| 910 | tem = expand_shift (LSHIFT_EXPR, mode, accum, |
| 911 | build_int_2 (log, 0), NULL_RTX, 0); |
| 912 | accum = force_operand (gen_rtx (MINUS, mode, tem, accum), |
| 913 | ! (add_target ? add_target |
| 914 | ! : preserve ? 0 : tem)); |
| 915 | val_so_far = (val_so_far << log) - val_so_far; |
| 916 | break; |
| 917 | |
| 918 | *************** |
| 919 | *** 3196,3198 **** |
| 920 | --- 3231,3234 ---- |
| 921 | |
| 922 | return tem; |
| 923 | } |
| 924 | + |
| 925 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gcc.c gcc-2.5.8/gcc.c |
| 926 | *** gcc-2.5.8.gnu/gcc.c Thu Dec 23 23:49:43 1993 |
| 927 | --- gcc-2.5.8/gcc.c Sun Feb 27 00:41:06 1994 |
| 928 | *************** |
| 929 | *** 586,591 **** |
| 930 | --- 586,594 ---- |
| 931 | "%{!S:%{!gnatc:%{!gnats:as %{R} %{j} %{J} %{h} %{d2} %a %Y\ |
| 932 | %{c:%W{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%u.o}\ |
| 933 | %{!pipe:%g.s} %A\n}}} "}, |
| 934 | + #ifdef CUSTOM_DEFAULT_COMPILERS |
| 935 | + CUSTOM_DEFAULT_COMPILERS |
| 936 | + #endif /* CUSTOM_DEFAULT_COMPILERS */ |
| 937 | /* Mark end of table */ |
| 938 | {0, 0} |
| 939 | }; |
| 940 | *************** |
| 941 | *** 608,614 **** |
| 942 | static char *link_command_spec = "\ |
| 943 | %{!fsyntax-only: \ |
| 944 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 945 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ |
| 946 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 947 | %{L*} %D %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; |
| 948 | #else |
| 949 | --- 611,617 ---- |
| 950 | static char *link_command_spec = "\ |
| 951 | %{!fsyntax-only: \ |
| 952 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 953 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ |
| 954 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 955 | %{L*} %D %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; |
| 956 | #else |
| 957 | *************** |
| 958 | *** 617,623 **** |
| 959 | static char *link_command_spec = "\ |
| 960 | %{!fsyntax-only: \ |
| 961 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 962 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ |
| 963 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 964 | %{L*} %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; |
| 965 | #else |
| 966 | --- 620,626 ---- |
| 967 | static char *link_command_spec = "\ |
| 968 | %{!fsyntax-only: \ |
| 969 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 970 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ |
| 971 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 972 | %{L*} %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; |
| 973 | #else |
| 974 | *************** |
| 975 | *** 625,631 **** |
| 976 | static char *link_command_spec = "\ |
| 977 | %{!fsyntax-only: \ |
| 978 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 979 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ |
| 980 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 981 | %{L*} %D %{T*} %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}}"; |
| 982 | #endif |
| 983 | --- 628,634 ---- |
| 984 | static char *link_command_spec = "\ |
| 985 | %{!fsyntax-only: \ |
| 986 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ |
| 987 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ |
| 988 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ |
| 989 | %{L*} %D %{T*} %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}}"; |
| 990 | #endif |
| 991 | *************** |
| 992 | *** 3202,3224 **** |
| 993 | { |
| 994 | if (! strncmp (y, "-D", 2)) |
| 995 | { |
| 996 | ! *x++ = *y++; |
| 997 | ! *x++ = *y++; |
| 998 | |
| 999 | if (strncmp (y, "__", 2)) |
| 1000 | { |
| 1001 | /* Stick __ at front of macro name. */ |
| 1002 | *x++ = '_'; |
| 1003 | *x++ = '_'; |
| 1004 | - } |
| 1005 | - |
| 1006 | - /* Copy the macro name. */ |
| 1007 | - while (*y && *y != '=' && *y != ' ' && *y != '\t') |
| 1008 | - *x++ = *y++; |
| 1009 | |
| 1010 | ! /* Copy the value given, if any. */ |
| 1011 | ! while (*y && *y != ' ' && *y != '\t') |
| 1012 | ! *x++ = *y++; |
| 1013 | } |
| 1014 | else if (*y == ' ' || *y == '\t') |
| 1015 | /* Copy whitespace to the result. */ |
| 1016 | --- 3205,3235 ---- |
| 1017 | { |
| 1018 | if (! strncmp (y, "-D", 2)) |
| 1019 | { |
| 1020 | ! y++; |
| 1021 | ! y++; |
| 1022 | |
| 1023 | if (strncmp (y, "__", 2)) |
| 1024 | { |
| 1025 | + *x++ = '-'; |
| 1026 | + *x++ = 'D'; |
| 1027 | /* Stick __ at front of macro name. */ |
| 1028 | *x++ = '_'; |
| 1029 | *x++ = '_'; |
| 1030 | |
| 1031 | ! /* Copy the macro name. */ |
| 1032 | ! while (*y && *y != '=' && *y != ' ' && *y != '\t') |
| 1033 | ! *x++ = *y++; |
| 1034 | ! |
| 1035 | ! /* Copy the value given, if any. */ |
| 1036 | ! while (*y && *y != ' ' && *y != '\t') |
| 1037 | ! *x++ = *y++; |
| 1038 | ! } |
| 1039 | ! else |
| 1040 | ! { |
| 1041 | ! /* Skip this one, we have done it once already */ |
| 1042 | ! while (*y && *y != ' ' && *y != '\t') |
| 1043 | ! y++; |
| 1044 | ! } |
| 1045 | } |
| 1046 | else if (*y == ' ' || *y == '\t') |
| 1047 | /* Copy whitespace to the result. */ |
| 1048 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gstdarg.h gcc-2.5.8/gstdarg.h |
| 1049 | *** gcc-2.5.8.gnu/gstdarg.h Sat Nov 13 02:53:58 1993 |
| 1050 | --- gcc-2.5.8/gstdarg.h Sun Feb 27 00:41:06 1994 |
| 1051 | *************** |
| 1052 | *** 136,148 **** |
| 1053 | But on BSD NET2 we must not test or define or undef it. |
| 1054 | (Note that the comments in NET 2's ansi.h |
| 1055 | are incorrect for _VA_LIST_--see stdio.h!) */ |
| 1056 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) |
| 1057 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ |
| 1058 | #ifndef _VA_LIST |
| 1059 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ |
| 1060 | #ifndef _VA_LIST_T_H |
| 1061 | #define _VA_LIST_T_H |
| 1062 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__)) |
| 1063 | #define _VA_LIST_ |
| 1064 | #endif |
| 1065 | #define _VA_LIST |
| 1066 | --- 136,148 ---- |
| 1067 | But on BSD NET2 we must not test or define or undef it. |
| 1068 | (Note that the comments in NET 2's ansi.h |
| 1069 | are incorrect for _VA_LIST_--see stdio.h!) */ |
| 1070 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__FreeBSD__) |
| 1071 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ |
| 1072 | #ifndef _VA_LIST |
| 1073 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ |
| 1074 | #ifndef _VA_LIST_T_H |
| 1075 | #define _VA_LIST_T_H |
| 1076 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__FreeBSD__)) |
| 1077 | #define _VA_LIST_ |
| 1078 | #endif |
| 1079 | #define _VA_LIST |
| 1080 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gstddef.h gcc-2.5.8/gstddef.h |
| 1081 | *** gcc-2.5.8.gnu/gstddef.h Fri Dec 3 12:46:59 1993 |
| 1082 | --- gcc-2.5.8/gstddef.h Sun Feb 27 00:41:07 1994 |
| 1083 | *************** |
| 1084 | *** 22,28 **** |
| 1085 | |
| 1086 | /* On 4.3bsd-net2, make sure ansi.h is included, so we have |
| 1087 | one less case to deal with in the following. */ |
| 1088 | ! #if defined (__BSD_NET2__) || defined (____386BSD____) |
| 1089 | #include <machine/ansi.h> |
| 1090 | #endif |
| 1091 | |
| 1092 | --- 22,28 ---- |
| 1093 | |
| 1094 | /* On 4.3bsd-net2, make sure ansi.h is included, so we have |
| 1095 | one less case to deal with in the following. */ |
| 1096 | ! #if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) |
| 1097 | #include <machine/ansi.h> |
| 1098 | #endif |
| 1099 | |
| 1100 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gvarargs.h gcc-2.5.8/gvarargs.h |
| 1101 | *** gcc-2.5.8.gnu/gvarargs.h Sat Nov 13 09:33:23 1993 |
| 1102 | --- gcc-2.5.8/gvarargs.h Sun Feb 27 00:41:07 1994 |
| 1103 | *************** |
| 1104 | *** 150,162 **** |
| 1105 | /* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993: |
| 1106 | Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to |
| 1107 | use for va_list (``typedef _VA_LIST_ va_list'') */ |
| 1108 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) |
| 1109 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ |
| 1110 | #ifndef _VA_LIST |
| 1111 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ |
| 1112 | #ifndef _VA_LIST_T_H |
| 1113 | #define _VA_LIST_T_H |
| 1114 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__)) |
| 1115 | #define _VA_LIST_ |
| 1116 | #endif |
| 1117 | #define _VA_LIST |
| 1118 | --- 150,162 ---- |
| 1119 | /* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993: |
| 1120 | Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to |
| 1121 | use for va_list (``typedef _VA_LIST_ va_list'') */ |
| 1122 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) |
| 1123 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ |
| 1124 | #ifndef _VA_LIST |
| 1125 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ |
| 1126 | #ifndef _VA_LIST_T_H |
| 1127 | #define _VA_LIST_T_H |
| 1128 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) |
| 1129 | #define _VA_LIST_ |
| 1130 | #endif |
| 1131 | #define _VA_LIST |
| 1132 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/invoke.texi gcc-2.5.8/invoke.texi |
| 1133 | *** gcc-2.5.8.gnu/invoke.texi Thu Nov 11 14:31:43 1993 |
| 1134 | --- gcc-2.5.8/invoke.texi Sun Feb 27 00:41:10 1994 |
| 1135 | *************** |
| 1136 | *** 252,258 **** |
| 1137 | |
| 1138 | @emph{i386 Options} |
| 1139 | -m486 -mno-486 -msoft-float -msvr3-shlib -mieee-fp |
| 1140 | ! -mno-fp-ret-in-387 |
| 1141 | |
| 1142 | @emph{HPPA Options} |
| 1143 | -mpa-risc-1-0 |
| 1144 | --- 252,258 ---- |
| 1145 | |
| 1146 | @emph{i386 Options} |
| 1147 | -m486 -mno-486 -msoft-float -msvr3-shlib -mieee-fp |
| 1148 | ! -mno-fp-ret-in-387 -mno-fancy-math-387 |
| 1149 | |
| 1150 | @emph{HPPA Options} |
| 1151 | -mpa-risc-1-0 |
| 1152 | *************** |
| 1153 | *** 3090,3095 **** |
| 1154 | --- 3090,3103 ---- |
| 1155 | |
| 1156 | The option @samp{-mno-fp-ret-in-387} causes such values to be returned |
| 1157 | in ordinary CPU registers instead. |
| 1158 | + |
| 1159 | + @item -mno-fancy-math-387 |
| 1160 | + Do not generate sin, cos and sqrt instructions to the 387. |
| 1161 | + |
| 1162 | + Some 387-emulators are less complete than one would expect, and usually |
| 1163 | + the hard parts are missing, this option fixes one such case for the |
| 1164 | + FreeBSD OS, where this option is set as default. |
| 1165 | + |
| 1166 | @c FIXME!! What about these options listed in @node Option Summary ?? |
| 1167 | @c -msvr3-shlib -mieee-fp |
| 1168 | @end table |
| 1169 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/objc/objects.c gcc-2.5.8/objc/objects.c |
| 1170 | *** gcc-2.5.8.gnu/objc/objects.c Thu Nov 18 09:07:33 1993 |
| 1171 | --- gcc-2.5.8/objc/objects.c Sun Feb 27 00:41:11 1994 |
| 1172 | *************** |
| 1173 | *** 24,30 **** |
| 1174 | however invalidate any other reasons why the executable file might be |
| 1175 | covered by the GNU General Public License. */ |
| 1176 | |
| 1177 | ! #include "../tconfig.h" /* include defs of bzero for target */ |
| 1178 | #include "runtime.h" /* the kitchen sink */ |
| 1179 | |
| 1180 | id __objc_object_alloc(Class*); |
| 1181 | --- 24,30 ---- |
| 1182 | however invalidate any other reasons why the executable file might be |
| 1183 | covered by the GNU General Public License. */ |
| 1184 | |
| 1185 | ! #include "tconfig.h" /* include defs of bzero for target */ |
| 1186 | #include "runtime.h" /* the kitchen sink */ |
| 1187 | |
| 1188 | id __objc_object_alloc(Class*); |