Thread View: gnu.utils.bug
1 messages
1 total messages
Started by Alexander Dupuy
Thu, 28 Sep 1989 00:00
GAS for Sun-2s
Author: Alexander Dupuy
Date: Thu, 28 Sep 1989 00:00
Date: Thu, 28 Sep 1989 00:00
225 lines
7272 bytes
7272 bytes
In order to use GAS properly on the Sun-2, it is necessary to make the default
ouput be for 68000, however, it should still be possible to generate 68020 code
if desired. Sun allows this via the -m68010 and -m68020 flags, which work on
both Sun-2 and Sun-3 assemblers, with the obvious default on each machine. It
seemed helpful in doing this to clearly separate whether or not a -m flag had
been given from the type of cpu for which code was being generated. This will
be useful if/when Motorola adds additional instructions/modes/... in the 68040.
In addition, it seems useful to support generating a.out files with the old
magic number OMAGIC rather than (1<<16)|OMAGIC, for Sun-2s running releases
prior to 3.0, or other 68000 boxes; this can be supported by a -m68000 flag.
Here are context diffs to m-sun3.h and m68k.c from the 1.34 (not I guess) GAS
which make those changes. They have been tested on a Sun-2 running 4.0.
*** /tmp/,RCSt1a20311 Wed Sep 27 19:55:29 1989
--- m-sun3.h Wed Sep 27 19:47:47 1989
***************
*** 1,4 ****
! /* m-sun3.h -- 68020 version of the assembler for the Sun-3
Copyright (C) 1987 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
--- 1,4 ----
! /* m-sun3.h -- 680[12]0 version of the assembler for the Sun-[23]
Copyright (C) 1987 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
***************
*** 19,31 ****
! /* This header file contains the #defines specific
! to SUN computer SUN 3 series computers. (The only kind
! we have around here, unfortunatly.)
!
! Rumor has it that this file will work on the Sun-2 if the assembler
! is called with -m68010 This is not tested. */
#define M_SUN 1
#define SUN_ASM_SYNTAX
--- 19,28 ----
! /* This header file contains the #defines specific to SUN computers running
! version 3.0 or later. */
+ /* #define CPU mc68000 /* for Sun-2, undefine this line */
#define M_SUN 1
#define SUN_ASM_SYNTAX
*** /tmp/,RCSt1a20311 Wed Sep 27 19:55:30 1989
--- m68k.c Wed Sep 27 19:48:19 1989
***************
*** 32,43 ****
#include "md.h"
#include "m68k.h"
#ifdef M_SUN
/* This variable contains the value to write out at the beginning of
! the a.out file. The 2<<16 means that this is a 68020 file instead
! of an old-style 68000 file */
! long omagic = 2<<16|OMAGIC; /* Magic byte for header file */
#else
long omagic = OMAGIC;
#endif
--- 32,51 ----
#include "md.h"
#include "m68k.h"
+ #ifndef CPU
+ #define CPU 2
+ #endif
+
+ #undef mc68000
+ #undef mc68020
+
+ static enum { mc68000=1, mc68020=2 } cputype = CPU;
+
#ifdef M_SUN
/* This variable contains the value to write out at the beginning of
! the a.out file. */
! long omagic = ((int)CPU)<<16|OMAGIC; /* Magic byte for header file */
#else
long omagic = OMAGIC;
#endif
***************
*** 1596,1602 ****
!subs(opP->con1) &&
seg(opP->con1)==SEG_TEXT &&
now_seg==SEG_TEXT &&
! flagseen['m']==0 &&
!index("~%&$?", s[0])) {
tmpreg=0x3A; /* 7.2 */
add_frag(adds(opP->con1),
--- 1604,1610 ----
!subs(opP->con1) &&
seg(opP->con1)==SEG_TEXT &&
now_seg==SEG_TEXT &&
! cputype!=mc68000 &&
!index("~%&$?", s[0])) {
tmpreg=0x3A; /* 7.2 */
add_frag(adds(opP->con1),
***************
*** 1718,1724 ****
addword(0);
addword(0);
} else if(adds(opP->con1)) {
! if (flagseen['m'] &&
(the_ins.opcode[0] >= 0x6200) &&
(the_ins.opcode[0] <= 0x6f00)) {
add_frag(adds(opP->con1),offs(opP->con1),TAB(BCC68000,SZ_UNDEF));
--- 1726,1732 ----
addword(0);
addword(0);
} else if(adds(opP->con1)) {
! if (cputype==mc68000 &&
(the_ins.opcode[0] >= 0x6200) &&
(the_ins.opcode[0] <= 0x6f00)) {
add_frag(adds(opP->con1),offs(opP->con1),TAB(BCC68000,SZ_UNDEF));
***************
*** 2683,2689 ****
ext=2;
break;
case TAB(BRANCH,LONG):
! if(flagseen['m']) {
if(fragP->fr_opcode[0]==0x61) {
fragP->fr_opcode[0]= 0x4E;
fragP->fr_opcode[1]= 0xB9; /* JBSR with ABSL LONG offset */
--- 2691,2697 ----
ext=2;
break;
case TAB(BRANCH,LONG):
! if(cputype==mc68000) {
if(fragP->fr_opcode[0]==0x61) {
fragP->fr_opcode[0]= 0x4E;
fragP->fr_opcode[1]= 0xB9; /* JBSR with ABSL LONG offset */
***************
*** 2834,2840 ****
if((fragP->fr_symbol->sy_type&N_TYPE)==segtype) {
fragP->fr_subtype=TAB(TABTYPE(fragP->fr_subtype),BYTE);
break;
! } else if(flagseen['m']) {
if(fragP->fr_opcode[0]==0x61) {
fragP->fr_opcode[0]= 0x4E;
fragP->fr_opcode[1]= 0xB9; /* JBSR with ABSL LONG offset */
--- 2842,2848 ----
if((fragP->fr_symbol->sy_type&N_TYPE)==segtype) {
fragP->fr_subtype=TAB(TABTYPE(fragP->fr_subtype),BYTE);
break;
! } else if(cputype==mc68000) {
if(fragP->fr_opcode[0]==0x61) {
fragP->fr_opcode[0]= 0x4E;
fragP->fr_opcode[1]= 0xB9; /* JBSR with ABSL LONG offset */
***************
*** 2958,2964 ****
{
long offset;
! if(flagseen['m']) {
offset=to_addr-to_symbol->sy_value;
md_number_to_chars(ptr ,(long)0x4EF9,2);
md_number_to_chars(ptr+2,(long)offset,4);
--- 2966,2972 ----
{
long offset;
! if(cputype==mc68000) {
offset=to_addr-to_symbol->sy_value;
md_number_to_chars(ptr ,(long)0x4EF9,2);
md_number_to_chars(ptr+2,(long)offset,4);
***************
*** 3194,3213 ****
break;
case 'm':
! /* Gas simply ignores this option! */
(*argP)++;
if(**argP=='c')
(*argP)++;
! if(!strcmp(*argP,"68000"))
! flagseen['m']=2;
! else if(!strcmp(*argP,"68010")) {
#ifdef M_SUN
omagic= 1<<16|OMAGIC;
#endif
flagseen['m']=1;
! } else if(!strcmp(*argP,"68020"))
! flagseen['m']=0;
! else
as_warn("Unknown -m option ignored");
while(**argP)
(*argP)++;
--- 3202,3227 ----
break;
case 'm':
! /* specify whether 68020 code can be generated */
(*argP)++;
if(**argP=='c')
(*argP)++;
! if(!strcmp(*argP,"68000")) {
! cputype = mc68000;
! flagseen['m']=1;
! } else if(!strcmp(*argP,"68010")) {
#ifdef M_SUN
omagic= 1<<16|OMAGIC;
#endif
+ cputype = mc68000;
flagseen['m']=1;
! } else if(!strcmp(*argP,"68020")) {
! #ifdef M_SUN
! omagic= 2<<16|OMAGIC;
! #endif
! cputype = mc68020;
! flagseen['m']=1;
! } else
as_warn("Unknown -m option ignored");
while(**argP)
(*argP)++;
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads