4 * (C) Copyright 1993-2002
18 * Process a machine op.
24 register int op, t1, t2, type;
25 struct expr e1, e2, e3;
42 if (e1.e_flag == 0 && e1.e_base.e_ap == NULL) {
47 if ((c = getnb()) == ',') {
60 outdp(dot.s_area, &e1);
73 v1 = e1.e_addr - dot.s_addr - 1;
74 if ((v1 < -128) || (v1 > 127))
80 if (e1.e_mode != S_USER)
94 if (t1 == S_DIR || t1 == S_EXT) {
103 if (t1 == S_IX1 || t1 == S_IX2) {
110 if (t1 == S_SP1 || t1 == S_SP2) {
124 if ((op == 0xA7) || (op == 0xAC) ||
125 (op == 0xAD) || (op == 0xAF))
156 if (op == 0xAC || op == 0xAD)
164 if (op == 0xAC || op == 0xAD)
177 if (t1 != S_IMMED || espv & ~0x07)
183 outab(op + 2*(espv&0x07));
190 if (t1 != S_IMMED || espv & ~0x07)
198 outab(op + 2*(espv&0x07));
201 v1 = e3.e_addr - dot.s_addr - 1;
202 if ((v1 < -128) || (v1 > 127))
208 if (e3.e_mode != S_USER)
216 if (e1.e_flag == 0 && e1.e_base.e_ap == NULL) {
218 if ((v1 < -128) || (v1 > 127))
238 if (t1 == S_DIR || t1 == S_EXT) {
254 if (t1 == S_DIR || t1 == S_EXT) {
261 if (t1 == S_IX1P || t1 == S_IX2P) {
267 if (t1 == S_SP1 || t1 == S_SP2) {
278 v1 = e2.e_addr - dot.s_addr - 1;
279 if ((v1 < -128) || (v1 > 127))
285 if (e2.e_mode != S_USER)
298 v1 = e2.e_addr - dot.s_addr - 1;
299 if ((v1 < -128) || (v1 > 127))
305 if (e2.e_mode != S_USER)
313 if (t1 == S_DIR || t1 == S_EXT) {
320 if (t1 == S_IX1 || t1 == S_IX2) {
326 if (t1 == S_SP1 || t1 == S_SP2) {
337 v1 = e2.e_addr - dot.s_addr - 1;
338 if ((v1 < -128) || (v1 > 127))
344 if (e2.e_mode != S_USER)
352 v1 = e1.e_addr - dot.s_addr - 1;
353 if ((v1 < -128) || (v1 > 127))
359 if (e1.e_mode != S_USER)
365 if (t1 == S_IX1P || t1 == S_IX2P) {
375 if (t2 == S_DIR || t2 == S_EXT) {
382 if (t1 == S_DIR || t1 == S_EXT) {
383 if (t2 == S_DIR || t2 == S_EXT) {
391 if (t2 == S_DIR || t2 == S_EXT) {
412 if (exp->e_flag == 0 && exp->e_base.e_ap == NULL) {
413 if (exp->e_addr & ~0xFF) {
421 * Branch/Jump PCR Mode Check
425 register struct expr *esp;
427 if (esp->e_base.e_ap == dot.s_area) {
430 if (esp->e_flag==0 && esp->e_base.e_ap==NULL) {
432 * Absolute Destination
434 * Use the global symbol '.__.ABS.'
435 * of value zero and force the assembler
436 * to use this absolute constant as the
437 * base value for the relocation.
440 esp->e_base.e_sp = &sym[1];
446 * The next character must be a
458 * Machine specific initialization.