Subversion Repositories tendra.SVN

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 7
Line -... Line 1...
-
 
1
/*
-
 
2
 * Copyright (c) 2002-2006 The TenDRA Project <http://www.tendra.org/>.
-
 
3
 * All rights reserved.
-
 
4
 *
-
 
5
 * Redistribution and use in source and binary forms, with or without
-
 
6
 * modification, are permitted provided that the following conditions are met:
-
 
7
 *
-
 
8
 * 1. Redistributions of source code must retain the above copyright notice,
-
 
9
 *    this list of conditions and the following disclaimer.
-
 
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
-
 
11
 *    this list of conditions and the following disclaimer in the documentation
-
 
12
 *    and/or other materials provided with the distribution.
-
 
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
-
 
14
 *    may be used to endorse or promote products derived from this software
-
 
15
 *    without specific, prior written permission.
-
 
16
 *
-
 
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-
 
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-
 
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-
 
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-
 
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-
 
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-
 
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-
 
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-
 
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-
 
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-
 
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
28
 *
-
 
29
 * $Id$
-
 
30
 */
1
/*
31
/*
2
    		 Crown Copyright (c) 1996
32
    		 Crown Copyright (c) 1996
3
 
33
 
4
    This TenDRA(r) Computer Program is subject to Copyright
34
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
35
    owned by the United Kingdom Secretary of State for Defence
Line 7... Line 37...
7
    (DERA).  It is made available to Recipients with a
37
    (DERA).  It is made available to Recipients with a
8
    royalty-free licence for its use, reproduction, transfer
38
    royalty-free licence for its use, reproduction, transfer
9
    to other parties and amendment for any purpose not excluding
39
    to other parties and amendment for any purpose not excluding
10
    product development provided that any such use et cetera
40
    product development provided that any such use et cetera
11
    shall be deemed to be acceptance of the following conditions:-
41
    shall be deemed to be acceptance of the following conditions:-
12
 
42
 
13
        (1) Its Recipients shall ensure that this Notice is
43
        (1) Its Recipients shall ensure that this Notice is
14
        reproduced upon any copies or amended versions of it;
44
        reproduced upon any copies or amended versions of it;
15
 
45
 
16
        (2) Any amended version of it shall be clearly marked to
46
        (2) Any amended version of it shall be clearly marked to
17
        show both the nature of and the organisation responsible
47
        show both the nature of and the organisation responsible
18
        for the relevant amendment or amendments;
48
        for the relevant amendment or amendments;
19
 
49
 
20
        (3) Its onward transfer from a recipient to another
50
        (3) Its onward transfer from a recipient to another
21
        party shall be deemed to be that party's acceptance of
51
        party shall be deemed to be that party's acceptance of
22
        these conditions;
52
        these conditions;
23
 
53
 
24
        (4) DERA gives no warranty or assurance as to its
54
        (4) DERA gives no warranty or assurance as to its
25
        quality or suitability for any purpose and DERA accepts
55
        quality or suitability for any purpose and DERA accepts
26
        no liability whatsoever in relation to any use to which
56
        no liability whatsoever in relation to any use to which
27
        it may be put.
57
        it may be put.
28
*/
58
*/
29
/*
59
/*
30
			    VERSION INFORMATION
60
			    VERSION INFORMATION
31
			    ===================
61
			    ===================
32
 
62
 
33
--------------------------------------------------------------------------
63
--------------------------------------------------------------------------
34
$Header: /u/g/release/CVSROOT/Source/src/installers/680x0/common/mach_ins.c,v 1.1.1.1 1998/01/17 15:55:49 release Exp $
64
$Header: /u/g/release/CVSROOT/Source/src/installers/680x0/common/mach_ins.c,v 1.1.1.1 1998/01/17 15:55:49 release Exp $
35
--------------------------------------------------------------------------
65
--------------------------------------------------------------------------
36
$Log: mach_ins.c,v $
66
$Log: mach_ins.c,v $
37
 * Revision 1.1.1.1  1998/01/17  15:55:49  release
67
 * Revision 1.1.1.1  1998/01/17  15:55:49  release
38
 * First version to be checked into rolling release.
68
 * First version to be checked into rolling release.
Line 52... Line 82...
52
Revision 1.5  1997/10/13 08:49:35  ma
82
Revision 1.5  1997/10/13 08:49:35  ma
53
Made all pl_tests for general proc & exception handling pass.
83
Made all pl_tests for general proc & exception handling pass.
54
 
84
 
55
Revision 1.4  1997/06/18 10:09:36  ma
85
Revision 1.4  1997/06/18 10:09:36  ma
56
Checking in before merging with Input Baseline changes.
86
Checking in before merging with Input Baseline changes.
57
 
87
 
58
Revision 1.3  1997/05/13 11:30:34  ma
88
Revision 1.3  1997/05/13 11:30:34  ma
59
Introduced make_comment for debug.
89
Introduced make_comment for debug.
60
 
90
 
61
Revision 1.2  1997/04/20 11:30:31  ma
91
Revision 1.2  1997/04/20 11:30:31  ma
62
Introduced gcproc.c & general_proc.[ch].
92
Introduced gcproc.c & general_proc.[ch].
63
Added cases for apply_general_proc next to apply_proc in all files.
93
Added cases for apply_general_proc next to apply_proc in all files.
64
 
94
 
65
Revision 1.1.1.1  1997/03/14 07:50:14  ma
95
Revision 1.1.1.1  1997/03/14 07:50:14  ma
66
Imported from DRA
96
Imported from DRA
67
 
97
 
68
 * Revision 1.1.1.1  1996/09/20  10:56:55  john
98
 * Revision 1.1.1.1  1996/09/20  10:56:55  john
69
 *
99
 *
70
 * Revision 1.2  1996/07/05  14:22:21  john
100
 * Revision 1.2  1996/07/05  14:22:21  john
71
 * Changes for spec 3.1
101
 * Changes for spec 3.1
72
 *
102
 *
73
 * Revision 1.1.1.1  1996/03/26  15:45:14  john
103
 * Revision 1.1.1.1  1996/03/26  15:45:14  john
74
 *
104
 *
Line 78... Line 108...
78
 *
108
 *
79
 * Revision 1.1  93/02/22  17:16:02  17:16:02  ra (Robert Andrews)
109
 * Revision 1.1  93/02/22  17:16:02  17:16:02  ra (Robert Andrews)
80
 * Initial revision
110
 * Initial revision
81
 *
111
 *
82
--------------------------------------------------------------------------
112
--------------------------------------------------------------------------
83
*/
113
*/
84
 
