This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This patch replaces the integer output macros with target hooks. I've tried to be careful, and I've tried to test a wide range of targets, but I'm still uneasy that a patch this size will break something somewhere. I've gone with mode-based names for new hooks, such as TARGET_ASM_ALIGNED_HI_OP, since they are really dealing with fixed numbers of bytes rather than short or int types. Comments in several back-ends said it was confusing to have SHORT and INT in the names of the old macros, so I hope this is a step in the right direction. The old documentation said the UNALIGNED_*_ASM_OP macros were for 16-, 32- and 64-bit quantities, but they seem to be used for 2-, 4- and 8-byte quantities, regardless of byte size. The patch preserves that behaviour. The patch adds a string hook for bytes and separate aligned and unaligned hooks for HI-, SI-, DI- and TI-sized integers. These strings will be NULL for unsupported directives. The patch also adds a more general function for cases where the string hook is NULL. In order to get rid of references to the old macros, the patch makes much of dwarfout use the dwarf2 output functions. This move seemed make the output more readable in many cases. I tested by bootstrapping on i686-pc-linux-gnu and and running the test suite (using -gdwarf for C). I wrote some small test cases that seemed likely to use the affected parts of the compiler. I've attached them in a tar archive, but briefly: vars.c Initialised variables of various types. Should test all sizes of aligned op. fib.c A simple fibonacci function, plus a variable that points to it. Intended to test the debugging output without putting too much strain on bit-rotten ports. switch.c A dense switch statement. Included to test for changes to the jump table output. tramp.c Passes a pointer to a local function. Included because many trampoline templates used ASM_OUTPUT_*. eh.c Contains some exception handling-code. Included to test for changes in EH tables. I compiled cc1 and cc1plus for a range of targets (listed below), checking for warning regressions. I compared what the patched and unpatched compilers did with above test cases, compiling switch.c at -O2 and the rest without optimisation. I tried each test with the following additional options: {,-g,-gdwarf,-gdwarf-2}{,-dA}{,-fPIC} ignoring complaints about unsupported combinations. In many cases the output was identical. Sometimes there were formatting differences, mostly in the DWARF 1 output, which generally seems to have improved. Some of the older ports used to use ".byte" in tabular code instead of the native byte pseudo-op ("dc.b", or whatever). The patch seems to fix this problem, for what it's worth. I know of three cases where things genuinely changed: x86_64 I tried to fix the solaris problem by making all unaligned ops the same as the aligned ones. As a result, x86_64 now uses ".quad" instead of ".8byte" in tabular code. cris This target uses the same ops for unaligned and aligned data. It used to use ".quad" for unaligned data but not aligned data It will now use ".quad" for both. mmix Now uses ".byte" exclusively, instead of using "BYTE" for some things and ".byte" for others. I've mostly stuck with convention of using #undef/#define pairs for each change to the target structure. In some cases I had to resort to changing it in override_options instead, and I wonder whether it would better to do all this stuff there. There are several places where I've had to patch the float or string output macros. I hope to submit a patch to remove them once the 3.2 cycle gets underway. Sorry about the ChangeLog, don't know how to write it really. ;-) Some notes about individual ports: The simple cases... i860 pj romp All I needed to do here was remove the ASM_OUTPUT_* macros, the new defaults are fine. Shame these ports are so bit-rotten... a29k c4x clipper convex d30v dsp16xx fr30 h8300 i960 m32r m68hc11 m88k mcore mn10200 mn10300 sh v850 vax we32k xstormy16 These targets could make do with the string hooks. At least one of the default strings wasn't appropriate, or at least wasn't the same as the one in use before. The choice of pseudo-op is unconditional for each of these ports. alpha ns32k The string hooks were OK here too. The choice of pseudo-op does depend on the configuration, but the choice can be made at compile time. The awkward three... m68k What a nightmare! There seemed to be four dialects in use, although there were more than four definitions of various macros. I've introduced a new macro to decide which syntax should be used. rs6000 This port is the most difficult case in terms of what assemble_integer has to do. I introduced a new target macro, RELOCATABLE_NEEDS_FIXUP, to decide whether fixup entries should be written when TARGET_RELOCATABLE. The old code would only use DOUBLE_INT_ASM_OP for 64-bit targets. I've preserved that behaviour by changing the target structure in override_options. sparc Handles aligned DI-sized integers its own way. Unaligned DI ops are again selected in override_options for 64-bit targets. The rest... 1750a This port seems to do some kind of label tracking, so target-specific code is needed for all types. arm arc avr ia64 pa These targets use a special syntax for referencing certain kinds of label. Target-specific code handles aligned pointer-sized objects, the string hooks handle the rest. cris A simple case: default handling, unconditional choice of aligned ops, the unaligned ops are the same as the aligned ones. The port didn't define ASM_OUTPUT_DOUBLE_INT, so the patch has the side effect of using ".quad" for aligned as well as unaligned DIs. elxsi Uses a suffix to indicate the data size, so target-specific code is needed for everything. i370 TARGET_HLASM selects a rather strange syntax which has to be handled by target-specific code. String hooks are OK when !TARGET_HLASM. i386 Uses the default hook routine. Aligned ops are chosen using the existing header file machinery, which I haven't tried to clean up. The unaligned ops are the same as the aligned ones. I changed explicit uses of UNALIGNED_INT_ASM_OP to ASM_LONG x86_64 now uses ".quad" instead of ".8byte" for unaligned DIs. mips Target-specific code is needed for aligned dwords to get round a limitation of the Irix 6 assembler. If I'm reading the comment & code right, it can't handle 64-bit decimals. String hooks are OK for other sizes. Irix 5 needs different unaligned ops to the other configurations. mmix Previously used ".byte" in tabular code and "BYTE" in the ASM_OUTPUT_* macros. The patch makes it use ".byte" in all cases. The other macros used mmix_print_operand rather than output_addr_const to print the values of aligned objects. Doing so gave things like "WYDE #4" instead of "WYDE 4". I wasn't sure of the significance, so I've kept all the existing handling of multi-byte objects in a target-specific implementation. pdp11 Defines its own version of output_const_addr(), so everything has to be done in a target-specific handler. s390 Apparently an old version of GAS couldn't handle a 64-bit INT_MIN if printed in decimal. Target-specific code is needed to work around it. I tested against the following targets (picked from Kaveh's list): s390-unknown-linux-gnu gcc wouldn't compile fr30-unknown-elf i370-unknown-linux-gnu vax-unknown-elf Couldn't compile any of the test cases, before or after the patch. 1750a-unknown-elf a29k-unknown-elf alpha-dec-vms arm-semi-aof arm-unknown-coff avr-unknown-elf dsp16xx-unknown-elf i370-unknown-mvs m68k-hp-hpux m68k-ncr-sysv mn10200-unknown-elf powerpc-unknown-darwin romp-unknown-mach sparc64-wrs-vxworks Could compile some of the tests but not all of them. (Only one would compile for some, only one would fail for others. I can post the details if anyone wants to know.) pj-unknown-linux-gnu sparc-unknown-aout sparc64-unknown-aout The patch seemed to correct some ICEs here, but there are still many problems on the pj and sparc64 targets. alpha-unknown-linux-gnu arc-unknown-elf arm-unknown-elf c1-convex-elf c4x-unknown-elf clipper-intergraph-clix cris-unknown-elf d30v-unknown-elf elxsi-elxsi-elf h8300-unknown-elf hppa1.0-hp-hpux10 hppa1.1-hp-hpux10 hppa64-hp-hpux11 i386-unknown-aout i386-unknown-coff i386-unknown-cygwin i386-unknown-elf i386-unknown-sco3.2v5 i386-sun-sunos i860-unknown-bsd i960-unknown-elf ia64-unknown-elf m32r-unknown-elf m68hc11-unknown-elf m68k-atari-sysv4 m68k-apple-aux m68k-bull-sysv m68k-cbm-sysv4 m68k-motorola-sysv m88k-unknown-aout m68k-unknown-coff m68k-unknown-lynxos mcore-unknown-elf mips-sgi-irix5 mips-sgi-irix6.5 mips-unknown-elf mips64-unknown-elf mmix-knuth-mmixware mn10300-unknown-elf ns32k-unknown-netbsd pdp11-unknown-elf powerpc-unknown-linux-gnu powerpc-unknown-sysv powerpc64-unknown-linux-gnu rs6000-bull-bosx rs6000-ibm-aix sh-unknown-elf sparc-unknown-elf sparc64-unknown-elf sparc64-unknown-linux-gnu sparcv9-sun-solaris2.8 v850-unknown-elf we32k-att-sysv x86_64-unknown-linux-gnu xstormy16-unknown-elf These targets coped with all the tests. Richard * target.h (asm_out.byte_op, asm_out.aligned_op, asm_out.unaligned_op, asm_out.integer): New fields. * target-def.h (TARGET_ASM_BYTE_OP, TARGET_ASM_ALIGNED_[HSDT]I_OP, TARGET_ASM_UNALIGNED_[HSDT]I_OP): New initialisers. (TARGET_ASM_ALIGNED_INT_OP, TARGET_ASM_UNALIGNED_INT_OP): Collect the individual initialisers together. (TARGET_ASM_OUT): Add the new initialisers. * output.h (assemble_integer): Return bool. (integer_asm_op): Declare. (default_assemble_integer): Declare. (assemble_aligned_integer): New interface to assemble_integer. * varasm.c (integer_asm_op): New function to select pseudo-op. (default_assemble_integer): Default implementation of asm_out.integer. (assemble_integer): Use integer_asm_op and the new target hook. Return bool. * doc/tm.texi (ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE, ASM_OUTPUT_SHORT, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, ASM_OUTPUT_QUADRUPLE_INT, UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_INT_ASM_OP): Undocument. Document new target hooks. * defaults.h (ASM_OUTPUT_ADDR_VEC_ELT): Use integer_asm_op. * dwarf2asm.c (unaligned_integer_asm_op): Remove. (dw2_assemble_integer): New. (dw2_asm_output_data, dw2_asm_output_delta, dw2_asm_output_offset, dw2_asm_output_pcrel, dw2_asm_output_addr, dw2_asm_output_addr_rtx, dw2_asm_output_encoded_addr_rtx): Use it. (dw2_asm_output_nstring): Use assemble_integer for the null terminator. (dw2_asm_output_data_uleb128, dw2_asm_output_data_sleb128): Use integer_asm_op (1, TRUE) as the byte pseudo-op, if available, otherwise use assemble_integer to print one byte on each line. * dwarf2asm.h (dw2_assemble_integer): Declare. * dwarfout.c: Include dwarf2asm.h. Use dwarf2 functions for the default implementation of most macros. (output_unsigned_leb128): Use dw2_asm_output_data. (output_signed_leb128, dwarfout_source_line): Likewise. (output_reg_number): Use dw2_assemble_integer. (generate_macinfo_entry): Separate the type and offset arguments. Use assemble_integer to write the value. (dwarfout_start_source_file): Update generate_macinfo_entry usage. (dwarfout_end_source_file, dwarfout_define, dwarfout_undef): Likewise. * final.c (output_addr_const): Don't put brackets round a subtracted symbol value or ".". * halfpic.c (half_pic_finish): Use assemble_aligned_integer. * config/1750a/1750a.c (assemble_integer_1750a): New, * config/alpha/alpha.h (literal_section): Avoid ASM_OUTPUT_INT. * config/arc/arc.c (arc_assemble_integer): New. * config/arc/arc.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. * config/arm/arm.c (arm_poke_function_name): Likewise. (arm_assemble_integer): New, extracted from... * config/arm/arm.h (OUTPUT_INT_ADDR_CONST): ...here, now removed. (ARM_TRAMPOLINE_TEMPLATE, ARM_FUNCTION_PROFILER): Avoid ASM_OUPTUT_INT. (ARM_FUNCTION_PROFILER): Likewise. * config/avr/avr-protos.h (asm_output_byte): Remove. (asm_output_char, asm_output_short): Remove. * config/avr/avr.c (avr_assemble_integer): New. (asm_output_byte, asm_output_char, asm_output_short): Remove. * config/clipper/clipper.h (ASM_LONG): Remove. * config/dsp16xx/dsp16xx-protos.h (asm_output_long): Remove. * config/dsp16xx/dsp16xx.c (asm_output_long): Remove. * config/elxsi/elxsi.c (elxsi_assemble_integer): New. * config/i370/i370.c (i370_hlasm_assemble_integer): New. * config/i370/i370.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_SHORT. (ASM_BYTE, ASM_SHORT, ASM_LONG): Delete. * config/i386/att.h, (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/i386/linux.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Use ASM_LONG instead of UNALIGNED_INT_ASM_OP. * config/i386/sco5.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Likewise. (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/i386/sysv4.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Use ASM_LONG instead of UNALIGNED_INT_ASM_OP. * config/i860/fx2800.h (ASM_FILE_END): Avoid ASM_LONG. * config/i860/i860.c (i860_output_function_epilogue): Avoid ASM_LONG. * config/i860/i860.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. (ASM_SHORT, ASM_LONG): Undefine. * config/i860/paragon.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/i860/sysv3.h (ASM_OUTPUT_ASCII): Likewise. * config/i960/i960.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. * config/ia64/ia64.c (ia64_assemble_integer): New. * config/ia64/ia64.h (ASM_OUTPUT_DWARF_OFFSET): Use integer_asm_op. (ASM_OUTPUT_DWARF_PCREL): Likewise. * config/m68hc11/m68hc11.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_ADDR_DIFF_ELT, ASM_OUTPUT_ADDR_VEC_ELT): Avoid ASM_LONG. (ASM_SHORT, ASM_LONG): Remove. * config/m68k/m68k.h (INT_OP_GROUP): New macro. (INT_OP_STANDARD, INT_OP_DOT_WORD, INT_OP_NO_DOT, INT_OP_DC): New macros, the allowed values for INT_OP_GROUP. * config/m68k/amix.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP * config/m68k/atari.h (ASM_OUTPUT_ASCII): Likewise * config/m68k/m68kelf.h (ASM_OUTPUT_ASCII): Likewise * config/m68k/auxas.h (BYTE_ASM_OP, WORD_ASM_OP, LONG_ASM_OP): Remove. (INT_OP_GROUP): Define to INT_OP_NO_DOT. * config/m68k/dpx2.h (ASM_LONG): Undefine. (INT_OP_GROUP): Define to INT_OP_DC. * config/m68k/dpx2g.h (ASM_LONG): Undefine. * config/m68k/hp320.h (INT_OP_GROUP): Define to INT_OP_NO_DOT. * config/m68k/lynx.h (ASM_LONG): Undefine. * config/m68k/dpx2g.h (ASM_LONG): Undefine. * config/m68k/m68kelf.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/m68k/m68kv4.h (ASM_OUTPUT_ASCII): Likewise. (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_*. * config/m68k/mot3300.h (INT_OP_GROUP): Define to INT_OP_STANDARD for GAS and INT_OP_NO_DOT otherwise. (ASM_CHAR, ASM_BYTE, ASM_SHORT, ASM_LONG): Remove. (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Avoid ASM_LONG. (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/m68k/sgs.h (BYTE_ASM_OP, WORD_ASM_OP, LONG_ASM_OP): Remove. (INT_OP_GROUP): Define to INT_OP_STANDARD. (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Avoid LONG_ASM_OP. (ASM_OUTPUT_ASCII): Avoid BYTE_ASM_OP. * config/m68k/tower-as.h (ASM_LONG): Remove. (INT_OP_GROUP): Define to INT_OP_NO_DOT. * config/m88k/m88k.c (output_tdesc): Avoid ASM_LONG. * config/m88k/m88k.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Avoid ASM_LONG. * config/mips/iris5.h (TARGET_IRIX5): Define. * config/mips/mips.c (mips_assemble_integer): New. * config/mips/sni-svr4.h (ASM_LONG): Undefine. * config/mmix/mmix-protos.h (mmix_asm_output_double_int): Remove. * config/mmix/mmix.c (mmix_assemble_integer): New. (mmix_asm_output_double_int): Remove. (mmix_print_operand): Call mips_output_octa directly. * config/mmix/mmix.h (ASM_LONG): Remove. * config/ns32k/ns32k.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. * config/pa/pa.c (pa_assemble_integer): New. * config/pdp11/pdp11.c (pdp11_assemble_integer): New. * config/pdp11/pdp11.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_SHORT. * config/pj/pj.h (ASM_LONG): Undefine. * config/rs6000/linux64.h (RELOCATABLE_NEEDS_FIXUP): Undefine. * config/rs6000/rs6000.c (rs6000_assemble_integer): New, mostly extracted from ASM_OUTPUT_INT in sysv4.h. Use in_text_section() and in_toc_section() rather than the in_section variable. (rs6000_override_options): Provide DImode pseudo-ops on 64-bit targets. * config/rs6000/sysv4.h (TOC_SECTION_FUNCTION): Add in_toc_section(). (RELOCATABLE_NEEDS_FIXUP): Define. * config/rs6000/xcoff.h (DOUBLE_INT_ASM_OP): Change space to tab. * config/s390/linux.h (ASM_SHORT, ASM_LONG, ASM_QUAD): Remove. (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Use integer_asm_op to get the word directive. (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. * config/s390/s390.c (s390_assemble_integer): New. * config/s390/s390.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY): Use integer_asm_op to get the word directive. * config/sparc/sol2.h (ASM_SHORT, ASM_LONG): Remove. (SPARC_USE_UNALIGNED_OPS): Define. * config/sparc/sparc-protos.h (output_double_int): Remove. * config/sparc/sparc.c (output_double_int): Move to... (sparc_assemble_integer): ...this new function. (sparc_override_options): Only use unaligned DI ops on 64-bit targets. * config/sparc/sparc.h (ASM_SHORT, ASM_LONG, ASM_LONGLONG): Remove. * config/sparc/sysv4.h (ASM_LONG): Remove. (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Avoid ASM_LONG. * config/vax/vax.h (TRAMPOLINE_TEMPLATE): Use assemble_aligned_integer. * config/we32k/we32k.h (TRAMPOLINE_TEMPLATE): Likewise. * config/1750a/1750a.c, config/a29k/a29k.c, config/alpha/alpha.c, config/arc/arc.c, config/arm/arm.c, config/avr/avr.c, config/c4x/c4x.c, config/clipper/clipper.c, config/convex/convex.c, config/cris/cris.c, config/d30v/d30v.c, config/dsp16xx/dsp16xx.c, config/elxsi/elxsi.c, config/fr30/fr30.c, config/h8300/h8300.c, config/i370/i370.c, config/i386/i386.c, config/i860/i860.c, config/i960/i960.c, config/ia64/ia64.c, config/m32r/m32r.c, config/m68hc11/m68hc11.c, config/m68k/m68k.c, config/m88k/m88k.c, config/mips/mips.c, config/mmix/mmix.c, config/mn10200/mn10200.c, config/mn10300/mn10300.c, config/ns32k/ns32k.c, config/pa/pa.c, config/pdp11/pdp11.c, config/sh/sh.c, config/sparc/sparc.c, config/stormy16/stormy16.c, config/v850/v850.c, config/vax/vax.c, config/we32k/we32k.c (TARGET_ASM_BYTE_OP, TARGET_ASM_ALIGNED_HI_OP, TARGET_ASM_ALIGNED_SI_OP, TARGET_ASM_ALIGNED_DI_OP, TARGET_ASM_UNALIGNED_HI_OP, TARGET_ASM_UNALIGNED_SI_OP, TARGET_ASM_UNALIGNED_DI_OP, TARGET_ASM_INTEGER): Redefine as appropriate. * config/defaults.h, config/darwin.h, config/elfos.h, config/svr3.h, config/1750a/1750a.h, config/a29k/a29k.h, config/alpha/alpha.h, config/arc/arc.h, config/arm/arm.h, config/avr/avr.h, config/c4x/c4x.h, config/clipper/clipper.h, config/convex/convex.h, config/cris/cris.h, config/d30v/d30v.h, config/dsp16xx/dsp16xx.h, config/elxsi/elxsi.h, config/fr30/fr30.h, config/h8300/h8300.h, config/i370/i370.h, config/i386/bsd.h, config/i386/djgpp.h, config/i386/i386.h, config/i386/sco5.h, config/i386/sol2.h, config/i386/sun386.h, config/i860/i860.h, config/i960/i960.h, config/ia64/ia64.h, config/m32r/m32r.h, config/m68hc11/m68hc11.h, config/m68k/auxas.h, config/m68k/dpx2.h, config/m68k/hp320.h, config/m68k/m68k.h, config/m68k/mot3300.h, config/m68k/sgs.h, config/m68k/tower-as.h, config/m88k/m88k.h, config/mcore/mcore-elf.h, config/mcore/mcore.h, config/mips/iris5.h, config/mips/iris6.h, config/mips/mips.h, config/mmix/mmix.h, config/mn10200/mn10200.h, config/mn10300/mn10300.h config/ns32k/encore.h, config/ns32k/ns32k.h, config/pa/pa-64.h, config/pa/pa.h, config/pdp11/pdp11.h, config/pj/pj.h, config/romp/romp.h, config/rs6000/linux64.h, config/rs6000/rs6000.h, config/rs6000/sysv4.h, config/rs6000/xcoff.h, config/s390/linux.h, config/sh/sh.h, config/sparc/linux64.h, config/sparc/sol2.h, config/sparc/sp64-elf.h, config/sparc/sparc.h, config/sparc/sysv4.h, config/stormy16/stormy16.h, config/v850/v850.h, config/vax/vax.h, config/we32k/we32k.h (ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE, ASM_BYTE_OP, ASM_BYTE, ASM_OUTPUT_SHORT, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_INT_ASM_OP): Undefine, where defined.
Attachment:
int-op.patch.bz2
Description: The patch (compressed with bzip2)
Attachment:
int-op-test-cases.tar.bz2
Description: The test cases (a .tar.bz2 archive)
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |