1// Copyright 2011 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#if V8_TARGET_ARCH_MIPS 6 7#include "src/codegen/mips/constants-mips.h" 8 9namespace v8 { 10namespace internal { 11 12// ----------------------------------------------------------------------------- 13// Registers. 14 15// These register names are defined in a way to match the native disassembler 16// formatting. See for example the command "objdump -d <binary file>". 17const char* Registers::names_[kNumSimuRegisters] = { 18 "zero_reg", "at", "v0", "v1", "a0", "a1", "a2", "a3", "t0", 19 "t1", "t2", "t3", "t4", "t5", "t6", "t7", "s0", "s1", 20 "s2", "s3", "s4", "s5", "s6", "s7", "t8", "t9", "k0", 21 "k1", "gp", "sp", "fp", "ra", "LO", "HI", "pc"}; 22 23// List of alias names which can be used when referring to MIPS registers. 24const Registers::RegisterAlias Registers::aliases_[] = { 25 {0, "zero"}, 26 {23, "cp"}, 27 {30, "s8"}, 28 {30, "s8_fp"}, 29 {kInvalidRegister, nullptr}}; 30 31const char* Registers::Name(int reg) { 32 const char* result; 33 if ((0 <= reg) && (reg < kNumSimuRegisters)) { 34 result = names_[reg]; 35 } else { 36 result = "noreg"; 37 } 38 return result; 39} 40 41int Registers::Number(const char* name) { 42 // Look through the canonical names. 43 for (int i = 0; i < kNumSimuRegisters; i++) { 44 if (strcmp(names_[i], name) == 0) { 45 return i; 46 } 47 } 48 49 // Look through the alias names. 50 int i = 0; 51 while (aliases_[i].reg != kInvalidRegister) { 52 if (strcmp(aliases_[i].name, name) == 0) { 53 return aliases_[i].reg; 54 } 55 i++; 56 } 57 58 // No register with the reguested name found. 59 return kInvalidRegister; 60} 61 62const char* FPURegisters::names_[kNumFPURegisters] = { 63 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", 64 "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21", 65 "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"}; 66 67// List of alias names which can be used when referring to MIPS registers. 68const FPURegisters::RegisterAlias FPURegisters::aliases_[] = { 69 {kInvalidRegister, nullptr}}; 70 71const char* FPURegisters::Name(int creg) { 72 const char* result; 73 if ((0 <= creg) && (creg < kNumFPURegisters)) { 74 result = names_[creg]; 75 } else { 76 result = "nocreg"; 77 } 78 return result; 79} 80 81int FPURegisters::Number(const char* name) { 82 // Look through the canonical names. 83 for (int i = 0; i < kNumFPURegisters; i++) { 84 if (strcmp(names_[i], name) == 0) { 85 return i; 86 } 87 } 88 89 // Look through the alias names. 90 int i = 0; 91 while (aliases_[i].creg != kInvalidRegister) { 92 if (strcmp(aliases_[i].name, name) == 0) { 93 return aliases_[i].creg; 94 } 95 i++; 96 } 97 98 // No Cregister with the reguested name found. 99 return kInvalidFPURegister; 100} 101 102const char* MSARegisters::names_[kNumMSARegisters] = { 103 "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", 104 "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "w19", "w20", "w21", 105 "w22", "w23", "w24", "w25", "w26", "w27", "w28", "w29", "w30", "w31"}; 106 107const MSARegisters::RegisterAlias MSARegisters::aliases_[] = { 108 {kInvalidRegister, nullptr}}; 109 110const char* MSARegisters::Name(int creg) { 111 const char* result; 112 if ((0 <= creg) && (creg < kNumMSARegisters)) { 113 result = names_[creg]; 114 } else { 115 result = "nocreg"; 116 } 117 return result; 118} 119 120int MSARegisters::Number(const char* name) { 121 // Look through the canonical names. 122 for (int i = 0; i < kNumMSARegisters; i++) { 123 if (strcmp(names_[i], name) == 0) { 124 return i; 125 } 126 } 127 128 // Look through the alias names. 129 int i = 0; 130 while (aliases_[i].creg != kInvalidRegister) { 131 if (strcmp(aliases_[i].name, name) == 0) { 132 return aliases_[i].creg; 133 } 134 i++; 135 } 136 137 // No Cregister with the reguested name found. 138 return kInvalidMSARegister; 139} 140 141} // namespace internal 142} // namespace v8 143 144#endif // V8_TARGET_ARCH_MIPS 145