1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)asm.c	5.1 (Berkeley) 5/31/85";
   9: #endif not lint
  10: 
  11: static char rcsid[] = "$Header: asm.c,v 1.5 84/12/26 10:38:19 linton Exp $";
  12: 
  13: /*
  14:  * Assembly language dependent symbol routines.
  15:  */
  16: 
  17: #include "defs.h"
  18: #include "symbols.h"
  19: #include "asm.h"
  20: #include "languages.h"
  21: #include "tree.h"
  22: #include "eval.h"
  23: #include "operators.h"
  24: #include "mappings.h"
  25: #include "process.h"
  26: #include "runtime.h"
  27: #include "machine.h"
  28: 
  29: #define isdouble(range) ( \
  30:     range->symvalue.rangev.upper == 0 and range->symvalue.rangev.lower > 0 \
  31: )
  32: 
  33: /*
  34:  * Initialize assembly language information.
  35:  */
  36: 
  37: public asm_init()
  38: {
  39:     Language lang;
  40: 
  41:     lang = language_define("assembler", ".s");
  42:     language_setop(lang, L_PRINTDECL, asm_printdecl);
  43:     language_setop(lang, L_PRINTVAL, asm_printval);
  44:     language_setop(lang, L_TYPEMATCH, asm_typematch);
  45:     language_setop(lang, L_BUILDAREF, asm_buildaref);
  46:     language_setop(lang, L_EVALAREF, asm_evalaref);
  47:     language_setop(lang, L_HASMODULES, asm_hasmodules);
  48:     language_setop(lang, L_PASSADDR, asm_passaddr);
  49: }
  50: 
  51: /*
  52:  * Test if two types are compatible.
  53:  */
  54: 
  55: public Boolean asm_typematch(type1, type2)
  56: Symbol type1, type2;
  57: {
  58:     Boolean b;
  59: 
  60:     b = false;
  61:     return b;
  62: }
  63: 
  64: public asm_printdecl(s)
  65: Symbol s;
  66: {
  67:     switch (s->class) {
  68:     case CONST:
  69:         printf("%s = %d", symname(s), s->symvalue.constval->value.lcon);
  70:         break;
  71: 
  72:     case VAR:
  73:     case REF:
  74:         printf("&%s = 0x%x", symname(s), s->symvalue.offset);
  75:         break;
  76: 
  77:     case PROC:
  78:     case FUNC:
  79:         printf("%s (0x%x):", symname(s), codeloc(s));
  80:         break;
  81: 
  82:     case TYPE:
  83:         printf("%s", symname(s));
  84:         break;
  85: 
  86:     case ARRAY:
  87:         printf("$string");
  88:         break;
  89: 
  90:     default:
  91:         printf("[%s]", classname(s));
  92:         break;
  93:     }
  94:     putchar('\n');
  95: }
  96: 
  97: /*
  98:  * Print out the value on the top of the expression stack
  99:  * in the format for the type of the given symbol.
 100:  */
 101: 
 102: public asm_printval(s)
 103: register Symbol s;
 104: {
 105:     register Symbol t;
 106:     register Integer len;
 107: 
 108:     switch (s->class) {
 109:     case ARRAY:
 110:         t = rtype(s->type);
 111:         if (t->class == RANGE and istypename(t->type, "$char")) {
 112:         len = size(s);
 113:         sp -= len;
 114:         printf("\"%.*s\"", len, sp);
 115:         } else {
 116:         printarray(s);
 117:         }
 118:         break;
 119: 
 120:     default:
 121:         printf("0x%x", pop(Integer));
 122:         break;
 123:     }
 124: }
 125: 
 126: /*
 127:  * Treat subscripting as indirection through pointer to integer.
 128:  */
 129: 
 130: public Node asm_buildaref(a, slist)
 131: Node a, slist;
 132: {
 133:     Symbol t, eltype;
 134:     Node p, r;
 135: 
 136:     t = rtype(a->nodetype);
 137:     eltype = t->type;
 138:     p = slist->value.arg[0];
 139:     r = build(O_MUL, p, build(O_LCON, (long) size(eltype)));
 140:     r = build(O_ADD, build(O_RVAL, a), r);
 141:     r->nodetype = eltype;
 142:     return r;
 143: }
 144: 
 145: /*
 146:  * Evaluate a subscript index.  Assumes dimension is [0..n].
 147:  */
 148: 
 149: public asm_evalaref(s, base, i)
 150: Symbol s;
 151: Address base;
 152: long i;
 153: {
 154:     Symbol t;
 155: 
 156:     t = rtype(s);
 157:     push(long, base + i * size(t->type));
 158: }
 159: 
 160: public boolean asm_hasmodules ()
 161: {
 162:     return false;
 163: }
 164: 
 165: public boolean asm_passaddr (param, exprtype)
 166: Symbol param, exprtype;
 167: {
 168:     return false;
 169: }

Defined functions

asm_buildaref defined in line 130; used 1 times
  • in line 45
asm_evalaref defined in line 149; used 1 times
  • in line 46
asm_hasmodules defined in line 160; used 1 times
  • in line 47
asm_init defined in line 37; used 1 times
asm_passaddr defined in line 165; used 1 times
  • in line 48
asm_printdecl defined in line 64; used 1 times
  • in line 42
asm_printval defined in line 102; used 1 times
  • in line 43
asm_typematch defined in line 55; used 1 times
  • in line 44

Defined variables

rcsid defined in line 11; never used
sccsid defined in line 8; never used

Defined macros

isdouble defined in line 29; never used
Last modified: 1985-05-31
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1161
Valid CSS Valid XHTML 1.0 Strict