OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // | 4 // |
5 // Modified by the Subzero authors. | 5 // Modified by the Subzero authors. |
6 // | 6 // |
7 //===- subzero/src/assembler_ia32.cpp - Assembler for x86-32 -------------===// | 7 //===- subzero/src/assembler_ia32.cpp - Assembler for x86-32 -------------===// |
8 // | 8 // |
9 // The Subzero Code Generator | 9 // The Subzero Code Generator |
10 // | 10 // |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 EmitUint8(0xC6); | 182 EmitUint8(0xC6); |
183 EmitOperand(0, dst); | 183 EmitOperand(0, dst); |
184 EmitUint8(imm.value() & 0xFF); | 184 EmitUint8(imm.value() & 0xFF); |
185 } else { | 185 } else { |
186 EmitUint8(0xC7); | 186 EmitUint8(0xC7); |
187 EmitOperand(0, dst); | 187 EmitOperand(0, dst); |
188 EmitImmediate(Ty, imm); | 188 EmitImmediate(Ty, imm); |
189 } | 189 } |
190 } | 190 } |
191 | 191 |
192 void AssemblerX86::movzxb(GPRRegister dst, ByteRegister src) { | 192 void AssemblerX86::movzx(Type SrcTy, GPRRegister dst, GPRRegister src) { |
193 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 193 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 194 bool ByteSized = isByteSizedType(SrcTy); |
| 195 assert(ByteSized || SrcTy == IceType_i16); |
194 EmitUint8(0x0F); | 196 EmitUint8(0x0F); |
195 EmitUint8(0xB6); | 197 EmitUint8(ByteSized ? 0xB6 : 0xB7); |
196 EmitRegisterOperand(dst, src); | 198 EmitRegisterOperand(dst, src); |
197 } | 199 } |
198 | 200 |
199 void AssemblerX86::movzxb(GPRRegister dst, const Address &src) { | 201 void AssemblerX86::movzx(Type SrcTy, GPRRegister dst, const Address &src) { |
200 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 202 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 203 bool ByteSized = isByteSizedType(SrcTy); |
| 204 assert(ByteSized || SrcTy == IceType_i16); |
201 EmitUint8(0x0F); | 205 EmitUint8(0x0F); |
202 EmitUint8(0xB6); | 206 EmitUint8(ByteSized ? 0xB6 : 0xB7); |
203 EmitOperand(dst, src); | 207 EmitOperand(dst, src); |
204 } | 208 } |
205 | 209 |
206 void AssemblerX86::movsxb(GPRRegister dst, ByteRegister src) { | 210 void AssemblerX86::movsx(Type SrcTy, GPRRegister dst, GPRRegister src) { |
207 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 211 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 212 bool ByteSized = isByteSizedType(SrcTy); |
| 213 assert(ByteSized || SrcTy == IceType_i16); |
208 EmitUint8(0x0F); | 214 EmitUint8(0x0F); |
209 EmitUint8(0xBE); | 215 EmitUint8(ByteSized ? 0xBE : 0xBF); |
210 EmitRegisterOperand(dst, src); | 216 EmitRegisterOperand(dst, src); |
211 } | 217 } |
212 | 218 |
213 void AssemblerX86::movsxb(GPRRegister dst, const Address &src) { | 219 void AssemblerX86::movsx(Type SrcTy, GPRRegister dst, const Address &src) { |
214 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 220 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 221 bool ByteSized = isByteSizedType(SrcTy); |
| 222 assert(ByteSized || SrcTy == IceType_i16); |
215 EmitUint8(0x0F); | 223 EmitUint8(0x0F); |
216 EmitUint8(0xBE); | 224 EmitUint8(ByteSized ? 0xBE : 0xBF); |
217 EmitOperand(dst, src); | 225 EmitOperand(dst, src); |
218 } | 226 } |
219 | 227 |
220 void AssemblerX86::movzxw(GPRRegister dst, GPRRegister src) { | |
221 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | |
222 EmitUint8(0x0F); | |
223 EmitUint8(0xB7); | |
224 EmitRegisterOperand(dst, src); | |
225 } | |
226 | |
227 void AssemblerX86::movzxw(GPRRegister dst, const Address &src) { | |
228 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | |
229 EmitUint8(0x0F); | |
230 EmitUint8(0xB7); | |
231 EmitOperand(dst, src); | |
232 } | |
233 | |
234 void AssemblerX86::movsxw(GPRRegister dst, GPRRegister src) { | |
235 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | |
236 EmitUint8(0x0F); | |
237 EmitUint8(0xBF); | |
238 EmitRegisterOperand(dst, src); | |
239 } | |
240 | |
241 void AssemblerX86::movsxw(GPRRegister dst, const Address &src) { | |
242 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | |
243 EmitUint8(0x0F); | |
244 EmitUint8(0xBF); | |
245 EmitOperand(dst, src); | |
246 } | |
247 | |
248 void AssemblerX86::lea(Type Ty, GPRRegister dst, const Address &src) { | 228 void AssemblerX86::lea(Type Ty, GPRRegister dst, const Address &src) { |
249 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 229 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
250 assert(Ty == IceType_i16 || Ty == IceType_i32); | 230 assert(Ty == IceType_i16 || Ty == IceType_i32); |
251 if (Ty == IceType_i16) | 231 if (Ty == IceType_i16) |
252 EmitOperandSizeOverride(); | 232 EmitOperandSizeOverride(); |
253 EmitUint8(0x8D); | 233 EmitUint8(0x8D); |
254 EmitOperand(dst, src); | 234 EmitOperand(dst, src); |
255 } | 235 } |
256 | 236 |
257 void AssemblerX86::cmov(CondX86::BrCond cond, GPRRegister dst, | 237 void AssemblerX86::cmov(CondX86::BrCond cond, GPRRegister dst, |
(...skipping 2234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2492 assert(shifter == RegX8632::Encoded_Reg_ecx); | 2472 assert(shifter == RegX8632::Encoded_Reg_ecx); |
2493 (void)shifter; | 2473 (void)shifter; |
2494 if (Ty == IceType_i16) | 2474 if (Ty == IceType_i16) |
2495 EmitOperandSizeOverride(); | 2475 EmitOperandSizeOverride(); |
2496 EmitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); | 2476 EmitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); |
2497 EmitOperand(rm, operand); | 2477 EmitOperand(rm, operand); |
2498 } | 2478 } |
2499 | 2479 |
2500 } // end of namespace x86 | 2480 } // end of namespace x86 |
2501 } // end of namespace Ice | 2481 } // end of namespace Ice |
OLD | NEW |