114
 
85
 
115
 
86
#include "config.h"
116
#include "config.h"
87
#include "common_types.h"
117
#include "common_types.h"
88
#include "instrs.h"
118
#include "instrs.h"
89
#include "mach.h"
119
#include "mach.h"
90
#include "mach_ins.h"
120
#include "mach_ins.h"
91
#include "mach_op.h"
121
#include "mach_op.h"
92
#include "codex.h"
122
#include "codex.h"
93
#include "output.h"
123
#include "output.h"
94
#include "utility.h"
124
#include "utility.h"
95
extern bool have_cond ;
125
extern bool have_cond;
96
 
126
 
97
#ifdef EBUG
127
#ifdef EBUG
98
extern bool seek_label ;
128
extern bool seek_label;
99
extern bool seek_extern ;
129
extern bool seek_extern;
100
extern int seek_label_no ;
130
extern int seek_label_no;
101
extern char *seek_extern_id ;
131
extern char *seek_extern_id;
102
#endif
132
#endif
103
 
133
 
104
 
134
 
105
/*
135
/*
106
    OUTPUT FLAG
136
    OUTPUT FLAG
107
 
137
 
108
    If this is true, all instructions are output immediately.  This
138
    If this is true, all instructions are output immediately.  This
109
    effectively switches off all peephole optimizations.
139
    effectively switches off all peephole optimizations.
110
*/
140
*/
111
 
141
 
112
int output_immediately = 0 ;
142
int output_immediately = 0;
113
 
143
 
114
/*
144
/*
115
    LIST OF ALL INSTRUCTIONS
145
    LIST OF ALL INSTRUCTIONS
116
 
146
 
117
    A list of all instructions in maintained.  The current instruction is
147
    A list of all instructions in maintained.  The current instruction is
118
    given by current_ins.
148
    given by current_ins.
119
*/
149
*/
120
 
