--- /dev/null
+CPP=pdcc
+CC=cc64
+CFLAGS=
+LD=pdld
+LDFLAGS=-s -nostdlib --no-insert-timestamp --image-base 0x400000
+AS=pdas --oformat coff --64
+COPTS=-I. -I../pdos/pdpclib -I../pdos/src -D__PDOS__ \
+ -D__WIN32__ -D__NOBIVA__ -D__64BIT__ -D__CC64__ -Dconst=
+
+OBJS=as.obj coff.obj cstr.obj elks.obj expr.obj fixup.obj frag.obj hashtab.obj \
+ intel.obj kwd.obj lex.obj lib.obj list.obj listing.obj ll.obj macro.obj \
+ process.obj report.obj section.obj symbol.obj vector.obj
+
+TARGET=sasm.exe
+
+all: clean $(TARGET)
+
+$(TARGET): $(OBJS)
+ $(LD) $(LDFLAGS) -o $(TARGET) ../pdos/pdpclib/w32start.obj $(OBJS) ../pdos/pdpclib/msvcrt.lib
+
+.c.obj:
+ $(CPP) -E $(COPTS) -o $*.i $<
+ $(CC) -c -out:$@ $*.i
+ rm -f $*.i
+
+clean:
+ rm -f $(OBJS) $(TARGET)
}
+#ifdef __CC64__
+struct operand_type temp;
+# define operand_type_and(a, b) (operand_type_and)(temp = (a), (b))
+#endif
+
static int operand_type_equal (const struct operand_type *pa, const struct operand_type *pb) {
return !memcmp (pa, pb, sizeof (*pa));
}
if (*operand_string) {
report_at (get_filename (), get_line_number (), REPORT_ERROR, "junk '%s' after expression", operand_string);
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
+#endif
} else if (!intel_state.has_offset && operand_string > operand_start && strrchr (operand_start, ']') && skip_whitespace (strrchr (operand_start, ']') + 1) == operand_string) {
}
+#ifdef __CC64__
+ if (!ret)
+ {
+ ret = 1;
+ goto ret1;
+ }
+#else
if (!ret) { return 1; }
+#endif
ret = 0;
if (intel_state.operand_modifier != EXPR_TYPE_ABSENT && current_templates->start->base_opcode != 0x8D /* lea */) {
} else if (instruction.suffix != suffix) {
report_at (get_filename (), get_line_number (), REPORT_ERROR, "conficting operand size modifiers");
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
-
+#endif
}
}
}
report_at (get_filename (), get_line_number (), REPORT_ERROR, "cannot infer the segment part of the operand");
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
-
+#endif
} else if (symbol_get_section (intel_state.segment) == reg_section) {
is_absolute_jump = 1;
} else {
resolve_expression (instruction.imms[instruction.operands]);
if (finalize_immediate (instruction.imms[instruction.operands], operand_start)) {
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
+#endif
}
instruction.operands++;
instruction.operands = 2;
instruction.types[0] = operand_type_and_not_disp (instruction.types[0]);
-
+
+#ifdef __CC64__
+ ret = 0;
+ goto ret1;
+#else
return 0;
-
+#endif
+
}
}
}
report_at (get_filename (), get_line_number (), REPORT_ERROR, "too many memory references for '%s'", current_templates->name);
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
-
+#endif
}
if (intel_state.base_reg && intel_state.index_reg && intel_state.base_reg->type.word && intel_state.index_reg->type.word && intel_state.base_reg->number >= 6 && intel_state.index_reg->number < 6) {
}
if (finalize_displacement (instruction.disps[instruction.operands], operand_start)) {
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
+#endif
}
}
if (expr->type != EXPR_TYPE_REGISTER) {
report_at (get_filename (), get_line_number (), REPORT_ERROR, "segment register name expected");
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
-
+#endif
}
if (!reg_table[expr->add_number].type.segment1 && !reg_table[expr->add_number].type.segment2) {
report_at (get_filename (), get_line_number (), REPORT_ERROR, "invalid use of register");
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
-
+#endif
}
if (more_than_1_segment) {
}
if (base_index_check (operand_start)) {
+#ifdef __CC64__
+ ret = 1;
+ goto ret1;
+#else
return 1;
+#endif
}
instruction.mem_operands++;
}
instruction.operands++;
+
+#ifdef __CC64__
+ret1:
+#endif
+
return ret;
}
if ((poe = find_poe (arg))) {
+#ifdef __CC64__
+ (*poe->handler) (start, &line);
+#else
poe->handler (start, &line);
+#endif
goto check;
}
symbol = symbol_label (start, caret, arg);
symbol->scope = SYMBOL_SCOPE_LOCAL;
-
+
+#ifdef __CC64__
+ (*poe->handler) (start, &line);
+#else
poe->handler (start, &line);
+#endif
goto check;
}
line = skip_whitespace (line);
if ((poe = find_cond_directive (arg))) {
-
+
+#ifdef __CC64__
+ (*poe->handler) (start, &line);
+#else
poe->handler (start, &line);
+#endif
free (arg);
continue;
if (!ignore_line) {
if ((poe = find_directive (arg))) {
-
+
+#ifdef __CC64__
+ (*poe->handler) (start, &line);
+#else
poe->handler (start, &line);
+#endif
free (arg);
continue;
line = skip_whitespace (line);
if ((poe = find_cond_directive (arg))) {
-
+
+#ifdef __CC64__
+ (*poe->handler) (start, &line);
+#else
poe->handler (start, &line);
+#endif
free (arg);
continue;