* config/tc-i386.h (md_number_to_chars): New macro.
* config/tc-alpha.c (build_operate_n, build_mem): Moved earlier in the file.
(load_symbol_address, load_expression): Use build_mem.
(build_operate): New function.
(emit_addq_r): Use it.
Wed Mar 13 22:14:14 1996 Pat Rankin <rankin@eql.caltech.edu>
* symbols.c (colon): #if VMS, use S_SET_OTHER to store `const_flag'.
Tue Mar 5 14:31:45 1996 Pat Rankin <rankin@eql.caltech.edu>
* config/tc-vax.h (NOP_OPCODE): Define.
Sun Feb 4 21:01:03 1996 Pat Rankin <rankin@eql.caltech.edu>
* config/obj-vms.h (S_IS_COMMON): Define.
(S_IS_LOCAL): Check for \002 as well as \001.
(LONGWORD_ALIGNMENT): New macro.
(SUB_SEGMENT_ALIGN): Use it.
Fri Jan 26 17:44:09 1996 Pat Rankin <rankin@eql.caltech.edu>
* config/vms-conf.h: Reconcile with conf.in.
+Thu Jun 20 15:57:41 1996 Ken Raeburn <raeburn@cygnus.com>
+
+ * config/tc-i386.c (md_number_to_chars): Deleted.
+ * config/tc-i386.h (md_number_to_chars): New macro.
+
+ * config/tc-alpha.c (build_operate_n, build_mem): Moved earlier in
+ the file.
+ (load_symbol_address, load_expression): Use build_mem.
+ (build_operate): New function.
+ (emit_addq_r): Use it.
+
+ Wed Mar 13 22:14:14 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * symbols.c (colon): #if VMS, use S_SET_OTHER to store `const_flag'.
+
+ Tue Mar 5 14:31:45 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * config/tc-vax.h (NOP_OPCODE): Define.
+
+ Sun Feb 4 21:01:03 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * config/obj-vms.h (S_IS_COMMON): Define.
+ (S_IS_LOCAL): Check for \002 as well as \001.
+ (LONGWORD_ALIGNMENT): New macro.
+ (SUB_SEGMENT_ALIGN): Use it.
+
+ Fri Jan 26 17:44:09 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * config/vms-conf.h: Reconcile with conf.in.
+
Wed Jun 19 11:31:50 1996 Ian Lance Taylor <ian@cygnus.com>
* write.c (is_dnrange): Only define if TC_GENERIC_RELAX_TABLE is
/* VMS object file format
- Copyright (C) 1989, 1990, 1991, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1989,90,91,94,95,1996 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
#include "targ-cpu.h"
+#define LONGWORD_ALIGNMENT 2
+
/* This macro controls subsection alignment within a section.
*
* Under VAX/VMS, the linker (and PSECT specifications)
* Doing the alignment here (on initialized data) can
* mess up the calculation of global data PSECT sizes.
*/
-#define SUB_SEGMENT_ALIGN(SEG) (((SEG) == data_section) ? 0 : 2)
+#define SUB_SEGMENT_ALIGN(SEG) \
+ (((SEG) == data_section) ? 0 : LONGWORD_ALIGNMENT)
/* This flag is used to remember whether we are in the const or the
data section. By and large they are identical, but we set a no-write
/* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
#define S_IS_DEFINED(s) (S_GET_TYPE(s) != N_UNDF)
+#define S_IS_COMMON(s) (S_GET_TYPE(s) == N_UNDF && S_GET_VALUE(s) != 0)
+
#define S_IS_REGISTER(s) ((s)->sy_symbol.n_type == N_REGISTER)
/* True if a debug special symbol entry */
nameless symbols come from .stab directives. */
#define S_IS_LOCAL(s) (S_GET_NAME(s) && \
!S_IS_DEBUG(s) && \
- (S_GET_NAME(s)[0] == '\001' || \
+ (strchr(S_GET_NAME(s), '\001') != 0 || \
+ strchr(S_GET_NAME(s), '\002') != 0 || \
(S_LOCAL_NAME(s) && !flag_keep_locals)))
/* True if a symbol is not defined in this file */
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
return size;
}
+static int
+build_mem (opc, ra, rb, disp)
+ int opc, ra, rb;
+ bfd_signed_vma disp;
+{
+ if ((disp >> 15) != 0
+ && (disp >> 15) + 1 != 0)
+ abort ();
+ return ((opc << 26) | (ra << SA) | (rb << SB) | (disp & 0xffff));
+}
+
+static int
+build_operate_n (opc, fn, ra, lit, rc)
+ int opc, fn, ra, rc;
+ int lit;
+{
+ if (lit & ~0xff)
+ abort ();
+ return ((opc << 26) | (fn << 5) | (ra << SA) | (lit << SN) | (1 << 12) | (rc << SC));
+}
+
+static int
+build_operate (opc, fn, ra, rb, rc)
+ int opc, fn, ra, rb, rc;
+{
+ return ((opc << 26) | (fn << 5) | (ra << SA) | (rb << SB) | (rc << SC));
+}
+
/* Add this thing to the .lita section and produce a LITERAL reloc referring
to it. */
/* Overflow? */
as_fatal ("overflow in literal (.lita) table");
x = retval;
- if (addr32)
- insn->opcode = (0xa0000000 /* ldl */
- | (reg << SA)
- | (base_register << SB)
- | (x & 0xffff));
- else
- insn->opcode = (0xa4000000 /* ldq */
- | (reg << SA)
- | (base_register << SB)
- | (x & 0xffff));
+ insn->opcode = build_mem (addr32 ? 0x28 : 0x29, /* ldl or ldq */
+ reg, base_register, x & 0xffff);
note_gpreg (base_register);
}
an LDAH instruction. */
if (addendlo)
{
- insn[1].opcode = (0x20000000 /* lda */
- | (reg << SA)
- | (reg << SB)
- | (addendlo & 0xffff));
+ insn[1].opcode = build_mem (0x08, reg, reg, addendlo & 0xffff);
insn[1].reloc[0].code = BFD_RELOC_ALPHA_LITUSE;
insn[1].reloc[0].exp = lituse_basereg;
num_insns++;
}
if (addendhi)
{
- insn[num_insns].opcode = (0x24000000
- | (reg << SA)
- | (reg << SB)
- | (addendhi & 0xffff));
+ insn[num_insns].opcode = build_mem (0x09, reg, reg,
+ addendhi & 0xffff);
num_insns++;
}
if (num_insns == 1)
md_assemble (buf);
}
-static int
-build_mem (opc, ra, rb, disp)
- int opc, ra, rb;
- bfd_signed_vma disp;
-{
- if ((disp >> 15) != 0
- && (disp >> 15) + 1 != 0)
- abort ();
- return ((opc << 26) | (ra << SA) | (rb << SB) | (disp & 0xffff));
-}
-
-static int
-build_operate_n (opc, fn, ra, lit, rc)
- int opc, fn, ra, rc;
- int lit;
-{
- if (lit & ~0xff)
- abort ();
- return ((opc << 26) | (fn << 5) | (ra << SA) | (lit << SN) | (1 << 12) | (rc << SC));
-}
-
static void
emit_sll_n (dest, disp, src)
int dest, disp, src;
int in1, in2, out;
{
struct alpha_it insn = clear_insn;
- insn.opcode = 0x40000400 | (in1 << SA) | (in2 << SB) | (out << SC);
+ insn.opcode = build_operate (0x10, 0x20, in1, in2, out);
emit_insn (&insn);
}
This function is required for alloca.c support on those systems. */
#undef CRAY_STACKSEG_END
+/* Define if you have alloca, as a function or macro. */
+#undef HAVE_ALLOCA
+
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
#undef HAVE_ALLOCA_H
#undef MANY_SEGMENTS
-/* Needed only for sparc configuration */
+/* Needed only for sparc configuration. */
#undef SPARC_V9
#undef SPARC_ARCH64
+/* Needed only for some configurations that can produce multiple output
+ formats. */
+#undef DEFAULT_EMULATION
+#undef EMULATIONS
+#undef USE_EMULATIONS
+#undef OBJ_MAYBE_AOUT
+#undef OBJ_MAYBE_BOUT
+#undef OBJ_MAYBE_COFF
+#undef OBJ_MAYBE_ECOFF
+#undef OBJ_MAYBE_ELF
+#undef OBJ_MAYBE_GENERIC
+#undef OBJ_MAYBE_HP300
+#undef OBJ_MAYBE_IEEE
+#undef OBJ_MAYBE_SOM
+#undef OBJ_MAYBE_VMS
+
+/* Used for some of the COFF configurations, when the COFF code needs
+ to select something based on the CPU type before it knows it... */
+#undef I386COFF
+#undef M68KCOFF
+#undef M88KCOFF
+
/* Define if you have the remove function. */
#define HAVE_REMOVE
+/* sbrk() is available, but we don't want gas to use it. */
+#undef HAVE_SBRK
+
/* Define if you have the unlink function. */
#undef HAVE_UNLINK
{
symbolP->sy_frag = frag_now;
#ifdef OBJ_VMS
- S_GET_OTHER(symbolP) = const_flag;
+ S_SET_OTHER(symbolP, const_flag);
#endif
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
S_SET_SEGMENT (symbolP, now_seg);
data. */
symbolP->sy_frag = frag_now;
#ifdef OBJ_VMS
- S_GET_OTHER(symbolP) = const_flag;
-#endif /* OBJ_VMS */
+ S_SET_OTHER(symbolP, const_flag);
+#endif
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
S_SET_SEGMENT (symbolP, now_seg); /* keep N_EXT bit */
}