150
 
121
mach_ins *all_mach_ins = null ;
151
mach_ins *all_mach_ins = null;
122
mach_ins *current_ins = null ;
152
mach_ins *current_ins = null;
123
 
153
 
124
 
154
 
125
/*
155
/*
126
    RECORD OF LAST JUMP AND REGISTERS CHANGED SINCE
156
    RECORD OF LAST JUMP AND REGISTERS CHANGED SINCE
127
 
157
 
128
    This is used to help get a more accurate idea of which registers
158
    This is used to help get a more accurate idea of which registers
129
    are known during the peephole optimizations.
159
    are known during the peephole optimizations.
130
*/
160
*/
131
 
161
 
132
long last_jump = -1 ;
162
long last_jump = -1;
133
bitpattern last_jump_regs = 0 ;
163
bitpattern last_jump_regs = 0;
134
 
164
 
135
 
165
 
136
/*
166
/*
137
    LIST OF FREE INSTRUCTIONS
167
    LIST OF FREE INSTRUCTIONS
138
 
168
 
139
    A list of free mach_ins's, linked by their next field, is maintained.
169
    A list of free mach_ins's, linked by their next field, is maintained.
140
*/
170
*/
141
 
171
 
142
static mach_ins *mach_ins_list = null ;
172
static mach_ins *mach_ins_list = null;
143
 
173
 
144
 
174
 
145
/*
175
/*
146
    FREE A SINGLE INSTRUCTION AND ITS OPERANDS
176
    FREE A SINGLE INSTRUCTION AND ITS OPERANDS
147
 
177
 
148
    The operands of the instruction are freed and the instruction
178
    The operands of the instruction are freed and the instruction
149
    itself is added to the list of all free instructions.
179
    itself is added to the list of all free instructions.
150
*/
180
*/
151
 
181
 
152
void reclaim_ins
182
void
153
    PROTO_N ( ( p ) )
-
 
154
    PROTO_T ( mach_ins *p )
183
reclaim_ins(mach_ins *p)
155
{
184
{
-
 
185
	if (p->op1) {
156
    if ( p->op1 ) free_mach_op ( p->op1 ) ;
186
		free_mach_op(p->op1);
-
 
187
	}
-
 
188
	if (p->op2) {
157
    if ( p->op2 ) free_mach_op ( p->op2 ) ;
189
		free_mach_op(p->op2);
-
 
190
	}
158
    p->next = mach_ins_list ;
191
	p->next = mach_ins_list;
159
    mach_ins_list = p ;
192
	mach_ins_list = p;
160
    return ;
193
	return;
161
}
194
}
162
 
195
 
163
 
196
 
164
/*
197
/*
165
    FREE ALL INSTRUCTIONS AND THEIR OPERANDS
198
    FREE ALL INSTRUCTIONS AND THEIR OPERANDS
166
 
199
 
167
    All the instructions in the list of all instructions are freed and
200
    All the instructions in the list of all instructions are freed and
168
    the list is reset to zero length.
201
    the list is reset to zero length.
169
*/
202
*/
170
 
203
 
171
void free_all_ins
204
void
172
    PROTO_Z ()
205
free_all_ins(void)
173
{
206
{
174
    mach_ins *p = all_mach_ins, *q = null ;
207
	mach_ins *p = all_mach_ins, *q = null;
175
    if ( p == null ) return ;
208
	if (p == null) {
-
 
209
		return;
-
 
210
	}
176
    while ( p != null ) {
211
	while (p != null) {
-
 
212
		if (p->op1) {
177
	if ( p->op1 ) free_mach_op ( p->op1 ) ;
213
			free_mach_op(p->op1);
-
 
214
		}
-
 
215
		if (p->op2) {
178
	if ( p->op2 ) free_mach_op ( p->op2 ) ;
216
			free_mach_op(p->op2);
-
 
217
		}
179
	q = p ;
218
		q = p;
180
	p = p->next ;
219
		p = p->next;
181
    }
220
	}
182
    q->next = mach_ins_list ;
221
	q->next = mach_ins_list;
183
    mach_ins_list = all_mach_ins ;
222
	mach_ins_list = all_mach_ins;
184
    all_mach_ins = null ;
223
	all_mach_ins = null;
185
    current_ins = null ;
224
	current_ins = null;
186
    last_jump = -1 ;
225
	last_jump = -1;
187
    last_jump_regs = 0 ;
226
	last_jump_regs = 0;
188
    return ;
227
	return;
189
}
228
}
190
 
