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