| 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 |