229
 
191
 
230
 
192
/*
231
/*
193
    CREATE A NEW INSTRUCTION
232
    CREATE A NEW INSTRUCTION
194
 
233
 
195
    A new instruction, with instruction number insno and operands op1 and
234
    A new instruction, with instruction number insno and operands op1 and
196
    op2 is added to the list of all instructions.  ch gives the mask of
235
    op2 is added to the list of all instructions.  ch gives the mask of
197
    all registers changed by the instruction.  If susp is true then
236
    all registers changed by the instruction.  If susp is true then
198
    this instruction is never output immediately.  This only occurs in
237
    this instruction is never output immediately.  This only occurs in
199
    tmp_reg.
238
    tmp_reg.
200
 
239
 
201
    This routine is usual called via the macro make_instr which has the
240
    This routine is usual called via the macro make_instr which has the
202
    same first four arguments, but has susp always false.
241
    same first four arguments, but has susp always false.
203
*/
242
*/
204
 
243
 
205
#ifdef EBUG
244
#ifdef EBUG
206
static int next_id = 0 ;
245
static int next_id = 0;
207
#endif
246
#endif
208
 
247
 
209
void make_instr_aux
248
void
210
    PROTO_N ( ( insno, op1, op2, ch, susp ) )
-
 
211
    PROTO_T ( int insno X mach_op *op1 X mach_op *op2 X bitpattern ch X int susp )
249
make_instr_aux(int insno, mach_op *op1, mach_op *op2, bitpattern ch, int susp)
212
{
250
{
213
    mach_ins *p ;
251
	mach_ins *p;
214
    if (insno != m_comment) {
252
	if (insno != m_comment) {
215
      if ( stack_change ) update_stack () ;
253
		if (stack_change) {
-
 
254
			update_stack();
216
    }
255
		}
217
    if ( mach_ins_list == null ) {
-
 
218
	int i, n = 1000 ;
-
 
219
	mach_ins_list = alloc_nof ( mach_ins, n ) ;
-
 
220
	for ( i = 0 ; i < n - 1 ; i++ ) {
-
 
221
	    ( mach_ins_list + i )->next = mach_ins_list + ( i + 1 ) ;
-
 
222
	}
256
	}
-
 
257
	if (mach_ins_list == null) {
-
 
258
		int i, n = 1000;
-
 
259
		mach_ins_list = alloc_nof(mach_ins, n);
-
 
260
		for (i = 0; i < n - 1; i++) {
-
 
261
			(mach_ins_list + i) ->next = mach_ins_list + (i + 1);
-
 
262
		}
223
	( mach_ins_list + ( n - 1 ) )->next = null ;
263
		(mach_ins_list + (n - 1))->next = null;
224
    }
264
	}
225
    p = mach_ins_list ;
265
	p = mach_ins_list;
226
    mach_ins_list = p->next ;
266
	mach_ins_list = p->next;
227
#ifdef EBUG
267
#ifdef EBUG
228
    p->id = ++ next_id ;
268
	p->id = ++next_id;
229
#if 1
269
#if 1
230
    if(p->id == 4803) {
270
	if (p->id == 4803) {
231
       int found = 1 ;
271
		int found = 1;
232
    }
272
	}
233
#endif
273
#endif
234
#endif
274
#endif
235
    p->ins_no = insno ;
275
	p->ins_no = insno;
236
    p->op1 = op1 ;
276
	p->op1 = op1;
237
    p->op2 = op2 ;
277
	p->op2 = op2;
238
    p->changed = ch ;
278
	p->changed = ch;
239
    last_jump_regs |= ch ;
279
	last_jump_regs |= ch;
240
    if ( current_ins == null ) {
280
	if (current_ins == null) {
241
	p->next = all_mach_ins ;
281
		p->next = all_mach_ins;
242
	all_mach_ins = p ;
282
		all_mach_ins = p;
243
    } else {
283
	} else {
244
	p->next = current_ins->next ;
284
		p->next = current_ins->next;
245
	current_ins->next = p ;
285
		current_ins->next = p;
246
    }
286
	}
247
    current_ins = p ;
287
	current_ins = p;
248
 
288
 
249
    if ( insno != m_comment ) {
289
	if (insno != m_comment) {
250
      /* Clear the temporary register status */
290
		/* Clear the temporary register status */
251
      tmp_reg_status = 0 ;
291
		tmp_reg_status = 0;
252
      tmp_reg_prefer = 0 ;
292
		tmp_reg_prefer = 0;
253
    }
293
	}
254
 
294
 
255
    if ( output_immediately && !susp ) {
295
	if (output_immediately && !susp) {
256
	output_all () ;
296
		output_all();
257
	free_all_ins () ;
297
		free_all_ins();
258
    }
298
	}
259
    return ;
299
	return;
260
}
300
}
261
 
