fix structure arguments. don't map OREG to REG for STASG (match fails)
[unix-history] / usr / src / old / dbx / asm.c
CommitLineData
a63d483c
ML
1/* Copyright (c) 1982 Regents of the University of California */
2
550fe947 3static char sccsid[] = "@(#)asm.c 1.2 %G%";
a63d483c
ML
4
5/*
6 * Assembly language dependent symbol routines.
7 */
8
9#include "defs.h"
10#include "symbols.h"
11#include "asm.h"
12#include "languages.h"
13#include "tree.h"
14#include "eval.h"
15#include "operators.h"
16#include "mappings.h"
17#include "process.h"
18#include "runtime.h"
19#include "machine.h"
20
21#define isdouble(range) ( \
22 range->symvalue.rangev.upper == 0 and range->symvalue.rangev.lower > 0 \
23)
24
25/*
26 * Initialize assembly language information.
27 */
28
29public asm_init()
30{
31 Language lang;
32
33 lang = language_define("assembler", ".s");
34 language_setop(lang, L_PRINTDECL, asm_printdecl);
35 language_setop(lang, L_PRINTVAL, asm_printval);
36 language_setop(lang, L_TYPEMATCH, asm_typematch);
37}
38
39/*
40 * Test if two types are compatible.
41 */
42
43public Boolean asm_typematch(type1, type2)
44Symbol type1, type2;
45{
46 Boolean b;
47
48 b = false;
49 return b;
50}
51
52public asm_printdecl(s)
53Symbol s;
54{
55 switch (s->class) {
56 case VAR:
57 case REF:
58 printf("&%s = 0x%x", symname(s), s->symvalue.offset);
59 break;
60
61 case PROC:
62 case FUNC:
63 printf("%s (0x%x):", symname(s), codeloc(s));
64 break;
65
66 default:
67 error("class %s in c_printdecl", classname(s));
68 }
69 putchar('\n');
70}
71
72/*
73 * Print out the value on the top of the expression stack
74 * in the format for the type of the given symbol.
75 */
76
77public asm_printval(s)
78register Symbol s;
79{
80 register Symbol t;
81 register Integer len;
82
83 switch (s->class) {
84 case ARRAY:
85 t = rtype(s->type);
86 if (t->class == RANGE and istypename(t->type, "$char")) {
87 len = size(s);
88 sp -= len;
89 printf("\"%.*s\"", len, sp);
90 } else {
91 printarray(s);
92 }
93 break;
94
95 default:
96 printf("0x%x", pop(Integer));
97 break;
98 }
99}