xref: /csrg-svn/old/dbx/asm.c (revision 16606)
19658Slinton /* Copyright (c) 1982 Regents of the University of California */
29658Slinton 
39684Slinton static char sccsid[] = "@(#)asm.c 1.2 12/15/82";
49658Slinton 
5*16606Ssam static char rcsid[] = "$Header: asm.c,v 1.3 84/03/27 10:19:36 linton Exp $";
6*16606Ssam 
79658Slinton /*
89658Slinton  * Assembly language dependent symbol routines.
99658Slinton  */
109658Slinton 
119658Slinton #include "defs.h"
129658Slinton #include "symbols.h"
139658Slinton #include "asm.h"
149658Slinton #include "languages.h"
159658Slinton #include "tree.h"
169658Slinton #include "eval.h"
179658Slinton #include "operators.h"
189658Slinton #include "mappings.h"
199658Slinton #include "process.h"
209658Slinton #include "runtime.h"
219658Slinton #include "machine.h"
229658Slinton 
239658Slinton #define isdouble(range) ( \
249658Slinton     range->symvalue.rangev.upper == 0 and range->symvalue.rangev.lower > 0 \
259658Slinton )
269658Slinton 
279658Slinton /*
289658Slinton  * Initialize assembly language information.
299658Slinton  */
309658Slinton 
319658Slinton public asm_init()
329658Slinton {
339658Slinton     Language lang;
349658Slinton 
359658Slinton     lang = language_define("assembler", ".s");
369658Slinton     language_setop(lang, L_PRINTDECL, asm_printdecl);
379658Slinton     language_setop(lang, L_PRINTVAL, asm_printval);
389658Slinton     language_setop(lang, L_TYPEMATCH, asm_typematch);
39*16606Ssam     language_setop(lang, L_HASMODULES, asm_hasmodules);
40*16606Ssam     language_setop(lang, L_PASSADDR, asm_passaddr);
419658Slinton }
429658Slinton 
439658Slinton /*
449658Slinton  * Test if two types are compatible.
459658Slinton  */
469658Slinton 
479658Slinton public Boolean asm_typematch(type1, type2)
489658Slinton Symbol type1, type2;
499658Slinton {
509658Slinton     Boolean b;
519658Slinton 
529658Slinton     b = false;
539658Slinton     return b;
549658Slinton }
559658Slinton 
569658Slinton public asm_printdecl(s)
579658Slinton Symbol s;
589658Slinton {
599658Slinton     switch (s->class) {
609658Slinton 	case VAR:
619658Slinton 	case REF:
629658Slinton 	    printf("&%s = 0x%x", symname(s), s->symvalue.offset);
639658Slinton 	    break;
649658Slinton 
659658Slinton 	case PROC:
669658Slinton 	case FUNC:
679658Slinton 	    printf("%s (0x%x):", symname(s), codeloc(s));
689658Slinton 	    break;
699658Slinton 
709658Slinton 	default:
719658Slinton 	    error("class %s in c_printdecl", classname(s));
729658Slinton     }
739658Slinton     putchar('\n');
749658Slinton }
759658Slinton 
769658Slinton /*
779658Slinton  * Print out the value on the top of the expression stack
789658Slinton  * in the format for the type of the given symbol.
799658Slinton  */
809658Slinton 
819658Slinton public asm_printval(s)
829658Slinton register Symbol s;
839658Slinton {
849658Slinton     register Symbol t;
859658Slinton     register Integer len;
869658Slinton 
879658Slinton     switch (s->class) {
889658Slinton 	case ARRAY:
899658Slinton 	    t = rtype(s->type);
909658Slinton 	    if (t->class == RANGE and istypename(t->type, "$char")) {
919658Slinton 		len = size(s);
929658Slinton 		sp -= len;
939658Slinton 		printf("\"%.*s\"", len, sp);
949658Slinton 	    } else {
959658Slinton 		printarray(s);
969658Slinton 	    }
979658Slinton 	    break;
989658Slinton 
999658Slinton 	default:
1009658Slinton 	    printf("0x%x", pop(Integer));
1019658Slinton 	    break;
1029658Slinton     }
1039658Slinton }
104*16606Ssam 
105*16606Ssam public boolean asm_hasmodules ()
106*16606Ssam {
107*16606Ssam     return false;
108*16606Ssam }
109*16606Ssam 
110*16606Ssam public boolean asm_passaddr (param, exprtype)
111*16606Ssam Symbol param, exprtype;
112*16606Ssam {
113*16606Ssam     return false;
114*16606Ssam }
115