301
 
262
 
302
 
263
/*
303
/*
264
    CREATE A LABEL
304
    CREATE A LABEL
265
 
305
 
266
    A label is added to the list of all instructions.  This has the effect
306
    A label is added to the list of all instructions.  This has the effect
267
    of marking all registers as changed.
307
    of marking all registers as changed.
268
*/
308
*/
269
 
309
 
270
void make_label
310
void
271
    PROTO_N ( ( n ) )
-
 
272
    PROTO_T ( long n )
311
make_label(long n)
273
{
312
{
274
    mach_op *p = new_mach_op () ;
313
	mach_op *p = new_mach_op();
275
    p->type = MACH_LABQ ;
314
	p->type = MACH_LABQ;
276
    p->def.num = n ;
315
	p->def.num = n;
277
    make_instr_aux ( m_label_ins, p, null, ( bitpattern ) 0xffff, 0 ) ;
316
	make_instr_aux(m_label_ins, p, null,(bitpattern)0xffff, 0);
278
    have_cond = 0 ;
317
	have_cond = 0;
279
#ifdef EBUG
318
#ifdef EBUG
280
    if ( seek_label && n == ( long ) seek_label_no ) {
319
	if (seek_label && n == (long)seek_label_no) {
281
	warning ( "Label %ld used", n ) ;
320
		warning("Label %ld used", n);
282
	breakpoint () ;
321
		breakpoint();
283
    }
322
	}
284
#endif
323
#endif
285
    return ;
324
	return;
286
}
325
}
287
 
326
 
288
#ifdef EBUG
327
#ifdef EBUG
289
 
328
 
290
void make_comment
329
void
291
    PROTO_N ( ( comment ) )
-
 
292
    PROTO_T ( char* comment )
330
make_comment(char* comment)
293
{
331
{
294
    mach_op *p;
332
	mach_op *p;
295
 
333
 
296
    p = new_mach_op () ;
334
	p = new_mach_op();
297
    p->type = MACH_COMMENT ;
335
	p->type = MACH_COMMENT;
298
    p->def.str = comment ;
336
	p->def.str = comment;
299
    make_instr_aux ( m_comment, p, null, ( bitpattern ) 0x0000, 0 ) ;
337
	make_instr_aux(m_comment, p, null,(bitpattern)0x0000, 0);
300
 
338
 
301
    return ;
339
	return;
302
}
340
}
303
#endif
341
#endif
304
 
342
 
305
/*
343
/*
306
    CREATE AN EXTERNAL LABEL
344
    CREATE AN EXTERNAL LABEL
307
 
345
 
308
    An external label is added to the list of all instructions.  This has
346
    An external label is added to the list of all instructions.  This has
309
    the effect of marking all registers as changed.
347
    the effect of marking all registers as changed.
310
*/
348
*/
311
 
349
 
312
void make_external_label
350
void
313
    PROTO_N ( ( nm ) )
-
 
314
    PROTO_T ( char *nm )
