#205: Repair the TracNav bar
------------------------+---------------------------------------------------
Reporter: levill_r | Owner: Olena Team
Type: defect | Status: new
Priority: minor | Milestone:
Component: Trac | Version: 1.0
Keywords: system web |
------------------------+---------------------------------------------------
Since the update of Trac, many Wiki pages using the !TracNav plug-in won't
display the !TracNav bar (menu on the right of some pages), and show this
error instead :
{{{
Error: Failed to load processor TracNav
No macro or processor named 'TracNav' found
}}}
The curious thing is, the !TracNav bar is working ''sometimes''!!
To see this in action, try reloading a page several times (e.g.
CodingStyle): sometimes you'll see the bar, other times you'll get the
error.
I assume other Tracs ([https://trac.lrde.org/vaucanson/ Vaucanson's],
[https://trac.lrde.org/transformers/ Transfomers'], etc.) face the same
problem; we should discuss this issue with their maintainers. Therefore I
(Roland) am cc'ing this ticket to the `projects` mailing list as well.
--
Ticket URL: <https://trac.lrde.org/olena/ticket/205>
Olena <http://olena.lrde.epita.fr>
Olena, a generic and efficient C++ image processing library.
* dev/nolimips.py, doc/inst-set.texi.gen.py, src/inst/nodes.gen.py,
* src/inst/nodes.mk.gen.py, src/inst/program_builder.hh.gen.py,
* src/inst/program_solver.gen.py, src/parse/asm-parse.yy.gen.py,
* src/parse/asm-scan.ll.gen.py:
Untabify.
---
dev/nolimips.py | 24 +++---
doc/inst-set.texi.gen.py | 8 +-
src/inst/nodes.gen.py | 16 ++--
src/inst/nodes.mk.gen.py | 12 +-
src/inst/program_builder.hh.gen.py | 24 +++---
src/inst/program_solver.gen.py | 112 +++++++++++-----------
src/parse/asm-parse.yy.gen.py | 38 ++++----
src/parse/asm-scan.ll.gen.py | 180 ++++++++++++++++++------------------
8 files changed, 207 insertions(+), 207 deletions(-)
mode change 100755 => 100644 dev/nolimips.py
diff --git a/dev/nolimips.py b/dev/nolimips.py
old mode 100755
new mode 100644
index 53e2205..e0d8226
--- a/dev/nolimips.py
+++ b/dev/nolimips.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -31,12 +31,12 @@ license = """//
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -181,7 +181,7 @@ class TokenBuilder:
def reset(self):
self.kind = ""
self.name = ""
- self.value = ""
+ self.value = ""
self.default = ""
def __init__(self):
self.reset()
@@ -281,17 +281,17 @@ class InstructionSetHandler(ContentHandler):
self.content = ""
def __init__(self):
self.reset()
-
+
def startElement(self, name, attrs):
if name == "instruction":
self.inst_b.reset()
self.inst_b.opcode = attrs["opcode"]
self.inst_b.level = attrs["level"]
self.inst_b.kind = attrs["kind"]
-
+
elif name == "description":
self.content = ""
-
+
elif name == "format":
self.format_b = FormatBuilder()
if attrs.has_key("type"):
@@ -339,17 +339,17 @@ class InstructionSetHandler(ContentHandler):
self.syntax_b.tokens.append(self.token_b.get())
elif name == "syntax" or name == "predefinedSyntax":
self.inst_b.syntaxes.append(self.syntax_b.get())
-
+
if name == "attribute":
self.format_b.attributes.append(self.attr_b.get())
elif name == "predefinedAttributes":
self.inst_b.format = self.format_b.get()
elif name == "format":
self.inst_b.format = self.format_b.get()
-
+
elif name == "description":
self.inst_b.desc = self.content
-
+
elif name == "instruction":
self.instructions.append(self.inst_b.get())
@@ -365,7 +365,7 @@ class InstructionSetParser:
h = InstructionSetHandler()
# Tell the parser to use our handler
parser.setContentHandler(h)
-
+
# Parse the input
parser.parse(file)
diff --git a/doc/inst-set.texi.gen.py b/doc/inst-set.texi.gen.py
index 520f66e..9481059 100755
--- a/doc/inst-set.texi.gen.py
+++ b/doc/inst-set.texi.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -55,10 +55,10 @@ for inst in instructions:
kind = inst.kind
print "@node " + string.capwords(kind) + " instructions"
print "@subsection " + string.capwords(kind) + " instructions"
-
+
desc = string.replace(inst.desc, "\n", " ")
desc = string.replace(desc, " ", " ")
-
+
print "@subsubsection " + string.upper(inst.opcode)
print "@findex " + string.upper(inst.opcode)
print desc
diff --git a/src/inst/nodes.gen.py b/src/inst/nodes.gen.py
index 10c6d91..57abaad 100755
--- a/src/inst/nodes.gen.py
+++ b/src/inst/nodes.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -44,12 +44,12 @@ def class_generate(inst):
file_id = nolimips.file_id(inst.opcode)
banner = nolimips.license + "\n" + nolimips.generated_by_hand
format = inst.format
-
+
## Open header, inline and implementation files
header = file(file_id + ".hh.tmp", "w")
inline = file(file_id + ".hxx.tmp", "w")
impl = file(file_id + ".cc.tmp", "w")
-
+
for f, ext, brief in [(header, "hh", "Declare the interface"),
(inline, "hxx", "Inline methods"),
(impl, "cc", "Implementation")]:
@@ -71,7 +71,7 @@ def class_generate(inst):
sys.stdout = impl
print "#include \"inst/visitor.hh\""
-
+
for f in [inline, impl]:
sys.stdout = f
print "#include \"inst/" + file_id + ".hh\""
@@ -91,13 +91,13 @@ namespace inst
print " class " + class_id + ":"
print " public Inst"
print " {"
-
+
# Constructor and destructor
args = ""
init = ""
dels = ""
for attribute in format.attributes:
-
+
if attribute.type == "Register":
args = args + "const " + attribute.type + " &"
elif attribute.type == "Exp":
@@ -159,7 +159,7 @@ namespace inst
print " }"
sys.stdout = header
print " /** \\} */"
-
+
# Method: visitor entry point
sys.stdout = inline
print ""
diff --git a/src/inst/nodes.mk.gen.py b/src/inst/nodes.mk.gen.py
index 0996a0a..52a8b0b 100755
--- a/src/inst/nodes.mk.gen.py
+++ b/src/inst/nodes.mk.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -28,13 +28,13 @@ from nolimips import depth
parser = nolimips.InstructionSetParser()
instructions = parser.parse(sys.stdin)
-print "FROM_NODES_GEN_PY = \\"
+print "FROM_NODES_GEN_PY = \\"
for i in range(0, len(instructions)):
if instructions[i].level == "native":
line = "\t"
for ext in ["hh", "hxx", "cc"]:
line = line + instructions[i].opcode + "." + ext + " "
print line + "\t\t\\"
-print """ fwd.hh \\
- all.hh \\
- visitor.hh"""
+print """ fwd.hh \\
+ all.hh \\
+ visitor.hh"""
diff --git a/src/inst/program_builder.hh.gen.py b/src/inst/program_builder.hh.gen.py
index e9803b0..20b7bd6 100755
--- a/src/inst/program_builder.hh.gen.py
+++ b/src/inst/program_builder.hh.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -52,7 +52,7 @@ namespace inst
{
using vm::Cpu;
-
+
class ProgramBuilder
{
public:
@@ -62,9 +62,9 @@ namespace inst
void reset();
void set_nop_after_branch(bool nop_after_branch_p);
-
+
Program *get();
-
+
public:
void define_inst_label(const misc::unique_string &id);
void define_data_label(const misc::unique_string &id);
@@ -95,7 +95,7 @@ for inst in instructions:
for syntax in inst.syntaxes:
if (syntax.alias != "") or (syntax.level == "pseudo"):
continue
-
+
if syntax.level == "native":
proto = ""
call = ""
@@ -112,14 +112,14 @@ for inst in instructions:
print " program_->text_section().add_inst (" + call + ");"
if inst.kind == "branch":
print " if (nop_after_branch_p_)"
- print " program_->text_section()."
- print " add_inst (new Sll(Register(Register::general, " + \
+ print " program_->text_section()."
+ print " add_inst (new Sll(Register(Register::general, " + \
"Cpu::zero), "
- print " Register(Register::general, " + \
+ print " Register(Register::general, " + \
"Cpu::zero), "
- print " new IntExp(0)));"
+ print " new IntExp(0)));"
print " }"
-
+
else: # syntax.level == "complex"
proto = ""
for token in syntax.tokens:
@@ -129,7 +129,7 @@ for inst in instructions:
proto = proto + ", "
proto = string.rstrip(proto, ", ")
print " void\tadd_" + inst.opcode + "(" + proto + ");"
-
+
print """
protected:
Program *program_;
diff --git a/src/inst/program_solver.gen.py b/src/inst/program_solver.gen.py
index 1543eb2..a85bb86 100755
--- a/src/inst/program_solver.gen.py
+++ b/src/inst/program_solver.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -52,7 +52,7 @@ namespace inst
{
class ProgramSolver:
- protected Visitor,
+ protected Visitor,
protected ExpVisitor
{
public:
@@ -84,9 +84,9 @@ namespace inst
print " protected:"
for inst in instructions:
if inst.level == "native":
- print " virtual void visit(" +\
+ print " virtual void visit(" +\
nolimips.class_id(inst.opcode) + " &);"
-
+
print """
protected:
Program *program_;
@@ -144,14 +144,14 @@ namespace inst
{
if (! program_->data_section().has_label(l.get_name()))
if (! program_->text_section().has_label(l.get_name()))
- {
- std::cerr << \"Undefined label: \" << l.get_name()
- << std::endl;
- exit_set(exit_solve);
- }
+ {
+ std::cerr << \"Undefined label: \" << l.get_name()
+ << std::endl;
+ exit_set(exit_solve);
+ }
else
- l.set_immediate(program_->text_section().
- get_offset(l.get_name()) - pc_);
+ l.set_immediate(program_->text_section().
+ get_offset(l.get_name()) - pc_);
else
l.set_immediate(program_->data_section().get_offset(l.get_name()));
}
@@ -164,21 +164,21 @@ namespace inst
switch (o.kind_)
{
case OpExp::add:
- o.set_immediate(o.get_left().get_immediate() +
- o.get_right().get_immediate());
- break;
+ o.set_immediate(o.get_left().get_immediate() +
+ o.get_right().get_immediate());
+ break;
case OpExp::sub:
- o.set_immediate(o.get_left().get_immediate() -
- o.get_right().get_immediate());
- break;
- case OpExp::mul:
- o.set_immediate(o.get_left().get_immediate() *
- o.get_right().get_immediate());
- break;
+ o.set_immediate(o.get_left().get_immediate() -
+ o.get_right().get_immediate());
+ break;
+ case OpExp::mul:
+ o.set_immediate(o.get_left().get_immediate() *
+ o.get_right().get_immediate());
+ break;
case OpExp::div:
- o.set_immediate(o.get_left().get_immediate() /
- o.get_right().get_immediate());
- break;
+ o.set_immediate(o.get_left().get_immediate() /
+ o.get_right().get_immediate());
+ break;
}
}
@@ -188,46 +188,46 @@ namespace inst
switch (reg.get_kind())
{
case Register::generic:
- reg.set_kind(Register::general);
+ reg.set_kind(Register::general);
case Register::general:
- if ((reg.get_index() == vm::Cpu::t9 && max_caller_save_ < 10)
- || (reg.get_index() == vm::Cpu::t8 && max_caller_save_ < 9)
- || (vm::Cpu::t0 + max_caller_save_ - 1 < reg.get_index()
- && reg.get_index() <= vm::Cpu::t7))
- {
- std::cerr << \"Caller-save register limited.\" << std::endl;
- exit_set(exit_solve);
- }
- else if (vm::Cpu::s0 + max_callee_save_ - 1 < reg.get_index() &&
- reg.get_index() <= vm::Cpu::s7)
- {
- std::cerr << \"Callee-save register limited.\" << std::endl;
- exit_set(exit_solve);
- }
+ if ((reg.get_index() == vm::Cpu::t9 && max_caller_save_ < 10)
+ || (reg.get_index() == vm::Cpu::t8 && max_caller_save_ < 9)
+ || (vm::Cpu::t0 + max_caller_save_ - 1 < reg.get_index()
+ && reg.get_index() <= vm::Cpu::t7))
+ {
+ std::cerr << \"Caller-save register limited.\" << std::endl;
+ exit_set(exit_solve);
+ }
+ else if (vm::Cpu::s0 + max_callee_save_ - 1 < reg.get_index() &&
+ reg.get_index() <= vm::Cpu::s7)
+ {
+ std::cerr << \"Callee-save register limited.\" << std::endl;
+ exit_set(exit_solve);
+ }
else if (vm::Cpu::a0 + max_args_ - 1 < reg.get_index() &&
- reg.get_index() <= vm::Cpu::a3)
+ reg.get_index() <= vm::Cpu::a3)
{
- std::cerr << \"Argument register limited.\" << std::endl;
- exit_set(exit_solve);
+ std::cerr << \"Argument register limited.\" << std::endl;
+ exit_set(exit_solve);
}
- break;
+ break;
case Register::unlimited:
- if (!unlimited_regs_enabled_)
- {
- std::cerr << \"Unlimited registers prohibited.\" << std::endl;
- exit_set(exit_solve);
- }
- break;
+ if (!unlimited_regs_enabled_)
+ {
+ std::cerr << \"Unlimited registers prohibited.\" << std::endl;
+ exit_set(exit_solve);
+ }
+ break;
};
}
-
+
void
ProgramSolver::solve_cop_register(Register ®) const
{
if (reg.get_kind() != Register::generic)
{
- std::cerr << \"Coprocessor registers must be generic.\" << std::endl;
- exit_set(exit_solve);
+ std::cerr << \"Coprocessor registers must be generic.\" << std::endl;
+ exit_set(exit_solve);
}
}
@@ -236,7 +236,7 @@ namespace inst
for inst in instructions:
if inst.level == "native":
var_id = nolimips.var_id(inst.opcode)
-
+
content = ""
for attribute in inst.format.attributes:
if attribute.type == "Exp":
@@ -248,7 +248,7 @@ for inst in instructions:
else:
content = content + " solve_cpu_register("
content = content + var_id + ".get_" + attribute.name + "());\n"
-
+
print " void"
if content != "":
print " ProgramSolver::visit(" + nolimips.class_id(inst.opcode) + \
@@ -258,7 +258,7 @@ for inst in instructions:
print " ProgramSolver::visit(" + nolimips.class_id(inst.opcode) + " &)"
print " {"
print " }"
-
+
print """
} // namespace inst"""
diff --git a/src/parse/asm-parse.yy.gen.py b/src/parse/asm-parse.yy.gen.py
index c85c33e..01b5e11 100755
--- a/src/parse/asm-parse.yy.gen.py
+++ b/src/parse/asm-parse.yy.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -36,7 +36,7 @@ instructions = parser.parse(sys.stdin)
sys.stdout = file("asm-parse.yy.tmp", "w")
## Prologue --------------------------
-print "%{ // -*- C++ -*-"
+print "%{ // -*- C++ -*-"
print nolimips.license
print nolimips.generated_by_hand
print """
@@ -73,9 +73,9 @@ using namespace inst;
%union
{
- int i;
- std::string *s;
- misc::unique_string *id;
+ int i;
+ std::string *s;
+ misc::unique_string *id;
inst::Label *label;
inst::Register *reg;
inst::Exp *exp;
@@ -84,8 +84,8 @@ using namespace inst;
#include \"parse/asm-scan.hh\"
%}
-%token <id> LABEL \"label\"
-%token <id> LABEL_DEF \"label definition\"
+%token <id> LABEL \"label\"
+%token <id> LABEL_DEF \"label definition\"
%token <i> INTEGER \"integer\"
%token <s> STRING \"string\"
%token <reg> REGISTER \"register\"
@@ -100,10 +100,10 @@ using namespace inst;
%type <exp> exp
-%token YYEOF 0 \"end of file\"
-%token LPAREN \"(\"
-%token RPAREN \")\"
-%token COMMA \",\"
+%token YYEOF 0 \"end of file\"
+%token LPAREN \"(\"
+%token RPAREN \")\"
+%token COMMA \",\"
%left EXP_ADD EXP_SUB
%left EXP_MUL EXP_DIV
@@ -119,15 +119,15 @@ using namespace inst;
%token DIR_ASCII \".ascii\"
%token DIR_ASCIIZ \".asciiz\"
"""
-
+
for i in instructions:
print "%token " + define_id(i.opcode) + '\t\t"' + i.opcode + '"'
-
+
print """
-
+
%start program
%%
-//
+//
program
:
| program DIR_TEXT instructions
@@ -228,7 +228,7 @@ for inst in instructions:
i = i + 1
if i >= len(prod):
break
-
+
# Compute token indices
tokidx = {}
i = 0
@@ -238,7 +238,7 @@ for inst in instructions:
if token[1] != "":
assert(not tokidx.has_key(token[1]))
tokidx[token[1]] = i
-
+
# Build rule and action
rule = "|"
action = "program_builder.add_"
@@ -255,7 +255,7 @@ for inst in instructions:
rule = rule + " " + token[0]
value = "$" + str(i)
if token[2] != "":
- value = re.sub(r"\$\{([^}]*)\}",
+ value = re.sub(r"\$\{([^}]*)\}",
(lambda m: "$" + str(tokidx[m.groups(0)[0]])),
token[2])
if token[0] in tokid_map.values():
diff --git a/src/parse/asm-scan.ll.gen.py b/src/parse/asm-scan.ll.gen.py
index 48972ac..b1fe520 100755
--- a/src/parse/asm-scan.ll.gen.py
+++ b/src/parse/asm-scan.ll.gen.py
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
-##
+##
## Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
##
@@ -53,7 +53,7 @@ print """
#define YY_NEVER_INTERACTIVE 1
-#define YY_USER_ACTION \\
+#define YY_USER_ACTION \\
yylloc->columns (yyleng);
using inst::Register;
@@ -68,40 +68,40 @@ typedef yy::parser::token token;
%option debug
%x STATE_STRING
-eol \\n|\\r|\\n\\r|\\r\\n
+eol \\n|\\r|\\n\\r|\\r\\n
-dec_int [0-9]+
-hex_int 0x[0-9A-Fa-f]+
+dec_int [0-9]+
+hex_int 0x[0-9A-Fa-f]+
-id [a-zA-Z_][a-zA-Z_0-9]*
+id [a-zA-Z_][a-zA-Z_0-9]*
%%
%{
yylloc->step ();
%}
-[ \\t]+ yylloc->step ();
-[#;][^\\n\\r]* yylloc->step ();
-{eol} yylloc->lines (1); yylloc->step ();
+[ \\t]+ yylloc->step ();
+[#;][^\\n\\r]* yylloc->step ();
+{eol} yylloc->lines (1); yylloc->step ();
-\"(\" return token::LPAREN;
-\")\" return token::RPAREN;
-\",\" return token::COMMA;
+\"(\" return token::LPAREN;
+\")\" return token::RPAREN;
+\",\" return token::COMMA;
-\"+\" return token::EXP_ADD;
-\"-\" return token::EXP_SUB;
-\"*\" return token::EXP_MUL;
-\"/\" return token::EXP_DIV;
+\"+\" return token::EXP_ADD;
+\"-\" return token::EXP_SUB;
+\"*\" return token::EXP_MUL;
+\"/\" return token::EXP_DIV;
-\".text\" return token::DIR_TEXT;
-\".data\" return token::DIR_DATA;
+\".text\" return token::DIR_TEXT;
+\".data\" return token::DIR_DATA;
-\".space\" return token::DIR_SPACE;
-\".byte\" return token::DIR_BYTE;
-\".half\" return token::DIR_HALF;
-\".word\" return token::DIR_WORD;
-\".ascii\" return token::DIR_ASCII;
-\".asciiz\" return token::DIR_ASCIIZ;
+\".space\" return token::DIR_SPACE;
+\".byte\" return token::DIR_BYTE;
+\".half\" return token::DIR_HALF;
+\".word\" return token::DIR_WORD;
+\".ascii\" return token::DIR_ASCII;
+\".asciiz\" return token::DIR_ASCIIZ;
"""
## Body --------------------------------
@@ -111,54 +111,54 @@ for inst in instructions:
## Epilogue ----------------------------
print """
-\"$\"([0-9]|[12][0-9]|3[01]) {
+\"$\"([0-9]|[12][0-9]|3[01]) {
yylval->reg = new Register(Register::generic, atoi(yytext +1));
return token::REGISTER;
}
-\"$zero\" {
+\"$zero\" {
yylval->reg = new Register(Register::general, Cpu::zero);
return token::REGISTER;
}"""
for k, r in [("v", range(2)), ("a", range(4)),
("t", range(10)), ("s", range(8))]:
for i in r:
- print "\"$" + k + str(i) + "\" {"
+ print "\"$" + k + str(i) + "\" {"
print " yylval->reg = new Register(Register::general, " + \
"Cpu::" + k + str(i)+ ");"
print " return token::REGISTER;\n}"
print """
-\"$sp\" {
+\"$sp\" {
yylval->reg = new Register(Register::general, Cpu::sp);
return token::REGISTER;
}
-\"$fp\" {
+\"$fp\" {
yylval->reg = new Register(Register::general, Cpu::fp);
return token::REGISTER;
}
-\"$ra\" {
+\"$ra\" {
yylval->reg = new Register(Register::general, Cpu::ra);
return token::REGISTER;
}
-\"$x\"{dec_int} {
+\"$x\"{dec_int} {
yylval->reg = new Register(Register::unlimited, atoi(yytext +2));
return token::REGISTER;
}
-{id} {
+{id} {
yylval->id = new misc::unique_string(yytext);
return token::LABEL;
}
-{id}\":\" {
+{id}\":\" {
yytext[yyleng - 1] = 0; // Remove last character (side-effects on yytext are allowed)
yylval->id = new misc::unique_string(yytext);
return token::LABEL_DEF;
}
--?{dec_int} {
+-?{dec_int} {
std::istringstream iss(yytext);
if (iss.peek() == '-')
@@ -169,13 +169,13 @@ print """
if (iss.fail())
{
std::cerr << *yylloc
- << \": unrecognized integer (may be too large): \"
- << yytext << std::endl;
+ << \": unrecognized integer (may be too large): \"
+ << yytext << std::endl;
exit_set (exit_scan);
}
return token::INTEGER;
}
--?{hex_int} {
+-?{hex_int} {
std::istringstream iss(yytext);
if (iss.peek() == '-')
@@ -186,78 +186,78 @@ print """
if (iss.fail())
{
std::cerr << *yylloc
- << \": unrecognized integer (may be too large): \"
- << yytext << std::endl;
+ << \": unrecognized integer (may be too large): \"
+ << yytext << std::endl;
exit_set (exit_scan);
}
return token::INTEGER;
}
-'\\\\a' yylval->i = '\\a'; return token::INTEGER;
-'\\\\b' yylval->i = '\\b'; return token::INTEGER;
-'\\\\f' yylval->i = '\\f'; return token::INTEGER;
-'\\\\n' yylval->i = '\\n'; return token::INTEGER;
-'\\\\r' yylval->i = '\\r'; return token::INTEGER;
-'\\\\t' yylval->i = '\\t'; return token::INTEGER;
-'\\\\v' yylval->i = '\\v'; return token::INTEGER;
-'\\\\[\\\\\\']' yylval->i = yytext[1]; return token::INTEGER;
-'\\\\.' {
+'\\\\a' yylval->i = '\\a'; return token::INTEGER;
+'\\\\b' yylval->i = '\\b'; return token::INTEGER;
+'\\\\f' yylval->i = '\\f'; return token::INTEGER;
+'\\\\n' yylval->i = '\\n'; return token::INTEGER;
+'\\\\r' yylval->i = '\\r'; return token::INTEGER;
+'\\\\t' yylval->i = '\\t'; return token::INTEGER;
+'\\\\v' yylval->i = '\\v'; return token::INTEGER;
+'\\\\[\\\\\\']' yylval->i = yytext[1]; return token::INTEGER;
+'\\\\.' {
std::cerr << *yylloc
- << \": unrecognized escape: \" << escape (yytext) << std::endl;
+ << \": unrecognized escape: \" << escape (yytext) << std::endl;
exit_set (exit_scan);
}
-'[^\\'\\n\\r\\\\]' yylval->i = yytext[1]; return token::INTEGER;
+'[^\\'\\n\\r\\\\]' yylval->i = yytext[1]; return token::INTEGER;
-\\\" yylval->s = new std::string; BEGIN STATE_STRING;
+\\\" yylval->s = new std::string; BEGIN STATE_STRING;
<STATE_STRING>{
- \\\" {
+ \\\" {
BEGIN INITIAL;
return token::STRING;
}
- \\\\[0-7]{3} {
+ \\\\[0-7]{3} {
long c = strtol (yytext + 1, 0, 8);
if (c > 255)
{
- std::cerr << *yylloc
- << \": invalid escape: \" << escape (yytext) << std::endl;
- exit_set (exit_scan);
+ std::cerr << *yylloc
+ << \": invalid escape: \" << escape (yytext) << std::endl;
+ exit_set (exit_scan);
}
else
*(yylval->s) += c;
}
-
- \\\\x[0-9a-fA-F]{2} {
+
+ \\\\x[0-9a-fA-F]{2} {
*(yylval->s) += strtol (yytext + 2, 0, 16);
}
-
- \\\\a *(yylval->s) += '\\a';
- \\\\b *(yylval->s) += '\\b';
- \\\\f *(yylval->s) += '\\f';
- \\\\n *(yylval->s) += '\\n';
- \\\\r *(yylval->s) += '\\r';
- \\\\t *(yylval->s) += '\\t';
- \\\\v *(yylval->s) += '\\v';
- \\\\[\\\\\"\"] *(yylval->s) += yytext[1];
- \\\\. {
+
+ \\\\a *(yylval->s) += '\\a';
+ \\\\b *(yylval->s) += '\\b';
+ \\\\f *(yylval->s) += '\\f';
+ \\\\n *(yylval->s) += '\\n';
+ \\\\r *(yylval->s) += '\\r';
+ \\\\t *(yylval->s) += '\\t';
+ \\\\v *(yylval->s) += '\\v';
+ \\\\[\\\\\"\"] *(yylval->s) += yytext[1];
+ \\\\. {
std::cerr << *yylloc
- << \": unrecognized escape: \" << escape (yytext) << std::endl;
+ << \": unrecognized escape: \" << escape (yytext) << std::endl;
exit_set (exit_scan);
}
-
- [^\\\"\\n\\r\\\\]+ yylval->s->append (yytext, yyleng);
-
- {eol} {
+
+ [^\\\"\\n\\r\\\\]+ yylval->s->append (yytext, yyleng);
+
+ {eol} {
yylloc->lines (1);
yylval->s->append (\"\\n\", 1);
}
-
- <<EOF>> {
+
+ <<EOF>> {
std::cerr
<< *yylloc << \": unexpected end of file in a string\" << std::endl;
exit_set (exit_scan);
-
+
BEGIN INITIAL;
return token::STRING;
}
@@ -265,8 +265,8 @@ print """
. {
std::cerr << *yylloc
- << \": invalid character: `\"
- << escape (yytext) << \"'\" << std::endl;
+ << \": invalid character: `\"
+ << escape (yytext) << \"'\" << std::endl;
yylloc->step ();
exit_set (exit_scan);
}
@@ -311,22 +311,22 @@ namespace parse
// Save the current state
states.push(YY_CURRENT_BUFFER);
-
+
yy_flex_debug = trace_p;
if (filename == \"-\")
yyin = stdin;
else
{
- yyin = fopen (filename.c_str (), \"r\");
- if (!yyin)
- {
- std::cerr
- << program_name
- << \": cannot open `\" << filename << \"': \"
- << strerror (errno) << std::endl;
- exit (1);
- }
+ yyin = fopen (filename.c_str (), \"r\");
+ if (!yyin)
+ {
+ std::cerr
+ << program_name
+ << \": cannot open `\" << filename << \"': \"
+ << strerror (errno) << std::endl;
+ exit (1);
+ }
}
yy_switch_to_buffer(yy_create_buffer (yyin, YY_BUF_SIZE));
@@ -336,7 +336,7 @@ namespace parse
scan_close (void)
{
fclose (yyin);
-
+
// Restore the current scanning state.
assertion(!states.empty());
yy_delete_buffer(YY_CURRENT_BUFFER);
--
1.7.2.5
* common.hh, inst-tasks.cc, inst-tasks.hh, inst/data_section.cc,
* inst/inst.hh, inst/op_exp.cc, inst/op_exp.hxx,
* inst/program_builder.cc, inst/program_builder.hxx,
* inst/program_solver.hxx, inst/register.hh, inst/section.cc,
* inst/section.hh, inst/text_label.hh, inst/text_label.hxx,
* inst/text_section.cc, misc/contract.hh, misc/counted_ptr.hh,
* misc/deref.hh, misc/escape.hh, misc/has.hh, misc/lexutils.cc,
* misc/lexutils.hh, misc/select_const.hh, misc/table.hh,
* misc/test-unique_string.cc, misc/unique_string.cc,
* misc/unique_string.hh, modules.hh, nolimips-tasks.cc,
* nolimips-tasks.hh, nolimips.cc, parse-tasks.cc, parse-tasks.hh,
* parse/asm-scan.hh, parse/fwd.hh, parse/libparse.cc,
* parse/libparse.hh, shell-tasks.cc, shell-tasks.hh, shell/cmd.hh,
* shell/cmd.hxx, shell/shell.cc, shell/shell.hh, shell/shell.hxx,
* task-tasks.cc, task-tasks.hh, task/boolean_task.cc,
* task/boolean_task.hh, task/function_task.cc, task/function_task.hh,
* task/int_task.cc, task/int_task.hh, task/libtask.hh,
* task/string_task.cc, task/string_task.hh, task/task.cc,
* task/task.hh, task/task.hxx, task/task_register.cc,
* task/task_register.hh, task/task_register.hxx, vm-tasks.cc,
* vm-tasks.hh, vm/cp0.hh, vm/cpu.cc, vm/cpu.hh, vm/cpu.hxx, vm/fwd.hh,
* vm/memory.hh, vm/memory.hxx, vm/mmu.hh, vm/mmu.hxx,
* vm/nolimips_system_library.cc, vm/nolimips_system_library.hh,
* vm/nolimips_system_library.hxx, vm/segment.hxx,
* vm/spim_system_library.cc, vm/spim_system_library.hxx,
* vm/virtual_machine.cc, vm/virtual_machine.hh:
Untabify (using GNU expand).
Remove trailing spaces.
---
src/common.hh | 4 +-
src/inst-tasks.cc | 6 +-
src/inst-tasks.hh | 18 +-
src/inst/data_section.cc | 68 +++---
src/inst/inst.hh | 8 +-
src/inst/op_exp.cc | 6 +-
src/inst/op_exp.hxx | 6 +-
src/inst/program_builder.cc | 166 +++++++-------
src/inst/program_builder.hxx | 18 +-
src/inst/program_solver.hxx | 4 +-
src/inst/register.hh | 12 +-
src/inst/section.cc | 8 +-
src/inst/section.hh | 2 +-
src/inst/text_label.hh | 2 +-
src/inst/text_label.hxx | 2 +-
src/inst/text_section.cc | 28 ++--
src/misc/contract.hh | 28 ++--
src/misc/counted_ptr.hh | 54 +++---
src/misc/deref.hh | 24 +-
src/misc/escape.hh | 24 +-
src/misc/has.hh | 12 +-
src/misc/lexutils.cc | 4 +-
src/misc/lexutils.hh | 4 +-
src/misc/select_const.hh | 8 +-
src/misc/table.hh | 36 ++--
src/misc/test-unique_string.cc | 4 +-
src/misc/unique_string.cc | 4 +-
src/misc/unique_string.hh | 10 +-
src/modules.hh | 4 +-
src/nolimips-tasks.cc | 4 +-
src/nolimips-tasks.hh | 12 +-
src/nolimips.cc | 8 +-
src/parse-tasks.cc | 30 ++--
src/parse-tasks.hh | 20 +-
src/parse/asm-scan.hh | 6 +-
src/parse/fwd.hh | 4 +-
src/parse/libparse.cc | 4 +-
src/parse/libparse.hh | 4 +-
src/shell-tasks.cc | 4 +-
src/shell-tasks.hh | 6 +-
src/shell/cmd.hh | 44 ++--
src/shell/cmd.hxx | 4 +-
src/shell/shell.cc | 424 ++++++++++++++++++------------------
src/shell/shell.hh | 12 +-
src/shell/shell.hxx | 14 +-
src/task-tasks.cc | 4 +-
src/task-tasks.hh | 6 +-
src/task/boolean_task.cc | 14 +-
src/task/boolean_task.hh | 6 +-
src/task/function_task.cc | 14 +-
src/task/function_task.hh | 6 +-
src/task/int_task.cc | 14 +-
src/task/int_task.hh | 6 +-
src/task/libtask.hh | 54 +++---
src/task/string_task.cc | 14 +-
src/task/string_task.hh | 12 +-
src/task/task.cc | 44 ++--
src/task/task.hh | 4 +-
src/task/task.hxx | 6 +-
src/task/task_register.cc | 318 ++++++++++++++--------------
src/task/task_register.hh | 6 +-
src/task/task_register.hxx | 6 +-
src/vm-tasks.cc | 74 +++---
src/vm-tasks.hh | 36 ++--
src/vm/cp0.hh | 102 +++++-----
src/vm/cpu.cc | 352 +++++++++++++++---------------
src/vm/cpu.hh | 174 ++++++++--------
src/vm/cpu.hxx | 50 ++--
src/vm/fwd.hh | 4 +-
src/vm/memory.hh | 10 +-
src/vm/memory.hxx | 2 +-
src/vm/mmu.hh | 6 +-
src/vm/mmu.hxx | 34 ++--
src/vm/nolimips_system_library.cc | 68 +++---
src/vm/nolimips_system_library.hh | 4 +-
src/vm/nolimips_system_library.hxx | 4 +-
src/vm/segment.hxx | 24 +-
src/vm/spim_system_library.cc | 96 ++++----
src/vm/spim_system_library.hxx | 2 +-
src/vm/virtual_machine.cc | 40 ++--
src/vm/virtual_machine.hh | 22 +-
81 files changed, 1406 insertions(+), 1406 deletions(-)
diff --git a/src/common.hh b/src/common.hh
index b9fbaba..fa1e823 100644
--- a/src/common.hh
+++ b/src/common.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/inst-tasks.cc b/src/inst-tasks.cc
index 500dce3..2a90e6f 100644
--- a/src/inst-tasks.cc
+++ b/src/inst-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -47,7 +47,7 @@ namespace inst
program_solver.enable_unlimited_regs(parse::unlimited_regs_p);
program_solver.solve(* parse::tasks::program);
if (exit_status != exit_success)
- exit (exit_status);
+ exit (exit_status);
}
} // namespace tasks
diff --git a/src/inst-tasks.hh b/src/inst-tasks.hh
index fe593ce..f99d611 100644
--- a/src/inst-tasks.hh
+++ b/src/inst-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -29,25 +29,25 @@ namespace inst
TASK_MODULE ("2. Instructions");
TASK_DECLARE ("prg-display",
- "Display the read program",
- prg_display, "parse");
+ "Display the read program",
+ prg_display, "parse");
TASK_DECLARE ("prg-solve",
- "Resolve jump offsets and check bounds of immediates",
- prg_solve, "parse");
+ "Resolve jump offsets and check bounds of immediates",
+ prg_solve, "parse");
INT_TASK_DECLARE ("callee-save",
"Set max number of callee-save registers",
max_callee_save, 8, 0, 8,
- "");
+ "");
INT_TASK_DECLARE ("caller-save",
"Set max number of caller-save registers",
max_caller_save, 10, 0, 10,
- "");
+ "");
INT_TASK_DECLARE ("argument-registers",
"Set max number of argument registers",
max_args, 4, 0, 4,
- "");
+ "");
} // namespace tasks
} // namespace inst
diff --git a/src/inst/data_section.cc b/src/inst/data_section.cc
index 6cf21da..b13396c 100644
--- a/src/inst/data_section.cc
+++ b/src/inst/data_section.cc
@@ -48,40 +48,40 @@ namespace inst
{
if (0 < size())
{
- ostr << "\t" << name_ << std::endl;
-
- std::vector<const Label*>::const_iterator label_it = labels_.begin();
-
- int next_labeled_offset = size();
- if (!labels_.empty())
- next_labeled_offset = (*label_it)->get_offset();
-
- for (int i = 0; i < size(); ++i)
- {
- while (i == next_labeled_offset)
- {
- ostr << *(*label_it) << ':' << std::endl;
- ++label_it;
-
- if (label_it != labels_.end())
- next_labeled_offset = (*label_it)->get_offset();
- else // No more labels
- break;
- }
-
- ostr << "\t.byte\t0x"
- << std::hex << static_cast<unsigned>(bytes_[i])
- << std::endl;
- }
-
- // Print labels that point right after the last data
- while (label_it != labels_.end())
- {
- ostr << *(*label_it) << ':' << std::endl;
- ++label_it;
- }
-
- ostr << std::dec;
+ ostr << "\t" << name_ << std::endl;
+
+ std::vector<const Label*>::const_iterator label_it = labels_.begin();
+
+ int next_labeled_offset = size();
+ if (!labels_.empty())
+ next_labeled_offset = (*label_it)->get_offset();
+
+ for (int i = 0; i < size(); ++i)
+ {
+ while (i == next_labeled_offset)
+ {
+ ostr << *(*label_it) << ':' << std::endl;
+ ++label_it;
+
+ if (label_it != labels_.end())
+ next_labeled_offset = (*label_it)->get_offset();
+ else // No more labels
+ break;
+ }
+
+ ostr << "\t.byte\t0x"
+ << std::hex << static_cast<unsigned>(bytes_[i])
+ << std::endl;
+ }
+
+ // Print labels that point right after the last data
+ while (label_it != labels_.end())
+ {
+ ostr << *(*label_it) << ':' << std::endl;
+ ++label_it;
+ }
+
+ ostr << std::dec;
}
}
diff --git a/src/inst/inst.hh b/src/inst/inst.hh
index 9503913..be8015c 100644
--- a/src/inst/inst.hh
+++ b/src/inst/inst.hh
@@ -30,9 +30,9 @@ namespace inst
public:
enum format_type
{
- i_type = 0,
- r_type = 1,
- j_type = 2
+ i_type = 0,
+ r_type = 1,
+ j_type = 2
};
public:
@@ -47,7 +47,7 @@ namespace inst
virtual void write(std::ostream&) const = 0;
public:
- format_type get_format() const;
+ format_type get_format() const;
private:
const format_type format_;
diff --git a/src/inst/op_exp.cc b/src/inst/op_exp.cc
index 7f64df3..a97f69a 100644
--- a/src/inst/op_exp.cc
+++ b/src/inst/op_exp.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -49,7 +49,7 @@ namespace inst
case sub: ostr << " - "; break;
case mul: ostr << " * "; break;
case div: ostr << " / "; break;
- }
+ }
ostr << *right_;
}
diff --git a/src/inst/op_exp.hxx b/src/inst/op_exp.hxx
index 8f4ce72..78f2ec8 100644
--- a/src/inst/op_exp.hxx
+++ b/src/inst/op_exp.hxx
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -26,7 +26,7 @@ namespace inst
//
inline
OpExp::OpExp(const CountedExp &left, kind_type kind,
- const CountedExp &right):
+ const CountedExp &right):
kind_(kind), left_(left), right_(right)
{
// assertion(left && right);
diff --git a/src/inst/program_builder.cc b/src/inst/program_builder.cc
index 9e906a2..39081ba 100644
--- a/src/inst/program_builder.cc
+++ b/src/inst/program_builder.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -37,9 +37,9 @@ namespace inst
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll
- (Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ (Register(Register::general, Cpu::zero),
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
program_->text_section ().
add_inst(new Sub(*dest, Register(Register::general, Cpu::zero), *src));
}
@@ -50,7 +50,7 @@ namespace inst
// Warning: is not implemented in as for mips, check why.
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Mul(*dest, *src1, Register(Register::general, Cpu::at)));
}
@@ -68,7 +68,7 @@ namespace inst
// FIXME: program_solver must warn and/or break when exp is zero
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Div(*src1, Register(Register::general, Cpu::at)));
program_->text_section ().add_inst(new Mflo(*dest));
@@ -86,7 +86,7 @@ namespace inst
// FIXME: program_solver must warn and/or break when exp is zero
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Divu(*src1, Register(Register::general, Cpu::at)));
program_->text_section ().add_inst(new Mflo(*dest));
@@ -106,7 +106,7 @@ namespace inst
program_->text_section ().add_inst(new Divu(*src1, *src2));
program_->text_section ().add_inst(new Mfhi(*dest));
}
-
+
// Bitwise instructions -------------------------------------
@@ -115,10 +115,10 @@ namespace inst
{
program_->text_section ().
add_inst(new Subu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), *src2));
+ Register(Register::general, Cpu::zero), *src2));
program_->text_section ().
add_inst(new Srlv(Register(Register::general, Cpu::at), *src1,
- Register(Register::general, Cpu::at)));
+ Register(Register::general, Cpu::at)));
program_->text_section ().add_inst(new Sllv(*dest, *src1, *src2));
program_->text_section ().
add_inst(new Or(*dest, *dest, Register(Register::general, Cpu::at)));
@@ -131,10 +131,10 @@ namespace inst
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::at), *src1,
- counted_exp));
+ counted_exp));
program_->text_section ().
add_inst(new Srl(*dest, *src1,
- new OpExp(new IntExp(32), OpExp::sub, counted_exp)));
+ new OpExp(new IntExp(32), OpExp::sub, counted_exp)));
program_->text_section ().
add_inst(new Or(*dest, *dest, Register(Register::general, Cpu::at)));
}
@@ -143,10 +143,10 @@ namespace inst
{
program_->text_section ().
add_inst(new Subu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), *src2));
+ Register(Register::general, Cpu::zero), *src2));
program_->text_section ().
add_inst(new Sllv(Register(Register::general, Cpu::at),
- *src1, Register(Register::general, Cpu::at)));
+ *src1, Register(Register::general, Cpu::at)));
program_->text_section ().add_inst(new Srlv(*dest, *src1, *src2));
program_->text_section ().
add_inst(new Or(*dest, *dest, Register(Register::general, Cpu::at)));
@@ -158,14 +158,14 @@ namespace inst
program_->text_section ().
add_inst(new Srl(Register(Register::general, Cpu::at), *src1,
- counted_exp));
+ counted_exp));
program_->text_section ().
add_inst(new Sll(*dest, *src1,
- new OpExp(new IntExp(32), OpExp::sub, counted_exp)));
+ new OpExp(new IntExp(32), OpExp::sub, counted_exp)));
program_->text_section ().
add_inst(new Or(*dest, *dest, Register(Register::general, Cpu::at)));
}
-
+
void
ProgramBuilder::add_nor(Register *dest, Register *src1, Exp *src2)
{
@@ -195,8 +195,8 @@ namespace inst
{
program_->text_section ().add_inst(new Xor(*dest, *src1, *src2));
program_->text_section ().
- add_inst(new Sltu(*dest,
- Register(Register::general, Cpu::zero), *dest));
+ add_inst(new Sltu(*dest,
+ Register(Register::general, Cpu::zero), *dest));
}
void
ProgramBuilder::add_sne(Register *dest, Register *src, Exp *exp)
@@ -237,7 +237,7 @@ namespace inst
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Slt(*dest, Register(Register::general, Cpu::at), *src1));
}
@@ -246,7 +246,7 @@ namespace inst
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Sltu(*dest, Register(Register::general, Cpu::at), *src1));
}
@@ -263,7 +263,7 @@ namespace inst
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Slt(*dest, Register(Register::general, Cpu::at), *src1));
program_->text_section ().add_inst(new Xori(*dest, *dest, new IntExp(1)));
@@ -279,13 +279,13 @@ namespace inst
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Sltu(*dest, Register(Register::general, Cpu::at), *src1));
program_->text_section ().
add_inst(new Xori(*dest, *dest, new IntExp(1)));
}
-
+
// Branch instructions -----------------------------------
@@ -295,28 +295,28 @@ namespace inst
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Bne(*src1, Register(Register::general, Cpu::at), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_beq(Register *src1, Exp *src2, Exp *dest)
{
program_->text_section ().
add_inst(new Addiu(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), src2));
+ Register(Register::general, Cpu::zero), src2));
program_->text_section ().
add_inst(new Beq(*src1, Register(Register::general, Cpu::at), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
// Greater
@@ -327,12 +327,12 @@ namespace inst
add_inst(new Slt(Register(Register::general, Cpu::at), *src1, *src2));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bge(Register *src1, Exp *src2, Exp *dest)
@@ -341,12 +341,12 @@ namespace inst
add_inst(new Slti(Register(Register::general, Cpu::at), *src1, src2));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bgeu(Register *src1, Register *src2, Exp *dest)
@@ -355,12 +355,12 @@ namespace inst
add_inst(new Sltu(Register(Register::general, Cpu::at), *src1, *src2));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bgeu(Register *src1, Exp *src2, Exp *dest)
@@ -369,12 +369,12 @@ namespace inst
add_inst(new Sltiu(Register(Register::general, Cpu::at), *src1, src2));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
@@ -384,27 +384,27 @@ namespace inst
add_inst(new Slt(Register(Register::general, Cpu::at), *src2, *src1));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bgt(Register *src1, Exp *src2, Exp *dest)
{
program_->text_section ().
add_inst(new Slti(Register(Register::general, Cpu::at), *src1,
- new OpExp(src2, OpExp::add, new IntExp(1))));
+ new OpExp(src2, OpExp::add, new IntExp(1))));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bgtu(Register *src1, Register *src2, Exp *dest)
@@ -413,27 +413,27 @@ namespace inst
add_inst(new Sltu(Register(Register::general, Cpu::at), *src2, *src1));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bgtu(Register *src1, Exp *src2, Exp *dest)
{
program_->text_section ().
add_inst(new Sltiu(Register(Register::general, Cpu::at), *src1,
- new OpExp(src2, OpExp::add, new IntExp(1))));
+ new OpExp(src2, OpExp::add, new IntExp(1))));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
// Lower
@@ -444,27 +444,27 @@ namespace inst
add_inst(new Slt(Register(Register::general, Cpu::at), *src2, *src1));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_ble(Register *src1, Exp *src2, Exp *dest)
{
program_->text_section ().
add_inst(new Slti(Register(Register::general, Cpu::at), *src1,
- new OpExp(src2, OpExp::add, new IntExp(1))));
+ new OpExp(src2, OpExp::add, new IntExp(1))));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bleu(Register *src1, Register *src2, Exp *dest)
@@ -473,27 +473,27 @@ namespace inst
add_inst(new Sltu(Register(Register::general, Cpu::at), *src2, *src1));
program_->text_section ().
add_inst(new Beq(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bleu(Register *src1, Exp *src2, Exp *dest)
{
program_->text_section ().
add_inst(new Sltiu(Register(Register::general, Cpu::at), *src1,
- new OpExp(src2, OpExp::add, new IntExp(1))));
+ new OpExp(src2, OpExp::add, new IntExp(1))));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
@@ -503,12 +503,12 @@ namespace inst
add_inst(new Slt(Register(Register::general, Cpu::at), *src1, *src2));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_blt(Register *src1, Exp *src2, Exp *dest)
@@ -517,12 +517,12 @@ namespace inst
add_inst(new Slti(Register(Register::general, Cpu::at), *src1, src2));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bltu(Register *src1, Register *src2, Exp *dest)
@@ -531,12 +531,12 @@ namespace inst
add_inst(new Sltu(Register(Register::general, Cpu::at), *src1, *src2));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
void
ProgramBuilder::add_bltu(Register *src1, Exp *src2, Exp *dest)
@@ -545,12 +545,12 @@ namespace inst
add_inst(new Sltiu(Register(Register::general, Cpu::at), *src1, src2));
program_->text_section ().
add_inst(new Bne(Register(Register::general, Cpu::at),
- Register(Register::general, Cpu::zero), dest));
+ Register(Register::general, Cpu::zero), dest));
// This nop is in the delay slot
program_->text_section ().
add_inst(new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
}
// Load --------------------------------------------------
diff --git a/src/inst/program_builder.hxx b/src/inst/program_builder.hxx
index bb6a8d7..f50cf96 100644
--- a/src/inst/program_builder.hxx
+++ b/src/inst/program_builder.hxx
@@ -49,9 +49,9 @@ namespace inst
// FIXME: fill end of program with NOPs for pipeline (really dirty!)
for (unsigned i = 0; i < 6; ++i)
program_->text_section().
- add_inst (new Sll(Register(Register::general, Cpu::zero),
- Register(Register::general, Cpu::zero),
- new IntExp(0)));
+ add_inst (new Sll(Register(Register::general, Cpu::zero),
+ Register(Register::general, Cpu::zero),
+ new IntExp(0)));
return program_;
}
@@ -61,9 +61,9 @@ namespace inst
{
if (!program_->text_section ().define_label(id))
{
- std::cerr << "Instruction label already defined in this section."
- << std::endl;
- exit_set(exit_solve);
+ std::cerr << "Instruction label already defined in this section."
+ << std::endl;
+ exit_set(exit_solve);
}
}
@@ -72,9 +72,9 @@ namespace inst
{
if (!program_->data_section ().define_label(id))
{
- std::cerr << "Data label already defined in this section."
- << std::endl;
- exit_set(exit_solve);
+ std::cerr << "Data label already defined in this section."
+ << std::endl;
+ exit_set(exit_solve);
}
}
diff --git a/src/inst/program_solver.hxx b/src/inst/program_solver.hxx
index 19d5d34..a43d2cc 100644
--- a/src/inst/program_solver.hxx
+++ b/src/inst/program_solver.hxx
@@ -65,8 +65,8 @@ namespace inst
pc_ = 4;
for (TextSection::instruction_list_type::const_iterator
- it = program.text_section().begin();
- it != program.text_section().end(); ++it, pc_ += 4)
+ it = program.text_section().begin();
+ it != program.text_section().end(); ++it, pc_ += 4)
(*it)->accept(*this);
}
diff --git a/src/inst/register.hh b/src/inst/register.hh
index 80278bf..28e391b 100644
--- a/src/inst/register.hh
+++ b/src/inst/register.hh
@@ -28,12 +28,12 @@ namespace inst
public:
enum kind_type
{
- /// Generic (processor, coprocessor) kind ($0, $1, etc.)
- generic,
- /// General purpose (processor) register ($zero, $a0, etc.)
- general,
- /// Unlimited (processor) register ($x2097, etc.)
- unlimited
+ /// Generic (processor, coprocessor) kind ($0, $1, etc.)
+ generic,
+ /// General purpose (processor) register ($zero, $a0, etc.)
+ general,
+ /// Unlimited (processor) register ($x2097, etc.)
+ unlimited
};
public:
diff --git a/src/inst/section.cc b/src/inst/section.cc
index 49003ec..80d6ec1 100644
--- a/src/inst/section.cc
+++ b/src/inst/section.cc
@@ -23,7 +23,7 @@ namespace inst
Section::~Section()
{
// for (label_set_type::iterator
-// it = sorted_labels_.begin(); it != sorted_labels_.end(); ++it)
+// it = sorted_labels_.begin(); it != sorted_labels_.end(); ++it)
// delete *it;
}
@@ -32,10 +32,10 @@ namespace inst
{
label_set_type::const_iterator it(sorted_labels_.find(label));
if (it == sorted_labels_.end()
- || *(*it) < *label)
+ || *(*it) < *label)
{
- it = sorted_labels_.insert(it, label);
- return true;
+ it = sorted_labels_.insert(it, label);
+ return true;
}
return false;
}
diff --git a/src/inst/section.hh b/src/inst/section.hh
index 9372d86..f11313e 100644
--- a/src/inst/section.hh
+++ b/src/inst/section.hh
@@ -42,7 +42,7 @@ namespace inst
protected:
/** Return false if the label already exists in this section, true
- otherwise */
+ otherwise */
bool register_label(Label *label);
public:
diff --git a/src/inst/text_label.hh b/src/inst/text_label.hh
index 32efdb7..5f273cb 100644
--- a/src/inst/text_label.hh
+++ b/src/inst/text_label.hh
@@ -29,7 +29,7 @@ namespace inst
{
public:
TextLabel(const std::string &s,
- TextSection::instruction_list_type::iterator it);
+ TextSection::instruction_list_type::iterator it);
virtual ~TextLabel();
public:
diff --git a/src/inst/text_label.hxx b/src/inst/text_label.hxx
index fccc59b..6ae417e 100644
--- a/src/inst/text_label.hxx
+++ b/src/inst/text_label.hxx
@@ -28,7 +28,7 @@ namespace inst
//
inline
TextLabel::TextLabel(const std::string &s,
- TextSection::instruction_list_type::iterator it):
+ TextSection::instruction_list_type::iterator it):
Label(s), it_(it)
{
}
diff --git a/src/inst/text_section.cc b/src/inst/text_section.cc
index af92627..5da786c 100644
--- a/src/inst/text_section.cc
+++ b/src/inst/text_section.cc
@@ -29,7 +29,7 @@ namespace inst
TextSection::~TextSection()
{
for (instruction_list_type::const_iterator
- it = insts_.begin(); it != insts_.end(); ++it)
+ it = insts_.begin(); it != insts_.end(); ++it)
delete (*it);
}
@@ -62,27 +62,27 @@ namespace inst
next_labeled_it = (*label_it)->get_iterator();
for (instruction_list_type::const_iterator
- inst_it = begin(); inst_it != end(); ++inst_it)
+ inst_it = begin(); inst_it != end(); ++inst_it)
{
- while (inst_it == next_labeled_it)
- {
- ostr << *(*label_it) << ':' << std::endl;
- ++label_it;
+ while (inst_it == next_labeled_it)
+ {
+ ostr << *(*label_it) << ':' << std::endl;
+ ++label_it;
- if (label_it != labels_.end())
- next_labeled_it = (*label_it)->get_iterator();
- else // No more labels
- break;
- }
+ if (label_it != labels_.end())
+ next_labeled_it = (*label_it)->get_iterator();
+ else // No more labels
+ break;
+ }
- ostr << '\t' << *(*inst_it) << std::endl;
+ ostr << '\t' << *(*inst_it) << std::endl;
}
// Print labels that point right after the last instruction
while (label_it != labels_.end())
{
- ostr << *(*label_it) << ':' << std::endl;
- ++label_it;
+ ostr << *(*label_it) << ':' << std::endl;
+ ++label_it;
}
}
diff --git a/src/misc/contract.hh b/src/misc/contract.hh
index 994ceba..441344d 100644
--- a/src/misc/contract.hh
+++ b/src/misc/contract.hh
@@ -6,19 +6,19 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
/** \file misc/contract.hh
- \brief Replacement for cassert.
-
+ \brief Replacement for cassert.
+
The implementation is inspired from LRDE's contract.hh/contract.cc
provided in the Tiger Compiler and the Vaucanson project.
*/
@@ -39,21 +39,21 @@
# include <cstdlib>
inline void __FailedCondition(const char* condType,
- const char* condText,
- const char* fileName,
- int fileLine)
+ const char* condText,
+ const char* fileName,
+ int fileLine)
{
std::cerr << fileName << ':'
- << fileLine
- << ": "
- << condType << " `"
- << condText << "' failed." << std::endl;
+ << fileLine
+ << ": "
+ << condType << " `"
+ << condText << "' failed." << std::endl;
abort();
}
-# define __TestCondition(condType,expr) \
- ((void) ((expr) ? 0 : (__FailedCondition( #condType, #expr, \
- __FILE__, __LINE__ ), 0)))
+# define __TestCondition(condType,expr) \
+ ((void) ((expr) ? 0 : (__FailedCondition( #condType, #expr, \
+ __FILE__, __LINE__ ), 0)))
# define assertion(expr) __TestCondition(Assertion,expr)
# define invariant(expr) __TestCondition(Invariant,expr)
diff --git a/src/misc/counted_ptr.hh b/src/misc/counted_ptr.hh
index e87c04b..fd61137 100644
--- a/src/misc/counted_ptr.hh
+++ b/src/misc/counted_ptr.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -19,7 +19,7 @@
/** \file misc/counted_ptr.hh
\brief Counted reference wrapper.
- A great part of the implementation comes from LRDE's ref.hh/ref.hxx,
+ A great part of the implementation comes from LRDE's ref.hh/ref.hxx,
provided in Tiger Compiler by Raphael Poss. */
#ifndef MISC_COUNTED_PTR_HH
@@ -35,7 +35,7 @@ namespace misc
of garbage collection.
This class implements the proposal of Gregory Colvin in Exception
- Safe Smart Pointers, C++ committee document 94-168/N0555, July, 1994.
+ Safe Smart Pointers, C++ committee document 94-168/N0555, July, 1994.
The concept of counted pointers is very similar to the concept of
file links in file systems, that is why I choose to use the
@@ -58,18 +58,18 @@ namespace misc
friend class counted_ptr;
/** \name Constructor and destructor
- \{ */
+ \{ */
public:
/** \brief A counted_ptr is usually constructed from a raw pointer.
- \param ptr A pointer (defaults to NULL). */
+ \param ptr A pointer (defaults to NULL). */
counted_ptr(element_type *ptr = 0):
ptr_(ptr)
{
count_ = new long(1);
}
-
+
/** \brief A counted_ptr can be constructed from another counted_ptr.
- \param c Another %auto_ptr of the same type. */
+ \param c Another %auto_ptr of the same type. */
counted_ptr(const counted_ptr &c):
ptr_(c.ptr_), count_(c.count_)
{
@@ -87,13 +87,13 @@ namespace misc
/** \} */
/** \name Conversion, assignement, comparison
- \{ */
+ \{ */
public:
/** \brief counted_ptr conversion operator.
-
- This conversion operator avoids having to define several
- constructors and test operators for creation from or comparison with
- counted pointers of a different but related type.
+
+ This conversion operator avoids having to define several
+ constructors and test operators for creation from or comparison with
+ counted pointers of a different but related type.
*/
template < typename U >
operator counted_ptr< U >() const
@@ -102,14 +102,14 @@ namespace misc
}
/** \brief counted_ptr assignment operator.
- \param c Another counted_ptr of the same type. */
+ \param c Another counted_ptr of the same type. */
counted_ptr&
operator=(const counted_ptr &c)
{
link(c.ptr_, c.count_);
return *this;
}
-
+
/** \brief Return true if \a c and this share the same data. */
bool
operator==(const counted_ptr &c)
@@ -129,25 +129,25 @@ namespace misc
{
--(*count_);
if (!*count_)
- {
- delete ptr_;
- delete count_;
- }
+ {
+ delete ptr_;
+ delete count_;
+ }
}
void link(T *ptr, long *count)
{
if (count_ != count)
- {
- ++(*count);
- unlink();
- ptr_ = ptr;
- count_ = count;
- }
+ {
+ ++(*count);
+ unlink();
+ ptr_ = ptr;
+ count_ = count;
+ }
}
/** \name Dereferencing
- \{ */
+ \{ */
public:
bool
exists() const
@@ -172,7 +172,7 @@ namespace misc
precondition(ptr_ != 0);
return ptr_;
}
- /** \} */
+ /** \} */
private:
diff --git a/src/misc/deref.hh b/src/misc/deref.hh
index c6678ce..799b5fd 100644
--- a/src/misc/deref.hh
+++ b/src/misc/deref.hh
@@ -1,18 +1,18 @@
//
// deref.hh: pretty printing pointers
-// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
+// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// This 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 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -33,9 +33,9 @@ namespace misc
postr_(0)
{}
public:
- static Deref& instance()
+ static Deref& instance()
{
- static Deref unique;
+ static Deref unique;
return unique;
}
virtual ~Deref()
@@ -44,28 +44,28 @@ namespace misc
public:
template <class T>
- std::ostream& operator<<(const T* t) const
+ std::ostream& operator<<(const T* t) const
{
assertion(postr_);
(*postr_) << *t;
return (*postr_);
}
template <class T>
- std::ostream& operator<<(T* t) const
+ std::ostream& operator<<(T* t) const
{
assertion(postr_);
(*postr_) << *t;
return (*postr_);
}
template <class T>
- std::ostream& operator<<(const T& t) const
+ std::ostream& operator<<(const T& t) const
{
assertion(postr_);
(*postr_) << t;
return (*postr_);
}
template <class T>
- std::ostream& operator<<(T& t) const
+ std::ostream& operator<<(T& t) const
{
assertion(postr_);
(*postr_) << t;
@@ -73,13 +73,13 @@ namespace misc
}
public:
- void ostr_set(std::ostream& ostr)
+ void ostr_set(std::ostream& ostr)
{
postr_ = &ostr;
}
protected:
- std::ostream* postr_;
+ std::ostream* postr_;
};
inline Deref&
@@ -91,6 +91,6 @@ namespace misc
} // namespace misc
-# define deref misc::Deref::instance()
+# define deref misc::Deref::instance()
#endif // !MISC_DEREF_HH
diff --git a/src/misc/escape.hh b/src/misc/escape.hh
index 5ca2ffb..83efd6a 100644
--- a/src/misc/escape.hh
+++ b/src/misc/escape.hh
@@ -1,18 +1,18 @@
//
// escape.hh: escaping special characters for output
-// Copyright (C) 2003, 2004, 2012 Akim Demaille <akim(a)epita.fr> and
+// Copyright (C) 2003, 2004, 2012 Akim Demaille <akim(a)epita.fr> and
// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// This 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 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -40,17 +40,17 @@ operator<<(std::ostream& o, const escape& e)
{
/* For some reason, when we use std::locale on Mac OS X, the
following exception may be thrown:
-
+
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
-
+
A workaround is to unset the environment variable `LANG' prior to
using std::locale, but this is cumbersome.
-
+
So we use the C locale-agnostic version of isprint() from header
`cctype', instead of C++ isprint() from header `locale' taking a
locale as second argument.
-
+
See also
http://stackoverflow.com/questions/1745045/stdlocale-breakage-on-macos-10-6…
on this topic. */
@@ -68,11 +68,11 @@ operator<<(std::ostream& o, const escape& e)
case '\\': o << "\\\\"; break;
case '\"': o << "\\\""; break;
default:
- if (std::isprint (*p))
- o << *p;
- else
- o << "\\x"
- << std::setfill ('0') << std::setw (2) << (int) (unsigned char) *p;
+ if (std::isprint (*p))
+ o << *p;
+ else
+ o << "\\x"
+ << std::setfill ('0') << std::setw (2) << (int) (unsigned char) *p;
}
o.flags (flags);
return o;
diff --git a/src/misc/has.hh b/src/misc/has.hh
index de07773..09e24a2 100644
--- a/src/misc/has.hh
+++ b/src/misc/has.hh
@@ -1,18 +1,18 @@
//
-// has.hh: finding element or key in STL containers.
-// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
+// has.hh: finding element or key in STL containers.
+// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// This 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 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -38,7 +38,7 @@ find (Container &c, const typename Container::value_type &v)
template <class Container>
inline bool
has (const Container &c, const typename Container::value_type &v)
-{
+{
// We specify the instance to solve a conflict between the
// two finds above, that compete against each other because
// the parameter Container can embed a "const".
@@ -48,7 +48,7 @@ has (const Container &c, const typename Container::value_type &v)
template <class Associative>
inline bool
has_key (const Associative &a, const typename Associative::key_type &k)
-{
+{
// We specify the instance to solve a conflict between the
// two finds above, that compete against each other because
// the parameter Container can embed a "const".
diff --git a/src/misc/lexutils.cc b/src/misc/lexutils.cc
index e2bbb83..981fd75 100644
--- a/src/misc/lexutils.cc
+++ b/src/misc/lexutils.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/misc/lexutils.hh b/src/misc/lexutils.hh
index 5eb9676..4c216d2 100644
--- a/src/misc/lexutils.hh
+++ b/src/misc/lexutils.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/misc/select_const.hh b/src/misc/select_const.hh
index 91efbd8..cbb091f 100644
--- a/src/misc/select_const.hh
+++ b/src/misc/select_const.hh
@@ -1,18 +1,18 @@
-//
+//
// select_const.hh: select between a const and a non-const type.
-// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
+// Copyright (C) 2003, 2004 Akim Demaille <akim(a)epita.fr> and
// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// This 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 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/misc/table.hh b/src/misc/table.hh
index 7228db0..c846a12 100644
--- a/src/misc/table.hh
+++ b/src/misc/table.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -31,8 +31,8 @@ namespace misc
class Table
{
public:
- typedef std::map<Key_T, Entry_T> scope_type;
- typedef std::list<scope_type> scopes_type;
+ typedef std::map<Key_T, Entry_T> scope_type;
+ typedef std::list<scope_type> scopes_type;
Table ()
{
@@ -40,18 +40,18 @@ namespace misc
}
public:
- void put (Key_T key, Entry_T value)
+ void put (Key_T key, Entry_T value)
{
scopes_.front ()[key] = value;
}
- bool has (Key_T key) const
+ bool has (Key_T key) const
{
typename scope_type::const_iterator im = scopes_.front ().find (key);
return (im != scopes_.front ().end ());
}
-
- Entry_T get (Key_T key) const
+
+ Entry_T get (Key_T key) const
{
typename scope_type::const_iterator im = scopes_.front ().find (key);
assertion (im != scopes_.front ().end ());
@@ -78,20 +78,20 @@ namespace misc
bool first = true;
for (typename scopes_type::const_iterator
- s = scopes_.begin (); s != scopes_.end (); ++s)
- {
- if (!first)
- ostr << "------------------------------" << std::endl;
- for (typename scope_type::const_iterator
- i = s->begin (); i != s->end (); ++i)
- ostr << i->first << " = " << i->second << std::endl;
- first = false;
- }
+ s = scopes_.begin (); s != scopes_.end (); ++s)
+ {
+ if (!first)
+ ostr << "------------------------------" << std::endl;
+ for (typename scope_type::const_iterator
+ i = s->begin (); i != s->end (); ++i)
+ ostr << i->first << " = " << i->second << std::endl;
+ first = false;
+ }
ostr << "==============================" << std::endl;
}
protected:
- scopes_type scopes_;
+ scopes_type scopes_;
};
template<class K, class E>
diff --git a/src/misc/test-unique_string.cc b/src/misc/test-unique_string.cc
index d0aac45..cfa48c0 100644
--- a/src/misc/test-unique_string.cc
+++ b/src/misc/test-unique_string.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/misc/unique_string.cc b/src/misc/unique_string.cc
index a792544..a1fae1c 100644
--- a/src/misc/unique_string.cc
+++ b/src/misc/unique_string.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/misc/unique_string.hh b/src/misc/unique_string.hh
index bce57c4..168660d 100644
--- a/src/misc/unique_string.hh
+++ b/src/misc/unique_string.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// It 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -21,7 +21,7 @@
/** \file misc/unique_string.hh
\brief String uniquifier.
- The idea of this class comes from TC's LRDE's Symbol class, but
+ The idea of this class comes from TC's LRDE's Symbol class, but
the implementation is quite different. */
#include <string>
@@ -78,14 +78,14 @@ namespace misc
bool operator<(const unique_string &rhs) const
{
if (it_ == rhs.it_)
- return false;
+ return false;
return *it_ < *rhs.it_;
}
private:
static string_to_unique_type::const_iterator insert_in_pool(const std::string &str);
-
+
private:
static string_to_unique_type pool_;
diff --git a/src/modules.hh b/src/modules.hh
index e097419..16fddbc 100644
--- a/src/modules.hh
+++ b/src/modules.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/nolimips-tasks.cc b/src/nolimips-tasks.cc
index 0c680df..6da777d 100644
--- a/src/nolimips-tasks.cc
+++ b/src/nolimips-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/nolimips-tasks.hh b/src/nolimips-tasks.hh
index 7325293..cd6efb6 100644
--- a/src/nolimips-tasks.hh
+++ b/src/nolimips-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -27,13 +27,13 @@ namespace nolimips
{
TASK_MODULE ("");
-
+
TASK_DECLARE ("usage", "Give a short usage message",
- usage, "");
+ usage, "");
TASK_DECLARE ("V|version", "Print program version",
- version, "");
+ version, "");
TASK_DECLARE ("h|help", "Give this help list",
- help, "usage version");
+ help, "usage version");
} // namespace tasks
diff --git a/src/nolimips.cc b/src/nolimips.cc
index 10f86ad..fac32c1 100644
--- a/src/nolimips.cc
+++ b/src/nolimips.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -32,14 +32,14 @@
exit_type exit_status = exit_success;
const char* program_name;
-int main(int argc, char* argv[])
+int main(int argc, char* argv[])
{
program_name = argv[0];
filename = task::TaskRegister::instance().parse_args(argc, argv);
if (task::TaskRegister::instance().enabled_tasks ().size () == 0)
task::TaskRegister::instance().enable_task("execute");
-
+
exit_status = exit_success;
task::TaskRegister::instance().execute();
if (exit_status != exit_success)
diff --git a/src/parse-tasks.cc b/src/parse-tasks.cc
index 6b11754..451880c 100644
--- a/src/parse-tasks.cc
+++ b/src/parse-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -54,26 +54,26 @@ namespace parse
nop_after_branch_p = true;
}
- inst::Program* program = 0;
+ inst::Program* program = 0;
void
parse ()
{
if (filename == NULL)
- {
- std::cerr << "You must specify an input file." << std::endl;
- exit (exit_failure);
- }
-
+ {
+ std::cerr << "You must specify an input file." << std::endl;
+ exit (exit_failure);
+ }
+
program = ::parse::parse(filename);
if (!program)
- {
- std::cerr << "Parsing Failed" << std::endl;
- if (!exit_status)
- exit_status = exit_parse;
- exit (exit_status);
- }
+ {
+ std::cerr << "Parsing Failed" << std::endl;
+ if (!exit_status)
+ exit_status = exit_parse;
+ exit (exit_status);
+ }
}
-
+
} // namespace tasks
} // namespace parse
diff --git a/src/parse-tasks.hh b/src/parse-tasks.hh
index 5aa1553..ac89b35 100644
--- a/src/parse-tasks.hh
+++ b/src/parse-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -27,22 +27,22 @@ namespace parse
namespace tasks
{
- extern inst::Program* program;
+ extern inst::Program* program;
TASK_MODULE ("1. Parsing");
TASK_DECLARE ("trace-scan", "Trace the scanning",
- trace_scan, "");
+ trace_scan, "");
TASK_DECLARE ("u|unlimited-regs", "Authorize unlimited registers",
- unlimited_regs, "");
+ unlimited_regs, "");
TASK_DECLARE ("trace-parse", "Trace the parse",
- trace_parse, "");
- TASK_DECLARE ("N|nop-after-branch",
- "Fill delay slot of branch instructions with a NOP",
- nop_after_branch, "");
+ trace_parse, "");
+ TASK_DECLARE ("N|nop-after-branch",
+ "Fill delay slot of branch instructions with a NOP",
+ nop_after_branch, "");
TASK_DECLARE ("parse", "Parse a file",
- parse, "");
+ parse, "");
} // namespace tasks
diff --git a/src/parse/asm-scan.hh b/src/parse/asm-scan.hh
index ce736f6..428b29b 100644
--- a/src/parse/asm-scan.hh
+++ b/src/parse/asm-scan.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -22,7 +22,7 @@
# define YY_DECL \
int yylex (yy::parser::semantic_type *yylval, \
- yy::parser::location_type *yylloc)
+ yy::parser::location_type *yylloc)
YY_DECL;
namespace parse
diff --git a/src/parse/fwd.hh b/src/parse/fwd.hh
index 103a209..5278f52 100644
--- a/src/parse/fwd.hh
+++ b/src/parse/fwd.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/parse/libparse.cc b/src/parse/libparse.cc
index 0a51e0e..66c72b7 100644
--- a/src/parse/libparse.cc
+++ b/src/parse/libparse.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/parse/libparse.hh b/src/parse/libparse.hh
index e3b850e..d801d1e 100644
--- a/src/parse/libparse.hh
+++ b/src/parse/libparse.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/shell-tasks.cc b/src/shell-tasks.cc
index dfe80ac..38a6a65 100644
--- a/src/shell-tasks.cc
+++ b/src/shell-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/shell-tasks.hh b/src/shell-tasks.hh
index e0cf93d..0dc02c4 100644
--- a/src/shell-tasks.hh
+++ b/src/shell-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -29,7 +29,7 @@ namespace shell
TASK_MODULE ("4. Shell");
TASK_DECLARE ("i|shell", "Enable shell interpreter",
- shell_exec, "");
+ shell_exec, "");
} // namespace tasks
diff --git a/src/shell/cmd.hh b/src/shell/cmd.hh
index c031d61..8b29b30 100644
--- a/src/shell/cmd.hh
+++ b/src/shell/cmd.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -34,29 +34,29 @@ namespace shell
/// Command identifier.
enum identifier_type
{
- id_unknown,
- id_ambiguous,
- id_null,
- id_load,
- id_run,
- id_quit,
- id_continue,
- id_break,
- id_next,
- id_print,
- id_display,
- id_undisplay,
- id_dump,
- id_mem,
- id_backtrace,
- id_nop_after_branch,
- id_help
+ id_unknown,
+ id_ambiguous,
+ id_null,
+ id_load,
+ id_run,
+ id_quit,
+ id_continue,
+ id_break,
+ id_next,
+ id_print,
+ id_display,
+ id_undisplay,
+ id_dump,
+ id_mem,
+ id_backtrace,
+ id_nop_after_branch,
+ id_help
};
typedef std::list<std::string> list_args_type;
- /**\name Constructor and destructor
- \{ */
+ /**\name Constructor and destructor
+ \{ */
public:
/// Construct a Cmd.
Cmd(const identifier_type id);
@@ -65,7 +65,7 @@ namespace shell
/** \} */
/** \name Accessors
- \{ */
+ \{ */
public:
/// Add an argument
void push_arg(const std::string &arg);
diff --git a/src/shell/cmd.hxx b/src/shell/cmd.hxx
index cdf21fe..0b6e892 100644
--- a/src/shell/cmd.hxx
+++ b/src/shell/cmd.hxx
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/shell/shell.cc b/src/shell/shell.cc
index 3f75bdb..955c3c7 100644
--- a/src/shell/shell.cc
+++ b/src/shell/shell.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -55,18 +55,18 @@ namespace shell
{
if (0 < l.size())
{
- unsigned nb_common_chars = l[0].size();
-
- for (std::vector<std::string>::const_iterator
- e = l.begin(); e != l.end() && 0 < nb_common_chars; ++e)
- {
- unsigned c = 0;
- while (c < nb_common_chars && l.front()[c] == (*e)[c])
- ++c;
- nb_common_chars = c;
- }
-
- return std::string(l.front(), 0, nb_common_chars);
+ unsigned nb_common_chars = l[0].size();
+
+ for (std::vector<std::string>::const_iterator
+ e = l.begin(); e != l.end() && 0 < nb_common_chars; ++e)
+ {
+ unsigned c = 0;
+ while (c < nb_common_chars && l.front()[c] == (*e)[c])
+ ++c;
+ nb_common_chars = c;
+ }
+
+ return std::string(l.front(), 0, nb_common_chars);
}
return std::string();
@@ -82,37 +82,37 @@ namespace shell
std::string line_to_complete(rl_line_buffer, end);
std::vector<std::string> completions;
delete Shell::instance().parse(line_to_complete,
- &completions); // wonderfull
+ &completions); // wonderfull
char **matches = 0;
if (0 < completions.size())
{
- matches = (char**) malloc(sizeof(char*) * (completions.size() + 2));
- if (matches)
- {
- // Extract max common characters
- std::string substitution = find_common_prefix(completions);
-
- // Fill matches array
- if (!substitution.empty())
- matches[0] = strdup(substitution.c_str());
- else
- matches[0] = strdup(text);
- ++matches;
- for (unsigned c = 0; c < completions.size(); ++c)
- matches[c] = strdup(completions[c].c_str());
- matches[completions.size()] = 0;
- --matches;
- }
+ matches = (char**) malloc(sizeof(char*) * (completions.size() + 2));
+ if (matches)
+ {
+ // Extract max common characters
+ std::string substitution = find_common_prefix(completions);
+
+ // Fill matches array
+ if (!substitution.empty())
+ matches[0] = strdup(substitution.c_str());
+ else
+ matches[0] = strdup(text);
+ ++matches;
+ for (unsigned c = 0; c < completions.size(); ++c)
+ matches[c] = strdup(completions[c].c_str());
+ matches[completions.size()] = 0;
+ --matches;
+ }
}
-
+
return matches;
}
#endif // !HAVE_READLINE_READLINE_H
// --------------------------------------------------------------------------
- // Shell
+ // Shell
// --------------------------------------------------------------------------
Shell::Shell():
@@ -189,13 +189,13 @@ namespace shell
std::string line;
while (execute(*command) == 0 && misc::readline("(nolimips) ", line))
{
- display();
+ display();
- if (!line.empty())
- {
- delete command;
- command = parse(line);
- }
+ if (!line.empty())
+ {
+ delete command;
+ command = parse(line);
+ }
}
delete command;
@@ -209,10 +209,10 @@ namespace shell
std::string res;
while (!isblank(iss.peek()))
{
- char c = static_cast<char>(iss.get());
- if (iss.eof())
- break;
- res += c;
+ char c = static_cast<char>(iss.get());
+ if (iss.eof())
+ break;
+ res += c;
}
return res;
}
@@ -246,7 +246,7 @@ namespace shell
Cmd::identifier_type
Shell::eat_command_id(std::istringstream &iss,
- std::vector<std::string> *completions)
+ std::vector<std::string> *completions)
{
Cmd::identifier_type id = Cmd::id_null;
@@ -255,39 +255,39 @@ namespace shell
if (!word.empty())
{
- map_token_type::const_iterator it = map_token_.lower_bound(word);
- if (it == map_token_.end() || it->first.find(word) != 0)
- id = Cmd::id_unknown;
- else
- {
- id = it->second;
-
- map_token_type::const_iterator next(it);
- while (next != map_token_.end() && next->first.find(word) == 0)
- {
- if (complete_p)
- completions->push_back(next->first);
-
- if (it->first != next->first)
- id = Cmd::id_ambiguous;
- ++next;
- }
-
- return id;
- }
+ map_token_type::const_iterator it = map_token_.lower_bound(word);
+ if (it == map_token_.end() || it->first.find(word) != 0)
+ id = Cmd::id_unknown;
+ else
+ {
+ id = it->second;
+
+ map_token_type::const_iterator next(it);
+ while (next != map_token_.end() && next->first.find(word) == 0)
+ {
+ if (complete_p)
+ completions->push_back(next->first);
+
+ if (it->first != next->first)
+ id = Cmd::id_ambiguous;
+ ++next;
+ }
+
+ return id;
+ }
}
if (complete_p)
- for (map_token_type::const_iterator
- it = map_token_.begin(); it != map_token_.end(); ++it)
- completions->push_back(it->first);
+ for (map_token_type::const_iterator
+ it = map_token_.begin(); it != map_token_.end(); ++it)
+ completions->push_back(it->first);
return id;
}
Cmd*
Shell::parse(const std::string &str,
- std::vector<std::string> *completions)
+ std::vector<std::string> *completions)
{
std::istringstream iss(str);
Cmd* command = 0;
@@ -296,71 +296,71 @@ namespace shell
switch (id)
{
case Cmd::id_run:
- {
- command = new Cmd(Cmd::id_run);
- std::string tmp = eat_word(iss);
- while (0 < tmp.length())
- {
- command->push_arg(tmp);
- tmp = eat_word(iss);
- }
- return command;
- }
+ {
+ command = new Cmd(Cmd::id_run);
+ std::string tmp = eat_word(iss);
+ while (0 < tmp.length())
+ {
+ command->push_arg(tmp);
+ tmp = eat_word(iss);
+ }
+ return command;
+ }
case Cmd::id_break:
- {
- command = new Cmd(Cmd::id_break);
- std::string tmp;
- if (eat_label(iss, tmp))
- {
- command->push_arg(tmp);
- return command;
- }
- delete command;
- break;
- }
+ {
+ command = new Cmd(Cmd::id_break);
+ std::string tmp;
+ if (eat_label(iss, tmp))
+ {
+ command->push_arg(tmp);
+ return command;
+ }
+ delete command;
+ break;
+ }
case Cmd::id_load:
- {
- command = new Cmd(Cmd::id_load);
- std::string tmp = eat_word(iss);
- if (!tmp.empty())
- {
- command->push_arg(tmp);
- return command;
- }
- delete command;
- break;
- }
+ {
+ command = new Cmd(Cmd::id_load);
+ std::string tmp = eat_word(iss);
+ if (!tmp.empty())
+ {
+ command->push_arg(tmp);
+ return command;
+ }
+ delete command;
+ break;
+ }
case Cmd::id_print:
case Cmd::id_display:
case Cmd::id_undisplay:
- {
- command = new Cmd(id);
- std::string tmp;
- if (eat_register(iss, tmp))
- {
- command->push_arg(tmp);
- return command;
- }
- delete command;
- break;
- }
+ {
+ command = new Cmd(id);
+ std::string tmp;
+ if (eat_register(iss, tmp))
+ {
+ command->push_arg(tmp);
+ return command;
+ }
+ delete command;
+ break;
+ }
case Cmd::id_mem:
- {
- command = new Cmd(Cmd::id_mem);
-
- // FIXME: check tmp is a memory address: eat_memory_address()
- std::string tmp = eat_word(iss);
- if (!tmp.empty())
- {
- command->push_arg(tmp);
- return command;
- }
- delete command;
- break;
- }
+ {
+ command = new Cmd(Cmd::id_mem);
+
+ // FIXME: check tmp is a memory address: eat_memory_address()
+ std::string tmp = eat_word(iss);
+ if (!tmp.empty())
+ {
+ command->push_arg(tmp);
+ return command;
+ }
+ delete command;
+ break;
+ }
case Cmd::id_quit:
case Cmd::id_continue:
@@ -373,9 +373,9 @@ namespace shell
case Cmd::id_unknown:
case Cmd::id_ambiguous:
case Cmd::id_null:
- return new Cmd(id);
+ return new Cmd(id);
}
-
+
return new Cmd(Cmd::id_unknown);
}
@@ -390,32 +390,32 @@ namespace shell
delete program_;
exit_status = exit_success;
- //
+ //
program_ = ::parse::parse(*cmd.get_args().begin());
if (exit_status == exit_success)
{
- // FIXME: as soon as possible, put here nop-after-branches filling
-
- inst::ProgramSolver program_solver;
- // program_solver.set_max_callee_save(max_callee_save);
- // program_solver.set_max_caller_save(max_caller_save);
-
- program_solver.solve(*program_);
- if (exit_status == exit_success)
- {
- vm_.load_program(*program_);
- }
- else
- std::cerr << "Solving failed, program not loaded." << std::endl;
+ // FIXME: as soon as possible, put here nop-after-branches filling
+
+ inst::ProgramSolver program_solver;
+ // program_solver.set_max_callee_save(max_callee_save);
+ // program_solver.set_max_caller_save(max_caller_save);
+
+ program_solver.solve(*program_);
+ if (exit_status == exit_success)
+ {
+ vm_.load_program(*program_);
+ }
+ else
+ std::cerr << "Solving failed, program not loaded." << std::endl;
}
- else
+ else
std::cerr << "Parsing failed, program not loaded." << std::endl;
//
if (exit_status != exit_success)
{
- delete program_;
- program_ = 0;
+ delete program_;
+ program_ = 0;
}
}
@@ -425,16 +425,16 @@ namespace shell
{
if (!program_)
{
- std::cerr << "No program loaded." << std::endl;
- return;
+ std::cerr << "No program loaded." << std::endl;
+ return;
}
if (vm_.get_status() != vm::VirtualMachine::halt)
vm_.set_runnable();
else
{
- vm_.reset();
- vm_.set_runnable();
+ vm_.reset();
+ vm_.set_runnable();
}
vm_.execute(false);
}
@@ -444,14 +444,14 @@ namespace shell
{
if (!program_)
{
- std::cerr << "No program loaded." << std::endl;
- return;
+ std::cerr << "No program loaded." << std::endl;
+ return;
}
if (vm_.get_status() != vm::VirtualMachine::halt)
{
- vm_.set_runnable();
- vm_.execute(false);
+ vm_.set_runnable();
+ vm_.execute(false);
}
else
std::cerr << "The program is not being run." << std::endl;
@@ -462,14 +462,14 @@ namespace shell
{
if (!program_)
{
- std::cerr << "No program loaded." << std::endl;
- return;
+ std::cerr << "No program loaded." << std::endl;
+ return;
}
if (vm_.get_status() != vm::VirtualMachine::halt)
{
- vm_.set_run_next();
- vm_.execute(true);
+ vm_.set_run_next();
+ vm_.execute(true);
}
else
std::cerr << "The program is not being run." << std::endl;
@@ -479,23 +479,23 @@ namespace shell
Shell::do_break(const Cmd &cmd)
{
if (!program_)
- std::cerr << "No program loaded." << std::endl;
+ std::cerr << "No program loaded." << std::endl;
else
{
- misc::unique_string label(*cmd.get_args().begin());
-
- if (!program_->text_section().has_label(label))
- std::cerr << "Label " << label
- << " not found." << std::endl;
- else
- {
- int offset =
- program_->text_section().get_offset(label);
-
- std::cout << "Breakpoint " << label
- << " at " << offset << " (+4)." << std::endl;
- vm_.add_breakpoint(offset + 4);
- }
+ misc::unique_string label(*cmd.get_args().begin());
+
+ if (!program_->text_section().has_label(label))
+ std::cerr << "Label " << label
+ << " not found." << std::endl;
+ else
+ {
+ int offset =
+ program_->text_section().get_offset(label);
+
+ std::cout << "Breakpoint " << label
+ << " at " << offset << " (+4)." << std::endl;
+ vm_.add_breakpoint(offset + 4);
+ }
}
}
@@ -547,16 +547,16 @@ namespace shell
std::cout << "No stack." << std::endl;
else
{
- unsigned level = 0;
- for (std::vector<vm::register_type>::const_reverse_iterator
- it = call_stack.rbegin(); it != call_stack.rend(); ++it)
- {
- std::cout
- << "#" << level << " 0x"
- << std::hex << std::setfill('0') << std::setw(8) << (*it)
- << std::endl;
- ++level;
- }
+ unsigned level = 0;
+ for (std::vector<vm::register_type>::const_reverse_iterator
+ it = call_stack.rbegin(); it != call_stack.rend(); ++it)
+ {
+ std::cout
+ << "#" << level << " 0x"
+ << std::hex << std::setfill('0') << std::setw(8) << (*it)
+ << std::endl;
+ ++level;
+ }
}
}
@@ -613,53 +613,53 @@ namespace shell
switch (cmd.get_identifier())
{
case Cmd::id_quit:
- return 1;
+ return 1;
case Cmd::id_unknown:
- do_unknown();
- break;
+ do_unknown();
+ break;
case Cmd::id_ambiguous:
- do_ambiguous();
- break;
+ do_ambiguous();
+ break;
case Cmd::id_load:
- do_load(cmd);
- break;
+ do_load(cmd);
+ break;
case Cmd::id_run:
- do_run();
- break;
+ do_run();
+ break;
case Cmd::id_continue:
- do_continue();
- break;
+ do_continue();
+ break;
case Cmd::id_next:
- do_next();
- break;
+ do_next();
+ break;
case Cmd::id_dump:
- do_dump();
- break;
+ do_dump();
+ break;
case Cmd::id_print:
- do_print(cmd);
- break;
+ do_print(cmd);
+ break;
case Cmd::id_display:
- do_display(cmd);
- break;
+ do_display(cmd);
+ break;
case Cmd::id_undisplay:
- do_undisplay(cmd);
- break;
+ do_undisplay(cmd);
+ break;
case Cmd::id_mem:
- do_mem();
- break;
+ do_mem();
+ break;
case Cmd::id_backtrace:
- do_backtrace();
- break;
+ do_backtrace();
+ break;
case Cmd::id_break:
- do_break(cmd);
- break;
+ do_break(cmd);
+ break;
case Cmd::id_nop_after_branch:
- do_nop_after_branch();
- break;
+ do_nop_after_branch();
+ break;
case Cmd::id_null:
- break;
+ break;
case Cmd::id_help:
- do_help();
+ do_help();
}
return 0;
}
diff --git a/src/shell/shell.hh b/src/shell/shell.hh
index c964724..3e50e51 100644
--- a/src/shell/shell.hh
+++ b/src/shell/shell.hh
@@ -38,14 +38,14 @@ namespace shell
{
public:
/** \name Shortand type definition
- \{ */
+ \{ */
typedef std::map<std::string, Cmd::identifier_type> map_token_type;
typedef std::map<std::string, vm::Cpu::kind_type> map_register_type;
typedef std::list<std::string> list_disp_type;
/** \} */
/** \name Constructor and destructor
- \{ */
+ \{ */
protected:
/// Construct a Shell
Shell();
@@ -63,14 +63,14 @@ namespace shell
/// Build a command
Cmd *parse(const std::string &str,
- std::vector<std::string> *completions = 0);
+ std::vector<std::string> *completions = 0);
public:
/// Access a register
int get_register(const std::string &r);
/** \name Display list
- \{ */
+ \{ */
public:
/// Add a register in the display list
void add_display(const std::string &r);
@@ -96,10 +96,10 @@ namespace shell
/// Eat a word from input stringstream and return the
/// corresponding keyword
Cmd::identifier_type eat_command_id(std::istringstream &iss,
- std::vector<std::string> *completions);
+ std::vector<std::string> *completions);
/** \name Execution engine
- \{ */
+ \{ */
protected:
void do_load(const Cmd &cmd);
void do_run();
diff --git a/src/shell/shell.hxx b/src/shell/shell.hxx
index 9308fbe..eb5cbb5 100644
--- a/src/shell/shell.hxx
+++ b/src/shell/shell.hxx
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -47,12 +47,12 @@ namespace shell
{
list_disp_type::iterator i = find(list_displayable_, r);
// for (i = list_displayable_.begin(); i != list_displayable_.end(); ++i)
- // if (*i == *r)
- // break;
-
+ // if (*i == *r)
+ // break;
+
if (i != list_displayable_.end())
{
- list_displayable_.erase(i);
+ list_displayable_.erase(i);
}
}
@@ -60,7 +60,7 @@ namespace shell
Shell::display()
{
for (list_disp_type::const_iterator
- i = list_displayable_.begin(); i != list_displayable_.end(); ++i)
+ i = list_displayable_.begin(); i != list_displayable_.end(); ++i)
std::cout << *i << " = " << get_register(*i) << std::endl;
}
diff --git a/src/task-tasks.cc b/src/task-tasks.cc
index 7bd1107..da49d6e 100644
--- a/src/task-tasks.cc
+++ b/src/task-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/task-tasks.hh b/src/task-tasks.hh
index 8d240f6..417025a 100644
--- a/src/task-tasks.hh
+++ b/src/task-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -28,7 +28,7 @@ namespace task
TASK_MODULE ("0. Tasks");
TASK_DECLARE ("tasks-selection", "Display sorted list of tasks to be run",
- tasks_selection, "");
+ tasks_selection, "");
} // namespace tasks
} // namespace task
diff --git a/src/task/boolean_task.cc b/src/task/boolean_task.cc
index 895dd87..76b49b3 100644
--- a/src/task/boolean_task.cc
+++ b/src/task/boolean_task.cc
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -23,10 +23,10 @@ namespace task
{
BooleanTask::BooleanTask(bool &flag,
- const std::string& option,
- const std::string& module_name,
- const std::string& desc,
- const std::string& deps):
+ const std::string& option,
+ const std::string& module_name,
+ const std::string& desc,
+ const std::string& deps):
Task(option, module_name, desc, deps),
flag_(flag)
{}
diff --git a/src/task/boolean_task.hh b/src/task/boolean_task.hh
index 1afcfe8..cc52aec 100644
--- a/src/task/boolean_task.hh
+++ b/src/task/boolean_task.hh
@@ -1,7 +1,7 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004, 2006, 2012 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -29,8 +29,8 @@ namespace task
{
public:
BooleanTask(bool &flag,
- const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps = "");
+ const std::string &option, const std::string &module_name,
+ const std::string &desc, const std::string &deps = "");
public:
virtual void execute() const;
diff --git a/src/task/function_task.cc b/src/task/function_task.cc
index fa73f66..ff0e2ff 100644
--- a/src/task/function_task.cc
+++ b/src/task/function_task.cc
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -23,10 +23,10 @@ namespace task
{
FunctionTask::FunctionTask(void (*execute) (void),
- const std::string& option,
- const std::string& module_name,
- const std::string& desc,
- const std::string& deps):
+ const std::string& option,
+ const std::string& module_name,
+ const std::string& desc,
+ const std::string& deps):
Task(option, module_name, desc, deps),
execute_(execute)
{}
diff --git a/src/task/function_task.hh b/src/task/function_task.hh
index f5e40ae..7eb16d4 100644
--- a/src/task/function_task.hh
+++ b/src/task/function_task.hh
@@ -1,7 +1,7 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004, 2006 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -29,8 +29,8 @@ namespace task
{
public:
FunctionTask(void (*execute) (void),
- const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps = "");
+ const std::string &option, const std::string &module_name,
+ const std::string &desc, const std::string &deps = "");
public:
virtual void execute() const;
diff --git a/src/task/int_task.cc b/src/task/int_task.cc
index fefc7c2..0e0926a 100644
--- a/src/task/int_task.cc
+++ b/src/task/int_task.cc
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -26,10 +26,10 @@ namespace task
{
IntTask::IntTask(int &var, int min, int max,
- const std::string& option,
- const std::string& module_name,
- const std::string& desc,
- const std::string& deps):
+ const std::string& option,
+ const std::string& module_name,
+ const std::string& desc,
+ const std::string& deps):
Task(option, module_name, desc, deps, true),
var_(var), min_(min), max_(max)
{}
diff --git a/src/task/int_task.hh b/src/task/int_task.hh
index b8b6506..774f6f2 100644
--- a/src/task/int_task.hh
+++ b/src/task/int_task.hh
@@ -1,7 +1,7 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004, 2006, 2012 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -29,8 +29,8 @@ namespace task
{
public:
IntTask(int &var, int min, int max,
- const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps = "");
+ const std::string &option, const std::string &module_name,
+ const std::string &desc, const std::string &deps = "");
public:
virtual bool set_value(const std::string &value) const;
diff --git a/src/task/libtask.hh b/src/task/libtask.hh
index 59286bd..dc3f46f 100644
--- a/src/task/libtask.hh
+++ b/src/task/libtask.hh
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004, 2005 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -27,44 +27,44 @@
# ifdef NOLIMIPS_CC_
-# define TASK_MODULE(Name) \
+# define TASK_MODULE(Name) \
const char module_name [] = Name;
-# define TASK_DECLARE(Option, Desc, Routine, Deps) \
- extern void (Routine) (void); \
- static task::FunctionTask task_##Routine(Routine, \
- Option, module_name, \
- Desc, Deps)
+# define TASK_DECLARE(Option, Desc, Routine, Deps) \
+ extern void (Routine) (void); \
+ static task::FunctionTask task_##Routine(Routine, \
+ Option, module_name, \
+ Desc, Deps)
-# define BOOLEAN_TASK_DECLARE(Option, Desc, Flag, Deps) \
- bool Flag = false; \
- static task::BooleanTask task_##Flag(Flag, \
- Option, module_name, \
- Desc, Deps)
+# define BOOLEAN_TASK_DECLARE(Option, Desc, Flag, Deps) \
+ bool Flag = false; \
+ static task::BooleanTask task_##Flag(Flag, \
+ Option, module_name, \
+ Desc, Deps)
-# define INT_TASK_DECLARE(Option, Desc, Var, Default, Min, Max, Deps) \
- int Var = Default; \
- static task::IntTask task_##Var(Var, Min, Max, \
- Option, module_name, \
+# define INT_TASK_DECLARE(Option, Desc, Var, Default, Min, Max, Deps) \
+ int Var = Default; \
+ static task::IntTask task_##Var(Var, Min, Max, \
+ Option, module_name, \
Desc, Deps)
-# define STRING_TASK_DECLARE(Option, Desc, Routine, Default, Deps) \
- extern void (Routine) (const std::string &); \
- static task::StringTask task_##Routine(Routine, \
- Option, module_name, \
- Desc, Deps)
+# define STRING_TASK_DECLARE(Option, Desc, Routine, Default, Deps) \
+ extern void (Routine) (const std::string &); \
+ static task::StringTask task_##Routine(Routine, \
+ Option, module_name, \
+ Desc, Deps)
# else // !NOLIMIPS_CC_
# define TASK_MODULE(Name)
-# define TASK_DECLARE(Name, Help, Routine, Dependencies) \
+# define TASK_DECLARE(Name, Help, Routine, Dependencies) \
extern void (Routine) (void)
-# define BOOLEAN_TASK_DECLARE(Name, Help, Flag, Dependencies) \
+# define BOOLEAN_TASK_DECLARE(Name, Help, Flag, Dependencies) \
extern bool Flag
-# define INT_TASK_DECLARE(Option, Desc, Var, Default, Min, Max, Deps) \
+# define INT_TASK_DECLARE(Option, Desc, Var, Default, Min, Max, Deps) \
extern int Var
-# define STRING_TASK_DECLARE(Option, Desc, Routine, Default, Deps) \
+# define STRING_TASK_DECLARE(Option, Desc, Routine, Default, Deps) \
extern void (Routine) (const std::string &)
# endif // NOLIMIPS_CC_
diff --git a/src/task/string_task.cc b/src/task/string_task.cc
index b444d04..58fbd7e 100644
--- a/src/task/string_task.cc
+++ b/src/task/string_task.cc
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2004 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -22,10 +22,10 @@ namespace task
{
StringTask::StringTask(void (*execute) (const std::string &),
- const std::string &option,
- const std::string &module_name,
- const std::string &desc,
- const std::string &deps):
+ const std::string &option,
+ const std::string &module_name,
+ const std::string &desc,
+ const std::string &deps):
Task(option, module_name, desc, deps, true),
execute_(execute)
{}
diff --git a/src/task/string_task.hh b/src/task/string_task.hh
index bb00692..344ffa3 100644
--- a/src/task/string_task.hh
+++ b/src/task/string_task.hh
@@ -1,18 +1,18 @@
//
// This file is part of Nolimips, a MIPS simulator with unlimited registers
// Copyright (C) 2005, 2006 Akim Demaille <akim(a)epita.fr> and
-// Benoit Perrot <benoit(a)lrde.epita.fr>
+// Benoit Perrot <benoit(a)lrde.epita.fr>
//
// Nolimips 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 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -25,14 +25,14 @@
namespace task
{
-
+
class StringTask:
public Task
{
public:
StringTask(void (*execute)(const std::string &),
- const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps = "");
+ const std::string &option, const std::string &module_name,
+ const std::string &desc, const std::string &deps = "");
public:
virtual bool set_value(const std::string &value) const;
diff --git a/src/task/task.cc b/src/task/task.cc
index f3ea23d..6d49ad8 100644
--- a/src/task/task.cc
+++ b/src/task/task.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -26,8 +26,8 @@ namespace task
{
Task::Task (const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps,
- bool needs_value):
+ const std::string &desc, const std::string &deps,
+ bool needs_value):
module_(module_name), description_(desc),
needs_value_(needs_value)
{
@@ -35,31 +35,31 @@ namespace task
std::string::size_type start = 0, end = 0;
while (start < deps.size())
{
- end = deps.find (' ', start);
- if (end > deps.size ())
- end = deps.size ();
- dependencies_.push_back (deps.substr (start, end - start));
- start = end + 1;
+ end = deps.find (' ', start);
+ if (end > deps.size ())
+ end = deps.size ();
+ dependencies_.push_back (deps.substr (start, end - start));
+ start = end + 1;
}
// See if it has a short option, such as "h|help".
if (option.size () > 1 && option[1] == '|')
{
-// if (key)
-// {
-// std::cerr
-// << program_name
-// << ": Task::Task (" << name
-// << "): both key and short option are provided"
-// << std::endl;
-// exit_set (exit_failure);
-// }
- short_opt_ = option.substr(0, 1);
- long_opt_ = option.substr(2);
+// if (key)
+// {
+// std::cerr
+// << program_name
+// << ": Task::Task (" << name
+// << "): both key and short option are provided"
+// << std::endl;
+// exit_set (exit_failure);
+// }
+ short_opt_ = option.substr(0, 1);
+ long_opt_ = option.substr(2);
}
else
long_opt_ = option;
-
+
// Register this task.
TaskRegister::instance ().register_task (*this);
}
@@ -77,7 +77,7 @@ namespace task
// {
// std::cout << "Dependencies for task " << _name << ":" << std::endl;
// for (deps_t::const_iterator i = _dependencies.begin();
-// i != _dependencies.end(); ++i)
+// i != _dependencies.end(); ++i)
// std::cout << "\t" << *i << std::endl;
// }
diff --git a/src/task/task.hh b/src/task/task.hh
index c3c62f2..ee72692 100644
--- a/src/task/task.hh
+++ b/src/task/task.hh
@@ -28,8 +28,8 @@ namespace task
{
public:
Task(const std::string &option, const std::string &module_name,
- const std::string &desc, const std::string &deps = "",
- bool needs_value = false);
+ const std::string &desc, const std::string &deps = "",
+ bool needs_value = false);
virtual ~Task();
public:
diff --git a/src/task/task.hxx b/src/task/task.hxx
index bf124ca..3ec456b 100644
--- a/src/task/task.hxx
+++ b/src/task/task.hxx
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -46,7 +46,7 @@ namespace task
{
return module_;
}
-
+
inline const std::string &
Task::description(void) const
{
diff --git a/src/task/task_register.cc b/src/task/task_register.cc
index ffcc296..c117ea1 100644
--- a/src/task/task_register.cc
+++ b/src/task/task_register.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -44,19 +44,19 @@ namespace task
void
TaskRegister::register_task (const Task& task)
{
- std::string long_opt = "--" + task.long_opt();
- std::string short_opt = "-" + task.short_opt();
+ std::string long_opt = "--" + task.long_opt();
+ std::string short_opt = "-" + task.short_opt();
assertion(! has_key(tasks_, long_opt));
tasks_[long_opt] = &task;
if (short_opt.size () > 1)
{
- assertion(! has_key(tasks_, short_opt));
- tasks_[short_opt] = &task;
+ assertion(! has_key(tasks_, short_opt));
+ tasks_[short_opt] = &task;
}
modules_[task.module()].push_back(&task);
}
-
+
// Enable a task
void
TaskRegister::enable_task (const Task& task)
@@ -69,43 +69,43 @@ namespace task
assertion(task_name.size() > 0);
if (task_name[0] != '-')
{
- if (task_name.size() > 1)
- task_name = "--" + task_name;
- else
- task_name = "-" + task_name;
+ if (task_name.size() > 1)
+ task_name = "--" + task_name;
+ else
+ task_name = "-" + task_name;
}
assertion(has_key(tasks_, task_name));
- enabled_tasks_.push_back(tasks_[task_name]);
+ enabled_tasks_.push_back(tasks_[task_name]);
}
// Resolve dependencies by a simple topological sort
void
TaskRegister::resolve_dependencies(const Task* task,
- std::set<Task const*>& visited_tasks,
- std::list<Task const*>& sorted_tasks)
+ std::set<Task const*>& visited_tasks,
+ std::list<Task const*>& sorted_tasks)
{
if (has(visited_tasks, task))
return;
visited_tasks.insert(task);
-
+
for (Task::deps_type::const_iterator it = task->dependencies ().begin ();
- it != task->dependencies ().end (); ++it)
+ it != task->dependencies ().end (); ++it)
{
- std::string name = "--" + (*it);
- assertion(has_key(tasks_, name));
- const Task* dependency = tasks_[name];
- resolve_dependencies(dependency, visited_tasks, sorted_tasks);
+ std::string name = "--" + (*it);
+ assertion(has_key(tasks_, name));
+ const Task* dependency = tasks_[name];
+ resolve_dependencies(dependency, visited_tasks, sorted_tasks);
}
sorted_tasks.push_back (task);
}
void
TaskRegister::resolve_dependencies()
{
- std::list<Task const*> sorted_tasks;
- std::set<Task const*> visited_tasks;
+ std::list<Task const*> sorted_tasks;
+ std::set<Task const*> visited_tasks;
for (std::list<Task const*>::const_iterator
- it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
+ it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
resolve_dependencies ((*it), visited_tasks, sorted_tasks);
enabled_tasks_ = sorted_tasks;
}
@@ -119,20 +119,20 @@ namespace task
if (it == tasks_.end() || it->first.find(option) != 0)
{
- std::cerr << program_name << ": unrecognized option `"
- << option << "'" << std::endl;
- it = tasks_.end();
+ std::cerr << program_name << ": unrecognized option `"
+ << option << "'" << std::endl;
+ it = tasks_.end();
}
else
{
- TaskRegister::const_task_iterator next(it);
- ++next;
- if (next != tasks_.end() && next->first.find(option) == 0)
- {
- std::cerr << program_name << ": ambiguous option `"
- << option << "'" << std::endl;
- it = tasks_.end();
- }
+ TaskRegister::const_task_iterator next(it);
+ ++next;
+ if (next != tasks_.end() && next->first.find(option) == 0)
+ {
+ std::cerr << program_name << ": ambiguous option `"
+ << option << "'" << std::endl;
+ it = tasks_.end();
+ }
}
return it;
@@ -146,98 +146,98 @@ namespace task
for (int i = 1; i < argc; ++i)
{
- std::string arg(argv[i]);
-
- if ((1 < arg.size ()) && (arg[0] == '-'))
- {
- std::string *value = 0;
-
- // Identify option
- TaskRegister::const_task_iterator it(tasks_.end());
- if (arg[1] == '-') // Long option
- {
- // Split on `=' for value
- unsigned eq = arg.find('=');
- if (eq < arg.size())
- {
- // +1: do not include `=' in value
- value = new std::string(arg, eq + 1);
- arg.resize(eq);
- }
-
- // Search for long option
- it = find_task(arg);
- }
- else // Short option(s)
- {
- for (unsigned l = 1; l < arg.size() && !value; ++l)
- {
- std::string short_option("-");
- short_option += arg[l];
-
- // Search for short option
- it = find_task(short_option);
-
- // Let last task fall through the remaining of the
- // routine
- if (l + 1 < arg.size())
- if (it != tasks_.end())
- {
- if (it->second->needs_value())
- // Split here for value
- value = new std::string(arg, l + 1);
- else
- // Enable task
- enable_task(*(it->second));
- }
- }
- }
-
- // Enable (long or last short) task and set value if needed
- if (it != tasks_.end())
- {
- const Task *task = it->second;
-
- if (task->needs_value())
- {
- if (!value)
- {
- ++i;
- if (i < argc)
- value = new std::string(argv[i]);
- }
-
- if (!value)
- std::cerr
- << program_name
- << ": option `" << task->long_opt()
- << "' takes a value" << std::endl;
- else
- {
- task->set_value(*value);
- enable_task(*task);
- }
- }
- else
- {
- if (value)
- std::cerr
- << program_name
- << ": option `" << task->long_opt()
- << "' does not take a value" << std::endl;
- else
- enable_task(*task);
- }
- }
- else if (value)
- std::cerr
- << program_name
- << ": `"<< *value << "': unexpected value" << std::endl;
-
- delete value;
- }
- else
- res = argv[i];
+ std::string arg(argv[i]);
+
+ if ((1 < arg.size ()) && (arg[0] == '-'))
+ {
+ std::string *value = 0;
+
+ // Identify option
+ TaskRegister::const_task_iterator it(tasks_.end());
+ if (arg[1] == '-') // Long option
+ {
+ // Split on `=' for value
+ unsigned eq = arg.find('=');
+ if (eq < arg.size())
+ {
+ // +1: do not include `=' in value
+ value = new std::string(arg, eq + 1);
+ arg.resize(eq);
+ }
+
+ // Search for long option
+ it = find_task(arg);
+ }
+ else // Short option(s)
+ {
+ for (unsigned l = 1; l < arg.size() && !value; ++l)
+ {
+ std::string short_option("-");
+ short_option += arg[l];
+
+ // Search for short option
+ it = find_task(short_option);
+
+ // Let last task fall through the remaining of the
+ // routine
+ if (l + 1 < arg.size())
+ if (it != tasks_.end())
+ {
+ if (it->second->needs_value())
+ // Split here for value
+ value = new std::string(arg, l + 1);
+ else
+ // Enable task
+ enable_task(*(it->second));
+ }
+ }
+ }
+
+ // Enable (long or last short) task and set value if needed
+ if (it != tasks_.end())
+ {
+ const Task *task = it->second;
+
+ if (task->needs_value())
+ {
+ if (!value)
+ {
+ ++i;
+ if (i < argc)
+ value = new std::string(argv[i]);
+ }
+
+ if (!value)
+ std::cerr
+ << program_name
+ << ": option `" << task->long_opt()
+ << "' takes a value" << std::endl;
+ else
+ {
+ task->set_value(*value);
+ enable_task(*task);
+ }
+ }
+ else
+ {
+ if (value)
+ std::cerr
+ << program_name
+ << ": option `" << task->long_opt()
+ << "' does not take a value" << std::endl;
+ else
+ enable_task(*task);
+ }
+ }
+ else if (value)
+ std::cerr
+ << program_name
+ << ": `"<< *value << "': unexpected value" << std::endl;
+
+ delete value;
+ }
+ else
+ res = argv[i];
}
return res;
@@ -250,7 +250,7 @@ namespace task
{
resolve_dependencies();
for (std::list<Task const *>::const_iterator
- it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
+ it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
(*it)->execute ();
}
@@ -282,25 +282,25 @@ namespace task
{
ostr << "Usage: " << program_name << " [-";
for (std::map<std::string, Task const*>::const_iterator
- it = tasks_.begin(); it != tasks_.end(); ++it)
+ it = tasks_.begin(); it != tasks_.end(); ++it)
if ((*it).first.size() == 2)
- ostr << (*it).second->short_opt();
+ ostr << (*it).second->short_opt();
ostr << "] ";
unsigned len = 80;
const char tab[] = " ";
for (std::map<std::string, Task const*>::const_iterator
- it = tasks_.begin(); it != tasks_.end(); ++it)
+ it = tasks_.begin(); it != tasks_.end(); ++it)
if ((*it).first.size () > 2)
- {
- if (len + (*it).first.size () + 3 >= 80)
- {
- ostr << std::endl << tab;
- len = sizeof (tab);
- }
- ostr << "[" << (*it).first << "] ";
- len += (*it).first.size () + 3;
- }
+ {
+ if (len + (*it).first.size () + 3 >= 80)
+ {
+ ostr << std::endl << tab;
+ len = sizeof (tab);
+ }
+ ostr << "[" << (*it).first << "] ";
+ len += (*it).first.size () + 3;
+ }
ostr << std::endl;
}
@@ -309,26 +309,26 @@ namespace task
TaskRegister::help(std::ostream& ostr)
{
for (std::map<std::string, std::list<Task const*> >::const_iterator
- it = modules_.begin(); it != modules_.end(); ++it)
+ it = modules_.begin(); it != modules_.end(); ++it)
{
- if ((*it).first.size () > 0)
- ostr << " " << (*it).first << std::endl;
- for (std::list<Task const*>::const_iterator
- jt = (*it).second.begin(); jt != (*it).second.end(); ++jt)
- {
- ostr << " ";
- if ((*jt)->short_opt ().size() > 0)
- ostr << "-" << (*jt)->short_opt() << ", ";
- else
- ostr << " ";
- ostr << "--" << (*jt)->long_opt();
- if ((*jt)->needs_value())
- ostr << "=ARG";
- if ((*jt)->long_opt().size () <= 8)
- ostr << '\t';
- ostr << '\t' << (*jt)->description() << std::endl;
- }
- ostr << std::endl;
+ if ((*it).first.size () > 0)
+ ostr << " " << (*it).first << std::endl;
+ for (std::list<Task const*>::const_iterator
+ jt = (*it).second.begin(); jt != (*it).second.end(); ++jt)
+ {
+ ostr << " ";
+ if ((*jt)->short_opt ().size() > 0)
+ ostr << "-" << (*jt)->short_opt() << ", ";
+ else
+ ostr << " ";
+ ostr << "--" << (*jt)->long_opt();
+ if ((*jt)->needs_value())
+ ostr << "=ARG";
+ if ((*jt)->long_opt().size () <= 8)
+ ostr << '\t';
+ ostr << '\t' << (*jt)->description() << std::endl;
+ }
+ ostr << std::endl;
}
ostr << "Reports bugs to "PACKAGE_BUGREPORT << std::endl;
}
@@ -339,7 +339,7 @@ namespace task
{
ostr << "Sorted tasks selection:" << std::endl;
for (std::list<Task const*>::const_iterator
- it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
+ it = enabled_tasks_.begin (); it != enabled_tasks_.end (); ++it)
ostr << "\t* " << (*it)->long_opt() << std::endl;
}
diff --git a/src/task/task_register.hh b/src/task/task_register.hh
index 6205982..ac0a513 100644
--- a/src/task/task_register.hh
+++ b/src/task/task_register.hh
@@ -32,7 +32,7 @@ namespace task
{
protected:
typedef std::map<std::string,
- Task const*>::const_iterator const_task_iterator;
+ Task const*>::const_iterator const_task_iterator;
private:
TaskRegister();
@@ -56,8 +56,8 @@ namespace task
void execute (void);
private:
void resolve_dependencies(const Task* task,
- std::set<Task const*>& visited_tasks,
- std::list<Task const*>& sorted_tasks);
+ std::set<Task const*>& visited_tasks,
+ std::list<Task const*>& sorted_tasks);
void resolve_dependencies();
public:
diff --git a/src/task/task_register.hxx b/src/task/task_register.hxx
index 2f72ff6..0fa0117 100644
--- a/src/task/task_register.hxx
+++ b/src/task/task_register.hxx
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -28,7 +28,7 @@ namespace task
TaskRegister::TaskRegister()
{
}
-
+
//
inline const std::list<Task const*> &
TaskRegister::enabled_tasks() const
diff --git a/src/vm-tasks.cc b/src/vm-tasks.cc
index 5c1fae2..1ad9f38 100644
--- a/src/vm-tasks.cc
+++ b/src/vm-tasks.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -41,28 +41,28 @@ namespace vm
select_system_library(const std::string &library_name)
{
if (library_name == "nolimips")
- {
- delete system_library;
- system_library = new vm::NolimipsSystemLibrary(std::cin,
- std::cout, std::cerr);
- }
+ {
+ delete system_library;
+ system_library = new vm::NolimipsSystemLibrary(std::cin,
+ std::cout, std::cerr);
+ }
else if (library_name == "spim")
- {
-// delete system_library;
-// system_library = new vm::SpimSystemLibrary(std::cin, std::cout);
- }
+ {
+// delete system_library;
+// system_library = new vm::SpimSystemLibrary(std::cin, std::cout);
+ }
else if (library_name == "none")
- {
- delete system_library;
- system_library = 0;
- }
+ {
+ delete system_library;
+ system_library = 0;
+ }
else
- {
- std::cerr << program_name
- << ": `" << library_name << "': no such system library"
- << std::endl;
- exit_set (exit_failure);
- }
+ {
+ std::cerr << program_name
+ << ": `" << library_name << "': no such system library"
+ << std::endl;
+ exit_set (exit_failure);
+ }
}
void
@@ -74,29 +74,29 @@ namespace vm
vm.get_cp0().set_system_library(system_library);
vm.load_program(* parse::tasks::program);
if (exit_status != exit_success)
- exit(exit_status);
+ exit(exit_status);
vm.execute();
if (profile_p)
- {
- std::cerr
- << "Number of cycles: " << vm.get_cp0().get_count() << std::endl
- << "Number of executed R-type CPU instructions: "
- << vm.get_cpu().get_instruction_counter(inst::Inst::r_type)
- << std::endl
- << "Number of executed I-type CPU instructions: "
- << vm.get_cpu().get_instruction_counter(inst::Inst::i_type)
- << std::endl
- << "Number of executed J-type CPU instructions: "
- << vm.get_cpu().get_instruction_counter(inst::Inst::j_type)
- << std::endl;
- }
-
+ {
+ std::cerr
+ << "Number of cycles: " << vm.get_cp0().get_count() << std::endl
+ << "Number of executed R-type CPU instructions: "
+ << vm.get_cpu().get_instruction_counter(inst::Inst::r_type)
+ << std::endl
+ << "Number of executed I-type CPU instructions: "
+ << vm.get_cpu().get_instruction_counter(inst::Inst::i_type)
+ << std::endl
+ << "Number of executed J-type CPU instructions: "
+ << vm.get_cpu().get_instruction_counter(inst::Inst::j_type)
+ << std::endl;
+ }
+
// FIXME: Quick and dirty, this should not be done here
delete parse::tasks::program;
parse::tasks::program = 0;
}
-
+
} // namespace tasks
} // namespace vm
diff --git a/src/vm-tasks.hh b/src/vm-tasks.hh
index 91e425b..8e64920 100644
--- a/src/vm-tasks.hh
+++ b/src/vm-tasks.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -29,26 +29,26 @@ namespace vm
TASK_MODULE ("3. Virtual Machine");
BOOLEAN_TASK_DECLARE ("check-callee-save",
- "Warn if a callee save register "
- "is not preserved across a call",
- check_callee_save_p, "");
+ "Warn if a callee save register "
+ "is not preserved across a call",
+ check_callee_save_p, "");
BOOLEAN_TASK_DECLARE ("profile", "Enable program profiling",
- profile_p, "");
-
- STRING_TASK_DECLARE ("l|system-library",
- "\n"
- "\t\t\tSpecify the builtin system library to use;\n"
- "\t\t\tvalid library names are: `spim' (default), "
- "`nolimips', \n"
- "\t\t\tand `none'\n",
- select_system_library, "spim",
- "");
-
+ profile_p, "");
+
+ STRING_TASK_DECLARE ("l|system-library",
+ "\n"
+ "\t\t\tSpecify the builtin system library to use;\n"
+ "\t\t\tvalid library names are: `spim' (default), "
+ "`nolimips', \n"
+ "\t\t\tand `none'\n",
+ select_system_library, "spim",
+ "");
+
BOOLEAN_TASK_DECLARE ("E|trace-exec", "Trace the execution",
- trace_exec_p, "");
+ trace_exec_p, "");
TASK_DECLARE ("e|execute", "Execute the program on virtual machine",
- execute, "prg-solve");
+ execute, "prg-solve");
} // namespace tasks
diff --git a/src/vm/cp0.hh b/src/vm/cp0.hh
index dbd3033..4094e99 100644
--- a/src/vm/cp0.hh
+++ b/src/vm/cp0.hh
@@ -31,69 +31,69 @@ namespace vm
class Cp0
{
public:
- typedef uint32_t register_type;
+ typedef uint32_t register_type;
public:
/// Coprocessor 0 registers indices
enum kind_type
{
- index = 0, ///< Index register
- random = 1, ///< Random register
- entry_lo0 = 2, ///< Entry for even pages
- entry_lo1 = 3, ///< Entry for odd pages
- context = 4, ///< Context register
- page_mask = 5, ///< Page mask register
- wired = 6, ///< Wired register
- error = 7, ///< Status/control register
- bad_vaddr = 8, ///< Bad virtual address register
- count = 9, ///< Count register
- entry_hi = 10, ///< Entry high
- compare = 11, ///< Compare register
- status = 12, ///< Status (kernel/user mode, etc.) register
- cause = 13, ///< Cause of exception register
- epc = 14, ///< Exception program counter
- pr_id = 15, ///< Processor identification
- config = 16, ///< Configuration register (64 bits)
- lladdr = 17, ///< Loaded linked address
- watch_lo = 18, ///< Watch point debug facility, low part
- watch_hi = 19, ///< Watch point debug facility, high part
- x_context = 20, ///< X context register
- reserved0 = 21, ///< (Reserved register)
- reserved1 = 22, ///< (Reserved register)
- debug = 23, ///< Debug register
- depc = 24, ///< Debug exception program counter
- perf_cnt = 25, ///< Performance counter register
- err_ctl = 26, ///< Error control register
- cache_err = 27, ///< Cache error register
- cache_tag_lo = 28, ///< Cache tag/data low
- cache_tag_hi = 29, ///< Cache tag/data high
- error_epc = 30, ///< Error exception program counter
- desave = 31 ///< Debug exception SAVE
+ index = 0, ///< Index register
+ random = 1, ///< Random register
+ entry_lo0 = 2, ///< Entry for even pages
+ entry_lo1 = 3, ///< Entry for odd pages
+ context = 4, ///< Context register
+ page_mask = 5, ///< Page mask register
+ wired = 6, ///< Wired register
+ error = 7, ///< Status/control register
+ bad_vaddr = 8, ///< Bad virtual address register
+ count = 9, ///< Count register
+ entry_hi = 10, ///< Entry high
+ compare = 11, ///< Compare register
+ status = 12, ///< Status (kernel/user mode, etc.) register
+ cause = 13, ///< Cause of exception register
+ epc = 14, ///< Exception program counter
+ pr_id = 15, ///< Processor identification
+ config = 16, ///< Configuration register (64 bits)
+ lladdr = 17, ///< Loaded linked address
+ watch_lo = 18, ///< Watch point debug facility, low part
+ watch_hi = 19, ///< Watch point debug facility, high part
+ x_context = 20, ///< X context register
+ reserved0 = 21, ///< (Reserved register)
+ reserved1 = 22, ///< (Reserved register)
+ debug = 23, ///< Debug register
+ depc = 24, ///< Debug exception program counter
+ perf_cnt = 25, ///< Performance counter register
+ err_ctl = 26, ///< Error control register
+ cache_err = 27, ///< Cache error register
+ cache_tag_lo = 28, ///< Cache tag/data low
+ cache_tag_hi = 29, ///< Cache tag/data high
+ error_epc = 30, ///< Error exception program counter
+ desave = 31 ///< Debug exception SAVE
};
public:
/// Cause exception codes
enum exception_type
{
- interrupt = 0, ///< Interrupt
- tlb_modified = 1, ///< TLB modified
- tlb_load = 2, ///< TLB load
- tlb_store = 3, ///< TLB store
- addr_load = 4, ///< Address error on load
- addr_store = 5, ///< Address error on store
- bus_inst = 6, ///< Bus error on instruction fetch
- bus_data = 7, ///< Bus error on data load or store
- syscall = 8, ///< System call
- breakpoint = 9, ///< Breakpoint
- reserved_inst = 10, ///< Reserved instruction
- cop_unusable = 11, ///< Coprocessor unusable
- overflow = 12, ///< Arithmetic overflow
- trap = 13, ///< Trap
- floating_point = 15 ///< Floating point exception
+ interrupt = 0, ///< Interrupt
+ tlb_modified = 1, ///< TLB modified
+ tlb_load = 2, ///< TLB load
+ tlb_store = 3, ///< TLB store
+ addr_load = 4, ///< Address error on load
+ addr_store = 5, ///< Address error on store
+ bus_inst = 6, ///< Bus error on instruction fetch
+ bus_data = 7, ///< Bus error on data load or store
+ syscall = 8, ///< System call
+ breakpoint = 9, ///< Breakpoint
+ reserved_inst = 10, ///< Reserved instruction
+ cop_unusable = 11, ///< Coprocessor unusable
+ overflow = 12, ///< Arithmetic overflow
+ trap = 13, ///< Trap
+ floating_point = 15 ///< Floating point exception
};
/** \name Constructor and destructor
- \{ */
+ \{ */
public:
Cp0(Cpu &cpu);
/** \} */
@@ -105,14 +105,14 @@ namespace vm
void set_system_library(SystemLibrary *l);
/** \name Explicit register accessors
- \{ */
+ \{ */
public:
void set_count(register_type r);
register_type get_count() const;
/** \} */
/** \name Unified register accessors
- \{ */
+ \{ */
public:
/// Set the register identified by \a reg to \a r.
void set_register(const inst::Register ®, register_type r);
diff --git a/src/vm/cpu.cc b/src/vm/cpu.cc
index d17c05f..e7276ae 100644
--- a/src/vm/cpu.cc
+++ b/src/vm/cpu.cc
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
@@ -34,8 +34,8 @@ namespace vm
check_callee_save_p_(false),
trace_p_(false),
bubble_(new inst::Sll(inst::Register(inst::Register::general, Cpu::zero),
- inst::Register(inst::Register::general, Cpu::zero),
- new inst::IntExp(0)))
+ inst::Register(inst::Register::general, Cpu::zero),
+ new inst::IntExp(0)))
{
reset();
}
@@ -61,7 +61,7 @@ namespace vm
lo_ = 0;
hi_ = 0;
pc_ = 0;
-
+
// Initialize pipeline with nops
for (unsigned i = 0; i < 6; ++i)
pipeline_[i] = bubble_;
@@ -80,38 +80,38 @@ namespace vm
std::ios_base::fmtflags flags = os.flags (std::ios_base::hex);
os << "Register Map: \tpc = " << std::setfill('0') << std::setw(8) << pc_ << std::endl
- << "zero ($0) = " << std::setfill('0') << std::setw(8) << GPR_[zero]
- << " t0 ($8) = " << std::setfill('0') << std::setw(8) << GPR_[t0]
- << " s0($16) = " << std::setfill('0') << std::setw(8) << GPR_[s0]
- << " t8($24) = " << std::setfill('0') << std::setw(8) << GPR_[t8] << std::endl
- << " at ($1) = " << std::setfill('0') << std::setw(8) << GPR_[at]
- << " t1 ($9) = " << std::setfill('0') << std::setw(8) << GPR_[t1]
- << " s1($17) = " << std::setfill('0') << std::setw(8) << GPR_[s1]
- << " t9($25) = " << std::setfill('0') << std::setw(8) << GPR_[t9] << std::endl
- << " v0 ($2) = " << std::setfill('0') << std::setw(8) << GPR_[v0]
- << " t2($10) = " << std::setfill('0') << std::setw(8) << GPR_[t2]
- << " s2($18) = " << std::setfill('0') << std::setw(8) << GPR_[s2]
- << " k0($26) = " << std::setfill('0') << std::setw(8) << GPR_[k0] << std::endl
- << " v1 ($3) = " << std::setfill('0') << std::setw(8) << GPR_[v1]
- << " t3($11) = " << std::setfill('0') << std::setw(8) << GPR_[t3]
- << " s3($19) = " << std::setfill('0') << std::setw(8) << GPR_[s3]
- << " k1($27) = " << std::setfill('0') << std::setw(8) << GPR_[k1] << std::endl
- << " a0 ($4) = " << std::setfill('0') << std::setw(8) << GPR_[a0]
- << " t4($12) = " << std::setfill('0') << std::setw(8) << GPR_[t4]
- << " s4($20) = " << std::setfill('0') << std::setw(8) << GPR_[s4]
- << " gp($28) = " << std::setfill('0') << std::setw(8) << GPR_[gp] << std::endl
- << " a1 ($5) = " << std::setfill('0') << std::setw(8) << GPR_[a1]
- << " t5($13) = " << std::setfill('0') << std::setw(8) << GPR_[t5]
- << " s5($21) = " << std::setfill('0') << std::setw(8) << GPR_[s5]
- << " sp($29) = " << std::setfill('0') << std::setw(8) << GPR_[sp] << std::endl
- << " a2 ($6) = " << std::setfill('0') << std::setw(8) << GPR_[a2]
- << " t6($14) = " << std::setfill('0') << std::setw(8) << GPR_[t6]
- << " s6($22) = " << std::setfill('0') << std::setw(8) << GPR_[s6]
- << " fp($30) = " << std::setfill('0') << std::setw(8) << GPR_[fp] << std::endl
- << " a3 ($7) = " << std::setfill('0') << std::setw(8) << GPR_[a3]
- << " t7($15) = " << std::setfill('0') << std::setw(8) << GPR_[t7]
- << " s7($23) = " << std::setfill('0') << std::setw(8) << GPR_[s7]
- << " ra($31) = " << std::setfill('0') << std::setw(8) << GPR_[ra] << std::endl;
+ << "zero ($0) = " << std::setfill('0') << std::setw(8) << GPR_[zero]
+ << " t0 ($8) = " << std::setfill('0') << std::setw(8) << GPR_[t0]
+ << " s0($16) = " << std::setfill('0') << std::setw(8) << GPR_[s0]
+ << " t8($24) = " << std::setfill('0') << std::setw(8) << GPR_[t8] << std::endl
+ << " at ($1) = " << std::setfill('0') << std::setw(8) << GPR_[at]
+ << " t1 ($9) = " << std::setfill('0') << std::setw(8) << GPR_[t1]
+ << " s1($17) = " << std::setfill('0') << std::setw(8) << GPR_[s1]
+ << " t9($25) = " << std::setfill('0') << std::setw(8) << GPR_[t9] << std::endl
+ << " v0 ($2) = " << std::setfill('0') << std::setw(8) << GPR_[v0]
+ << " t2($10) = " << std::setfill('0') << std::setw(8) << GPR_[t2]
+ << " s2($18) = " << std::setfill('0') << std::setw(8) << GPR_[s2]
+ << " k0($26) = " << std::setfill('0') << std::setw(8) << GPR_[k0] << std::endl
+ << " v1 ($3) = " << std::setfill('0') << std::setw(8) << GPR_[v1]
+ << " t3($11) = " << std::setfill('0') << std::setw(8) << GPR_[t3]
+ << " s3($19) = " << std::setfill('0') << std::setw(8) << GPR_[s3]
+ << " k1($27) = " << std::setfill('0') << std::setw(8) << GPR_[k1] << std::endl
+ << " a0 ($4) = " << std::setfill('0') << std::setw(8) << GPR_[a0]
+ << " t4($12) = " << std::setfill('0') << std::setw(8) << GPR_[t4]
+ << " s4($20) = " << std::setfill('0') << std::setw(8) << GPR_[s4]
+ << " gp($28) = " << std::setfill('0') << std::setw(8) << GPR_[gp] << std::endl
+ << " a1 ($5) = " << std::setfill('0') << std::setw(8) << GPR_[a1]
+ << " t5($13) = " << std::setfill('0') << std::setw(8) << GPR_[t5]
+ << " s5($21) = " << std::setfill('0') << std::setw(8) << GPR_[s5]
+ << " sp($29) = " << std::setfill('0') << std::setw(8) << GPR_[sp] << std::endl
+ << " a2 ($6) = " << std::setfill('0') << std::setw(8) << GPR_[a2]
+ << " t6($14) = " << std::setfill('0') << std::setw(8) << GPR_[t6]
+ << " s6($22) = " << std::setfill('0') << std::setw(8) << GPR_[s6]
+ << " fp($30) = " << std::setfill('0') << std::setw(8) << GPR_[fp] << std::endl
+ << " a3 ($7) = " << std::setfill('0') << std::setw(8) << GPR_[a3]
+ << " t7($15) = " << std::setfill('0') << std::setw(8) << GPR_[t7]
+ << " s7($23) = " << std::setfill('0') << std::setw(8) << GPR_[s7]
+ << " ra($31) = " << std::setfill('0') << std::setw(8) << GPR_[ra] << std::endl;
os.flags(flags);
}
@@ -122,52 +122,52 @@ namespace vm
void
Cpu::visit(const inst::Add& add)
{
- register_type a = get_register(add.get_src1 ());
- register_type b = get_register(add.get_src2 ());
+ register_type a = get_register(add.get_src1 ());
+ register_type b = get_register(add.get_src2 ());
- register_type c = a + b;
+ register_type c = a + b;
set_register(add.get_dest (), c);
-
+
// FIXME: might be accelerated by testing only the sign bit.
if ((a < 0 && b < 0 && c > 0) ||
- (a > 0 && b > 0 && c < 0))
+ (a > 0 && b > 0 && c < 0))
cp0_.raise_overflow();
}
void
Cpu::visit(const inst::Addi& addi)
{
- register_type a = get_register(addi.get_src ());
- int b = addi.get_imm ();
+ register_type a = get_register(addi.get_src ());
+ int b = addi.get_imm ();
- register_type c = a + b;
+ register_type c = a + b;
set_register(addi.get_dest (), c);
-
+
// FIXME: might be accelerated by testing only the sign bit.
if ((a < 0 && b < 0 && c > 0) ||
- (a > 0 && b > 0 && c < 0))
+ (a > 0 && b > 0 && c < 0))
cp0_.raise_overflow();
}
void
Cpu::visit(const inst::Addu& addu)
{
set_register(addu.get_dest (),
- get_register(addu.get_src1 ()) +
- get_register(addu.get_src2 ()));
+ get_register(addu.get_src1 ()) +
+ get_register(addu.get_src2 ()));
}
void
Cpu::visit(const inst::Addiu& addiu)
{
set_register(addiu.get_dest (),
- get_register(addiu.get_src ()) + addiu.get_imm ());
+ get_register(addiu.get_src ()) + addiu.get_imm ());
}
void
Cpu::visit(const inst::Sub& sub)
{
- register_type a = get_register(sub.get_src1 ());
- register_type b = get_register(sub.get_src2 ());
+ register_type a = get_register(sub.get_src1 ());
+ register_type b = get_register(sub.get_src2 ());
- register_type c = a - b;
+ register_type c = a - b;
set_register(sub.get_dest (), c);
if ((a < b && c > 0) || (a > b && c < 0))
@@ -177,16 +177,16 @@ namespace vm
Cpu::visit(const inst::Subu& subu)
{
set_register(subu.get_dest (),
- get_register(subu.get_src1 ()) -
- get_register(subu.get_src2 ()));
+ get_register(subu.get_src1 ()) -
+ get_register(subu.get_src2 ()));
}
void
Cpu::visit(const inst::Sll& sll)
{
- uregister_type a = get_register(sll.get_src ());
- unsigned i = sll.get_imm ();
- register_type c = a << i;
+ uregister_type a = get_register(sll.get_src ());
+ unsigned i = sll.get_imm ();
+ register_type c = a << i;
set_register(sll.get_dest (), c);
// FIXME: Check overflow !
@@ -194,10 +194,10 @@ namespace vm
void
Cpu::visit(const inst::Sllv& slv)
{
- uregister_type a = get_register(slv.get_src1 ());
- uregister_type b = get_register(slv.get_src2 ());
+ uregister_type a = get_register(slv.get_src1 ());
+ uregister_type b = get_register(slv.get_src2 ());
- register_type c = a << b;
+ register_type c = a << b;
set_register(slv.get_dest (), c);
// FIXME: Check overflow !
@@ -206,9 +206,9 @@ namespace vm
void
Cpu::visit(const inst::Sra& sra)
{
- register_type a = get_register(sra.get_src ());
- unsigned b = sra.get_imm ();
- register_type c = a >> b;
+ register_type a = get_register(sra.get_src ());
+ unsigned b = sra.get_imm ();
+ register_type c = a >> b;
set_register(sra.get_dest (), c);
// FIXME: Check overflow !
@@ -216,10 +216,10 @@ namespace vm
void
Cpu::visit(const inst::Srav& srav)
{
- register_type a = get_register(srav.get_src1 ());
- register_type b = get_register(srav.get_src2 ());
+ register_type a = get_register(srav.get_src1 ());
+ register_type b = get_register(srav.get_src2 ());
- register_type c = a >> b;
+ register_type c = a >> b;
set_register(srav.get_dest (), c);
// FIXME: Check overflow !
@@ -228,9 +228,9 @@ namespace vm
void
Cpu::visit(const inst::Srl& srl)
{
- uregister_type a = get_register(srl.get_src ());
- unsigned i = srl.get_imm ();
- uregister_type c = a >> i;
+ uregister_type a = get_register(srl.get_src ());
+ unsigned i = srl.get_imm ();
+ uregister_type c = a >> i;
set_register(srl.get_dest (), c);
// FIXME: Check overflow !
@@ -238,9 +238,9 @@ namespace vm
void
Cpu::visit(const inst::Srlv& srlv)
{
- uregister_type a = get_register(srlv.get_src1 ());
- uregister_type b = get_register(srlv.get_src2 ());
- uregister_type c = a >> b;
+ uregister_type a = get_register(srlv.get_src1 ());
+ uregister_type b = get_register(srlv.get_src2 ());
+ uregister_type c = a >> b;
set_register(srlv.get_dest (), c);
// FIXME: Check overflow !
@@ -250,10 +250,10 @@ namespace vm
void
Cpu::visit(const inst::Mul& mul)
{
- register_type a = get_register(mul.get_src1 ());
- register_type b = get_register(mul.get_src2 ());
+ register_type a = get_register(mul.get_src1 ());
+ register_type b = get_register(mul.get_src2 ());
- register_type c = a * b;
+ register_type c = a * b;
set_register(mul.get_dest (), c);
// FIXME: Check overflow !
@@ -262,10 +262,10 @@ namespace vm
void
Cpu::visit(const inst::Div& div)
{
- register_type a = get_register(div.get_src1 ());
- register_type b = get_register(div.get_src2 ());
+ register_type a = get_register(div.get_src1 ());
+ register_type b = get_register(div.get_src2 ());
- register_type c = a / b;
+ register_type c = a / b;
set_lo(c);
c = a % b;
@@ -276,8 +276,8 @@ namespace vm
void
Cpu::visit(const inst::Divu& divu)
{
- uregister_type a = get_register(divu.get_src1 ());
- uregister_type b = get_register(divu.get_src2 ());
+ uregister_type a = get_register(divu.get_src1 ());
+ uregister_type b = get_register(divu.get_src2 ());
set_lo(a / b);
set_hi(a % b);
@@ -291,67 +291,67 @@ namespace vm
void
Cpu::visit(const inst::And& _and)
{
- register_type a = get_register(_and.get_src1 ());
- register_type b = get_register(_and.get_src2 ());
+ register_type a = get_register(_and.get_src1 ());
+ register_type b = get_register(_and.get_src2 ());
- register_type c = a & b;
+ register_type c = a & b;
set_register(_and.get_dest (), c);
}
void
Cpu::visit(const inst::Andi& andi)
{
- register_type a = get_register(andi.get_src ());
- int b = andi.get_imm ();
+ register_type a = get_register(andi.get_src ());
+ int b = andi.get_imm ();
- register_type c = a & b;
+ register_type c = a & b;
set_register(andi.get_dest (), c);
}
void
Cpu::visit(const inst::Or& _or)
{
- register_type a = get_register(_or.get_src1 ());
- register_type b = get_register(_or.get_src2 ());
+ register_type a = get_register(_or.get_src1 ());
+ register_type b = get_register(_or.get_src2 ());
- register_type c = a | b;
+ register_type c = a | b;
set_register(_or.get_dest (), c);
}
void
Cpu::visit(const inst::Ori& ori)
{
- register_type a = get_register(ori.get_src ());
- int b = ori.get_imm ();
+ register_type a = get_register(ori.get_src ());
+ int b = ori.get_imm ();
- register_type c = a | b;
+ register_type c = a | b;
set_register(ori.get_dest (), c);
}
void
Cpu::visit(const inst::Nor& nor)
{
- register_type a = get_register(nor.get_src1 ());
- register_type b = get_register(nor.get_src2 ());
+ register_type a = get_register(nor.get_src1 ());
+ register_type b = get_register(nor.get_src2 ());
- register_type c = a | b;
+ register_type c = a | b;
set_register(nor.get_dest (), ~c);
}
void
Cpu::visit(const inst::Xor& _xor)
{
- register_type a = get_register(_xor.get_src1 ());
- register_type b = get_register(_xor.get_src2 ());
+ register_type a = get_register(_xor.get_src1 ());
+ register_type b = get_register(_xor.get_src2 ());
- register_type c = a ^ b;
+ register_type c = a ^ b;
set_register(_xor.get_dest (), c);
}
void
Cpu::visit(const inst::Xori& xori)
{
- register_type a = get_register(xori.get_src ());
- int b = xori.get_imm ();
+ register_type a = get_register(xori.get_src ());
+ int b = xori.get_imm ();
- register_type c = a ^ b;
+ register_type c = a ^ b;
set_register(xori.get_dest (), c);
}
@@ -359,7 +359,7 @@ namespace vm
// --------------------------------------------------------------------------
// Move instructions
// --------------------------------------------------------------------------
-
+
void
Cpu::visit(const inst::Lui& lui)
{
@@ -370,14 +370,14 @@ namespace vm
void
Cpu::visit(const inst::Sb& sb)
{
- register_type addr = get_register(sb.get_base ()) + sb.get_offset ();
+ register_type addr = get_register(sb.get_base ()) + sb.get_offset ();
mmu_.data_store_byte(addr, get_register(sb.get_src ()));
}
void
Cpu::visit(const inst::Sw& sw)
{
- register_type addr = get_register(sw.get_base ()) + sw.get_offset ();
+ register_type addr = get_register(sw.get_base ()) + sw.get_offset ();
mmu_.data_store_word(addr, get_register(sw.get_src ()));
}
@@ -385,22 +385,22 @@ namespace vm
void
Cpu::visit(const inst::Lb& lb)
{
- register_type addr = get_register(lb.get_base ()) + lb.get_offset ();
+ register_type addr = get_register(lb.get_base ()) + lb.get_offset ();
set_register(lb.get_dest (), mmu_.data_load_byte(addr));
}
void
Cpu::visit(const inst::Lbu& lbu)
{
- register_type addr = get_register(lbu.get_base ()) + lbu.get_offset ();
- unsigned b = mmu_.data_load_byte(addr);
+ register_type addr = get_register(lbu.get_base ()) + lbu.get_offset ();
+ unsigned b = mmu_.data_load_byte(addr);
set_register(lbu.get_dest (), b % 256);
}
void
Cpu::visit(const inst::Lw& lw)
{
- register_type addr = get_register(lw.get_base ()) + lw.get_offset ();
+ register_type addr = get_register(lw.get_base ()) + lw.get_offset ();
set_register(lw.get_dest (), mmu_.data_load_word(addr));
}
@@ -427,8 +427,8 @@ namespace vm
void
Cpu::visit(const inst::Sltu& sltu)
{
- if ((uregister_type) get_register(sltu.get_src1 ()) <
- (uregister_type) get_register(sltu.get_src2 ()))
+ if ((uregister_type) get_register(sltu.get_src1 ()) <
+ (uregister_type) get_register(sltu.get_src2 ()))
set_register(sltu.get_dest(), 1);
else
set_register(sltu.get_dest(), 0);
@@ -436,13 +436,13 @@ namespace vm
void
Cpu::visit(const inst::Sltiu& sltiu)
{
- if ((uregister_type) get_register(sltiu.get_src ()) <
- (uregister_type) sltiu.get_imm ())
+ if ((uregister_type) get_register(sltiu.get_src ()) <
+ (uregister_type) sltiu.get_imm ())
set_register(sltiu.get_dest(), 1);
else
set_register(sltiu.get_dest(), 0);
}
-
+
// --------------------------------------------------------------------------
// Branch and jump instructions
@@ -487,7 +487,7 @@ namespace vm
pipeline_[d_stage] = bubble_;
// Speculatively fetched instruction
pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
-
+
// Assume it is a call
call();
}
@@ -515,13 +515,13 @@ namespace vm
{
if (get_register(beq.get_src1 ()) == get_register(beq.get_src2 ()))
{
- // Jump
- set_pc(get_pc() + beq.get_label() - 8);
-
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Jump
+ set_pc(get_pc() + beq.get_label() - 8);
+
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
void
@@ -529,13 +529,13 @@ namespace vm
{
if (get_register(bne.get_src1 ()) != get_register(bne.get_src2 ()))
{
- // Jump
- set_pc(get_pc() + bne.get_label() - 8);
+ // Jump
+ set_pc(get_pc() + bne.get_label() - 8);
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
@@ -545,13 +545,13 @@ namespace vm
{
if (get_register(bgez.get_src ()) >= 0)
{
- // Jump
- set_pc(get_pc() + bgez.get_label() - 8);
+ // Jump
+ set_pc(get_pc() + bgez.get_label() - 8);
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
void
@@ -559,18 +559,18 @@ namespace vm
{
if (get_register(bgezal.get_src ()) >= 0)
{
- // Assume it is a call
- call();
-
- // Save return address
- set_register(Cpu::ra, get_pc());
- // Jump
- set_pc(get_pc() + bgezal.get_label() - 8);
-
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Assume it is a call
+ call();
+
+ // Save return address
+ set_register(Cpu::ra, get_pc());
+ // Jump
+ set_pc(get_pc() + bgezal.get_label() - 8);
+
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
void
@@ -578,13 +578,13 @@ namespace vm
{
if (get_register(bgtz.get_src ()) > 0)
{
- // Jump
- set_pc(get_pc() + bgtz.get_label() - 8);
+ // Jump
+ set_pc(get_pc() + bgtz.get_label() - 8);
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
@@ -594,13 +594,13 @@ namespace vm
{
if (get_register(blez.get_src ()) <= 0)
{
- // Jump
- set_pc(get_pc() + blez.get_label() - 8);
+ // Jump
+ set_pc(get_pc() + blez.get_label() - 8);
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
void
@@ -608,13 +608,13 @@ namespace vm
{
if (get_register(bltz.get_src ()) < 0)
{
- // Jump
- set_pc(get_pc() + bltz.get_label() - 8);
+ // Jump
+ set_pc(get_pc() + bltz.get_label() - 8);
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
void
@@ -622,18 +622,18 @@ namespace vm
{
if (get_register(bltzal.get_src ()) < 0)
{
- // Assume it is a call
- call();
-
- // Save return address
- set_register(Cpu::ra, get_pc());
- // Jump
- set_pc(get_pc() + bltzal.get_label() - 8);
-
- // Bubble in decode stage
- pipeline_[d_stage] = bubble_;
- // Speculatively fetched instruction
- pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
+ // Assume it is a call
+ call();
+
+ // Save return address
+ set_register(Cpu::ra, get_pc());
+ // Jump
+ set_pc(get_pc() + bltzal.get_label() - 8);
+
+ // Bubble in decode stage
+ pipeline_[d_stage] = bubble_;
+ // Speculatively fetched instruction
+ pipeline_[i_stage] = & mmu_.inst_load(pc_ / 4);
}
}
diff --git a/src/vm/cpu.hh b/src/vm/cpu.hh
index c51bcdb..78d11d7 100644
--- a/src/vm/cpu.hh
+++ b/src/vm/cpu.hh
@@ -33,8 +33,8 @@
namespace vm
{
- typedef int32_t register_type;
- typedef uint32_t uregister_type;
+ typedef int32_t register_type;
+ typedef uint32_t uregister_type;
/// Central Processor Unit abstraction
class Cpu:
@@ -44,22 +44,22 @@ namespace vm
/// General purpose registers indices
enum kind_type
{
- zero = 0,
- at,
- v0, v1,
- a0, a1, a2, a3,
- t0, t1, t2, t3, t4, t5, t6, t7,
- s0, s1, s2, s3, s4, s5, s6, s7,
- t8, t9,
- k0, k1,
- gp,
- sp,
- fp,
- ra = 31
+ zero = 0,
+ at,
+ v0, v1,
+ a0, a1, a2, a3,
+ t0, t1, t2, t3, t4, t5, t6, t7,
+ s0, s1, s2, s3, s4, s5, s6, s7,
+ t8, t9,
+ k0, k1,
+ gp,
+ sp,
+ fp,
+ ra = 31
};
/** \name Constructor and destructor
- \{ */
+ \{ */
public:
/// Construct a CPU.
Cpu(Mmu &mmu, Cp0 &cp0);
@@ -75,7 +75,7 @@ namespace vm
void write(std::ostream &os) const;
/** \name General purpose registers accessors.
- \{ */
+ \{ */
public:
/// Set the general purpose register \a k to \a r.
void set_register(kind_type k, register_type r);
@@ -84,7 +84,7 @@ namespace vm
/** \} */
/** \name Unlimited registers accessors.
- \{ */
+ \{ */
public:
/// Set the unlimited register indexed by \a i to \a r.
void set_unlimited(int i, register_type r);
@@ -95,7 +95,7 @@ namespace vm
/** \} */
/** \name Registers unified accessors.
- \{ */
+ \{ */
public:
/// Set the register identified by \a reg to \a r.
void set_register(const inst::Register ®, register_type r);
@@ -104,7 +104,7 @@ namespace vm
/** \} */
/** \name Special registers accessors.
- \{ */
+ \{ */
public:
/// Set the HI register to \a r.
void set_hi(register_type r);
@@ -140,68 +140,68 @@ namespace vm
void step();
protected:
- virtual void visit(const inst::Add& add);
- virtual void visit(const inst::Addi& addi);
- virtual void visit(const inst::Addu& addu);
- virtual void visit(const inst::Addiu& addiu);
- virtual void visit(const inst::Sub& sub);
- virtual void visit(const inst::Subu& subu);
-
- virtual void visit(const inst::Sll& sll);
- virtual void visit(const inst::Sllv& slv);
- virtual void visit(const inst::Sra& sra);
- virtual void visit(const inst::Srav& srav);
- virtual void visit(const inst::Srl& srl);
- virtual void visit(const inst::Srlv& srlv);
-
- virtual void visit(const inst::Mul& mul);
- virtual void visit(const inst::Div& div);
- virtual void visit(const inst::Divu& divu);
-
- virtual void visit(const inst::Lb& lb);
- virtual void visit(const inst::Lbu& Lbu);
- virtual void visit(const inst::Lw& lw);
- virtual void visit(const inst::Lui& lui);
- virtual void visit(const inst::Sb& sb);
- virtual void visit(const inst::Sw& sw);
-
- virtual void visit(const inst::And& _and);
- virtual void visit(const inst::Andi& andi);
- virtual void visit(const inst::Or& _or);
- virtual void visit(const inst::Ori& ori);
- virtual void visit(const inst::Nor& nor);
- virtual void visit(const inst::Xor& _xor);
- virtual void visit(const inst::Xori& xori);
-
- virtual void visit(const inst::Slt& slt);
- virtual void visit(const inst::Slti& slti);
- virtual void visit(const inst::Sltu&);
- virtual void visit(const inst::Sltiu& sltiu);
-
- virtual void visit(const inst::Jmp& jmp);
- virtual void visit(const inst::Jr& jr);
- virtual void visit(const inst::Jal& jal);
- virtual void visit(const inst::Jalr& jalr);
-
- virtual void visit(const inst::Beq& beq);
- virtual void visit(const inst::Bne& bne);
-
- virtual void visit(const inst::Bgez& bgez);
- virtual void visit(const inst::Bgezal& bgezal);
- virtual void visit(const inst::Bgtz& bgtz);
-
- virtual void visit(const inst::Blez& blez);
- virtual void visit(const inst::Bltz& bltz);
- virtual void visit(const inst::Bltzal& bltzal);
-
- virtual void visit(const inst::Mfhi& mfhi);
- virtual void visit(const inst::Mflo& mflo);
- virtual void visit(const inst::Mthi& mthi);
- virtual void visit(const inst::Mtlo& mtlo);
- virtual void visit(const inst::Mfc0& mfc0);
- virtual void visit(const inst::Mtc0& mtc0);
-
- virtual void visit(const inst::Syscall& sycall);
+ virtual void visit(const inst::Add& add);
+ virtual void visit(const inst::Addi& addi);
+ virtual void visit(const inst::Addu& addu);
+ virtual void visit(const inst::Addiu& addiu);
+ virtual void visit(const inst::Sub& sub);
+ virtual void visit(const inst::Subu& subu);
+
+ virtual void visit(const inst::Sll& sll);
+ virtual void visit(const inst::Sllv& slv);
+ virtual void visit(const inst::Sra& sra);
+ virtual void visit(const inst::Srav& srav);
+ virtual void visit(const inst::Srl& srl);
+ virtual void visit(const inst::Srlv& srlv);
+
+ virtual void visit(const inst::Mul& mul);
+ virtual void visit(const inst::Div& div);
+ virtual void visit(const inst::Divu& divu);
+
+ virtual void visit(const inst::Lb& lb);
+ virtual void visit(const inst::Lbu& Lbu);
+ virtual void visit(const inst::Lw& lw);
+ virtual void visit(const inst::Lui& lui);
+ virtual void visit(const inst::Sb& sb);
+ virtual void visit(const inst::Sw& sw);
+
+ virtual void visit(const inst::And& _and);
+ virtual void visit(const inst::Andi& andi);
+ virtual void visit(const inst::Or& _or);
+ virtual void visit(const inst::Ori& ori);
+ virtual void visit(const inst::Nor& nor);
+ virtual void visit(const inst::Xor& _xor);
+ virtual void visit(const inst::Xori& xori);
+
+ virtual void visit(const inst::Slt& slt);
+ virtual void visit(const inst::Slti& slti);
+ virtual void visit(const inst::Sltu&);
+ virtual void visit(const inst::Sltiu& sltiu);
+
+ virtual void visit(const inst::Jmp& jmp);
+ virtual void visit(const inst::Jr& jr);
+ virtual void visit(const inst::Jal& jal);
+ virtual void visit(const inst::Jalr& jalr);
+
+ virtual void visit(const inst::Beq& beq);
+ virtual void visit(const inst::Bne& bne);
+
+ virtual void visit(const inst::Bgez& bgez);
+ virtual void visit(const inst::Bgezal& bgezal);
+ virtual void visit(const inst::Bgtz& bgtz);
+
+ virtual void visit(const inst::Blez& blez);
+ virtual void visit(const inst::Bltz& bltz);
+ virtual void visit(const inst::Bltzal& bltzal);
+
+ virtual void visit(const inst::Mfhi& mfhi);
+ virtual void visit(const inst::Mflo& mflo);
+ virtual void visit(const inst::Mthi& mthi);
+ virtual void visit(const inst::Mtlo& mtlo);
+ virtual void visit(const inst::Mfc0& mfc0);
+ virtual void visit(const inst::Mtc0& mtc0);
+
+ virtual void visit(const inst::Syscall& sycall);
void call();
void ret();
@@ -233,12 +233,12 @@ namespace vm
enum pipeline_stage_type
{
- i_stage = 0, ///< Instruction fetch stage
- d_stage, ///< Instruction dispatch stage
- r_stage, ///< Regoster file read stage
- e_stage, ///< Execution stage
- m_stage, ///< Memory access stage
- w_stage ///< Writeback stage
+ i_stage = 0, ///< Instruction fetch stage
+ d_stage, ///< Instruction dispatch stage
+ r_stage, ///< Regoster file read stage
+ e_stage, ///< Execution stage
+ m_stage, ///< Memory access stage
+ w_stage ///< Writeback stage
};
inst::Inst *bubble_;
diff --git a/src/vm/cpu.hxx b/src/vm/cpu.hxx
index 919741e..91ba7d8 100644
--- a/src/vm/cpu.hxx
+++ b/src/vm/cpu.hxx
@@ -57,10 +57,10 @@ namespace vm
{
if (!has_unlimited(i))
{
- std::cerr
- << "Warning: unlimited register `$x" << i
- << "' used before initialized" << std::endl;
- exit(exit_runtime);
+ std::cerr
+ << "Warning: unlimited register `$x" << i
+ << "' used before initialized" << std::endl;
+ exit(exit_runtime);
}
return unlimited_.get(i);
}
@@ -72,10 +72,10 @@ namespace vm
unlimited_.put(reg.get_index(), r);
else
{
- precondition(reg.get_kind() == inst::Register::general &&
- Cpu::zero <= reg.get_index() &&
- reg.get_index() <= Cpu::ra);
- set_register((kind_type) reg.get_index(), r);
+ precondition(reg.get_kind() == inst::Register::general &&
+ Cpu::zero <= reg.get_index() &&
+ reg.get_index() <= Cpu::ra);
+ set_register((kind_type) reg.get_index(), r);
}
}
inline register_type
@@ -85,7 +85,7 @@ namespace vm
return get_unlimited(reg.get_index());
precondition(reg.get_kind() == inst::Register::general &&
- Cpu::zero <= reg.get_index() && reg.get_index() <= Cpu::ra);
+ Cpu::zero <= reg.get_index() && reg.get_index() <= Cpu::ra);
return get_register((kind_type) reg.get_index());
}
@@ -146,7 +146,7 @@ namespace vm
{
if (check_callee_save_p_)
for (int i = Cpu::s0; i <= Cpu::s7; ++i)
- set_unlimited(-i, get_register((Cpu::kind_type) i));
+ set_unlimited(-i, get_register((Cpu::kind_type) i));
call_stack_.push_back(get_pc ());
unlimited_.begin_scope();
@@ -158,15 +158,15 @@ namespace vm
if (check_callee_save_p_)
for (int i = Cpu::s0; i <= Cpu::s7; ++i)
- if (get_unlimited(-i) != get_register((Cpu::kind_type) i))
- {
- std::cerr
- << "Warning: callee save register `$s" << i - Cpu::s0
- << "' was not preserved across last call to 0x"
- << std::hex << *call_stack_.rbegin() << std::dec << std::endl;
- set_register((Cpu::kind_type) i, get_unlimited(-i));
- exit_set(exit_runtime);
- }
+ if (get_unlimited(-i) != get_register((Cpu::kind_type) i))
+ {
+ std::cerr
+ << "Warning: callee save register `$s" << i - Cpu::s0
+ << "' was not preserved across last call to 0x"
+ << std::hex << *call_stack_.rbegin() << std::dec << std::endl;
+ set_register((Cpu::kind_type) i, get_unlimited(-i));
+ exit_set(exit_runtime);
+ }
call_stack_.pop_back();
}
@@ -191,12 +191,12 @@ namespace vm
{
if (trace_p_)
std::cout << "[I :: " << *pipeline_[i_stage] << "] " << std::endl
- << "[D :: " << *pipeline_[d_stage] << "] " << std::endl
- << "[R :: " << *pipeline_[r_stage] << "] " << std::endl
- << "[E :: " << *pipeline_[e_stage] << "] " << std::endl
- << "[M :: " << *pipeline_[m_stage] << "] " << std::endl
- << "[W :: " << *pipeline_[w_stage] << "] " << std::endl
- << std::endl;
+ << "[D :: " << *pipeline_[d_stage] << "] " << std::endl
+ << "[R :: " << *pipeline_[r_stage] << "] " << std::endl
+ << "[E :: " << *pipeline_[e_stage] << "] " << std::endl
+ << "[M :: " << *pipeline_[m_stage] << "] " << std::endl
+ << "[W :: " << *pipeline_[w_stage] << "] " << std::endl
+ << std::endl;
pipeline_[w_stage] = pipeline_[m_stage];
pipeline_[m_stage] = pipeline_[e_stage];
diff --git a/src/vm/fwd.hh b/src/vm/fwd.hh
index ee2a146..843583f 100644
--- a/src/vm/fwd.hh
+++ b/src/vm/fwd.hh
@@ -6,12 +6,12 @@
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// Nolimips 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 Nolimips. If not, see <http://www.gnu.org/licenses/>.
//
diff --git a/src/vm/memory.hh b/src/vm/memory.hh
index fcbe02a..44dd496 100644
--- a/src/vm/memory.hh
+++ b/src/vm/memory.hh
@@ -38,12 +38,12 @@ namespace vm
enum segment_kind
{
- heap = 0,
- stack = 1
+ heap = 0,
+ stack = 1
};
/** \name Constructor and destructor
- \{ */
+ \{ */
public:
/// Construct a Memory
Memory(int stack_size = default_stack_size);
@@ -61,7 +61,7 @@ namespace vm
int get_stack_top() const;
/** \name Store instructions
- \{ */
+ \{ */
public:
void store(const inst::DataSection& data_section);
@@ -72,7 +72,7 @@ namespace vm
/** \} */
/** \name Load instructions
- \{ */
+ \{ */
public:
/// Load a byte from memory
int load_byte(segment_kind k, int offset) const;
diff --git a/src/vm/memory.hxx b/src/vm/memory.hxx
index de9269f..d329f06 100644
--- a/src/vm/memory.hxx
+++ b/src/vm/memory.hxx
@@ -47,7 +47,7 @@ namespace vm
Memory::sbrk(int size)
{
precondition(size >= 0);
- int ptr = segments_[heap].size();
+ int ptr = segments_[heap].size();
if (size)
// FIXME: check collision with stack
segments_[heap].resize(size + segments_[heap].size());
diff --git a/src/vm/mmu.hh b/src/vm/mmu.hh
index cd9ec7d..4f6e8ec 100644
--- a/src/vm/mmu.hh
+++ b/src/vm/mmu.hh
@@ -34,7 +34,7 @@ namespace vm
class Mmu
{
/** \name Constructor and destructor
- \{ */
+ \{ */
public:
Mmu(Cp0 &cp0, Memory &memory);
/** \} */
@@ -43,7 +43,7 @@ namespace vm
void reset();
/** \name Proxy for memory data access.
- \{ */
+ \{ */
protected:
bool translate(int &offset, Memory::segment_kind &k) const;
@@ -65,7 +65,7 @@ namespace vm
/** \} */
/** \name Proxy for memory instruction access.
- \{ */
+ \{ */
public:
void inst_store(const inst::TextSection& text_section);
diff --git a/src/vm/mmu.hxx b/src/vm/mmu.hxx
index b686bf8..948da20 100644
--- a/src/vm/mmu.hxx
+++ b/src/vm/mmu.hxx
@@ -47,18 +47,18 @@ namespace vm
{
if (0 <= offset)
{
- if (offset < memory_.heap_size())
- {
- k = Memory::heap;
- return true;
- }
- if (memory_.get_stack_top() <= offset)
- {
- k = Memory::stack;
- // Stack grows down
- offset = offset - memory_.get_stack_top();
- return true;
- }
+ if (offset < memory_.heap_size())
+ {
+ k = Memory::heap;
+ return true;
+ }
+ if (memory_.get_stack_top() <= offset)
+ {
+ k = Memory::stack;
+ // Stack grows down
+ offset = offset - memory_.get_stack_top();
+ return true;
+ }
}
return false;
}
@@ -123,7 +123,7 @@ namespace vm
Mmu::inst_store(const inst::TextSection& text_section)
{
for (inst::TextSection::instruction_list_type::const_iterator
- it = text_section.begin(); it != text_section.end(); ++it)
+ it = text_section.begin(); it != text_section.end(); ++it)
text_section_.push_back(*it);
}
@@ -132,11 +132,11 @@ namespace vm
{
// Precondition
if (offset < 0 ||
- text_section_.size() <= static_cast<unsigned>(offset))
+ text_section_.size() <= static_cast<unsigned>(offset))
{
- std::cerr << "inst_load" << std::endl;
- cp0_.raise_addr_load();
- return *text_section_[0]; // FIXME: NO!
+ std::cerr << "inst_load" << std::endl;
+ cp0_.raise_addr_load();
+ return *text_section_[0]; // FIXME: NO!
}
return *text_section_[offset];
diff --git a/src/vm/nolimips_system_library.cc b/src/vm/nolimips_system_library.cc
index 7b22a81..167f8d9 100644
--- a/src/vm/nolimips_system_library.cc
+++ b/src/vm/nolimips_system_library.cc
@@ -40,17 +40,17 @@ namespace vm
int i = -1;
if (istr)
{
- istr->peek();
+ istr->peek();
- if (!istr->eof())
- for (i = 0; i < count; ++i, ++offset)
- {
- int c = istr->get();
- if (istr->eof())
- break;
+ if (!istr->eof())
+ for (i = 0; i < count; ++i, ++offset)
+ {
+ int c = istr->get();
+ if (istr->eof())
+ break;
- mmu.data_store_byte(offset, c);
- }
+ mmu.data_store_byte(offset, c);
+ }
}
return i;
@@ -69,8 +69,8 @@ namespace vm
int i = -1;
if (ostr)
{
- for (i = 0; i < count; ++i, ++offset)
- ostr->put(static_cast<char>(mmu.data_load_byte(offset)));
+ for (i = 0; i < count; ++i, ++offset)
+ ostr->put(static_cast<char>(mmu.data_load_byte(offset)));
}
return i;
@@ -82,40 +82,40 @@ namespace vm
switch (cpu.get_register(Cpu::v0))
{
case 0x02: // read(fd: $a0, buf: $a1, count: $a2): $v0
- {
- cpu.set_register(Cpu::v0,
- read(cpu.get_register(Cpu::a0),
- cpu.get_mmu(), cpu.get_register(Cpu::a1),
- cpu.get_register(Cpu::a2)));
- }
+ {
+ cpu.set_register(Cpu::v0,
+ read(cpu.get_register(Cpu::a0),
+ cpu.get_mmu(), cpu.get_register(Cpu::a1),
+ cpu.get_register(Cpu::a2)));
+ }
break;
case 0x03: // write(fd: $a0, buf: $a1, count: $a2): $v0
- {
- cpu.set_register(Cpu::v0,
- write(cpu.get_register(Cpu::a0),
- cpu.get_mmu(), cpu.get_register(Cpu::a1),
- cpu.get_register(Cpu::a2)));
- }
+ {
+ cpu.set_register(Cpu::v0,
+ write(cpu.get_register(Cpu::a0),
+ cpu.get_mmu(), cpu.get_register(Cpu::a1),
+ cpu.get_register(Cpu::a2)));
+ }
break;
case 0x06: // exit(status: $a0)
- cpu.get_cp0().set_fatal_exception();
- if (!exit_status)
- exit_status = (exit_type) cpu.get_register(Cpu::a0);
- break;
+ cpu.get_cp0().set_fatal_exception();
+ if (!exit_status)
+ exit_status = (exit_type) cpu.get_register(Cpu::a0);
+ break;
case 0x33: // malloc(size: $a0)
- cpu.set_register(Cpu::v0,
- cpu.get_mmu().data_sbrk(cpu.get_register(Cpu::a0)));
- break;
+ cpu.set_register(Cpu::v0,
+ cpu.get_mmu().data_sbrk(cpu.get_register(Cpu::a0)));
+ break;
case 0x34: // free(buf: $a0)
- // FIXME
- break;
+ // FIXME
+ break;
default:
- assertion(!"syscall: Not implemented yet");
- break;
+ assertion(!"syscall: Not implemented yet");
+ break;
}
}
diff --git a/src/vm/nolimips_system_library.hh b/src/vm/nolimips_system_library.hh
index 7f0e855..256678c 100644
--- a/src/vm/nolimips_system_library.hh
+++ b/src/vm/nolimips_system_library.hh
@@ -31,8 +31,8 @@ namespace vm
{
public:
NolimipsSystemLibrary(std::istream &istr,
- std::ostream &ostr,
- std::ostream &estr);
+ std::ostream &ostr,
+ std::ostream &estr);
virtual ~NolimipsSystemLibrary();
public:
diff --git a/src/vm/nolimips_system_library.hxx b/src/vm/nolimips_system_library.hxx
index c6c6349..362eacd 100644
--- a/src/vm/nolimips_system_library.hxx
+++ b/src/vm/nolimips_system_library.hxx
@@ -25,8 +25,8 @@ namespace vm
inline
NolimipsSystemLibrary::NolimipsSystemLibrary(std::istream &istr,
- std::ostream &ostr,
- std::ostream &estr):
+ std::ostream &ostr,
+ std::ostream &estr):
istr_(istr), ostr_(ostr), estr_(estr)
{
}
diff --git a/src/vm/segment.hxx b/src/vm/segment.hxx
index 5c67b16..35e79e9 100644
--- a/src/vm/segment.hxx
+++ b/src/vm/segment.hxx
@@ -43,14 +43,14 @@ namespace vm
inline void
Segment::resize(int new_size)
{
- uint8_t* new_bytes = new uint8_t[new_size];
+ uint8_t* new_bytes = new uint8_t[new_size];
if (bytes_)
{
- int min = new_size < size_ ? new_size : size_;
- // FIXME: may be accelerated with memcpy
- for (int i = 0; i < min; ++i)
- new_bytes[i] = bytes_[i];
- delete [] bytes_;
+ int min = new_size < size_ ? new_size : size_;
+ // FIXME: may be accelerated with memcpy
+ for (int i = 0; i < min; ++i)
+ new_bytes[i] = bytes_[i];
+ delete [] bytes_;
}
bytes_ = new_bytes;
size_ = new_size;
@@ -74,11 +74,11 @@ namespace vm
inline void
Segment::store_word(int offset, int w)
{
- unsigned pow = 256 * 256 * 256;
+ unsigned pow = 256 * 256 * 256;
for (unsigned i = 0; i < 4; ++i, ++offset, pow /= 256)
{
- assertion(offset < size_);
- bytes_[offset] = w / pow;
+ assertion(offset < size_);
+ bytes_[offset] = w / pow;
}
}
@@ -93,11 +93,11 @@ namespace vm
inline int
Segment::load_word(int offset) const
{
- int w = 0;
+ int w = 0;
for (unsigned i = 0; i < 4; ++i, ++offset)
{
- assertion(offset < size_);
- w = (w * 256) + bytes_[offset];
+ assertion(offset < size_);
+ w = (w * 256) + bytes_[offset];
}
return w;
}
diff --git a/src/vm/spim_system_library.cc b/src/vm/spim_system_library.cc
index d9f72fd..dfa1d76 100644
--- a/src/vm/spim_system_library.cc
+++ b/src/vm/spim_system_library.cc
@@ -36,67 +36,67 @@ namespace vm
switch (cpu.get_register(Cpu::v0))
{
- // print_int (integer: $a0)
+ // print_int (integer: $a0)
case 1:
- ostr_ << cpu.get_register(Cpu::a0);
- break;
+ ostr_ << cpu.get_register(Cpu::a0);
+ break;
- // print_string (buffer: $a0)
+ // print_string (buffer: $a0)
case 4:
- for (int i = cpu.get_register(Cpu::a0); true; ++i)
- {
- char b = mmu.data_load_byte(i);
- if (b == 0)
- break;
- ostr_ << b;
- }
- break;
+ for (int i = cpu.get_register(Cpu::a0); true; ++i)
+ {
+ char b = mmu.data_load_byte(i);
+ if (b == 0)
+ break;
+ ostr_ << b;
+ }
+ break;
- // read_string (buffer: $a0, length: $a1)
+ // read_string (buffer: $a0, length: $a1)
case 8:
- {
- int i = 0;
- int c = 0;
- for (; (i < cpu.get_register(Cpu::a1) - 1)
- && (c != '\n') && (c != '\r');
- ++i)
- {
- c = istr_.get();
- if (istr_.eof())
- break;
- mmu.data_store_byte(cpu.get_register(Cpu::a0) + i, c);
- }
- mmu.data_store_byte(cpu.get_register(Cpu::a0) + i, 0);
- }
- break;
+ {
+ int i = 0;
+ int c = 0;
+ for (; (i < cpu.get_register(Cpu::a1) - 1)
+ && (c != '\n') && (c != '\r');
+ ++i)
+ {
+ c = istr_.get();
+ if (istr_.eof())
+ break;
+ mmu.data_store_byte(cpu.get_register(Cpu::a0) + i, c);
+ }
+ mmu.data_store_byte(cpu.get_register(Cpu::a0) + i, 0);
+ }
+ break;
- // sbrk (size: $a0)
+ // sbrk (size: $a0)
case 9:
- cpu.set_register(Cpu::v0, mmu.data_sbrk(cpu.get_register(Cpu::a0)));
- break;
+ cpu.set_register(Cpu::v0, mmu.data_sbrk(cpu.get_register(Cpu::a0)));
+ break;
- // exit (status : $a0)
+ // exit (status : $a0)
case 10:
- {
- cpu.get_cp0().set_fatal_exception();
- if (!exit_status)
- exit_status = (exit_type) cpu.get_register(Cpu::a0);
- }
- break;
+ {
+ cpu.get_cp0().set_fatal_exception();
+ if (!exit_status)
+ exit_status = (exit_type) cpu.get_register(Cpu::a0);
+ }
+ break;
- // print_err (buffer: $a0)
+ // print_err (buffer: $a0)
case 15:
- for (int i = cpu.get_register(Cpu::a0); true; ++i)
- {
- char b = mmu.data_load_byte(i);
- if (b == 0)
- break;
- std::cerr << b;
- }
- break;
+ for (int i = cpu.get_register(Cpu::a0); true; ++i)
+ {
+ char b = mmu.data_load_byte(i);
+ if (b == 0)
+ break;
+ std::cerr << b;
+ }
+ break;
default:
- assertion(!"syscall: Not implemented yet");
+ assertion(!"syscall: Not implemented yet");
};
ostr_.flush();
}
diff --git a/src/vm/spim_system_library.hxx b/src/vm/spim_system_library.hxx
index b60dab0..306773b 100644
--- a/src/vm/spim_system_library.hxx
+++ b/src/vm/spim_system_library.hxx
@@ -25,7 +25,7 @@ namespace vm
inline
SpimSystemLibrary::SpimSystemLibrary(std::istream &istr,
- std::ostream &ostr):
+ std::ostream &ostr):
istr_(istr), ostr_(ostr)
{
}
diff --git a/src/vm/virtual_machine.cc b/src/vm/virtual_machine.cc
index 0d68d19..13a3848 100644
--- a/src/vm/virtual_machine.cc
+++ b/src/vm/virtual_machine.cc
@@ -42,9 +42,9 @@ namespace vm
misc::unique_string main("main");
if (! program.text_section ().has_label(main))
{
- std::cerr << "No `main' label in assembly file." << std::endl;
- exit_set(exit_runtime);
- return;
+ std::cerr << "No `main' label in assembly file." << std::endl;
+ exit_set(exit_runtime);
+ return;
}
main_offset_ = program.text_section().get_offset(main);
mmu_.data_store(program.data_section());
@@ -62,8 +62,8 @@ namespace vm
cpu_.set_pc(main_offset_);
while (!cp0_.fatal_exception())
{
- cpu_.step();
- cp0_.set_count(cp0_.get_count() + 1);
+ cpu_.step();
+ cp0_.set_count(cp0_.get_count() + 1);
}
// FIXME: this is not the good test, but for the moment it suffices
@@ -85,21 +85,21 @@ namespace vm
cpu_.set_trace(trace_p);
while (status_ == run)
{
- cpu_.step();
- cp0_.set_count(cp0_.get_count() + 1);
- if (cp0_.fatal_exception())
- {
- status_ = halt;
- std::cerr << "Program exited." << std::endl;
- break;
- }
- if (has(breakpoints_, cpu_.get_pc()))
- {
- std::cout << "Breakpoint at pc = " << cpu_.get_pc() << std::endl;
- status_ = pause;
- }
- if (mode_ == step)
- status_ = pause;
+ cpu_.step();
+ cp0_.set_count(cp0_.get_count() + 1);
+ if (cp0_.fatal_exception())
+ {
+ status_ = halt;
+ std::cerr << "Program exited." << std::endl;
+ break;
+ }
+ if (has(breakpoints_, cpu_.get_pc()))
+ {
+ std::cout << "Breakpoint at pc = " << cpu_.get_pc() << std::endl;
+ status_ = pause;
+ }
+ if (mode_ == step)
+ status_ = pause;
}
}
diff --git a/src/vm/virtual_machine.hh b/src/vm/virtual_machine.hh
index 6866d2c..7498f6d 100644
--- a/src/vm/virtual_machine.hh
+++ b/src/vm/virtual_machine.hh
@@ -39,20 +39,20 @@ namespace vm
public:
enum mode_type
{
- normal,
- step
+ normal,
+ step
};
enum status_type
{
- run,
- pause,
- stop,
- halt
+ run,
+ pause,
+ stop,
+ halt
};
/** \name Constructor and destructor.
- \{ */
+ \{ */
public:
VirtualMachine(mode_type mode = normal);
/** \} */
@@ -73,7 +73,7 @@ namespace vm
void execute();
/** \name Shell entry point
- \{ */
+ \{ */
public:
/// Execute a program
void execute(bool trace_p);
@@ -98,13 +98,13 @@ namespace vm
Cp0 &get_cp0();
const Cpu &get_cpu() const;
- Cpu &get_cpu();
+ Cpu &get_cpu();
protected:
/// The virtual machine mode.
- mode_type mode_;
+ mode_type mode_;
/// The virtual machine status.
- status_type status_;
+ status_type status_;
/** \} */
protected:
--
1.7.2.5
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Nolimips, a MIPS simulator with infinitely many registers".
The branch update-build-aux has been deleted
was ff5ce5b15532948717df99e4c3e2872bf8acb552
-----------------------------------------------------------------------
ff5ce5b15532948717df99e4c3e2872bf8acb552 build-aux: update tools
-----------------------------------------------------------------------
hooks/post-receive
--
Nolimips, a MIPS simulator with infinitely many registers
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Nolimips, a MIPS simulator with infinitely many registers".
The branch master has been updated
via 81bf8323f62695c773a7055017d36c9b584feb47 (commit)
via 55416eee82780975dcbea4f3a929a8adcdcf99ad (commit)
via ff5ce5b15532948717df99e4c3e2872bf8acb552 (commit)
via cef56452fce165ac4770410552c70abb89612fe0 (commit)
via acc59f3da99130b76215a2289b04ec7fcbf8bc00 (commit)
via f0ce61e5f17dd9a7853071a946b8ddda877e55f7 (commit)
via a3d879cd9d376ac0e839cc4bdb2e44e2cdfea5b6 (commit)
via fb32fd0c402c671fdecb645434f89d87edab0414 (commit)
via 89bbed904ef20279d269d2cd27fdf43f8b4c1d62 (commit)
from fb8a6d4adfd97265f6c298851a50ef0d6a78a771 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
81bf832 Add a target to install Nolimips' documentation on the Web.
55416ee Change Nolimips' bug report e-mail address.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 73 +++++++++++
Makefile.am | 3 +
build-aux/Makefile.am | 4 +-
build-aux/bin/bison++.in | 296 ++++++++++++++++++++++++++++++++++++++++++
build-aux/bin/fuse-switch | 168 ++++++++++++++++++++++++
build-aux/bin/move-if-change | 79 +++++++++++
build-aux/bison++.in | 128 ------------------
build-aux/move-if-change | 18 ---
configure.ac | 4 +-
doc/Makefile.am | 8 +
src/parse/Makefile.am | 36 +++--
11 files changed, 653 insertions(+), 164 deletions(-)
create mode 100755 build-aux/bin/bison++.in
create mode 100755 build-aux/bin/fuse-switch
create mode 100755 build-aux/bin/move-if-change
delete mode 100755 build-aux/bison++.in
delete mode 100755 build-aux/move-if-change
hooks/post-receive
--
Nolimips, a MIPS simulator with infinitely many registers