Skip to content

Commit

Permalink
[mips] implement enough bytecodes to run return_42.dart
Browse files Browse the repository at this point in the history
Implement enough bytecodes to run

main() {
  var number = 42;
  print('$number');
}

Patch by RT-RK.

BUG= dart-archive#496
TEST= ninja -C out/DebugXMIPS
[email protected]

Review URL: https://codereview.chromium.org/2074483004 .

Patch from "RT-RK" <[email protected]>.
  • Loading branch information
petar-jovanovic authored and ErikCorryGoogle committed Jun 20, 2016
1 parent 5f6bac5 commit 2a03a33
Show file tree
Hide file tree
Showing 3 changed files with 768 additions and 15 deletions.
21 changes: 21 additions & 0 deletions src/vm/assembler_mips.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,32 @@ static const char* ConditionToString(Condition cond) {
return kConditionNames[cond];
}

void Assembler::B(Label* label) {
b(label);
nop();
}

void Assembler::B(Condition cond, Register reg1, Register reg2, Label* label) {
b(cond, reg1, reg2, label);
nop();
}

void Assembler::B(Condition cond, Register reg1, Register reg2,
const char* label) {
b(cond, reg1, reg2, label);
nop();
}

void Assembler::Jr(Register reg) {
jr(reg);
nop();
}

void Assembler::Jalr(Register reg) {
jalr(reg);
nop();
}

void Assembler::BindWithPowerOfTwoAlignment(const char* name, int power) {
AlignToPowerOfTwo(power);
printf("\t.globl %s%s\n%s%s:\n", LabelPrefix(), name, LabelPrefix(), name);
Expand Down
9 changes: 5 additions & 4 deletions src/vm/assembler_mips.h
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,6 @@ class Label {

class Assembler {
public:
INSTRUCTION_3(add, "add %r, %r, %r", Register, Register, Register);
INSTRUCTION_3(addi, "addi %r, %r, %i", Register, Register, const Immediate&);
INSTRUCTION_3(addu, "addu %r, %r, %r", Register, Register, Register);
INSTRUCTION_3(addiu, "addiu %r, %r, %i", Register, Register,
const Immediate&);
Expand Down Expand Up @@ -206,8 +204,6 @@ class Assembler {
INSTRUCTION_3(sltu, "sltu %r, %r, %r", Register, Register, Register);


INSTRUCTION_3(sub, "sub %r, %r, %r", Register, Register, Register);
INSTRUCTION_3(subi, "addi %r, %r, -%i", Register, Register, const Immediate&);
INSTRUCTION_3(subu, "subu %r, %r, %r", Register, Register, Register);

INSTRUCTION_0(syscall, "syscall");
Expand All @@ -221,7 +217,9 @@ class Assembler {
// Align what follows to a 2^power address.
void AlignToPowerOfTwo(int power);

void B(Label* label);
void B(Condition cond, Register reg1, Register reg2, Label* label);
void B(Condition cond, Register reg1, Register reg2, const char* label);

void Bind(const char* prefix, const char* name);
void Bind(Label* label);
Expand All @@ -233,6 +231,9 @@ class Assembler {
void BindWithPowerOfTwoAlignment(const char* name, int power);
void SwitchToData();

void Jr(Register reg);
void Jalr(Register reg);

const char* LabelPrefix();

private:
Expand Down
Loading

0 comments on commit 2a03a33

Please sign in to comment.