コード例 #1
0
ファイル: label_table.c プロジェクト: nsillik/dcpu16-asm-c
uint16_t label_lookup_write(
  label_table_t * from, label_table_t * to,
  char * label, uint16_t address
)
{
  uint16_t found_address;

  if ((found_address = label_lookup(from, label)))
    return found_address;

  label_write(to, label, address);
  return 0;
}
コード例 #2
0
ファイル: asm.c プロジェクト: giannitedesco/eric
static int cbranch_op(struct code_rom *rom, uint8_t invert,
			uint8_t zero, const char *label)
{
	struct label *l;
	uint16_t insn;

	invert = !!invert;
	zero = !!zero;

	l = label_lookup(rom, label);
	if ( NULL == l ) {
		fprintf(stderr, "%s:%u: label not found: %s\n",
			rom->fn, rom->line, label);
		return 0;
	}

	insn = (1 << 8) | (invert << 7) | (zero << 6) | l->addr;
	return emit_insn(rom, insn);
}
コード例 #3
0
ファイル: asm.c プロジェクト: giannitedesco/eric
static int add_label(struct code_rom *rom, char *ptr)
{
	struct label *l;

	if ( !label_is_valid(ptr) ) {
		fprintf(stderr, "%s:%u: invalid label name: %s\n",
			rom->fn, rom->line, ptr);
		return 0;
	}

	if ( label_lookup(rom, ptr) ) {
		fprintf(stderr, "%s:%u: duplicate label: %s\n",
			rom->fn, rom->line, ptr);
		return 0;
	}

	l = calloc(1, sizeof(*l));
	if ( NULL == l ) {
		fprintf(stderr, "%s:%u: %s\n",
			rom->fn, rom->line, strerror(errno));
		return 0;
	}

	l->name = strdup(ptr);
	if ( NULL == l->name ) {
		fprintf(stderr, "%s:%u: %s\n",
			rom->fn, rom->line, strerror(errno));
		free(l);
		return 0;
	}

	l->addr = rom->addr;
	l->next = rom->labels;
	rom->labels = l;
	return 1;
}