12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/* 22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project 32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License. 62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at 72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software 112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and 142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License. 152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */ 16a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers#include "assembler_x86.h" 182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers 191aa246dec5abe212f699de1413a0c4a191ca364aElliott Hughes#include "base/casts.h" 20166db04e259ca51838c311891598664deeed85adIan Rogers#include "entrypoints/quick/quick_entrypoints.h" 21578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "memory_region.h" 22578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "thread.h" 23a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 246b6b5f0e67ce03f38223a525612955663bc1799bCarl Shapironamespace art { 252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersnamespace x86 { 26a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersstd::ostream& operator<<(std::ostream& os, const XmmRegister& reg) { 28b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers return os << "XMM" << static_cast<int>(reg); 29b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} 30b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers 31b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersstd::ostream& operator<<(std::ostream& os, const X87Register& reg) { 32b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers return os << "ST" << static_cast<int>(reg); 33b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} 34a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 35caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bikstd::ostream& operator<<(std::ostream& os, const Address& addr) { 36caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik switch (addr.mod()) { 37caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik case 0: 38f7754e861f0dec2d4772d61102fa93252258f672Aart Bik if (addr.rm() != ESP || addr.index() == ESP) { 39f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << "(%" << addr.rm() << ")"; 40f7754e861f0dec2d4772d61102fa93252258f672Aart Bik } else if (addr.base() == EBP) { 41f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << static_cast<int>(addr.disp32()) << "(,%" << addr.index() 42f7754e861f0dec2d4772d61102fa93252258f672Aart Bik << "," << (1 << addr.scale()) << ")"; 43caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik } 44f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << "(%" << addr.base() << ",%" << addr.index() << "," << (1 << addr.scale()) << ")"; 45caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik case 1: 46f7754e861f0dec2d4772d61102fa93252258f672Aart Bik if (addr.rm() != ESP || addr.index() == ESP) { 47f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << static_cast<int>(addr.disp8()) << "(%" << addr.rm() << ")"; 48caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik } 49f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << static_cast<int>(addr.disp8()) << "(%" << addr.base() << ",%" 50f7754e861f0dec2d4772d61102fa93252258f672Aart Bik << addr.index() << "," << (1 << addr.scale()) << ")"; 51caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik case 2: 52f7754e861f0dec2d4772d61102fa93252258f672Aart Bik if (addr.rm() != ESP || addr.index() == ESP) { 53f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << static_cast<int>(addr.disp32()) << "(%" << addr.rm() << ")"; 54caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik } 55f7754e861f0dec2d4772d61102fa93252258f672Aart Bik return os << static_cast<int>(addr.disp32()) << "(%" << addr.base() << ",%" 56f7754e861f0dec2d4772d61102fa93252258f672Aart Bik << addr.index() << "," << (1 << addr.scale()) << ")"; 57caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik default: 58caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik return os << "<address?>"; 59caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik } 60caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik} 61caa31e732bc9bb0007c39c504b109a4867ee5dd9Aart Bik 622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::call(Register reg) { 63a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 64a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 65a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(2, reg); 66a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 67a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 68a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::call(const Address& address) { 70a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 71a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 72a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(2, address); 73a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 74a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 75a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::call(Label* label) { 77a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 78a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE8); 79a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kSize = 5; 801cf95287364948689f6a1a320567acd7728e94a3Nicolas Geoffray // Offset by one because we already have emitted the opcode. 811cf95287364948689f6a1a320567acd7728e94a3Nicolas Geoffray EmitLabel(label, kSize - 1); 82a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 83a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 84a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 858ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffrayvoid X86Assembler::call(const ExternalLabel& label) { 868ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 878ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray intptr_t call_start = buffer_.GetPosition(); 888ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray EmitUint8(0xE8); 898ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray EmitInt32(label.address()); 908ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray static const intptr_t kCallExternalLabelSize = 5; 918ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray DCHECK_EQ((buffer_.GetPosition() - call_start), kCallExternalLabelSize); 928ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray} 938ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray 948ccc3f5d06fd217cdaabd37e743adab2031d3720Nicolas Geoffray 952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::pushl(Register reg) { 96a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 97a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x50 + reg); 98a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 99a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 100a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::pushl(const Address& address) { 102a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 103a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 104a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(6, address); 105a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 106a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 107a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::pushl(const Immediate& imm) { 109a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 11044fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers if (imm.is_int8()) { 11144fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(0x6A); 11244fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(imm.value() & 0xFF); 11344fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers } else { 11444fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(0x68); 11544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitImmediate(imm); 11644fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers } 117a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 118a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 119a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::popl(Register reg) { 121a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 122a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x58 + reg); 123a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 124a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 125a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::popl(const Address& address) { 127a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 128a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x8F); 129a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, address); 130a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 131a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 132a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movl(Register dst, const Immediate& imm) { 134a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 135a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB8 + dst); 136a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(imm); 137a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 138a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 139a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movl(Register dst, Register src) { 141a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 142a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x89); 143a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(src, dst); 144a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 145a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 146a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movl(Register dst, const Address& src) { 148a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 149a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x8B); 150a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 151a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 152a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 153a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movl(const Address& dst, Register src) { 155a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 156a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x89); 157a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, dst); 158a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 159a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 160a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movl(const Address& dst, const Immediate& imm) { 162a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 163a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC7); 164a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, dst); 165a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(imm); 166a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 167a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 168bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogersvoid X86Assembler::movl(const Address& dst, Label* lbl) { 169bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 170bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogers EmitUint8(0xC7); 171bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogers EmitOperand(0, dst); 172bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogers EmitLabel(lbl, dst.length_ + 5); 173bdb0391258abc54bf77c676e36847d28a783bfe5Ian Rogers} 174a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1757a08fb53bd13c74dec92256bef22a37250db1373Mark Mendellvoid X86Assembler::movntl(const Address& dst, Register src) { 1767a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1777a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell EmitUint8(0x0F); 1787a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell EmitUint8(0xC3); 1797a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell EmitOperand(src, dst); 1807a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell} 1817a08fb53bd13c74dec92256bef22a37250db1373Mark Mendell 18209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::bswapl(Register dst) { 18309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 18409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 18509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0xC8 + dst); 18609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 18709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 188bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::bsfl(Register dst, Register src) { 189bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 190bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitUint8(0x0F); 191bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitUint8(0xBC); 192bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitRegisterOperand(dst, src); 193bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 194bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 195bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::bsfl(Register dst, const Address& src) { 196bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 197bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitUint8(0x0F); 198bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitUint8(0xBC); 199bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitOperand(dst, src); 200bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 201bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2028ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendellvoid X86Assembler::bsrl(Register dst, Register src) { 2038ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2048ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitUint8(0x0F); 2058ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitUint8(0xBD); 2068ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitRegisterOperand(dst, src); 2078ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell} 2088ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell 2098ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendellvoid X86Assembler::bsrl(Register dst, const Address& src) { 2108ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2118ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitUint8(0x0F); 2128ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitUint8(0xBD); 2138ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell EmitOperand(dst, src); 2148ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell} 2158ae3ffb29489a127f2a6242c33845dac8d50e508Mark Mendell 216c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bikvoid X86Assembler::popcntl(Register dst, Register src) { 217c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 218c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0xF3); 219c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0x0F); 220c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0xB8); 221c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitRegisterOperand(dst, src); 222c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik} 223c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik 224c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bikvoid X86Assembler::popcntl(Register dst, const Address& src) { 225c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 226c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0xF3); 227c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0x0F); 228c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitUint8(0xB8); 229c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik EmitOperand(dst, src); 230c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik} 231c39dac148cce137ffd78a8e43499fba10c5c79e0Aart Bik 2322c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movzxb(Register dst, ByteRegister src) { 233a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 234a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 235a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB6); 236a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 237a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 238a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 239a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2402c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movzxb(Register dst, const Address& src) { 241a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 242a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 243a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB6); 244a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 245a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 246a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 247a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsxb(Register dst, ByteRegister src) { 249a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 250a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 251a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xBE); 252a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 253a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 254a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 255a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsxb(Register dst, const Address& src) { 257a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 258a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 259a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xBE); 260a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 261a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 262a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 263a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2641bac54ffa933fbe9b92b62437577f2f4583eff1aElliott Hughesvoid X86Assembler::movb(Register /*dst*/, const Address& /*src*/) { 265a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro LOG(FATAL) << "Use movzxb or movsxb instead."; 266a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 267a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 268a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2692c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movb(const Address& dst, ByteRegister src) { 270a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 271a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x88); 272a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, dst); 273a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 274a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 275a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movb(const Address& dst, const Immediate& imm) { 277a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 278a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC6); 279a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(EAX, dst); 280a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_int8()); 281a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 282a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 283a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 284a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movzxw(Register dst, Register src) { 286a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 287a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 288a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB7); 289a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 290a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 291a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 292a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movzxw(Register dst, const Address& src) { 294a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 295a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 296a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB7); 297a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 298a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 299a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 300a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 3012c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsxw(Register dst, Register src) { 302a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 303a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 304a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xBF); 305a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 306a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 307a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 308a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 3092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsxw(Register dst, const Address& src) { 310a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 311a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 312a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xBF); 313a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 314a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 315a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 316a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 3171bac54ffa933fbe9b92b62437577f2f4583eff1aElliott Hughesvoid X86Assembler::movw(Register /*dst*/, const Address& /*src*/) { 318a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro LOG(FATAL) << "Use movzxw or movsxw instead."; 319a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 320a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 321a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 3222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movw(const Address& dst, Register src) { 323a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 324a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperandSizeOverride(); 325a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x89); 326a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, dst); 327a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 328a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 329a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 33026a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffrayvoid X86Assembler::movw(const Address& dst, const Immediate& imm) { 33126a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 33226a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray EmitOperandSizeOverride(); 33326a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray EmitUint8(0xC7); 33426a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray EmitOperand(0, dst); 335b6e7206ad7a426adda9cfd649a4ef969607d79d6Nicolas Geoffray CHECK(imm.is_uint16() || imm.is_int16()); 33626a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray EmitUint8(imm.value() & 0xFF); 33726a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray EmitUint8(imm.value() >> 8); 33826a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray} 33926a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray 34026a25ef62a13f409f941aa39825a51b4d6f0f047Nicolas Geoffray 3412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::leal(Register dst, const Address& src) { 342a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 343a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x8D); 344a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 345a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 346a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 347a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 3482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmovl(Condition condition, Register dst, Register src) { 349a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 350a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 351b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers EmitUint8(0x40 + condition); 352a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 353a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 354a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 355a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 356abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendellvoid X86Assembler::cmovl(Condition condition, Register dst, const Address& src) { 357abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 358abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell EmitUint8(0x0F); 359abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell EmitUint8(0x40 + condition); 360abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell EmitOperand(dst, src); 361abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell} 362abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell 363abdac47c3c471d034a5b81aec35bf4201ba86a88Mark Mendell 3645b4b898ed8725242ee6b7229b94467c3ea3054c8Nicolas Geoffrayvoid X86Assembler::setb(Condition condition, Register dst) { 365a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 366a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 367b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers EmitUint8(0x90 + condition); 3685b4b898ed8725242ee6b7229b94467c3ea3054c8Nicolas Geoffray EmitOperand(0, Operand(dst)); 3697fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray} 3707fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray 3717fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray 3727fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffrayvoid X86Assembler::movaps(XmmRegister dst, XmmRegister src) { 3737fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 3747fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray EmitUint8(0x0F); 3757fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray EmitUint8(0x28); 3767fb49da8ec62e8a10ed9419ade9f32c6b1174687Nicolas Geoffray EmitXmmRegisterOperand(dst, src); 377a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 378a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 379a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 380c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movaps(XmmRegister dst, const Address& src) { 381c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 382c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 383c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x28); 384c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(dst, src); 385c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 386c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 387c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 388c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movups(XmmRegister dst, const Address& src) { 389c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 390c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 391c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x10); 392c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(dst, src); 393c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 394c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 395c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 396c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movaps(const Address& dst, XmmRegister src) { 397c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 398c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 399c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x29); 400c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(src, dst); 401c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 402c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 403c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 404c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movups(const Address& dst, XmmRegister src) { 405c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 406c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 407c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x11); 408c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(src, dst); 409c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 410c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 411c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 4122c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movss(XmmRegister dst, const Address& src) { 413a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 414a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 415a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 416a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x10); 417a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 418a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 419a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 420a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movss(const Address& dst, XmmRegister src) { 422a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 423a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 424a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 425a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x11); 426a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, dst); 427a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 428a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 429a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movss(XmmRegister dst, XmmRegister src) { 431a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 432a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 433a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 434a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x11); 435a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(src, dst); 436a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 437a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 438a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4392c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movd(XmmRegister dst, Register src) { 440a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 441a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 442a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 443a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x6E); 444a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 445a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 446a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 447a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movd(Register dst, XmmRegister src) { 449a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 450a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 451a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 452a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x7E); 453a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, Operand(dst)); 454a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 455a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 456a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addss(XmmRegister dst, XmmRegister src) { 458a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 459a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 460a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 461a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x58); 462a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 463a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 464a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 465a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4662c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addss(XmmRegister dst, const Address& src) { 467a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 468a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 469a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 470a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x58); 471a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 472a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 473a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 474a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4752c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subss(XmmRegister dst, XmmRegister src) { 476a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 477a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 478a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 479a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5C); 480a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 481a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 482a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 483a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subss(XmmRegister dst, const Address& src) { 485a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 486a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 487a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 488a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5C); 489a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 490a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 491a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 492a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 4932c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mulss(XmmRegister dst, XmmRegister src) { 494a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 495a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 496a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 497a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x59); 498a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 499a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 500a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 501a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 5022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mulss(XmmRegister dst, const Address& src) { 503a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 504a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 505a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 506a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x59); 507a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 508a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 509a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 510a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 5112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::divss(XmmRegister dst, XmmRegister src) { 512a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 513a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 514a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 515a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5E); 516a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 517a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 518a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 519a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 5202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::divss(XmmRegister dst, const Address& src) { 521a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 522a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 523a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 524a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5E); 525a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 526a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 527a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 528a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 529c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::addps(XmmRegister dst, XmmRegister src) { 530c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 531c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 532c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x58); 533c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 534c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 535c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 536c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 537c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::subps(XmmRegister dst, XmmRegister src) { 538c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 539c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 540c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x5C); 541c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 542c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 543c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 544c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 545c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::mulps(XmmRegister dst, XmmRegister src) { 546c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 547c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 548c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x59); 549c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 550c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 551c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 552c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 553c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::divps(XmmRegister dst, XmmRegister src) { 554c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 555c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 556c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x5E); 557c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 558c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 559c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 560c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 561c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movapd(XmmRegister dst, XmmRegister src) { 562c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 563c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 564c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 565c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x28); 566c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 567c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 568c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 569c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 570c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movapd(XmmRegister dst, const Address& src) { 571c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 572c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 573c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 574c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x28); 575c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(dst, src); 576c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 577c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 578c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 579c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movupd(XmmRegister dst, const Address& src) { 580c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 581c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 582c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 583c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x10); 584c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(dst, src); 585c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 586c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 587c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 588c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movapd(const Address& dst, XmmRegister src) { 589c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 590c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 591c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 592c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x29); 593c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(src, dst); 594c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 595c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 596c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 597c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::movupd(const Address& dst, XmmRegister src) { 598c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 599c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 600c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 601c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x11); 602c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitOperand(src, dst); 603c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 604c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 605c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 6062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::flds(const Address& src) { 607a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 608a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 609a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, src); 610a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 611a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 612a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 61324f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendellvoid X86Assembler::fsts(const Address& dst) { 61424f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 61524f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xD9); 61624f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitOperand(2, dst); 61724f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell} 61824f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 61924f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 6202c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fstps(const Address& dst) { 621a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 622a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 623a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(3, dst); 624a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 625a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 626a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsd(XmmRegister dst, const Address& src) { 628a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 629a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 630a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 631a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x10); 632a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 633a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 634a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 635a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsd(const Address& dst, XmmRegister src) { 637a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 638a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 639a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 640a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x11); 641a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(src, dst); 642a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 643a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 644a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::movsd(XmmRegister dst, XmmRegister src) { 646a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 647a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 648a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 649a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x11); 650a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(src, dst); 651a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 652a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 653a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 654234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffrayvoid X86Assembler::movhpd(XmmRegister dst, const Address& src) { 655234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 656234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x66); 657234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x0F); 658234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x16); 659234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitOperand(dst, src); 660234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray} 661234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray 662234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray 663234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffrayvoid X86Assembler::movhpd(const Address& dst, XmmRegister src) { 664234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 665234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x66); 666234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x0F); 667234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitUint8(0x17); 668234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray EmitOperand(src, dst); 669234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray} 670234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray 671234d69d075d1608f80adb647f7935077b62b6376Nicolas Geoffray 6722c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addsd(XmmRegister dst, XmmRegister src) { 673a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 674a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 675a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 676a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x58); 677a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 678a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 679a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 680a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addsd(XmmRegister dst, const Address& src) { 682a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 683a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 684a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 685a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x58); 686a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 687a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 688a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 689a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subsd(XmmRegister dst, XmmRegister src) { 691a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 692a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 693a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 694a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5C); 695a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 696a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 697a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 698a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 6992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subsd(XmmRegister dst, const Address& src) { 700a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 701a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 702a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 703a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5C); 704a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 705a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 706a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 707a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 7082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mulsd(XmmRegister dst, XmmRegister src) { 709a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 710a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 711a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 712a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x59); 713a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 714a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 715a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 716a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 7172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mulsd(XmmRegister dst, const Address& src) { 718a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 719a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 720a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 721a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x59); 722a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 723a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 724a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 725a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 7262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::divsd(XmmRegister dst, XmmRegister src) { 727a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 728a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 729a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 730a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5E); 731a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 732a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 733a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 734a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 7352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::divsd(XmmRegister dst, const Address& src) { 736a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 737a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 738a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 739a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5E); 740a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 741a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 742a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 743a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 744c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::addpd(XmmRegister dst, XmmRegister src) { 745c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 746c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 747c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 748c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x58); 749c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 750c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 751c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 752c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 753c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::subpd(XmmRegister dst, XmmRegister src) { 754c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 755c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 756c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 757c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x5C); 758c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 759c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 760c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 761c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 762c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::mulpd(XmmRegister dst, XmmRegister src) { 763c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 764c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 765c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 766c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x59); 767c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 768c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 769c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 770c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 771c778226256bced7105fcbb1a028dfbba135c6c29Aart Bikvoid X86Assembler::divpd(XmmRegister dst, XmmRegister src) { 772c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 773c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x66); 774c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x0F); 775c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitUint8(0x5E); 776c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik EmitXmmRegisterOperand(dst, src); 777c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik} 778c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 779c778226256bced7105fcbb1a028dfbba135c6c29Aart Bik 78068555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::movdqa(XmmRegister dst, XmmRegister src) { 78168555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 78268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 78368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 78468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x6F); 78568555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 78668555e952eea58023fa403951b1491496acf0f4bAart Bik} 78768555e952eea58023fa403951b1491496acf0f4bAart Bik 78868555e952eea58023fa403951b1491496acf0f4bAart Bik 78968555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::movdqa(XmmRegister dst, const Address& src) { 79068555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 79168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 79268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 79368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x6F); 79468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(dst, src); 79568555e952eea58023fa403951b1491496acf0f4bAart Bik} 79668555e952eea58023fa403951b1491496acf0f4bAart Bik 79768555e952eea58023fa403951b1491496acf0f4bAart Bik 79868555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::movdqu(XmmRegister dst, const Address& src) { 79968555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 80068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xF3); 80168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 80268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x6F); 80368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(dst, src); 80468555e952eea58023fa403951b1491496acf0f4bAart Bik} 80568555e952eea58023fa403951b1491496acf0f4bAart Bik 80668555e952eea58023fa403951b1491496acf0f4bAart Bik 80768555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::movdqa(const Address& dst, XmmRegister src) { 80868555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 80968555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 81068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 81168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x7F); 81268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(src, dst); 81368555e952eea58023fa403951b1491496acf0f4bAart Bik} 81468555e952eea58023fa403951b1491496acf0f4bAart Bik 81568555e952eea58023fa403951b1491496acf0f4bAart Bik 81668555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::movdqu(const Address& dst, XmmRegister src) { 81768555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 81868555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xF3); 81968555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 82068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x7F); 82168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(src, dst); 82268555e952eea58023fa403951b1491496acf0f4bAart Bik} 82368555e952eea58023fa403951b1491496acf0f4bAart Bik 82468555e952eea58023fa403951b1491496acf0f4bAart Bik 825e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::paddb(XmmRegister dst, XmmRegister src) { 826e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 827e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 828e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 829e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xFC); 830e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 831e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 832e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 833e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 834e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psubb(XmmRegister dst, XmmRegister src) { 835e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 836e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 837e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 838e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xF8); 839e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 840e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 841e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 842e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 843e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::paddw(XmmRegister dst, XmmRegister src) { 844e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 845e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 846e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 847e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xFD); 848e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 849e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 850e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 851e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 852e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psubw(XmmRegister dst, XmmRegister src) { 853e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 854e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 855e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 856e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xF9); 857e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 858e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 859e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 860e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 861e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::pmullw(XmmRegister dst, XmmRegister src) { 862e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 863e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 864e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 865e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xD5); 866e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 867e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 868e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 869e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 87068555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::paddd(XmmRegister dst, XmmRegister src) { 87168555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 87268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 87368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 87468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xFE); 87568555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 87668555e952eea58023fa403951b1491496acf0f4bAart Bik} 87768555e952eea58023fa403951b1491496acf0f4bAart Bik 87868555e952eea58023fa403951b1491496acf0f4bAart Bik 87968555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::psubd(XmmRegister dst, XmmRegister src) { 88068555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 88168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 88268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 88368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xFA); 88468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 88568555e952eea58023fa403951b1491496acf0f4bAart Bik} 88668555e952eea58023fa403951b1491496acf0f4bAart Bik 88768555e952eea58023fa403951b1491496acf0f4bAart Bik 88868555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::pmulld(XmmRegister dst, XmmRegister src) { 88968555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 89068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 89168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 89268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x38); 89368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x40); 89468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 89568555e952eea58023fa403951b1491496acf0f4bAart Bik} 89668555e952eea58023fa403951b1491496acf0f4bAart Bik 89768555e952eea58023fa403951b1491496acf0f4bAart Bik 898e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::paddq(XmmRegister dst, XmmRegister src) { 899e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 900e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 901e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 902e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xD4); 903e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 904e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 905e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 906e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 907e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psubq(XmmRegister dst, XmmRegister src) { 908e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 909e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 910e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 911e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0xFB); 912e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 913e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 914e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 915e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 9162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtsi2ss(XmmRegister dst, Register src) { 917a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 918a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 919a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 920a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2A); 921a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 922a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 923a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 924a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9252c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtsi2sd(XmmRegister dst, Register src) { 926a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 927a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 928a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 929a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2A); 930a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 931a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 932a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 933a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtss2si(Register dst, XmmRegister src) { 935a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 936a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 937a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 938a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2D); 939a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 940a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 941a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 942a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtss2sd(XmmRegister dst, XmmRegister src) { 944a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 945a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 946a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 947a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5A); 948a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 949a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 950a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 951a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9522c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtsd2si(Register dst, XmmRegister src) { 953a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 954a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 955a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 956a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2D); 957a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 958a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 959a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 960a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvttss2si(Register dst, XmmRegister src) { 962a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 963a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 964a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 965a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2C); 966a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 967a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 968a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 969a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvttsd2si(Register dst, XmmRegister src) { 971a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 972a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 973a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 974a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2C); 975a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 976a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 977a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 978a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9792c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtsd2ss(XmmRegister dst, XmmRegister src) { 980a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 981a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 982a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 983a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x5A); 984a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 985a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 986a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 987a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 9883ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bikvoid X86Assembler::cvtdq2ps(XmmRegister dst, XmmRegister src) { 9893ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 9903ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik EmitUint8(0x0F); 9913ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik EmitUint8(0x5B); 9923ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik EmitXmmRegisterOperand(dst, src); 9933ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik} 9943ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik 9953ae3b59e3354d1d387d216ac2fa5d481d3f2e833Aart Bik 9962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cvtdq2pd(XmmRegister dst, XmmRegister src) { 997a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 998a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 999a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1000a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE6); 1001a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 1002a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1003a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1004a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 10052c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::comiss(XmmRegister a, XmmRegister b) { 1006a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1007a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1008a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2F); 1009a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(a, b); 1010a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1011a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1012a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 101318ba121e7d706ce03b5b52f632b7c14cff685eabAart Bikvoid X86Assembler::comiss(XmmRegister a, const Address& b) { 101418ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 101518ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitUint8(0x0F); 101618ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitUint8(0x2F); 101718ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitOperand(a, b); 101818ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik} 101918ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik 102018ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik 10212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::comisd(XmmRegister a, XmmRegister b) { 1022a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1023a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 1024a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1025a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2F); 1026a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(a, b); 1027a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1028a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1029a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 103018ba121e7d706ce03b5b52f632b7c14cff685eabAart Bikvoid X86Assembler::comisd(XmmRegister a, const Address& b) { 103118ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 103218ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitUint8(0x66); 103318ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitUint8(0x0F); 103418ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitUint8(0x2F); 103518ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik EmitOperand(a, b); 103618ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik} 103718ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik 103818ba121e7d706ce03b5b52f632b7c14cff685eabAart Bik 1039ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravlevoid X86Assembler::ucomiss(XmmRegister a, XmmRegister b) { 1040ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1041ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitUint8(0x0F); 1042ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitUint8(0x2E); 1043ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitXmmRegisterOperand(a, b); 1044ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle} 1045ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle 1046ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle 10479f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendellvoid X86Assembler::ucomiss(XmmRegister a, const Address& b) { 10489f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 10499f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitUint8(0x0F); 10509f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitUint8(0x2E); 10519f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitOperand(a, b); 10529f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell} 10539f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell 10549f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell 1055ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravlevoid X86Assembler::ucomisd(XmmRegister a, XmmRegister b) { 1056ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1057ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitUint8(0x66); 1058ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitUint8(0x0F); 1059ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitUint8(0x2E); 1060ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle EmitXmmRegisterOperand(a, b); 1061ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle} 1062ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle 1063ddb7df25af45d7cd19ed1138e537973735cc78a5Calin Juravle 10649f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendellvoid X86Assembler::ucomisd(XmmRegister a, const Address& b) { 10659f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 10669f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitUint8(0x66); 10679f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitUint8(0x0F); 10689f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitUint8(0x2E); 10699f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell EmitOperand(a, b); 10709f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell} 10719f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell 10729f51f26b815fb955a3b91df86d54acd3f41480e4Mark Mendell 1073fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendellvoid X86Assembler::roundsd(XmmRegister dst, XmmRegister src, const Immediate& imm) { 1074fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1075fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x66); 1076fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x0F); 1077fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x3A); 1078fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x0B); 1079fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitXmmRegisterOperand(dst, src); 1080fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(imm.value()); 1081fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell} 1082fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell 1083fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell 1084fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendellvoid X86Assembler::roundss(XmmRegister dst, XmmRegister src, const Immediate& imm) { 1085fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1086fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x66); 1087fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x0F); 1088fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x3A); 1089fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(0x0A); 1090fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitXmmRegisterOperand(dst, src); 1091fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell EmitUint8(imm.value()); 1092fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell} 1093fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell 1094fb8d279bc011b31d0765dc7ca59afea324fd0d0cMark Mendell 10952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sqrtsd(XmmRegister dst, XmmRegister src) { 1096a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1097a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 1098a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1099a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x51); 1100a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 1101a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1102a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1103a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 11042c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sqrtss(XmmRegister dst, XmmRegister src) { 1105a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1106a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF3); 1107a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1108a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x51); 1109a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 1110a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1111a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1112a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 11132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::xorpd(XmmRegister dst, const Address& src) { 1114a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1115a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 1116a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1117a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x57); 1118a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 1119a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1120a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1121a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 11222c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::xorpd(XmmRegister dst, XmmRegister src) { 1123a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1124a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 1125a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 1126a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x57); 1127a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 1128a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1129a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1130a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 113168555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::xorps(XmmRegister dst, const Address& src) { 113209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 113309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 113468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x57); 113568555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(dst, src); 113668555e952eea58023fa403951b1491496acf0f4bAart Bik} 113768555e952eea58023fa403951b1491496acf0f4bAart Bik 113868555e952eea58023fa403951b1491496acf0f4bAart Bik 113968555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::xorps(XmmRegister dst, XmmRegister src) { 114068555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 114168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 114268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x57); 114368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 114468555e952eea58023fa403951b1491496acf0f4bAart Bik} 114568555e952eea58023fa403951b1491496acf0f4bAart Bik 114668555e952eea58023fa403951b1491496acf0f4bAart Bik 114768555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::pxor(XmmRegister dst, XmmRegister src) { 114868555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 114968555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 115068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 115168555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xEF); 115209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitXmmRegisterOperand(dst, src); 115309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 115409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 115509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 115609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::andpd(XmmRegister dst, XmmRegister src) { 115709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 115809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x66); 115909ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 116009ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x54); 116109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitXmmRegisterOperand(dst, src); 116209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 116309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 116409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 116568555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::andpd(XmmRegister dst, const Address& src) { 116609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 116709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x66); 116809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 116968555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x54); 117068555e952eea58023fa403951b1491496acf0f4bAart Bik EmitOperand(dst, src); 117168555e952eea58023fa403951b1491496acf0f4bAart Bik} 117268555e952eea58023fa403951b1491496acf0f4bAart Bik 117368555e952eea58023fa403951b1491496acf0f4bAart Bik 117468555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::andps(XmmRegister dst, XmmRegister src) { 117568555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 117668555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 117768555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x54); 117809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitXmmRegisterOperand(dst, src); 117909ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 118009ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 118109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 118268555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::andps(XmmRegister dst, const Address& src) { 1183a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1184a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 118568555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x54); 1186a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, src); 1187a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1188a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1189a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 119068555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::pand(XmmRegister dst, XmmRegister src) { 119109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 119268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 119309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 119468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xDB); 119509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitXmmRegisterOperand(dst, src); 119609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 119709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 119809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 119921c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bikvoid X86Assembler::andnpd(XmmRegister dst, XmmRegister src) { 120021c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 120121c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x66); 120221c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x0F); 120321c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x55); 120421c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitXmmRegisterOperand(dst, src); 120521c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik} 120621c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 120721c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 120821c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bikvoid X86Assembler::andnps(XmmRegister dst, XmmRegister src) { 120921c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 121021c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x0F); 121121c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x55); 121221c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitXmmRegisterOperand(dst, src); 121321c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik} 121421c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 121521c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 121621c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bikvoid X86Assembler::pandn(XmmRegister dst, XmmRegister src) { 121721c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 121821c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x66); 121921c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0x0F); 122021c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitUint8(0xDF); 122121c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik EmitXmmRegisterOperand(dst, src); 122221c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik} 122321c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 122421c580bf3f024f3f02d627013fba18a4b4f855d5Aart Bik 122568555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::orpd(XmmRegister dst, XmmRegister src) { 1226a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 122768555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 1228a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 122968555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x56); 1230a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitXmmRegisterOperand(dst, src); 1231a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1232a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1233a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 123468555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::orps(XmmRegister dst, XmmRegister src) { 123509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 123609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x0F); 123768555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x56); 123868555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 123909ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 124009ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 124109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 124268555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::por(XmmRegister dst, XmmRegister src) { 1243a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1244a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x66); 1245a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 124668555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0xEB); 124768555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 1248a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1249a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1250a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 125167d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bikvoid X86Assembler::pavgb(XmmRegister dst, XmmRegister src) { 125267d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 125367d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0x66); 125467d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0x0F); 125567d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0xE0); 125667d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitXmmRegisterOperand(dst, src); 125767d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik} 125867d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik 125967d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik 126067d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bikvoid X86Assembler::pavgw(XmmRegister dst, XmmRegister src) { 126167d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 126267d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0x66); 126367d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0x0F); 126467d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitUint8(0xE3); 126567d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik EmitXmmRegisterOperand(dst, src); 126667d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik} 126767d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik 12686005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12696005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::psadbw(XmmRegister dst, XmmRegister src) { 12706005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 12716005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 12726005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 12736005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0xF6); 12746005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 12756005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 12766005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12776005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12786005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::pmaddwd(XmmRegister dst, XmmRegister src) { 12796005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 12806005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 12816005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 12826005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0xF5); 12836005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 12846005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 12856005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12866005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12876005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::phaddw(XmmRegister dst, XmmRegister src) { 12886005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 12896005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 12906005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 12916005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x38); 12926005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x01); 12936005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 12946005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 12956005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12966005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 12976005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::phaddd(XmmRegister dst, XmmRegister src) { 12986005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 12996005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 13006005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13016005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x38); 13026005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x02); 13036005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13046005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13056005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13066005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13076005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::haddps(XmmRegister dst, XmmRegister src) { 13086005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13096005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0xF2); 13106005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13116005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x7C); 13126005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13136005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13146005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13156005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13166005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::haddpd(XmmRegister dst, XmmRegister src) { 13176005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13186005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 13196005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13206005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x7C); 13216005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13226005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13236005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13246005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13256005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::phsubw(XmmRegister dst, XmmRegister src) { 13266005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13276005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 13286005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13296005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x38); 13306005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x05); 13316005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13326005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13336005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13346005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13356005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::phsubd(XmmRegister dst, XmmRegister src) { 13366005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13376005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 13386005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13396005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x38); 13406005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x06); 13416005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13426005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13436005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13446005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13456005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::hsubps(XmmRegister dst, XmmRegister src) { 13466005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13476005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0xF2); 13486005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13496005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x7D); 13506005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13516005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13526005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13536005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13546005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bikvoid X86Assembler::hsubpd(XmmRegister dst, XmmRegister src) { 13556005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 13566005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x66); 13576005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x0F); 13586005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitUint8(0x7D); 13596005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik EmitXmmRegisterOperand(dst, src); 13606005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik} 13616005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 13626005a87fa5524bd44c36f4dd6adca92e2d4bc9b1Aart Bik 1363c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminsb(XmmRegister dst, XmmRegister src) { 1364c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1365c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1366c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1367c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1368c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1369c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1370c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1371c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1372c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxsb(XmmRegister dst, XmmRegister src) { 1373c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1374c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1375c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1376c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1377c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3C); 1378c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1379c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1380c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1381c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminsw(XmmRegister dst, XmmRegister src) { 1382c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1383c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1384c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1385c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0xEA); 1386c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1387c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1388c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1389c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxsw(XmmRegister dst, XmmRegister src) { 1390c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1391c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1392c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1393c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0xEE); 1394c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1395c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1396c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1397c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminsd(XmmRegister dst, XmmRegister src) { 1398c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1399c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1400c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1401c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1402c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x39); 1403c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1404c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1405c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1406c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxsd(XmmRegister dst, XmmRegister src) { 1407c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1408c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1409c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1410c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1411c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3D); 1412c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1413c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1414c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1415c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminub(XmmRegister dst, XmmRegister src) { 1416c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1417c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1418c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1419c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0xDA); 1420c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1421c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1422c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1423c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxub(XmmRegister dst, XmmRegister src) { 1424c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1425c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1426c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1427c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0xDE); 1428c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1429c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1430c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1431c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminuw(XmmRegister dst, XmmRegister src) { 1432c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1433c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1434c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1435c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1436c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3A); 1437c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1438c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1439c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1440c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxuw(XmmRegister dst, XmmRegister src) { 1441c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1442c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1443c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1444c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1445c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3E); 1446c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1447c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1448c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1449c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pminud(XmmRegister dst, XmmRegister src) { 1450c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1451c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1452c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1453c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1454c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3B); 1455c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1456c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1457c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1458c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::pmaxud(XmmRegister dst, XmmRegister src) { 1459c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1460c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1461c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1462c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x38); 1463c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x3F); 1464c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1465c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1466c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1467c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::minps(XmmRegister dst, XmmRegister src) { 1468c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1469c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1470c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x5D); 1471c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1472c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1473c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1474c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::maxps(XmmRegister dst, XmmRegister src) { 1475c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1476c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1477c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x5F); 1478c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1479c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1480c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1481c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::minpd(XmmRegister dst, XmmRegister src) { 1482c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1483c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1484c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1485c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x5D); 1486c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1487c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 1488c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik 1489c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bikvoid X86Assembler::maxpd(XmmRegister dst, XmmRegister src) { 1490c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1491c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x66); 1492c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x0F); 1493c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitUint8(0x5F); 1494c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik EmitXmmRegisterOperand(dst, src); 1495c8e93c736c149ce41be073dd24324fb08afb9ae4Aart Bik} 149667d3fd77d1572e46f537dea2fd4ded3ecfd7c202Aart Bik 14974b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bikvoid X86Assembler::pcmpeqb(XmmRegister dst, XmmRegister src) { 14984b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 14994b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x66); 15004b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x0F); 15014b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x74); 15024b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitXmmRegisterOperand(dst, src); 15034b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik} 15044b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15054b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15064b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bikvoid X86Assembler::pcmpeqw(XmmRegister dst, XmmRegister src) { 15074b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15084b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x66); 15094b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x0F); 15104b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x75); 15114b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitXmmRegisterOperand(dst, src); 15124b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik} 15134b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15144b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15154b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bikvoid X86Assembler::pcmpeqd(XmmRegister dst, XmmRegister src) { 15164b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15174b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x66); 15184b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x0F); 15194b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x76); 15204b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitXmmRegisterOperand(dst, src); 15214b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik} 15224b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15234b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15244b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bikvoid X86Assembler::pcmpeqq(XmmRegister dst, XmmRegister src) { 15254b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15264b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x66); 15274b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x0F); 15284b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x38); 15294b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitUint8(0x29); 15304b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik EmitXmmRegisterOperand(dst, src); 15314b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik} 15324b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15334b4553340dded4e8ce8f56690c08561a39a4aa56Aart Bik 15348939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bikvoid X86Assembler::pcmpgtb(XmmRegister dst, XmmRegister src) { 15358939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15368939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x66); 15378939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x0F); 15388939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x64); 15398939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitXmmRegisterOperand(dst, src); 15408939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik} 15418939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15428939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15438939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bikvoid X86Assembler::pcmpgtw(XmmRegister dst, XmmRegister src) { 15448939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15458939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x66); 15468939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x0F); 15478939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x65); 15488939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitXmmRegisterOperand(dst, src); 15498939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik} 15508939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15518939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15528939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bikvoid X86Assembler::pcmpgtd(XmmRegister dst, XmmRegister src) { 15538939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15548939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x66); 15558939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x0F); 15568939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x66); 15578939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitXmmRegisterOperand(dst, src); 15588939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik} 15598939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15608939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15618939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bikvoid X86Assembler::pcmpgtq(XmmRegister dst, XmmRegister src) { 15628939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 15638939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x66); 15648939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x0F); 15658939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x38); 15668939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitUint8(0x37); 15678939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik EmitXmmRegisterOperand(dst, src); 15688939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik} 15698939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 15708939c6474a34eb6d642db8fecb8b3a5c3194e464Aart Bik 157112e06edcdc7a986c127aed58dd836d6767d0e21dAart Bikvoid X86Assembler::shufpd(XmmRegister dst, XmmRegister src, const Immediate& imm) { 157212e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 157312e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(0x66); 157412e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(0x0F); 157512e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(0xC6); 157612e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitXmmRegisterOperand(dst, src); 157712e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(imm.value()); 157812e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik} 157912e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik 158012e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik 158112e06edcdc7a986c127aed58dd836d6767d0e21dAart Bikvoid X86Assembler::shufps(XmmRegister dst, XmmRegister src, const Immediate& imm) { 158212e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 158312e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(0x0F); 158412e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(0xC6); 158512e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitXmmRegisterOperand(dst, src); 158612e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik EmitUint8(imm.value()); 158712e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik} 158812e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik 158912e06edcdc7a986c127aed58dd836d6767d0e21dAart Bik 159068555e952eea58023fa403951b1491496acf0f4bAart Bikvoid X86Assembler::pshufd(XmmRegister dst, XmmRegister src, const Immediate& imm) { 159168555e952eea58023fa403951b1491496acf0f4bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 159268555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x66); 159368555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x0F); 159468555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(0x70); 159568555e952eea58023fa403951b1491496acf0f4bAart Bik EmitXmmRegisterOperand(dst, src); 159668555e952eea58023fa403951b1491496acf0f4bAart Bik EmitUint8(imm.value()); 159768555e952eea58023fa403951b1491496acf0f4bAart Bik} 159868555e952eea58023fa403951b1491496acf0f4bAart Bik 159968555e952eea58023fa403951b1491496acf0f4bAart Bik 1600e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::punpcklbw(XmmRegister dst, XmmRegister src) { 1601e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1602e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1603e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1604e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x60); 1605e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 1606e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1607e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1608e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1609e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::punpcklwd(XmmRegister dst, XmmRegister src) { 1610e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1611e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1612e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1613e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x61); 1614e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 1615e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1616e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1617e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1618e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::punpckldq(XmmRegister dst, XmmRegister src) { 1619e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1620e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1621e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1622e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x62); 1623e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 1624e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1625e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1626e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1627e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::punpcklqdq(XmmRegister dst, XmmRegister src) { 1628e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1629e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1630e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1631e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x6C); 1632e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(dst, src); 1633e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1634e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1635e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 16363332db8345de39eb5067d99987fcae140184672bAart Bikvoid X86Assembler::punpckhbw(XmmRegister dst, XmmRegister src) { 16373332db8345de39eb5067d99987fcae140184672bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 16383332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x66); 16393332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x0F); 16403332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x68); 16413332db8345de39eb5067d99987fcae140184672bAart Bik EmitXmmRegisterOperand(dst, src); 16423332db8345de39eb5067d99987fcae140184672bAart Bik} 16433332db8345de39eb5067d99987fcae140184672bAart Bik 16443332db8345de39eb5067d99987fcae140184672bAart Bik 16453332db8345de39eb5067d99987fcae140184672bAart Bikvoid X86Assembler::punpckhwd(XmmRegister dst, XmmRegister src) { 16463332db8345de39eb5067d99987fcae140184672bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 16473332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x66); 16483332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x0F); 16493332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x69); 16503332db8345de39eb5067d99987fcae140184672bAart Bik EmitXmmRegisterOperand(dst, src); 16513332db8345de39eb5067d99987fcae140184672bAart Bik} 16523332db8345de39eb5067d99987fcae140184672bAart Bik 16533332db8345de39eb5067d99987fcae140184672bAart Bik 16543332db8345de39eb5067d99987fcae140184672bAart Bikvoid X86Assembler::punpckhdq(XmmRegister dst, XmmRegister src) { 16553332db8345de39eb5067d99987fcae140184672bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 16563332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x66); 16573332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x0F); 16583332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x6A); 16593332db8345de39eb5067d99987fcae140184672bAart Bik EmitXmmRegisterOperand(dst, src); 16603332db8345de39eb5067d99987fcae140184672bAart Bik} 16613332db8345de39eb5067d99987fcae140184672bAart Bik 16623332db8345de39eb5067d99987fcae140184672bAart Bik 16633332db8345de39eb5067d99987fcae140184672bAart Bikvoid X86Assembler::punpckhqdq(XmmRegister dst, XmmRegister src) { 16643332db8345de39eb5067d99987fcae140184672bAart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 16653332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x66); 16663332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x0F); 16673332db8345de39eb5067d99987fcae140184672bAart Bik EmitUint8(0x6D); 16683332db8345de39eb5067d99987fcae140184672bAart Bik EmitXmmRegisterOperand(dst, src); 16693332db8345de39eb5067d99987fcae140184672bAart Bik} 16703332db8345de39eb5067d99987fcae140184672bAart Bik 16713332db8345de39eb5067d99987fcae140184672bAart Bik 1672e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psllw(XmmRegister reg, const Immediate& shift_count) { 1673e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1674e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1675e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1676e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1677e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x71); 1678e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(6, reg); 1679e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1680e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1681e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1682e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1683e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::pslld(XmmRegister reg, const Immediate& shift_count) { 1684e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1685e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1686e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1687e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1688e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x72); 1689e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(6, reg); 1690e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1691e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1692e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1693e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1694e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psllq(XmmRegister reg, const Immediate& shift_count) { 1695e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1696e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1697e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1698e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1699e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x73); 1700e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(6, reg); 1701e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1702e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1703e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1704e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1705e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psraw(XmmRegister reg, const Immediate& shift_count) { 1706e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1707e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1708e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1709e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1710e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x71); 1711e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(4, reg); 1712e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1713e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1714e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1715e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1716e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psrad(XmmRegister reg, const Immediate& shift_count) { 1717e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1718e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1719e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1720e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1721e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x72); 1722e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(4, reg); 1723e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1724e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1725e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1726e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1727e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psrlw(XmmRegister reg, const Immediate& shift_count) { 1728e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1729e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1730e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1731e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1732e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x71); 1733e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(2, reg); 1734e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1735e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1736e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1737e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1738e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psrld(XmmRegister reg, const Immediate& shift_count) { 1739e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1740e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1741e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1742e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1743e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x72); 1744e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(2, reg); 1745e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1746e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1747e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1748e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1749e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psrlq(XmmRegister reg, const Immediate& shift_count) { 1750e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1751e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1752e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1753e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1754e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x73); 1755e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(2, reg); 1756e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1757e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1758e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1759e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1760e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bikvoid X86Assembler::psrldq(XmmRegister reg, const Immediate& shift_count) { 1761e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik DCHECK(shift_count.is_uint8()); 1762e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1763e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x66); 1764e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x0F); 1765e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(0x73); 1766e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitXmmRegisterOperand(3, reg); 1767e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik EmitUint8(shift_count.value()); 1768e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik} 1769e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 1770e69d7a9bc042423a89a6d7b6b1c2236911f67b59Aart Bik 17712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fldl(const Address& src) { 1772a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1773a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDD); 1774a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, src); 1775a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1776a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1777a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 177824f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendellvoid X86Assembler::fstl(const Address& dst) { 177924f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 178024f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xDD); 178124f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitOperand(2, dst); 178224f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell} 178324f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 178424f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 17852c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fstpl(const Address& dst) { 1786a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1787a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDD); 1788a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(3, dst); 1789a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1790a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1791a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 179224f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendellvoid X86Assembler::fstsw() { 179324f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 179424f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0x9B); 179524f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xDF); 179624f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xE0); 179724f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell} 179824f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 179924f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 18002c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fnstcw(const Address& dst) { 1801a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1802a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1803a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(7, dst); 1804a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1805a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1806a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fldcw(const Address& src) { 1808a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1809a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1810a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, src); 1811a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1812a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1813a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fistpl(const Address& dst) { 1815a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1816a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDF); 1817a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(7, dst); 1818a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1819a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1820a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fistps(const Address& dst) { 1822a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1823a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDB); 1824a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(3, dst); 1825a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1826a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1827a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fildl(const Address& src) { 1829a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1830a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDF); 1831a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, src); 1832a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1833a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1834a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18350a18601f141d864a26d4b74ff5613e69ae411483Roland Levillainvoid X86Assembler::filds(const Address& src) { 18360a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain AssemblerBuffer::EnsureCapacity ensured(&buffer_); 18370a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain EmitUint8(0xDB); 18380a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain EmitOperand(0, src); 18390a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain} 18400a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain 18410a18601f141d864a26d4b74ff5613e69ae411483Roland Levillain 18422c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fincstp() { 1843a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1844a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1845a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 1846a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1847a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1848a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18492c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::ffree(const Immediate& index) { 1850a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LT(index.value(), 7); 1851a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1852a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xDD); 1853a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC0 + index.value()); 1854a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1855a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1856a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fsin() { 1858a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1859a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1860a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFE); 1861a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1862a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1863a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fcos() { 1865a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1866a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1867a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 1868a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1869a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1870a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::fptan() { 1872a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1873a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD9); 1874a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF2); 1875a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1876a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1877a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 187824f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendellvoid X86Assembler::fucompp() { 187924f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 188024f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xDA); 188124f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xE9); 188224f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell} 188324f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 188424f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 188524f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendellvoid X86Assembler::fprem() { 188624f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 188724f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xD9); 188824f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell EmitUint8(0xF8); 188924f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell} 189024f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 189124f2dfae084b2382c053f5d688fd6bb26cb8a328Mark Mendell 18922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::xchgl(Register dst, Register src) { 1893a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1894a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x87); 1895a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 1896a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1897a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 18983c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray 18997caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogersvoid X86Assembler::xchgl(Register reg, const Address& address) { 19007caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 19017caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitUint8(0x87); 19027caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitOperand(reg, address); 19037caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers} 19047caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers 1905a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19063b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkovvoid X86Assembler::cmpb(const Address& address, const Immediate& imm) { 19073b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov AssemblerBuffer::EnsureCapacity ensured(&buffer_); 19083b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov EmitUint8(0x80); 19093b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov EmitOperand(7, address); 19103b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov EmitUint8(imm.value() & 0xFF); 19113b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov} 19123b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov 19133b62593ba55f6bdb37ca84f64930654ff4f09464Serguei Katkov 19143c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffrayvoid X86Assembler::cmpw(const Address& address, const Immediate& imm) { 19153c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 19163c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray EmitUint8(0x66); 191729a8d8478ee4a3386b715c2a1086b190c57f0aa4Vladimir Marko EmitComplex(7, address, imm, /* is_16_op */ true); 19183c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray} 19193c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray 19203c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray 19212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpl(Register reg, const Immediate& imm) { 1922a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1923a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(7, Operand(reg), imm); 1924a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1925a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1926a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19272c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpl(Register reg0, Register reg1) { 1928a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1929a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x3B); 1930a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg0, Operand(reg1)); 1931a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1932a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1933a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpl(Register reg, const Address& address) { 1935a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1936a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x3B); 1937a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 1938a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1939a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1940a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19412c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addl(Register dst, Register src) { 1942a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1943a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x03); 1944a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(dst, src); 1945a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1946a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1947a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19482c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addl(Register reg, const Address& address) { 1949a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1950a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x03); 1951a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 1952a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1953a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1954a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19552c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpl(const Address& address, Register reg) { 1956a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1957a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x39); 1958a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 1959a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1960a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1961a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19622c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpl(const Address& address, const Immediate& imm) { 1963a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1964a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(7, address, imm); 1965a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1966a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1967a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 19682c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::testl(Register reg1, Register reg2) { 1969a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1970a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x85); 1971a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(reg1, reg2); 1972a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 1973a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1974a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 1975f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffrayvoid X86Assembler::testl(Register reg, const Address& address) { 1976f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1977f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray EmitUint8(0x85); 1978f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray EmitOperand(reg, address); 1979f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray} 1980f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray 1981f12feb8e0e857f2832545b3f28d31bad5a9d3903Nicolas Geoffray 19822c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::testl(Register reg, const Immediate& immediate) { 1983a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1984a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // For registers that have a byte variant (EAX, EBX, ECX, and EDX) 1985a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // we only test the byte register to keep the encoding short. 1986a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (immediate.is_uint8() && reg < 4) { 1987a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use zero-extended 8-bit immediate. 1988a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (reg == EAX) { 1989a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xA8); 1990a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 1991a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF6); 1992a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC0 + reg); 1993a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 1994a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(immediate.value() & 0xFF); 1995a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (reg == EAX) { 1996a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use short form if the destination is EAX. 1997a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xA9); 1998a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(immediate); 1999a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2000a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2001a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, Operand(reg)); 2002a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(immediate); 2003a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2004a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2005a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2006a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2007953437bd51059801d92079295f728d0260efca31Vladimir Markovoid X86Assembler::testb(const Address& dst, const Immediate& imm) { 2008953437bd51059801d92079295f728d0260efca31Vladimir Marko AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2009953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitUint8(0xF6); 2010953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitOperand(EAX, dst); 2011953437bd51059801d92079295f728d0260efca31Vladimir Marko CHECK(imm.is_int8()); 2012953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitUint8(imm.value() & 0xFF); 2013953437bd51059801d92079295f728d0260efca31Vladimir Marko} 2014953437bd51059801d92079295f728d0260efca31Vladimir Marko 2015953437bd51059801d92079295f728d0260efca31Vladimir Marko 2016953437bd51059801d92079295f728d0260efca31Vladimir Markovoid X86Assembler::testl(const Address& dst, const Immediate& imm) { 2017953437bd51059801d92079295f728d0260efca31Vladimir Marko AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2018953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitUint8(0xF7); 2019953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitOperand(0, dst); 2020953437bd51059801d92079295f728d0260efca31Vladimir Marko EmitImmediate(imm); 2021953437bd51059801d92079295f728d0260efca31Vladimir Marko} 2022953437bd51059801d92079295f728d0260efca31Vladimir Marko 2023953437bd51059801d92079295f728d0260efca31Vladimir Marko 20242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::andl(Register dst, Register src) { 2025a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2026a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x23); 2027a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2028a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2029a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2030a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20319574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffrayvoid X86Assembler::andl(Register reg, const Address& address) { 20329574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 20339574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitUint8(0x23); 20349574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitOperand(reg, address); 20359574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray} 20369574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20379574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::andl(Register dst, const Immediate& imm) { 2039a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2040a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(4, Operand(dst), imm); 2041a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2042a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2043a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::orl(Register dst, Register src) { 2045a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2046a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0B); 2047a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2048a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2049a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2050a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20519574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffrayvoid X86Assembler::orl(Register reg, const Address& address) { 20529574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 20539574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitUint8(0x0B); 20549574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitOperand(reg, address); 20559574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray} 20569574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20579574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20582c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::orl(Register dst, const Immediate& imm) { 2059a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2060a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(1, Operand(dst), imm); 2061a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2062a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2063a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::xorl(Register dst, Register src) { 2065a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2066a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x33); 2067a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2068a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2069a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20709574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20719574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffrayvoid X86Assembler::xorl(Register reg, const Address& address) { 20729574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 20739574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitUint8(0x33); 20749574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray EmitOperand(reg, address); 20759574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray} 20769574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20779574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 2078b55f835d66a61e5da6fc1895ba5a0482868c9552Nicolas Geoffrayvoid X86Assembler::xorl(Register dst, const Immediate& imm) { 2079b55f835d66a61e5da6fc1895ba5a0482868c9552Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2080b55f835d66a61e5da6fc1895ba5a0482868c9552Nicolas Geoffray EmitComplex(6, Operand(dst), imm); 2081b55f835d66a61e5da6fc1895ba5a0482868c9552Nicolas Geoffray} 2082a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20839574c4b5f5ef039d694ac12c97e25ca02eca83c0Nicolas Geoffray 20842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addl(Register reg, const Immediate& imm) { 2085a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2086a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(0, Operand(reg), imm); 2087a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2088a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2089a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20902c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addl(const Address& address, Register reg) { 2091a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2092a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x01); 2093a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2094a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2095a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2096a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 20972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::addl(const Address& address, const Immediate& imm) { 2098a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2099a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(0, address, imm); 2100a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2101a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2102a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2103ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffrayvoid X86Assembler::addw(const Address& address, const Immediate& imm) { 2104ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2105ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray CHECK(imm.is_uint16() || imm.is_int16()) << imm.value(); 2106ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitUint8(0x66); 2107ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitComplex(0, address, imm, /* is_16_op */ true); 2108ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray} 2109ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray 2110ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray 21112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register reg, const Immediate& imm) { 2112a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2113a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(2, Operand(reg), imm); 2114a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2115a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2116a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register dst, Register src) { 2118a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2119a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x13); 2120a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2121a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2122a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2123a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register dst, const Address& address) { 2125a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2126a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x13); 2127a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, address); 2128a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2129a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2130a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register dst, Register src) { 2132a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2133a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2B); 2134a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2135a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2136a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2137a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register reg, const Immediate& imm) { 2139a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2140a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(5, Operand(reg), imm); 2141a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2142a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2143a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21442c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register reg, const Address& address) { 2145a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2146a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2B); 2147a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2148a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2149a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2150a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 215109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::subl(const Address& address, Register reg) { 215209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 215309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x29); 215409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitOperand(reg, address); 215509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 215609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 215709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 21582c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cdq() { 2159a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2160a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x99); 2161a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2162a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2163a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21642c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::idivl(Register reg) { 2165a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2166a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2167a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF8 | reg); 2168a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2169a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2170a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register dst, Register src) { 2172a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2173a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2174a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xAF); 2175a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2176a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2177a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2178a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21794a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendellvoid X86Assembler::imull(Register dst, Register src, const Immediate& imm) { 21804a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 21814a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // See whether imm can be represented as a sign-extended 8bit value. 21824a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell int32_t v32 = static_cast<int32_t>(imm.value()); 21834a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell if (IsInt<8>(v32)) { 21844a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // Sign-extension works. 21854a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(0x6B); 21864a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitOperand(dst, Operand(src)); 21874a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(static_cast<uint8_t>(v32 & 0xFF)); 21884a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell } else { 21894a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // Not representable, use full immediate. 21904a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(0x69); 21914a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitOperand(dst, Operand(src)); 21924a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitImmediate(imm); 21934a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell } 21944a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell} 21954a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell 21964a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell 21972c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg, const Immediate& imm) { 21984a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell imull(reg, reg, imm); 2199a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2200a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2201a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg, const Address& address) { 2203a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2204a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2205a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xAF); 2206a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2207a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2208a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2209a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22102c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg) { 2211a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2212a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2213a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, Operand(reg)); 2214a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2215a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2216a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(const Address& address) { 2218a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2219a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2220a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, address); 2221a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2222a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2223a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22242c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mull(Register reg) { 2225a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2226a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2227a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(4, Operand(reg)); 2228a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2229a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2230a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mull(const Address& address) { 2232a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2233a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2234a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(4, address); 2235a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2236a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2237a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register dst, Register src) { 2239a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2240a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x1B); 2241a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2242a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2243a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2244a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register reg, const Immediate& imm) { 2246a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2247a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(3, Operand(reg), imm); 2248a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2249a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2250a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register dst, const Address& address) { 2252a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2253a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x1B); 2254a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, address); 2255a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2256a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2257a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 225809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::sbbl(const Address& address, Register src) { 225909ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 226009ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x19); 226109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitOperand(src, address); 226209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 226309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 226409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 22652c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::incl(Register reg) { 2266a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2267a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x40 + reg); 2268a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2269a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2270a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::incl(const Address& address) { 2272a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2273a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2274a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, address); 2275a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2276a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2277a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22782c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::decl(Register reg) { 2279a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2280a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x48 + reg); 2281a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2282a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2283a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22842c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::decl(const Address& address) { 2285a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2286a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2287a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(1, address); 2288a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2289a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2290a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shll(Register reg, const Immediate& imm) { 22927394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, Operand(reg), imm); 2293a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2294a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2295a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22962c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shll(Register operand, Register shifter) { 22977394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, Operand(operand), shifter); 22987394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 22997394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23007394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23017394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shll(const Address& address, const Immediate& imm) { 23027394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, address, imm); 23037394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23047394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23057394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23067394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shll(const Address& address, Register shifter) { 23077394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, address, shifter); 2308a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2309a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2310a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23112c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shrl(Register reg, const Immediate& imm) { 23127394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, Operand(reg), imm); 2313a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2314a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2315a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shrl(Register operand, Register shifter) { 23177394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, Operand(operand), shifter); 23187394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23197394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23207394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23217394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrl(const Address& address, const Immediate& imm) { 23227394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, address, imm); 23237394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23247394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23257394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23267394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrl(const Address& address, Register shifter) { 23277394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, address, shifter); 2328a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2329a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2330a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sarl(Register reg, const Immediate& imm) { 23327394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, Operand(reg), imm); 2333a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2334a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2335a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sarl(Register operand, Register shifter) { 23377394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, Operand(operand), shifter); 23387394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23397394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23407394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23417394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::sarl(const Address& address, const Immediate& imm) { 23427394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, address, imm); 23437394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23447394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23457394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23467394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::sarl(const Address& address, Register shifter) { 23477394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, address, shifter); 2348a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2349a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2350a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23519aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravlevoid X86Assembler::shld(Register dst, Register src, Register shifter) { 23529aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle DCHECK_EQ(ECX, shifter); 2353a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2354a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2355a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xA5); 2356a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(src, dst); 2357a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2358a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2359a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23607394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shld(Register dst, Register src, const Immediate& imm) { 23617394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23627394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0x0F); 23637394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0xA4); 23647394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitRegisterOperand(src, dst); 23657394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(imm.value() & 0xFF); 23667394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23677394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23687394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23699aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravlevoid X86Assembler::shrd(Register dst, Register src, Register shifter) { 23709aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle DCHECK_EQ(ECX, shifter); 23719aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23729aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitUint8(0x0F); 23739aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitUint8(0xAD); 23749aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitRegisterOperand(src, dst); 23759aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle} 23769aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle 23779aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle 23787394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrd(Register dst, Register src, const Immediate& imm) { 23797394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23807394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0x0F); 23817394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0xAC); 23827394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitRegisterOperand(src, dst); 23837394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(imm.value() & 0xFF); 23847394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23857394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23867394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 2387bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::roll(Register reg, const Immediate& imm) { 2388bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(0, Operand(reg), imm); 2389bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2390bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2391bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2392bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::roll(Register operand, Register shifter) { 2393bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(0, Operand(operand), shifter); 2394bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2395bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2396bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2397bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::rorl(Register reg, const Immediate& imm) { 2398bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(1, Operand(reg), imm); 2399bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2400bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2401bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2402bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::rorl(Register operand, Register shifter) { 2403bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(1, Operand(operand), shifter); 2404bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2405bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2406bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 24072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::negl(Register reg) { 2408a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2409a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2410a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(3, Operand(reg)); 2411a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2412a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2413a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24142c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::notl(Register reg) { 2415a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2416a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2417a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD0 | reg); 2418a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2419a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2420a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24212c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::enter(const Immediate& imm) { 2422a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2423a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC8); 2424a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_uint16()); 2425a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2426a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((imm.value() >> 8) & 0xFF); 2427a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x00); 2428a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2429a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2430a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::leave() { 2432a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2433a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC9); 2434a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2435a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2436a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::ret() { 2438a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2439a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC3); 2440a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2441a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2442a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::ret(const Immediate& imm) { 2444a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2445a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC2); 2446a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_uint16()); 2447a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2448a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((imm.value() >> 8) & 0xFF); 2449a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2450a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2451a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2452a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24532c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::nop() { 2454a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2455a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x90); 2456a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2457a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2458a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24592c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::int3() { 2460a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2461a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xCC); 2462a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2463a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2464a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24652c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::hlt() { 2466a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2467a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF4); 2468a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2469a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2470a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::j(Condition condition, Label* label) { 2472a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2473a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2474a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kShortSize = 2; 2475a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kLongSize = 6; 2476a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2477a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2478ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bdAndreas Gampe if (IsInt<8>(offset - kShortSize)) { 2479a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x70 + condition); 2480a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((offset - kShortSize) & 0xFF); 2481a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2482a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2483a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x80 + condition); 2484a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - kLongSize); 2485a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2486a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2487a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2488a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x80 + condition); 2489a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2490a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2491a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2492a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2493a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 249473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::j(Condition condition, NearLabel* label) { 249573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 249673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 249773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 249873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 249973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 250073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 250173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0x70 + condition); 250273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 250373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 250473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0x70 + condition); 250573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 250673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 250773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 250873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 250973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 251073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::jecxz(NearLabel* label) { 251173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 251273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 251373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 251473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 251573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 251673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 251773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xE3); 251873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 251973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 252073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xE3); 252173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 252273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 252373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 252473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 252573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 25262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::jmp(Register reg) { 2527a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2528a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2529a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(4, reg); 2530a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2531a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 25327caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogersvoid X86Assembler::jmp(const Address& address) { 25337caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 25347caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitUint8(0xFF); 25357caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitOperand(4, address); 25367caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers} 2537a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 25382c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::jmp(Label* label) { 2539a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2540a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2541a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kShortSize = 2; 2542a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kLongSize = 5; 2543a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2544a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2545ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bdAndreas Gampe if (IsInt<8>(offset - kShortSize)) { 2546a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xEB); 2547a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((offset - kShortSize) & 0xFF); 2548a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2549a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE9); 2550a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - kLongSize); 2551a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2552a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2553a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE9); 2554a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2555a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2556a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2557a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2558a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 255973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::jmp(NearLabel* label) { 256073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 256173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 256273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 256373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 256473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 256573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 256673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xEB); 256773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 256873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 256973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xEB); 257073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 257173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 257273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 257373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 257473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 2575b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::repne_scasb() { 2576b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2577b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF2); 2578b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xAE); 2579b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2580b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2581b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 258221030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampevoid X86Assembler::repne_scasw() { 258321030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe AssemblerBuffer::EnsureCapacity ensured(&buffer_); 258421030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0x66); 258521030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0xF2); 258621030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0xAF); 258721030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe} 258821030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe 258921030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe 2590b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::repe_cmpsb() { 2591b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2592b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF2); 2593b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xA6); 2594b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2595b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2596b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 259771311f868e2579fa5d40b24e620198734119d1a0agicsakivoid X86Assembler::repe_cmpsw() { 259871311f868e2579fa5d40b24e620198734119d1a0agicsaki AssemblerBuffer::EnsureCapacity ensured(&buffer_); 259971311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0x66); 260071311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0xF3); 260171311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0xA7); 260271311f868e2579fa5d40b24e620198734119d1a0agicsaki} 260371311f868e2579fa5d40b24e620198734119d1a0agicsaki 260471311f868e2579fa5d40b24e620198734119d1a0agicsaki 2605970abfb65530b700f3a0cc8b90b131df5420cec3agicsakivoid X86Assembler::repe_cmpsl() { 2606970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2607970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki EmitUint8(0xF3); 2608970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki EmitUint8(0xA7); 2609970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki} 2610970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki 2611970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki 2612b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::rep_movsb() { 2613b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2614b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF3); 2615b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xA4); 2616b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2617b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2618b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2619b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendellvoid X86Assembler::rep_movsw() { 2620b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2621b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0x66); 2622b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0xF3); 2623b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0xA5); 2624b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell} 2625b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell 2626b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell 26272c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersX86Assembler* X86Assembler::lock() { 2628a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2629a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF0); 26300d666d8769714dcbc2acc4dd5b06f0deffa6e0a1Ian Rogers return this; 2631a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2632a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2633a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 26342c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpxchgl(const Address& address, Register reg) { 2635a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2636a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2637a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB1); 2638a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2639a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2640a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 264158d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 264258d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendellvoid X86Assembler::cmpxchg8b(const Address& address) { 264358d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 264458d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitUint8(0x0F); 264558d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitUint8(0xC7); 264658d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitOperand(1, address); 264758d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell} 264858d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 264958d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 265079ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughesvoid X86Assembler::mfence() { 265179ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes AssemblerBuffer::EnsureCapacity ensured(&buffer_); 265279ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0x0F); 265379ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0xAE); 265479ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0xF0); 265579ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes} 265679ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes 26572c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersX86Assembler* X86Assembler::fs() { 2658b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers // TODO: fs is a prefix and not an instruction 2659b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2660b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers EmitUint8(0x64); 26610d666d8769714dcbc2acc4dd5b06f0deffa6e0a1Ian Rogers return this; 2662b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} 2663a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2664befbd5731ecca08f08780ee28a913d08ffb14656Ian RogersX86Assembler* X86Assembler::gs() { 2665befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers // TODO: fs is a prefix and not an instruction 2666befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2667befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers EmitUint8(0x65); 2668befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers return this; 2669befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers} 2670befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers 26712c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::AddImmediate(Register reg, const Immediate& imm) { 2672a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int value = imm.value(); 2673a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value > 0) { 2674a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value == 1) { 2675a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro incl(reg); 2676a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value != 0) { 2677a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro addl(reg, imm); 2678a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2679a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value < 0) { 2680a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro value = -value; 2681a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value == 1) { 2682a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro decl(reg); 2683a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value != 0) { 2684a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro subl(reg, Immediate(value)); 2685a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2686a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2687a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2688a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2689a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2690647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillainvoid X86Assembler::LoadLongConstant(XmmRegister dst, int64_t value) { 2691647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain // TODO: Need to have a code constants table. 2692647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain pushl(Immediate(High32Bits(value))); 2693647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain pushl(Immediate(Low32Bits(value))); 2694647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain movsd(dst, Address(ESP, 0)); 2695647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain addl(ESP, Immediate(2 * sizeof(int32_t))); 2696647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain} 2697647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain 2698647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain 26992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::LoadDoubleConstant(XmmRegister dst, double value) { 2700a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // TODO: Need to have a code constants table. 2701a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int64_t constant = bit_cast<int64_t, double>(value); 2702647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain LoadLongConstant(dst, constant); 2703a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2704a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2705a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::Align(int alignment, int offset) { 2707a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(IsPowerOfTwo(alignment)); 2708a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Emit nop instruction until the real position is aligned. 2709a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro while (((offset + buffer_.GetPosition()) & (alignment-1)) != 0) { 2710a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro nop(); 2711a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2712a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2713a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2714a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27152c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::Bind(Label* label) { 2716a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int bound = buffer_.Size(); 2717a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(!label->IsBound()); // Labels can only be bound once. 2718a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro while (label->IsLinked()) { 2719a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int position = label->LinkPosition(); 2720a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int next = buffer_.Load<int32_t>(position); 2721a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro buffer_.Store<int32_t>(position, bound - (position + 4)); 2722a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->position_ = next; 2723a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2724a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->BindTo(bound); 2725a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2726a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2727a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 272873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::Bind(NearLabel* label) { 272973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int bound = buffer_.Size(); 273073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(!label->IsBound()); // Labels can only be bound once. 273173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell while (label->IsLinked()) { 273273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int position = label->LinkPosition(); 273373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell uint8_t delta = buffer_.Load<uint8_t>(position); 273473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = bound - (position + 1); 273573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset)); 273673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell buffer_.Store<int8_t>(position, offset); 273773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->position_ = delta != 0u ? label->position_ - delta : 0; 273873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 273973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->BindTo(bound); 274073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 274173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 274273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 274344fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitOperand(int reg_or_opcode, const Operand& operand) { 274444fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_GE(reg_or_opcode, 0); 274544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_LT(reg_or_opcode, 8); 2746a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro const int length = operand.length_; 2747a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_GT(length, 0); 274844fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers // Emit the ModRM byte updated with the given reg value. 2749a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_EQ(operand.encoding_[0] & 0x38, 0); 275044fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(operand.encoding_[0] + (reg_or_opcode << 3)); 2751a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Emit the rest of the encoded operand. 2752a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro for (int i = 1; i < length; i++) { 2753a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(operand.encoding_[i]); 2754a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 27550616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell AssemblerFixup* fixup = operand.GetFixup(); 27560616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (fixup != nullptr) { 27570616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell EmitFixup(fixup); 27580616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 2759a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2760a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2761a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2762ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffrayvoid X86Assembler::EmitImmediate(const Immediate& imm, bool is_16_op) { 2763ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray if (is_16_op) { 2764ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitUint8(imm.value() & 0xFF); 2765ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitUint8(imm.value() >> 8); 2766ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray } else { 2767ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitInt32(imm.value()); 2768ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray } 2769a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2770a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2771a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 277244fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitComplex(int reg_or_opcode, 27732c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers const Operand& operand, 2774ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray const Immediate& immediate, 2775ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray bool is_16_op) { 277644fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_GE(reg_or_opcode, 0); 277744fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_LT(reg_or_opcode, 8); 2778a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (immediate.is_int8()) { 2779a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use sign-extended 8-bit immediate. 2780a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x83); 278144fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitOperand(reg_or_opcode, operand); 2782a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(immediate.value() & 0xFF); 2783a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (operand.IsRegister(EAX)) { 2784a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use short form if the destination is eax. 278544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(0x05 + (reg_or_opcode << 3)); 2786ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitImmediate(immediate, is_16_op); 2787a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2788a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x81); 278944fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitOperand(reg_or_opcode, operand); 2790ded559460a2c1059e7f6232bb6c0ff954c9d0cf5Nicolas Geoffray EmitImmediate(immediate, is_16_op); 2791a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2792a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2793a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2794a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::EmitLabel(Label* label, int instruction_size) { 2796a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2797a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2798a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2799a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - instruction_size); 2800a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2801a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2802a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2803a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2804a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2805a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 28062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::EmitLabelLink(Label* label) { 2807a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(!label->IsBound()); 2808a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int position = buffer_.Size(); 2809a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(label->position_); 2810a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->LinkTo(position); 2811a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2812a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2813a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 281473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::EmitLabelLink(NearLabel* label) { 281573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(!label->IsBound()); 281673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int position = buffer_.Size(); 281773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsLinked()) { 281873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell // Save the delta in the byte that we have to play with. 281973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell uint32_t delta = position - label->LinkPosition(); 282073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsUint<8>(delta)); 282173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(delta & 0xFF); 282273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 282373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0); 282473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 282573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->LinkTo(position); 282673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 282773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 282873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 282944fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitGenericShift(int reg_or_opcode, 28307394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell const Operand& operand, 28312c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers const Immediate& imm) { 2832a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2833a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_int8()); 2834a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (imm.value() == 1) { 2835a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD1); 28367394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2837a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2838a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC1); 28397394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2840a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2841a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2842a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2843a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2844a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 284544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitGenericShift(int reg_or_opcode, 28467394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell const Operand& operand, 28472c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers Register shifter) { 2848a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2849a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_EQ(shifter, ECX); 2850a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD3); 28517394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2852a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2853a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 28540616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendellvoid X86Assembler::AddConstantArea() { 285593205e395f777c1dd81d3f164cf9a4aec4bde45fVladimir Marko ArrayRef<const int32_t> area = constant_area_.GetBuffer(); 28560616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Generate the data for the literal area. 28570616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = area.size(); i < e; i++) { 28580616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 28590616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell EmitInt32(area[i]); 28600616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28610616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28620616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2863805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AppendInt32(int32_t v) { 2864805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell size_t result = buffer_.size() * elem_size_; 2865805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell buffer_.push_back(v); 2866805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return result; 2867805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell} 2868805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell 2869805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddInt32(int32_t v) { 28700616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = buffer_.size(); i < e; i++) { 28710616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (v == buffer_[i]) { 2872805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return i * elem_size_; 28730616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28740616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28750616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 28760616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Didn't match anything. 2877805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return AppendInt32(v); 28780616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28790616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2880805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddInt64(int64_t v) { 28810616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell int32_t v_low = Low32Bits(v); 28820616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell int32_t v_high = High32Bits(v); 28830616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (buffer_.size() > 1) { 28840616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Ensure we don't pass the end of the buffer. 28850616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = buffer_.size() - 1; i < e; i++) { 28860616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (v_low == buffer_[i] && v_high == buffer_[i + 1]) { 2887805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return i * elem_size_; 28880616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28890616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28900616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28910616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 28920616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Didn't match anything. 2893805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell size_t result = buffer_.size() * elem_size_; 28940616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell buffer_.push_back(v_low); 28950616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell buffer_.push_back(v_high); 28960616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return result; 28970616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28980616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2899805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddDouble(double v) { 29000616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Treat the value as a 64-bit integer value. 29010616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return AddInt64(bit_cast<int64_t, double>(v)); 29020616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 29030616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2904805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddFloat(float v) { 29050616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Treat the value as a 32-bit integer value. 29060616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return AddInt32(bit_cast<int32_t, float>(v)); 29070616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 29080616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 29092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers} // namespace x86 2910b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} // namespace art 2911