Annotation of 43BSD/ucb/dbx/asm.c, revision 1.1

1.1     ! root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.