⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itbl-test.c

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 C
字号:
/* itbl-test.c   Copyright (C) 1997  Free Software Foundation, Inc.   This file is part of GAS, the GNU Assembler.   GAS is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.   GAS is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with GAS; see the file COPYING.  If not, write to the Free   Software Foundation, 59 Temple Place - Suite 330, Boston, MA   02111-1307, USA.  *//* Stand-alone test for instruction specification table support.   Run using "itbl-test <itbl> <asm.s>"   where <itbl> is the name of the instruction table,   and <asm.s> is the name of the assembler fie. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "itbl-ops.h"static int test_reg (e_processor processor, e_type type, char *name,		     unsigned long val);int main (int argc, char **argv){  unsigned int insn;  FILE *fas;  int aline = 0;  char s[81], *name;  if (argc < 3)    {      printf ("usage: %s itbl asm.s\n", argv[0]);      exit (0);    }  if (itbl_parse (argv[1]) != 0)    {      printf ("failed to parse itbl\n");      exit (0);    }  fas = fopen (argv[2], "r");  if (fas == 0)    {      printf ("failed to open asm file %s\n", argv[2]);      exit (0);    }  while (fgets (s, 80, fas))    {      char *p;      aline++;      if (p = strchr (s, ';'), p)	/* strip comments */	*p = 0;      if (p = strchr (s, '#'), p)	/* strip comments */	*p = 0;      p = s + strlen (s) - 1;      while (p >= s && (*p == ' ' || *p == '\t' || *p == '\n'))	/* strip trailing spaces */	p--;      *(p + 1) = 0;      p = s;      while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))	/* strip leading spaces */	p++;      if (!*p)	continue;      name = itbl_get_field (&p);      insn = itbl_assemble (name, p);      if (insn == 0)	printf ("line %d: Invalid instruction (%s)\n", aline, s);      else	{	  char buf[128];	  printf ("line %d: insn(%s) = 0x%x)\n", aline, s, insn);	  if (!itbl_disassemble (buf, insn))	    printf ("line %d: Can't disassemble instruction "		    "(0x%x)\n", aline, insn);	  else	    printf ("line %d: disasm(0x%x) = %s)\n", aline, insn, buf);	}    }  test_reg (1, e_dreg, "d1", 1);  test_reg (3, e_creg, "c2", 22);  test_reg (3, e_dreg, "d3", 3);  return 0;}static int test_reg (e_processor processor, e_type type, char *name,	  unsigned long val){  char *n;  unsigned long v;  n = itbl_get_name (processor, type, val);  if (!n || strcmp (n, name))    printf ("Error - reg name not found for proessor=%d, type=%d, val=%d\n",	    processor, type, val);  else    printf ("name=%s found for processor=%d, type=%d, val=%d\n",	    n, processor, type, val);  /* We require that names be unique amoung processors and types. */  if (! itbl_get_reg_val (name, &v)      || v != val)    printf ("Error - reg val not found for processor=%d, type=%d, name=%s\n",	    processor, type, name);  else    printf ("val=0x%x found for processor=%d, type=%d, name=%s\n",	    v, processor, type, name);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -