Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: src/IceAssemblerX86Base.h

Issue 1343843003: Refactor all instances of `typedef y x` to the C++11 `using x = y` syntax. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/IceCfg.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceAssemblerX86Base.h - base x86 assembler -*- C++ -*---===// 1 //===- subzero/src/IceAssemblerX86Base.h - base x86 assembler -*- 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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 Label *getOrCreateLocalLabel(SizeT Number); 156 Label *getOrCreateLocalLabel(SizeT Number);
157 void bindLocalLabel(SizeT Number); 157 void bindLocalLabel(SizeT Number);
158 158
159 bool fixupIsPCRel(FixupKind Kind) const override { 159 bool fixupIsPCRel(FixupKind Kind) const override {
160 // Currently assuming this is the only PC-rel relocation type used. 160 // Currently assuming this is the only PC-rel relocation type used.
161 // TODO(jpp): Traits.PcRelTypes.count(Kind) != 0 161 // TODO(jpp): Traits.PcRelTypes.count(Kind) != 0
162 return Kind == Traits::PcRelFixup; 162 return Kind == Traits::PcRelFixup;
163 } 163 }
164 164
165 // Operations to emit GPR instructions (and dispatch on operand type). 165 // Operations to emit GPR instructions (and dispatch on operand type).
166 typedef void (AssemblerX86Base::*TypedEmitGPR)(Type, 166 using TypedEmitGPR = void (AssemblerX86Base::*)(Type,
167 typename Traits::GPRRegister); 167 typename Traits::GPRRegister);
168 typedef void (AssemblerX86Base::*TypedEmitAddr)( 168 using TypedEmitAddr =
169 Type, const typename Traits::Address &); 169 void (AssemblerX86Base::*)(Type, const typename Traits::Address &);
170 struct GPREmitterOneOp { 170 struct GPREmitterOneOp {
171 TypedEmitGPR Reg; 171 TypedEmitGPR Reg;
172 TypedEmitAddr Addr; 172 TypedEmitAddr Addr;
173 }; 173 };
174 174
175 typedef void (AssemblerX86Base::*TypedEmitGPRGPR)( 175 using TypedEmitGPRGPR = void (AssemblerX86Base::*)(
176 Type, typename Traits::GPRRegister, typename Traits::GPRRegister); 176 Type, typename Traits::GPRRegister, typename Traits::GPRRegister);
177 typedef void (AssemblerX86Base::*TypedEmitGPRAddr)( 177 using TypedEmitGPRAddr = void (AssemblerX86Base::*)(
178 Type, typename Traits::GPRRegister, const typename Traits::Address &); 178 Type, typename Traits::GPRRegister, const typename Traits::Address &);
179 typedef void (AssemblerX86Base::*TypedEmitGPRImm)( 179 using TypedEmitGPRImm = void (AssemblerX86Base::*)(
180 Type, typename Traits::GPRRegister, const Immediate &); 180 Type, typename Traits::GPRRegister, const Immediate &);
181 struct GPREmitterRegOp { 181 struct GPREmitterRegOp {
182 TypedEmitGPRGPR GPRGPR; 182 TypedEmitGPRGPR GPRGPR;
183 TypedEmitGPRAddr GPRAddr; 183 TypedEmitGPRAddr GPRAddr;
184 TypedEmitGPRImm GPRImm; 184 TypedEmitGPRImm GPRImm;
185 }; 185 };
186 186
187 struct GPREmitterShiftOp { 187 struct GPREmitterShiftOp {
188 // Technically, Addr/GPR and Addr/Imm are also allowed, but */Addr are not. 188 // Technically, Addr/GPR and Addr/Imm are also allowed, but */Addr are not.
189 // In practice, we always normalize the Dest to a Register first. 189 // In practice, we always normalize the Dest to a Register first.
190 TypedEmitGPRGPR GPRGPR; 190 TypedEmitGPRGPR GPRGPR;
191 TypedEmitGPRImm GPRImm; 191 TypedEmitGPRImm GPRImm;
192 }; 192 };
193 193
194 typedef void (AssemblerX86Base::*TypedEmitGPRGPRImm)( 194 using TypedEmitGPRGPRImm = void (AssemblerX86Base::*)(
195 Type, typename Traits::GPRRegister, typename Traits::GPRRegister, 195 Type, typename Traits::GPRRegister, typename Traits::GPRRegister,
196 const Immediate &); 196 const Immediate &);
197 struct GPREmitterShiftD { 197 struct GPREmitterShiftD {
198 // Technically AddrGPR and AddrGPRImm are also allowed, but in practice 198 // Technically AddrGPR and AddrGPRImm are also allowed, but in practice
199 // we always normalize Dest to a Register first. 199 // we always normalize Dest to a Register first.
200 TypedEmitGPRGPR GPRGPR; 200 TypedEmitGPRGPR GPRGPR;
201 TypedEmitGPRGPRImm GPRGPRImm; 201 TypedEmitGPRGPRImm GPRGPRImm;
202 }; 202 };
203 203
204 typedef void (AssemblerX86Base::*TypedEmitAddrGPR)( 204 using TypedEmitAddrGPR = void (AssemblerX86Base::*)(
205 Type, const typename Traits::Address &, typename Traits::GPRRegister); 205 Type, const typename Traits::Address &, typename Traits::GPRRegister);
206 typedef void (AssemblerX86Base::*TypedEmitAddrImm)( 206 using TypedEmitAddrImm = void (AssemblerX86Base::*)(
207 Type, const typename Traits::Address &, const Immediate &); 207 Type, const typename Traits::Address &, const Immediate &);
208 struct GPREmitterAddrOp { 208 struct GPREmitterAddrOp {
209 TypedEmitAddrGPR AddrGPR; 209 TypedEmitAddrGPR AddrGPR;
210 TypedEmitAddrImm AddrImm; 210 TypedEmitAddrImm AddrImm;
211 }; 211 };
212 212
213 // Operations to emit XMM instructions (and dispatch on operand type). 213 // Operations to emit XMM instructions (and dispatch on operand type).
214 typedef void (AssemblerX86Base::*TypedEmitXmmXmm)( 214 using TypedEmitXmmXmm = void (AssemblerX86Base::*)(
215 Type, typename Traits::XmmRegister, typename Traits::XmmRegister); 215 Type, typename Traits::XmmRegister, typename Traits::XmmRegister);
216 typedef void (AssemblerX86Base::*TypedEmitXmmAddr)( 216 using TypedEmitXmmAddr = void (AssemblerX86Base::*)(
217 Type, typename Traits::XmmRegister, const typename Traits::Address &); 217 Type, typename Traits::XmmRegister, const typename Traits::Address &);
218 struct XmmEmitterRegOp { 218 struct XmmEmitterRegOp {
219 TypedEmitXmmXmm XmmXmm; 219 TypedEmitXmmXmm XmmXmm;
220 TypedEmitXmmAddr XmmAddr; 220 TypedEmitXmmAddr XmmAddr;
221 }; 221 };
222 222
223 typedef void (AssemblerX86Base::*EmitXmmXmm)(typename Traits::XmmRegister, 223 using EmitXmmXmm = void (AssemblerX86Base::*)(typename Traits::XmmRegister,
224 typename Traits::XmmRegister); 224 typename Traits::XmmRegister);
225 typedef void (AssemblerX86Base::*EmitXmmAddr)( 225 using EmitXmmAddr = void (AssemblerX86Base::*)(
226 typename Traits::XmmRegister, const typename Traits::Address &); 226 typename Traits::XmmRegister, const typename Traits::Address &);
227 typedef void (AssemblerX86Base::*EmitAddrXmm)( 227 using EmitAddrXmm = void (AssemblerX86Base::*)(
228 const typename Traits::Address &, typename Traits::XmmRegister); 228 const typename Traits::Address &, typename Traits::XmmRegister);
229 struct XmmEmitterMovOps { 229 struct XmmEmitterMovOps {
230 EmitXmmXmm XmmXmm; 230 EmitXmmXmm XmmXmm;
231 EmitXmmAddr XmmAddr; 231 EmitXmmAddr XmmAddr;
232 EmitAddrXmm AddrXmm; 232 EmitAddrXmm AddrXmm;
233 }; 233 };
234 234
235 typedef void (AssemblerX86Base::*TypedEmitXmmImm)( 235 using TypedEmitXmmImm = void (AssemblerX86Base::*)(
236 Type, typename Traits::XmmRegister, const Immediate &); 236 Type, typename Traits::XmmRegister, const Immediate &);
237 237
238 struct XmmEmitterShiftOp { 238 struct XmmEmitterShiftOp {
239 TypedEmitXmmXmm XmmXmm; 239 TypedEmitXmmXmm XmmXmm;
240 TypedEmitXmmAddr XmmAddr; 240 TypedEmitXmmAddr XmmAddr;
241 TypedEmitXmmImm XmmImm; 241 TypedEmitXmmImm XmmImm;
242 }; 242 };
243 243
244 // Cross Xmm/GPR cast instructions. 244 // Cross Xmm/GPR cast instructions.
245 template <typename DReg_t, typename SReg_t> struct CastEmitterRegOp { 245 template <typename DReg_t, typename SReg_t> struct CastEmitterRegOp {
246 typedef void (AssemblerX86Base::*TypedEmitRegs)(Type, DReg_t, Type, SReg_t); 246 using TypedEmitRegs = void (AssemblerX86Base::*)(Type, DReg_t, Type,
247 typedef void (AssemblerX86Base::*TypedEmitAddr)( 247 SReg_t);
248 using TypedEmitAddr = void (AssemblerX86Base::*)(
248 Type, DReg_t, Type, const typename Traits::Address &); 249 Type, DReg_t, Type, const typename Traits::Address &);
249 250
250 TypedEmitRegs RegReg; 251 TypedEmitRegs RegReg;
251 TypedEmitAddr RegAddr; 252 TypedEmitAddr RegAddr;
252 }; 253 };
253 254
254 // Three operand (potentially) cross Xmm/GPR instructions. 255 // Three operand (potentially) cross Xmm/GPR instructions.
255 // The last operand must be an immediate. 256 // The last operand must be an immediate.
256 template <typename DReg_t, typename SReg_t> struct ThreeOpImmEmitter { 257 template <typename DReg_t, typename SReg_t> struct ThreeOpImmEmitter {
257 typedef void (AssemblerX86Base::*TypedEmitRegRegImm)(Type, DReg_t, SReg_t, 258 using TypedEmitRegRegImm = void (AssemblerX86Base::*)(Type, DReg_t, SReg_t,
258 const Immediate &); 259 const Immediate &);
259 typedef void (AssemblerX86Base::*TypedEmitRegAddrImm)( 260 using TypedEmitRegAddrImm = void (AssemblerX86Base::*)(
260 Type, DReg_t, const typename Traits::Address &, const Immediate &); 261 Type, DReg_t, const typename Traits::Address &, const Immediate &);
261 262
262 TypedEmitRegRegImm RegRegImm; 263 TypedEmitRegRegImm RegRegImm;
263 TypedEmitRegAddrImm RegAddrImm; 264 TypedEmitRegAddrImm RegAddrImm;
264 }; 265 };
265 266
266 /* 267 /*
267 * Emit Machine Instructions. 268 * Emit Machine Instructions.
268 */ 269 */
269 void call(typename Traits::GPRRegister reg); 270 void call(typename Traits::GPRRegister reg);
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 void emitLabel(Label *label, intptr_t instruction_size); 891 void emitLabel(Label *label, intptr_t instruction_size);
891 void emitLabelLink(Label *label); 892 void emitLabelLink(Label *label);
892 void emitNearLabelLink(Label *label); 893 void emitNearLabelLink(Label *label);
893 894
894 void emitGenericShift(int rm, Type Ty, typename Traits::GPRRegister reg, 895 void emitGenericShift(int rm, Type Ty, typename Traits::GPRRegister reg,
895 const Immediate &imm); 896 const Immediate &imm);
896 void emitGenericShift(int rm, Type Ty, 897 void emitGenericShift(int rm, Type Ty,
897 const typename Traits::Operand &operand, 898 const typename Traits::Operand &operand,
898 typename Traits::GPRRegister shifter); 899 typename Traits::GPRRegister shifter);
899 900
900 typedef std::vector<Label *> LabelVector; 901 using LabelVector = std::vector<Label *>;
901 // A vector of pool-allocated x86 labels for CFG nodes. 902 // A vector of pool-allocated x86 labels for CFG nodes.
902 LabelVector CfgNodeLabels; 903 LabelVector CfgNodeLabels;
903 // A vector of pool-allocated x86 labels for Local labels. 904 // A vector of pool-allocated x86 labels for Local labels.
904 LabelVector LocalLabels; 905 LabelVector LocalLabels;
905 906
906 Label *getOrCreateLabel(SizeT Number, LabelVector &Labels); 907 Label *getOrCreateLabel(SizeT Number, LabelVector &Labels);
907 908
908 // The arith_int() methods factor out the commonality between the encodings of 909 // The arith_int() methods factor out the commonality between the encodings of
909 // add(), Or(), adc(), sbb(), And(), sub(), Xor(), and cmp(). The Tag 910 // add(), Or(), adc(), sbb(), And(), sub(), Xor(), and cmp(). The Tag
910 // parameter is statically asserted to be less than 8. 911 // parameter is statically asserted to be less than 8.
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 emitUint8(0x66); 1066 emitUint8(0x66);
1066 } 1067 }
1067 1068
1068 } // end of namespace X86Internal 1069 } // end of namespace X86Internal
1069 1070
1070 } // end of namespace Ice 1071 } // end of namespace Ice
1071 1072
1072 #include "IceAssemblerX86BaseImpl.h" 1073 #include "IceAssemblerX86BaseImpl.h"
1073 1074
1074 #endif // SUBZERO_SRC_ICEASSEMBLERX86BASE_H 1075 #endif // SUBZERO_SRC_ICEASSEMBLERX86BASE_H
OLDNEW
« no previous file with comments | « no previous file | src/IceCfg.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698