| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include "src/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" |
| 8 #include "src/arm64/macro-assembler-arm64.h" | 8 #include "src/arm64/macro-assembler-arm64.h" |
| 9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
| 10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 case kMode_Operand2_R_ROR_I: | 112 case kMode_Operand2_R_ROR_I: |
| 113 return Operand(InputRegister32(index), ROR, InputInt5(index + 1)); | 113 return Operand(InputRegister32(index), ROR, InputInt5(index + 1)); |
| 114 case kMode_Operand2_R_UXTB: | 114 case kMode_Operand2_R_UXTB: |
| 115 return Operand(InputRegister32(index), UXTB); | 115 return Operand(InputRegister32(index), UXTB); |
| 116 case kMode_Operand2_R_UXTH: | 116 case kMode_Operand2_R_UXTH: |
| 117 return Operand(InputRegister32(index), UXTH); | 117 return Operand(InputRegister32(index), UXTH); |
| 118 case kMode_Operand2_R_SXTB: | 118 case kMode_Operand2_R_SXTB: |
| 119 return Operand(InputRegister32(index), SXTB); | 119 return Operand(InputRegister32(index), SXTB); |
| 120 case kMode_Operand2_R_SXTH: | 120 case kMode_Operand2_R_SXTH: |
| 121 return Operand(InputRegister32(index), SXTH); | 121 return Operand(InputRegister32(index), SXTH); |
| 122 case kMode_Operand2_R_SXTW: |
| 123 return Operand(InputRegister32(index), SXTW); |
| 122 case kMode_MRI: | 124 case kMode_MRI: |
| 123 case kMode_MRR: | 125 case kMode_MRR: |
| 124 break; | 126 break; |
| 125 } | 127 } |
| 126 UNREACHABLE(); | 128 UNREACHABLE(); |
| 127 return Operand(-1); | 129 return Operand(-1); |
| 128 } | 130 } |
| 129 | 131 |
| 130 Operand InputOperand2_64(size_t index) { | 132 Operand InputOperand2_64(size_t index) { |
| 131 switch (AddressingModeField::decode(instr_->opcode())) { | 133 switch (AddressingModeField::decode(instr_->opcode())) { |
| 132 case kMode_None: | 134 case kMode_None: |
| 133 return InputOperand64(index); | 135 return InputOperand64(index); |
| 134 case kMode_Operand2_R_LSL_I: | 136 case kMode_Operand2_R_LSL_I: |
| 135 return Operand(InputRegister64(index), LSL, InputInt6(index + 1)); | 137 return Operand(InputRegister64(index), LSL, InputInt6(index + 1)); |
| 136 case kMode_Operand2_R_LSR_I: | 138 case kMode_Operand2_R_LSR_I: |
| 137 return Operand(InputRegister64(index), LSR, InputInt6(index + 1)); | 139 return Operand(InputRegister64(index), LSR, InputInt6(index + 1)); |
| 138 case kMode_Operand2_R_ASR_I: | 140 case kMode_Operand2_R_ASR_I: |
| 139 return Operand(InputRegister64(index), ASR, InputInt6(index + 1)); | 141 return Operand(InputRegister64(index), ASR, InputInt6(index + 1)); |
| 140 case kMode_Operand2_R_ROR_I: | 142 case kMode_Operand2_R_ROR_I: |
| 141 return Operand(InputRegister64(index), ROR, InputInt6(index + 1)); | 143 return Operand(InputRegister64(index), ROR, InputInt6(index + 1)); |
| 142 case kMode_Operand2_R_UXTB: | 144 case kMode_Operand2_R_UXTB: |
| 143 return Operand(InputRegister64(index), UXTB); | 145 return Operand(InputRegister64(index), UXTB); |
| 144 case kMode_Operand2_R_UXTH: | 146 case kMode_Operand2_R_UXTH: |
| 145 return Operand(InputRegister64(index), UXTH); | 147 return Operand(InputRegister64(index), UXTH); |
| 146 case kMode_Operand2_R_SXTB: | 148 case kMode_Operand2_R_SXTB: |
| 147 return Operand(InputRegister64(index), SXTB); | 149 return Operand(InputRegister64(index), SXTB); |
| 148 case kMode_Operand2_R_SXTH: | 150 case kMode_Operand2_R_SXTH: |
| 149 return Operand(InputRegister64(index), SXTH); | 151 return Operand(InputRegister64(index), SXTH); |
| 152 case kMode_Operand2_R_SXTW: |
| 153 return Operand(InputRegister32(index), SXTW); |
| 150 case kMode_MRI: | 154 case kMode_MRI: |
| 151 case kMode_MRR: | 155 case kMode_MRR: |
| 152 break; | 156 break; |
| 153 } | 157 } |
| 154 UNREACHABLE(); | 158 UNREACHABLE(); |
| 155 return Operand(-1); | 159 return Operand(-1); |
| 156 } | 160 } |
| 157 | 161 |
| 158 MemOperand MemoryOperand(size_t* first_index) { | 162 MemOperand MemoryOperand(size_t* first_index) { |
| 159 const size_t index = *first_index; | 163 const size_t index = *first_index; |
| 160 switch (AddressingModeField::decode(instr_->opcode())) { | 164 switch (AddressingModeField::decode(instr_->opcode())) { |
| 161 case kMode_None: | 165 case kMode_None: |
| 162 case kMode_Operand2_R_LSR_I: | 166 case kMode_Operand2_R_LSR_I: |
| 163 case kMode_Operand2_R_ASR_I: | 167 case kMode_Operand2_R_ASR_I: |
| 164 case kMode_Operand2_R_ROR_I: | 168 case kMode_Operand2_R_ROR_I: |
| 165 case kMode_Operand2_R_UXTB: | 169 case kMode_Operand2_R_UXTB: |
| 166 case kMode_Operand2_R_UXTH: | 170 case kMode_Operand2_R_UXTH: |
| 167 case kMode_Operand2_R_SXTB: | 171 case kMode_Operand2_R_SXTB: |
| 168 case kMode_Operand2_R_SXTH: | 172 case kMode_Operand2_R_SXTH: |
| 173 case kMode_Operand2_R_SXTW: |
| 169 break; | 174 break; |
| 170 case kMode_Operand2_R_LSL_I: | 175 case kMode_Operand2_R_LSL_I: |
| 171 *first_index += 3; | 176 *first_index += 3; |
| 172 return MemOperand(InputRegister(index + 0), InputRegister(index + 1), | 177 return MemOperand(InputRegister(index + 0), InputRegister(index + 1), |
| 173 LSL, InputInt32(index + 2)); | 178 LSL, InputInt32(index + 2)); |
| 174 case kMode_MRI: | 179 case kMode_MRI: |
| 175 *first_index += 2; | 180 *first_index += 2; |
| 176 return MemOperand(InputRegister(index + 0), InputInt32(index + 1)); | 181 return MemOperand(InputRegister(index + 0), InputInt32(index + 1)); |
| 177 case kMode_MRR: | 182 case kMode_MRR: |
| 178 *first_index += 2; | 183 *first_index += 2; |
| (...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 case kArm64Clz32: | 1253 case kArm64Clz32: |
| 1249 __ Clz(i.OutputRegister32(), i.InputRegister32(0)); | 1254 __ Clz(i.OutputRegister32(), i.InputRegister32(0)); |
| 1250 break; | 1255 break; |
| 1251 case kArm64Rbit: | 1256 case kArm64Rbit: |
| 1252 __ Rbit(i.OutputRegister64(), i.InputRegister64(0)); | 1257 __ Rbit(i.OutputRegister64(), i.InputRegister64(0)); |
| 1253 break; | 1258 break; |
| 1254 case kArm64Rbit32: | 1259 case kArm64Rbit32: |
| 1255 __ Rbit(i.OutputRegister32(), i.InputRegister32(0)); | 1260 __ Rbit(i.OutputRegister32(), i.InputRegister32(0)); |
| 1256 break; | 1261 break; |
| 1257 case kArm64Cmp: | 1262 case kArm64Cmp: |
| 1258 __ Cmp(i.InputOrZeroRegister64(0), i.InputOperand(1)); | 1263 if (AddressingModeField::decode(opcode) == kMode_Operand2_R_SXTW) { |
| 1264 __ Cmp(i.InputOrZeroRegister64(0), i.InputOperand2_32(1)); |
| 1265 } else { |
| 1266 __ Cmp(i.InputOrZeroRegister64(0), i.InputOperand(1)); |
| 1267 } |
| 1259 break; | 1268 break; |
| 1260 case kArm64Cmp32: | 1269 case kArm64Cmp32: |
| 1261 __ Cmp(i.InputOrZeroRegister32(0), i.InputOperand2_32(1)); | 1270 __ Cmp(i.InputOrZeroRegister32(0), i.InputOperand2_32(1)); |
| 1262 break; | 1271 break; |
| 1263 case kArm64Cmn: | 1272 case kArm64Cmn: |
| 1264 __ Cmn(i.InputOrZeroRegister64(0), i.InputOperand(1)); | 1273 __ Cmn(i.InputOrZeroRegister64(0), i.InputOperand(1)); |
| 1265 break; | 1274 break; |
| 1266 case kArm64Cmn32: | 1275 case kArm64Cmn32: |
| 1267 __ Cmn(i.InputOrZeroRegister32(0), i.InputOperand2_32(1)); | 1276 __ Cmn(i.InputOrZeroRegister32(0), i.InputOperand2_32(1)); |
| 1268 break; | 1277 break; |
| (...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2058 padding_size -= kInstructionSize; | 2067 padding_size -= kInstructionSize; |
| 2059 } | 2068 } |
| 2060 } | 2069 } |
| 2061 } | 2070 } |
| 2062 | 2071 |
| 2063 #undef __ | 2072 #undef __ |
| 2064 | 2073 |
| 2065 } // namespace compiler | 2074 } // namespace compiler |
| 2066 } // namespace internal | 2075 } // namespace internal |
| 2067 } // namespace v8 | 2076 } // namespace v8 |
| OLD | NEW |