Line 6... |
Line 6... |
#define RELOC_32 1
|
#define RELOC_32 1
|
#define RELOC_8 2
|
#define RELOC_8 2
|
#define RELOC_CONST 3
|
#define RELOC_CONST 3
|
#define RELOC_CONSTH 4
|
#define RELOC_CONSTH 4
|
|
|
#include "or1.h"
|
#include "opcode/or32.h"
|
#include "or1k_isadesc.h"
|
#include "or1k_isadesc.h"
|
|
|
/* types of data in encoding field. */
|
/* types of data in encoding field. */
|
typedef enum { opcode, reserved, operand } encfld_types;
|
typedef enum { opcode, reserved, operand } encfld_types;
|
|
|
Line 101... |
Line 101... |
printf("|}\n\\hline\n");
|
printf("|}\n\\hline\n");
|
|
|
/* print first row of the table */
|
/* print first row of the table */
|
for(i = decoded.insn_size - 1; i > 0; i--)
|
for(i = decoded.insn_size - 1; i > 0; i--)
|
if (decoded.bitpos[i])
|
if (decoded.bitpos[i])
|
printf("%d&\n", i);
|
printf("{\\footnotesize\\hspace{-0.5mm}\\hfil%d\\hfil}&\n", i);
|
else
|
else
|
printf(".&\n");
|
printf("{\\footnotesize\\hspace{-1.5mm}\\hfil.\\hfil}&\n");
|
printf("0\\\\\n\\hline\n");
|
printf("0\\\\\n\\hline\n");
|
|
|
/* print second row of the table */
|
/* print second row of the table */
|
for(i = 1; i <= decoded.fldcnt; i++) {
|
for(i = 1; i <= decoded.fldcnt; i++) {
|
if (decoded.field[i].type == opcode) {
|
if (decoded.field[i].type == opcode) {
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("%s", (i == 1 ? "|":""));
|
printf("%s", (i == 1 ? "|":""));
|
printf("c|}{opcode 0x%x}", decoded.field[i].value);
|
printf("c|}{\\small{opcode 0x%x}}", decoded.field[i].value);
|
} else if (decoded.field[i].type == operand) {
|
} else if (decoded.field[i].type == operand) {
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("%s", (i == 1 ? "|":""));
|
printf("%s", (i == 1 ? "|":""));
|
printf("c|}{%c}", decoded.field[i].value);
|
printf("c|}{\\small{%c }}", decoded.field[i].value);
|
} else if (decoded.field[i].type == reserved) {
|
} else if (decoded.field[i].type == reserved) {
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("\\multicolumn{%d}{", decoded.field[i].bitsize);
|
printf("%s", (i == 1 ? "|":""));
|
printf("%s", (i == 1 ? "|":""));
|
printf("c|}{reserved}", decoded.field[i].value);
|
printf("c|}{\\small{reserved}}", decoded.field[i].value);
|
}
|
}
|
if (i == decoded.fldcnt)
|
if (i == decoded.fldcnt)
|
printf("\\\\\n");
|
printf("\\\\\n");
|
else
|
else
|
printf("&\n");
|
printf("&\n");
|
Line 131... |
Line 131... |
printf("\n\\hline\n");
|
printf("\n\\hline\n");
|
|
|
/* print third row of the table */
|
/* print third row of the table */
|
for(i = 1; i < decoded.fldcnt; i++) {
|
for(i = 1; i < decoded.fldcnt; i++) {
|
printf("\\multicolumn{%d}", decoded.field[i].bitsize);
|
printf("\\multicolumn{%d}", decoded.field[i].bitsize);
|
printf("{%sc|}{%d bits}&\n", (i == 1 ? "|":""), decoded.field[i].bitsize);
|
printf("{%sc|}{\\small{%d bits}}&\n", (i == 1 ? "|":""), decoded.field[i].bitsize);
|
}
|
}
|
printf("\\multicolumn{%d}", decoded.field[i].bitsize);
|
printf("\\multicolumn{%d}", decoded.field[i].bitsize);
|
printf("{%sc|}{%d bits}\\\\\n", (i == 1 ? "|":""), decoded.field[i].bitsize);
|
printf("{%sc|}{\\small{%d}bits}\\\\\n", (i == 1 ? "|":""), decoded.field[i].bitsize);
|
/* printf("\n\\hline\n");
|
printf("\n\\hline\n");
|
/* printf("\\multicolumn{32}");
|
/* printf("\\multicolumn{32}");
|
/* printf("{|c|}{\\textcolor{white}{XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX ");
|
/* printf("{|c|}{\\textcolor{white}{XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX ");
|
printf("XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX}}\\\\\n");*/
|
printf("XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX}}\\\\\n");*/
|
printf("\\end{tabular}\\par}\n");
|
printf("\\end{tabular}\\par}\n");
|
}
|
}
|
|
|
Line 339... |
Line 339... |
printf("\\lyxline{\\small}\\vspace{-1\\parskip}\n");
|
printf("\\lyxline{\\small}\\vspace{-1\\parskip}\n");
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
printf("{\\centering \\begin{tabular}{ccc}\n");
|
printf("{\\centering \\begin{tabular}{ccc}\n");
|
printf("\\textbf{\\textcolor{white}{\\small Left}}\\textcolor{white}{\\small }&\n");
|
printf("\\textbf{\\textcolor{white}{\\small Left}}\\textcolor{white}{\\small }&\n");
|
printf("\\textcolor{white}{\\small }\\textbf{\\textcolor{white}{\\small Middle \n");
|
printf("\\textcolor{white}{\\small }\\textbf{\\textcolor{white}{\\small Middle \n");
|
printf("Middle Middle Middle Middle Middle Middle ");
|
printf("Middle Middle Middle Middle ");
|
printf("Middle Middle Middle Middle Middle Middle ");
|
printf("Middle Middle Middle Middle ");
|
printf("Middle Middle Middle}} \\textcolor{white}{\\small }&\n");
|
printf("Middle}} \\textcolor{white}{\\small }&\n");
|
printf("\\textcolor{white}{\\small }\\textbf{\\textcolor{white}{\\small Right}}\\\\\n");
|
printf("\\textcolor{white}{\\small }\\textbf{\\textcolor{white}{\\small Right}}\\\\\n");
|
transform_tex(insn->name, tmp);
|
transform_tex(insn->name, tmp);
|
printf("\\textbf{\\Large %s}&\n", tmp);
|
printf("\\textbf{\\Large %s}&\n", tmp);
|
transform_tex(info->title, tmp);
|
transform_tex(info->title, tmp);
|
printf("\\multicolumn{1}{c}{\\textbf{\\Large %s}}&\n", tmp);
|
printf("\\multicolumn{1}{c}{\\textbf{\\Large %s}}&\n", tmp);
|
Line 386... |
Line 386... |
/* Find matching encoding. */
|
/* Find matching encoding. */
|
for (i = 0; strlen(or32_opcodes[i].name); i++)
|
for (i = 0; strlen(or32_opcodes[i].name); i++)
|
if (strcmp(tmp->name, or32_opcodes[i].name) == 0) {
|
if (strcmp(tmp->name, or32_opcodes[i].name) == 0) {
|
fprintf(stderr, "PROCESSING: %s\n", tmp->name);
|
fprintf(stderr, "PROCESSING: %s\n", tmp->name);
|
info->desc = tmp;
|
info->desc = tmp;
|
info->opcode = &or32_opcodes[i];
|
info->opcode = (struct or32_opcode *) &or32_opcodes[i];
|
return tmp;
|
return tmp;
|
}
|
}
|
}
|
}
|
|
|
return NULL;
|
return NULL;
|
Line 421... |
Line 421... |
{
|
{
|
char tmp[2000];
|
char tmp[2000];
|
|
|
printf("\\vspace{15mm}\n");
|
printf("\\vspace{15mm}\n");
|
|
|
printf("{\\par \\raggedright \\textbf{\\Large Format:}\\Large \\par}\n");
|
printf("{\\par \\raggedright \\textbf{\\large Format:}\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
transform_tex(info->name, tmp);
|
transform_tex(info->name, tmp);
|
printf("\\texttt{\\large %s\\ ", tmp);
|
printf("\\texttt{\\large %s\\ ", tmp);
|
transform_tex(insn->args, tmp);
|
transform_tex(insn->args, tmp);
|
printf("%s}{\\large \\par}\n", tmp);
|
printf("%s}{\\large \\par}\n", tmp);
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
|
|
printf("\\textbf{\\Large Description:}{\\Large \\par}\n");
|
printf("\\textbf{\\large Description:}{\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
transform_tex(info->desc, tmp);
|
transform_tex(info->desc, tmp);
|
printf("%s\n", tmp);
|
printf("%s\n", tmp);
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
|
|
printf("\\textbf{\\Large 32-bit Implementation:}{\\Large \\par}\n");
|
printf("\\textbf{\\large 32-bit Implementation:}{\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{flushleft}\n");
|
/*printf("\\begin{flushleft}\n");*/
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
transform_tex(info->oper32, tmp);
|
transform_tex(info->oper32, tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n", tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n", tmp);
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\end{flushleft}\n");
|
/*printf("\\end{flushleft}\n");*/
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
|
|
printf("\\textbf{\\Large 64-bit Implementation:}{\\Large \\par}\n");
|
printf("\\textbf{\\large 64-bit Implementation:}{\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{flushleft}\n");
|
/*printf("\\begin{flushleft}\n");*/
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
transform_tex(info->oper64, tmp);
|
transform_tex(info->oper64, tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n", tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n", tmp);
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\end{flushleft}\n");
|
/*printf("\\end{flushleft}\n");*/
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
|
|
printf("\\textbf{\\Large Exceptions:}{\\Large \\par}\n");
|
printf("\\textbf{\\large Exceptions:}{\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{flushleft}\n");
|
/*printf("\\begin{flushleft}\n");*/
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
transform_tex(info->except, tmp);
|
transform_tex(info->except, tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n",tmp);
|
printf("\\texttt{\\large %s}{\\large \\par}\n",tmp);
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\end{flushleft}\n");
|
/*printf("\\end{flushleft}\n");*/
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");
|
|
|
printf("\\textbf{\\Large Notes:}{\\Large \\par}\n");
|
/*printf("\\textbf{\\large Notes:}{\\large \\par}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\vspace{5mm}\n");
|
printf("\\begin{quotation}\n");
|
printf("\\begin{quotation}\n");
|
printf("\n");
|
printf("\n");
|
printf("\\end{quotation}\n");
|
printf("\\end{quotation}\n");
|
printf("\\vspace{10mm}\n");
|
printf("\\vspace{10mm}\n");*/
|
|
|
printf("\\vfill\n");
|
printf("\\vfill\n");
|
printf("{\\centering \\begin{tabular}{|c|c|}\n");
|
printf("{\\centering \\begin{tabular}{|c|c|}\n");
|
printf("\\hline\n");
|
printf("\\hline\n");
|
printf("Instruction Class&\n");
|
printf("Instruction Class&\n");
|
printf("Implementation\\\\\n");
|
printf("Implementation\\\\\n");
|
printf("\\hline\n");
|
printf("\\hline\n");
|
transform_tex(or1k_isa_classes[info->class].table, tmp);
|
transform_tex(or1k_isa_classes[info->class].table, tmp);
|
printf("%s\n", tmp);
|
printf("%s\\hline\n", tmp);
|
printf("\\end{tabular}\\par}\n");
|
printf("\\end{tabular}\\par}\n");
|
|
|
printf("\n");
|
printf("\n");
|
}
|
}
|
|
|