351
make_external_label(char *nm)
315
{
352
{
316
    mach_op *p = new_mach_op () ;
353
	mach_op *p = new_mach_op();
317
    p->type = MACH_EXTQ ;
354
	p->type = MACH_EXTQ;
318
    p->def.str = nm ;
355
	p->def.str = nm;
319
    make_instr_aux ( m_extern_ins, p, null, ( bitpattern ) 0xffff, 0 ) ;
356
	make_instr_aux(m_extern_ins, p, null,(bitpattern)0xffff, 0);
320
    have_cond = 0 ;
357
	have_cond = 0;
321
#ifdef EBUG
358
#ifdef EBUG
322
    if ( seek_extern && eq ( nm, seek_extern_id ) ) {
359
	if (seek_extern && eq(nm, seek_extern_id)) {
323
	warning ( "Label %s used", nm ) ;
360
		warning("Label %s used", nm);
324
	breakpoint () ;
361
		breakpoint();
325
    }
362
	}
326
#endif
363
#endif
327
    return ;
364
	return;
328
}
365
}
329
 
366
 
330
 
367
 
331
/*
368
/*
332
    CREATE A JUMP
369
    CREATE A JUMP
333
 
370
 
334
    A jump, instruction number insno, to label n, is added to the list
371
    A jump, instruction number insno, to label n, is added to the list
335
    of all instructions.
372
    of all instructions.
336
*/
373
*/
337
 
374
 
338
void make_jump
375
void
339
    PROTO_N ( ( insno, n ) )
-
 
340
    PROTO_T ( int insno X long n )
376
make_jump(int insno, long n)
341
{
377
{
342
    mach_op *p = new_mach_op () ;
378
	mach_op *p = new_mach_op();
343
    p->type = MACH_LABQ ;
379
	p->type = MACH_LABQ;
344
    p->def.num = n ;
380
	p->def.num = n;
345
    make_instr_aux ( insno, p, null, ( bitpattern ) 0, 0 ) ;
381
	make_instr_aux(insno, p, null,(bitpattern)0, 0);
346
    if ( n != last_jump ) {
382
	if (n != last_jump) {
347
	last_jump = n ;
383
		last_jump = n;
348
	last_jump_regs = 0 ;
384
		last_jump_regs = 0;
349
    }
385
	}
350
    return ;
386
	return;
351
}
387
}
352
 
388
 
353
 
389
 
354
/*
390
/*
355
    SET A SPECIAL LABEL VALUE
391
    SET A SPECIAL LABEL VALUE
356
 
392
 
357
    The special label with identifier nm is set equal to the given value.
393
    The special label with identifier nm is set equal to the given value.
358
*/
394
*/
359
 
395
 
360
void set_special
396
void
361
    PROTO_N ( ( nm, op ) )
-
 
362
    PROTO_T ( char *nm X mach_op *op )
397
set_special(char *nm, mach_op *op)
363
{
398
{
364
    mach_op *op1 = make_special_data ( nm ) ;
399
	mach_op *op1 = make_special_data(nm);
365
    make_instr_aux ( m_as_assign, op1, op, ( bitpattern ) 0, 0 ) ;
400
	make_instr_aux(m_as_assign, op1, op,(bitpattern)0, 0);
366
    return ;
401
	return;
367
}
402
}
368
 
403
 
369
 
404
 
370
/*
405
/*
371
    OUTPUT AN IDENTIFICATION OF TWO NAMES
406
    OUTPUT AN IDENTIFICATION OF TWO NAMES
372
 
407
 
373
    This is not required, since all link information is known by the
408
    This is not required, since all link information is known by the
374
    time I get round to code production.
409
    time I get round to code production.
375
*/
410
*/
376
 
411
 
377
void out_rename
412
void
378
    PROTO_N ( ( old_nm, nm ) )
-
 
379
    PROTO_T ( char *old_nm X char *nm )
413
out_rename(char *old_nm, char *nm)
380
{
414
{
381
#if 0
415
#if 0
382
    mach_op *op1 = make_extern_data ( old_nm, 0 ) ;
416
	mach_op *op1 = make_extern_data(old_nm, 0);
383
    mach_op *op2 = make_extern_data ( nm, 0 ) ;
417
	mach_op *op2 = make_extern_data(nm, 0);
384
    make_instr_aux ( m_as_assign, op1, op2, 0, 0 ) ;
418
	make_instr_aux(m_as_assign, op1, op2, 0, 0);
385
#endif
419
#endif
386
    return ;
420
	return;
387
}
421
}