Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===- subzero/src/IceAssemblerARM32.cpp - Assembler for ARM32 --*- C++ -*-===// | 1 //===- subzero/src/IceAssemblerARM32.cpp - Assembler for ARM32 --*- C++ -*-===// |
| 2 // | 2 // |
| 3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 4 // for details. All rights reserved. Use of this source code is governed by a | 4 // for details. All rights reserved. Use of this source code is governed by a |
| 5 // BSD-style license that can be found in the LICENSE file. | 5 // BSD-style license that can be found in the LICENSE file. |
| 6 // | 6 // |
| 7 // Modified by the Subzero authors. | 7 // Modified by the Subzero authors. |
| 8 // | 8 // |
| 9 //===----------------------------------------------------------------------===// | 9 //===----------------------------------------------------------------------===// |
| 10 // | 10 // |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 188 // Extract out a Bit in Value. | 188 // Extract out a Bit in Value. |
| 189 bool isBitSet(IValueT Bit, IValueT Value) { return (Value & Bit) == Bit; } | 189 bool isBitSet(IValueT Bit, IValueT Value) { return (Value & Bit) == Bit; } |
| 190 | 190 |
| 191 // Returns the GPR register at given Shift in Value. | 191 // Returns the GPR register at given Shift in Value. |
| 192 RegARM32::GPRRegister getGPRReg(IValueT Shift, IValueT Value) { | 192 RegARM32::GPRRegister getGPRReg(IValueT Shift, IValueT Value) { |
| 193 return decodeGPRRegister((Value >> Shift) & 0xF); | 193 return decodeGPRRegister((Value >> Shift) & 0xF); |
| 194 } | 194 } |
| 195 | 195 |
| 196 IValueT getEncodedGPRegNum(const Variable *Var) { | 196 IValueT getEncodedGPRegNum(const Variable *Var) { |
| 197 assert(Var->hasReg()); | 197 assert(Var->hasReg()); |
| 198 int32_t Reg = Var->getRegNum(); | 198 RegNumT Reg = Var->getRegNum(); |
| 199 return llvm::isa<Variable64On32>(Var) ? RegARM32::getI64PairFirstGPRNum(Reg) | 199 return llvm::isa<Variable64On32>(Var) ? RegARM32::getI64PairFirstGPRNum(Reg) |
| 200 : RegARM32::getEncodedGPR(Reg); | 200 : RegARM32::getEncodedGPR(Reg); |
| 201 } | 201 } |
|
Eric Holk
2016/02/08 19:37:09
Optional, but would it make sense to turn getI64Pa
Jim Stichnoth
2016/02/09 19:33:39
Those functions are supposed to be GPRRegister whi
Karl
2016/02/09 21:52:14
Be careful when removing IValueT. It was explicitl
Eric Holk
2016/02/10 01:11:30
Sounds good.
| |
| 202 | 202 |
| 203 IValueT getEncodedSRegNum(const Variable *Var) { | 203 IValueT getEncodedSRegNum(const Variable *Var) { |
| 204 assert(Var->hasReg()); | 204 assert(Var->hasReg()); |
| 205 return RegARM32::getEncodedSReg(Var->getRegNum()); | 205 return RegARM32::getEncodedSReg(Var->getRegNum()); |
| 206 } | 206 } |
| 207 | 207 |
| 208 IValueT getEncodedDRegNum(const Variable *Var) { | 208 IValueT getEncodedDRegNum(const Variable *Var) { |
| 209 return RegARM32::getEncodedDReg(Var->getRegNum()); | 209 return RegARM32::getEncodedDReg(Var->getRegNum()); |
| 210 } | 210 } |
| 211 | 211 |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 463 const AssemblerARM32::TargetInfo &TInfo, | 463 const AssemblerARM32::TargetInfo &TInfo, |
| 464 EncodedImmAddress ImmEncoding) { | 464 EncodedImmAddress ImmEncoding) { |
| 465 Value = 0; // Make sure initialized. | 465 Value = 0; // Make sure initialized. |
| 466 if (const auto *Var = llvm::dyn_cast<Variable>(Opnd)) { | 466 if (const auto *Var = llvm::dyn_cast<Variable>(Opnd)) { |
| 467 // Should be a stack variable, with an offset. | 467 // Should be a stack variable, with an offset. |
| 468 if (Var->hasReg()) | 468 if (Var->hasReg()) |
| 469 return CantEncode; | 469 return CantEncode; |
| 470 IOffsetT Offset = Var->getStackOffset(); | 470 IOffsetT Offset = Var->getStackOffset(); |
| 471 if (!Utils::IsAbsoluteUint(12, Offset)) | 471 if (!Utils::IsAbsoluteUint(12, Offset)) |
| 472 return CantEncode; | 472 return CantEncode; |
| 473 int32_t BaseRegNum = Var->getBaseRegNum(); | 473 RegNumT BaseRegNum = Var->getBaseRegNum(); |
| 474 if (BaseRegNum == Variable::NoRegister) | 474 if (BaseRegNum == RegNumT::NoRegister) |
| 475 BaseRegNum = TInfo.FrameOrStackReg; | 475 BaseRegNum = TInfo.FrameOrStackReg; |
| 476 Value = encodeImmRegOffset(ImmEncoding, BaseRegNum, Offset, | 476 Value = encodeImmRegOffset(ImmEncoding, BaseRegNum, Offset, |
| 477 OperandARM32Mem::Offset); | 477 OperandARM32Mem::Offset); |
| 478 return EncodedAsImmRegOffset; | 478 return EncodedAsImmRegOffset; |
| 479 } | 479 } |
| 480 if (const auto *Mem = llvm::dyn_cast<OperandARM32Mem>(Opnd)) { | 480 if (const auto *Mem = llvm::dyn_cast<OperandARM32Mem>(Opnd)) { |
| 481 Variable *Var = Mem->getBase(); | 481 Variable *Var = Mem->getBase(); |
| 482 if (!Var->hasReg()) | 482 if (!Var->hasReg()) |
| 483 return CantEncode; | 483 return CantEncode; |
| 484 IValueT Rn = getEncodedGPRegNum(Var); | 484 IValueT Rn = getEncodedGPRegNum(Var); |
| (...skipping 2566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3051 constexpr const char *Vsqrts = "vsqrts"; | 3051 constexpr const char *Vsqrts = "vsqrts"; |
| 3052 IValueT Sd = encodeSRegister(OpSd, "Sd", Vsqrts); | 3052 IValueT Sd = encodeSRegister(OpSd, "Sd", Vsqrts); |
| 3053 IValueT Sm = encodeSRegister(OpSm, "Sm", Vsqrts); | 3053 IValueT Sm = encodeSRegister(OpSm, "Sm", Vsqrts); |
| 3054 constexpr IValueT VsqrtsOpcode = B23 | B21 | B20 | B16 | B7 | B6; | 3054 constexpr IValueT VsqrtsOpcode = B23 | B21 | B20 | B16 | B7 | B6; |
| 3055 constexpr IValueT S0 = 0; | 3055 constexpr IValueT S0 = 0; |
| 3056 emitVFPsss(Cond, VsqrtsOpcode, Sd, S0, Sm); | 3056 emitVFPsss(Cond, VsqrtsOpcode, Sd, S0, Sm); |
| 3057 } | 3057 } |
| 3058 | 3058 |
| 3059 } // end of namespace ARM32 | 3059 } // end of namespace ARM32 |
| 3060 } // end of namespace Ice | 3060 } // end of namespace Ice |
| OLD | NEW |