| Index: src/assembler_ia32.cpp
|
| diff --git a/src/assembler_ia32.cpp b/src/assembler_ia32.cpp
|
| index a57d7915e15949d409cd6e6f6aec2161e78405fc..ffbde951c4bc3e71a5ef714c431c79ad47236eec 100644
|
| --- a/src/assembler_ia32.cpp
|
| +++ b/src/assembler_ia32.cpp
|
| @@ -704,6 +704,53 @@ void AssemblerX86::psra(Type Ty, XmmRegister dst, const Immediate &imm) {
|
| EmitUint8(imm.value() & 0xFF);
|
| }
|
|
|
| +void AssemblerX86::psrl(Type Ty, XmmRegister dst, XmmRegister src) {
|
| + AssemblerBuffer::EnsureCapacity ensured(&buffer_);
|
| + EmitUint8(0x66);
|
| + EmitUint8(0x0F);
|
| + if (Ty == IceType_i16) {
|
| + EmitUint8(0xD1);
|
| + } else if (Ty == IceType_f64) {
|
| + EmitUint8(0xD3);
|
| + } else {
|
| + assert(Ty == IceType_i32 || Ty == IceType_f32 || Ty == IceType_v4f32);
|
| + EmitUint8(0xD2);
|
| + }
|
| + EmitXmmRegisterOperand(dst, src);
|
| +}
|
| +
|
| +void AssemblerX86::psrl(Type Ty, XmmRegister dst, const Address &src) {
|
| + AssemblerBuffer::EnsureCapacity ensured(&buffer_);
|
| + EmitUint8(0x66);
|
| + EmitUint8(0x0F);
|
| + if (Ty == IceType_i16) {
|
| + EmitUint8(0xD1);
|
| + } else if (Ty == IceType_f64) {
|
| + EmitUint8(0xD3);
|
| + } else {
|
| + assert(Ty == IceType_i32 || Ty == IceType_f32 || Ty == IceType_v4f32);
|
| + EmitUint8(0xD2);
|
| + }
|
| + EmitOperand(dst, src);
|
| +}
|
| +
|
| +void AssemblerX86::psrl(Type Ty, XmmRegister dst, const Immediate &imm) {
|
| + AssemblerBuffer::EnsureCapacity ensured(&buffer_);
|
| + assert(imm.is_int8());
|
| + EmitUint8(0x66);
|
| + EmitUint8(0x0F);
|
| + if (Ty == IceType_i16) {
|
| + EmitUint8(0x71);
|
| + } else if (Ty == IceType_f64) {
|
| + EmitUint8(0x73);
|
| + } else {
|
| + assert(Ty == IceType_i32 || Ty == IceType_f32 || Ty == IceType_v4f32);
|
| + EmitUint8(0x72);
|
| + }
|
| + EmitRegisterOperand(2, dst);
|
| + EmitUint8(imm.value() & 0xFF);
|
| +}
|
| +
|
| // {add,sub,mul,div}ps are given a Ty parameter for consistency with
|
| // {add,sub,mul,div}ss. In the future, when the PNaCl ABI allows
|
| // addpd, etc., we can use the Ty parameter to decide on adding
|
|
|