/* Copyright (c) 1982 Regents of the University of California */
static char sccsid
[] = "@(#)asm.c 1.3 (Berkeley) %G%";
* Assembly language dependent symbol routines.
#define isdouble(range) ( \
range->symvalue.rangev.upper == 0 and range->symvalue.rangev.lower > 0 \
* Initialize assembly language information.
lang
= language_define("assembler", ".s");
language_setop(lang
, L_PRINTDECL
, asm_printdecl
);
language_setop(lang
, L_PRINTVAL
, asm_printval
);
language_setop(lang
, L_TYPEMATCH
, asm_typematch
);
language_setop(lang
, L_HASMODULES
, asm_hasmodules
);
language_setop(lang
, L_PASSADDR
, asm_passaddr
);
* Test if two types are compatible.
public Boolean
asm_typematch(type1
, type2
)
printf("&%s = 0x%x", symname(s
), s
->symvalue
.offset
);
printf("%s (0x%x):", symname(s
), codeloc(s
));
error("class %s in c_printdecl", classname(s
));
* Print out the value on the top of the expression stack
* in the format for the type of the given symbol.
if (t
->class == RANGE
and istypename(t
->type
, "$char")) {
printf("\"%.*s\"", len
, sp
);
printf("0x%x", pop(Integer
));
public boolean
asm_hasmodules ()
public boolean
asm_passaddr (param
, exprtype
)