assembler_x86.cc revision f7754e861f0dec2d4772d61102fa93252258f672
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); 19173c04974a90b0e03f4b509010bff49f0b2a3da57fNicolas Geoffray EmitComplex(7, address, imm); 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 21032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register reg, const Immediate& imm) { 2104a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2105a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(2, Operand(reg), imm); 2106a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2107a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2108a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register dst, Register src) { 2110a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2111a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x13); 2112a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2113a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2114a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2115a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::adcl(Register dst, const Address& address) { 2117a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2118a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x13); 2119a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, address); 2120a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2121a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2122a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register dst, Register src) { 2124a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2125a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2B); 2126a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2127a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2128a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2129a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register reg, const Immediate& imm) { 2131a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2132a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(5, Operand(reg), imm); 2133a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2134a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2135a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21362c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::subl(Register reg, const Address& address) { 2137a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2138a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x2B); 2139a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2140a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2141a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2142a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 214309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::subl(const Address& address, Register reg) { 214409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 214509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x29); 214609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitOperand(reg, address); 214709ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 214809ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 214909ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 21502c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cdq() { 2151a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2152a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x99); 2153a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2154a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2155a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21562c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::idivl(Register reg) { 2157a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2158a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2159a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF8 | reg); 2160a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2161a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2162a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register dst, Register src) { 2164a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2165a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2166a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xAF); 2167a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2168a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2169a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2170a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21714a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendellvoid X86Assembler::imull(Register dst, Register src, const Immediate& imm) { 21724a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 21734a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // See whether imm can be represented as a sign-extended 8bit value. 21744a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell int32_t v32 = static_cast<int32_t>(imm.value()); 21754a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell if (IsInt<8>(v32)) { 21764a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // Sign-extension works. 21774a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(0x6B); 21784a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitOperand(dst, Operand(src)); 21794a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(static_cast<uint8_t>(v32 & 0xFF)); 21804a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell } else { 21814a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell // Not representable, use full immediate. 21824a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitUint8(0x69); 21834a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitOperand(dst, Operand(src)); 21844a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell EmitImmediate(imm); 21854a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell } 21864a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell} 21874a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell 21884a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell 21892c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg, const Immediate& imm) { 21904a2aa4af61e653a89f88d776dcdc55f6c7ca05f2Mark Mendell imull(reg, reg, imm); 2191a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2192a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2193a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 21942c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg, const Address& address) { 2195a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2196a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2197a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xAF); 2198a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2199a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2200a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2201a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22022c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(Register reg) { 2203a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2204a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2205a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, Operand(reg)); 2206a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2207a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2208a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22092c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::imull(const Address& address) { 2210a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2211a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2212a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(5, address); 2213a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2214a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2215a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22162c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mull(Register reg) { 2217a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2218a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2219a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(4, Operand(reg)); 2220a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2221a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2222a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::mull(const Address& address) { 2224a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2225a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2226a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(4, address); 2227a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2228a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2229a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register dst, Register src) { 2231a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2232a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x1B); 2233a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, Operand(src)); 2234a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2235a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2236a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22372c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register reg, const Immediate& imm) { 2238a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2239a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitComplex(3, Operand(reg), imm); 2240a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2241a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2242a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22432c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sbbl(Register dst, const Address& address) { 2244a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2245a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x1B); 2246a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(dst, address); 2247a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2248a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2249a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 225009ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendellvoid X86Assembler::sbbl(const Address& address, Register src) { 225109ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 225209ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitUint8(0x19); 225309ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell EmitOperand(src, address); 225409ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell} 225509ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 225609ed1a3125849ec6ac07cb886e3c502e1dcfada2Mark Mendell 22572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::incl(Register reg) { 2258a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2259a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x40 + reg); 2260a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2261a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2262a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::incl(const Address& address) { 2264a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2265a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2266a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(0, address); 2267a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2268a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2269a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22702c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::decl(Register reg) { 2271a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2272a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x48 + reg); 2273a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2274a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2275a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22762c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::decl(const Address& address) { 2277a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2278a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2279a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(1, address); 2280a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2281a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2282a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22832c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shll(Register reg, const Immediate& imm) { 22847394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, Operand(reg), imm); 2285a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2286a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2287a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 22882c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shll(Register operand, Register shifter) { 22897394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, Operand(operand), shifter); 22907394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 22917394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 22927394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 22937394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shll(const Address& address, const Immediate& imm) { 22947394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, address, imm); 22957394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 22967394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 22977394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 22987394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shll(const Address& address, Register shifter) { 22997394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(4, address, shifter); 2300a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2301a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2302a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23032c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shrl(Register reg, const Immediate& imm) { 23047394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, Operand(reg), imm); 2305a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2306a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2307a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23082c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::shrl(Register operand, Register shifter) { 23097394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, Operand(operand), shifter); 23107394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23117394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23127394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23137394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrl(const Address& address, const Immediate& imm) { 23147394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, address, imm); 23157394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23167394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23177394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23187394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrl(const Address& address, Register shifter) { 23197394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(5, address, shifter); 2320a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2321a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2322a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sarl(Register reg, const Immediate& imm) { 23247394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, Operand(reg), imm); 2325a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2326a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2327a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23282c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::sarl(Register operand, Register shifter) { 23297394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, Operand(operand), shifter); 23307394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23317394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23327394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23337394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::sarl(const Address& address, const Immediate& imm) { 23347394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, address, imm); 23357394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23367394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23377394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23387394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::sarl(const Address& address, Register shifter) { 23397394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitGenericShift(7, address, shifter); 2340a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2341a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2342a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23439aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravlevoid X86Assembler::shld(Register dst, Register src, Register shifter) { 23449aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle DCHECK_EQ(ECX, shifter); 2345a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2346a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2347a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xA5); 2348a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(src, dst); 2349a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2350a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2351a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 23527394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shld(Register dst, Register src, const Immediate& imm) { 23537394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23547394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0x0F); 23557394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0xA4); 23567394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitRegisterOperand(src, dst); 23577394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(imm.value() & 0xFF); 23587394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23597394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23607394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23619aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravlevoid X86Assembler::shrd(Register dst, Register src, Register shifter) { 23629aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle DCHECK_EQ(ECX, shifter); 23639aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23649aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitUint8(0x0F); 23659aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitUint8(0xAD); 23669aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle EmitRegisterOperand(src, dst); 23679aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle} 23689aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle 23699aec02fc5df5518c16f1e5a9b6cb198a192db973Calin Juravle 23707394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendellvoid X86Assembler::shrd(Register dst, Register src, const Immediate& imm) { 23717394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 23727394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0x0F); 23737394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(0xAC); 23747394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitRegisterOperand(src, dst); 23757394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitUint8(imm.value() & 0xFF); 23767394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell} 23777394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 23787394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell 2379bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::roll(Register reg, const Immediate& imm) { 2380bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(0, Operand(reg), imm); 2381bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2382bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2383bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2384bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::roll(Register operand, Register shifter) { 2385bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(0, Operand(operand), shifter); 2386bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2387bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2388bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2389bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::rorl(Register reg, const Immediate& imm) { 2390bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(1, Operand(reg), imm); 2391bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2392bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2393bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2394bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendellvoid X86Assembler::rorl(Register operand, Register shifter) { 2395bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell EmitGenericShift(1, Operand(operand), shifter); 2396bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell} 2397bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 2398bcee092d7b0cbb7181d428115ad98d25ce844061Mark Mendell 23992c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::negl(Register reg) { 2400a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2401a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2402a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(3, Operand(reg)); 2403a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2404a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2405a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24062c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::notl(Register reg) { 2407a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2408a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF7); 2409a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD0 | reg); 2410a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2411a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2412a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24132c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::enter(const Immediate& imm) { 2414a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2415a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC8); 2416a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_uint16()); 2417a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2418a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((imm.value() >> 8) & 0xFF); 2419a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x00); 2420a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2421a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2422a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24232c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::leave() { 2424a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2425a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC9); 2426a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2427a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2428a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24292c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::ret() { 2430a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2431a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC3); 2432a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2433a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2434a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24352c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::ret(const Immediate& imm) { 2436a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2437a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC2); 2438a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_uint16()); 2439a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2440a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((imm.value() >> 8) & 0xFF); 2441a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2442a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2443a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2444a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24452c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::nop() { 2446a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2447a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x90); 2448a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2449a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2450a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24512c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::int3() { 2452a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2453a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xCC); 2454a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2455a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2456a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24572c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::hlt() { 2458a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2459a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF4); 2460a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2461a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2462a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 24632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::j(Condition condition, Label* label) { 2464a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2465a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2466a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kShortSize = 2; 2467a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kLongSize = 6; 2468a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2469a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2470ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bdAndreas Gampe if (IsInt<8>(offset - kShortSize)) { 2471a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x70 + condition); 2472a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((offset - kShortSize) & 0xFF); 2473a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2474a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2475a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x80 + condition); 2476a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - kLongSize); 2477a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2478a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2479a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2480a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x80 + condition); 2481a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2482a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2483a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2484a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2485a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 248673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::j(Condition condition, NearLabel* label) { 248773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 248873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 248973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 249073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 249173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 249273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 249373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0x70 + condition); 249473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 249573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 249673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0x70 + condition); 249773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 249873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 249973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 250073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 250173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 250273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::jecxz(NearLabel* label) { 250373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 250473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 250573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 250673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 250773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 250873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 250973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xE3); 251073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 251173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 251273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xE3); 251373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 251473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 251573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 251673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 251773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 25182c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::jmp(Register reg) { 2519a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2520a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xFF); 2521a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitRegisterOperand(4, reg); 2522a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2523a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 25247caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogersvoid X86Assembler::jmp(const Address& address) { 25257caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 25267caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitUint8(0xFF); 25277caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers EmitOperand(4, address); 25287caad77632ae121c9f64c488e3f8f710e2c4813dIan Rogers} 2529a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 25302c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::jmp(Label* label) { 2531a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2532a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2533a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kShortSize = 2; 2534a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro static const int kLongSize = 5; 2535a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2536a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2537ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bdAndreas Gampe if (IsInt<8>(offset - kShortSize)) { 2538a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xEB); 2539a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8((offset - kShortSize) & 0xFF); 2540a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2541a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE9); 2542a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - kLongSize); 2543a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2544a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2545a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xE9); 2546a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2547a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2548a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2549a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2550a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 255173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::jmp(NearLabel* label) { 255273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 255373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsBound()) { 255473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell static const int kShortSize = 2; 255573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = label->Position() - buffer_.Size(); 255673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK_LE(offset, 0); 255773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset - kShortSize)); 255873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xEB); 255973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8((offset - kShortSize) & 0xFF); 256073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 256173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0xEB); 256273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitLabelLink(label); 256373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 256473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 256573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 256673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 2567b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::repne_scasb() { 2568b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2569b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF2); 2570b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xAE); 2571b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2572b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2573b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 257421030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampevoid X86Assembler::repne_scasw() { 257521030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe AssemblerBuffer::EnsureCapacity ensured(&buffer_); 257621030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0x66); 257721030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0xF2); 257821030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe EmitUint8(0xAF); 257921030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe} 258021030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe 258121030dd59b1e350f6f43de39e3c4ce0886ff539cAndreas Gampe 2582b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::repe_cmpsb() { 2583b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2584b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF2); 2585b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xA6); 2586b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2587b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2588b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 258971311f868e2579fa5d40b24e620198734119d1a0agicsakivoid X86Assembler::repe_cmpsw() { 259071311f868e2579fa5d40b24e620198734119d1a0agicsaki AssemblerBuffer::EnsureCapacity ensured(&buffer_); 259171311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0x66); 259271311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0xF3); 259371311f868e2579fa5d40b24e620198734119d1a0agicsaki EmitUint8(0xA7); 259471311f868e2579fa5d40b24e620198734119d1a0agicsaki} 259571311f868e2579fa5d40b24e620198734119d1a0agicsaki 259671311f868e2579fa5d40b24e620198734119d1a0agicsaki 2597970abfb65530b700f3a0cc8b90b131df5420cec3agicsakivoid X86Assembler::repe_cmpsl() { 2598970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2599970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki EmitUint8(0xF3); 2600970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki EmitUint8(0xA7); 2601970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki} 2602970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki 2603970abfb65530b700f3a0cc8b90b131df5420cec3agicsaki 2604b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojovoid X86Assembler::rep_movsb() { 2605b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2606b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xF3); 2607b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo EmitUint8(0xA4); 2608b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo} 2609b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2610b03d640c78acad1cf1f8fbeb894ac3366aa164bejessicahandojo 2611b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendellvoid X86Assembler::rep_movsw() { 2612b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2613b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0x66); 2614b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0xF3); 2615b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell EmitUint8(0xA5); 2616b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell} 2617b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell 2618b9c4bbee9364a9351376fd1fec9604e7c84778d8Mark Mendell 26192c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersX86Assembler* X86Assembler::lock() { 2620a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2621a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xF0); 26220d666d8769714dcbc2acc4dd5b06f0deffa6e0a1Ian Rogers return this; 2623a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2624a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2625a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 26262c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::cmpxchgl(const Address& address, Register reg) { 2627a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2628a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x0F); 2629a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xB1); 2630a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitOperand(reg, address); 2631a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2632a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 263358d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 263458d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendellvoid X86Assembler::cmpxchg8b(const Address& address) { 263558d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 263658d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitUint8(0x0F); 263758d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitUint8(0xC7); 263858d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell EmitOperand(1, address); 263958d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell} 264058d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 264158d25fd052e999a24734b0cf856a1563e3d1b2d0Mark Mendell 264279ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughesvoid X86Assembler::mfence() { 264379ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes AssemblerBuffer::EnsureCapacity ensured(&buffer_); 264479ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0x0F); 264579ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0xAE); 264679ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes EmitUint8(0xF0); 264779ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes} 264879ab9e32c6880e7b342c192a479c858c9dccf496Elliott Hughes 26492c8f653c98d658419f464b6147c10e11a664d2e6Ian RogersX86Assembler* X86Assembler::fs() { 2650b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers // TODO: fs is a prefix and not an instruction 2651b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2652b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers EmitUint8(0x64); 26530d666d8769714dcbc2acc4dd5b06f0deffa6e0a1Ian Rogers return this; 2654b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} 2655a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2656befbd5731ecca08f08780ee28a913d08ffb14656Ian RogersX86Assembler* X86Assembler::gs() { 2657befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers // TODO: fs is a prefix and not an instruction 2658befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2659befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers EmitUint8(0x65); 2660befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers return this; 2661befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers} 2662befbd5731ecca08f08780ee28a913d08ffb14656Ian Rogers 26632c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::AddImmediate(Register reg, const Immediate& imm) { 2664a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int value = imm.value(); 2665a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value > 0) { 2666a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value == 1) { 2667a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro incl(reg); 2668a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value != 0) { 2669a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro addl(reg, imm); 2670a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2671a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value < 0) { 2672a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro value = -value; 2673a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (value == 1) { 2674a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro decl(reg); 2675a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (value != 0) { 2676a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro subl(reg, Immediate(value)); 2677a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2678a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2679a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2680a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2681a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2682647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillainvoid X86Assembler::LoadLongConstant(XmmRegister dst, int64_t value) { 2683647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain // TODO: Need to have a code constants table. 2684647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain pushl(Immediate(High32Bits(value))); 2685647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain pushl(Immediate(Low32Bits(value))); 2686647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain movsd(dst, Address(ESP, 0)); 2687647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain addl(ESP, Immediate(2 * sizeof(int32_t))); 2688647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain} 2689647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain 2690647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain 26912c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::LoadDoubleConstant(XmmRegister dst, double value) { 2692a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // TODO: Need to have a code constants table. 2693a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int64_t constant = bit_cast<int64_t, double>(value); 2694647b9ed41cdb7cf302fd356627a3ba372419b78cRoland Levillain LoadLongConstant(dst, constant); 2695a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2696a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2697a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 26982c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::Align(int alignment, int offset) { 2699a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(IsPowerOfTwo(alignment)); 2700a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Emit nop instruction until the real position is aligned. 2701a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro while (((offset + buffer_.GetPosition()) & (alignment-1)) != 0) { 2702a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro nop(); 2703a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2704a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2705a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2706a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27072c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::Bind(Label* label) { 2708a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int bound = buffer_.Size(); 2709a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(!label->IsBound()); // Labels can only be bound once. 2710a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro while (label->IsLinked()) { 2711a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int position = label->LinkPosition(); 2712a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int next = buffer_.Load<int32_t>(position); 2713a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro buffer_.Store<int32_t>(position, bound - (position + 4)); 2714a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->position_ = next; 2715a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2716a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->BindTo(bound); 2717a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2718a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2719a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 272073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::Bind(NearLabel* label) { 272173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int bound = buffer_.Size(); 272273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(!label->IsBound()); // Labels can only be bound once. 272373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell while (label->IsLinked()) { 272473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int position = label->LinkPosition(); 272573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell uint8_t delta = buffer_.Load<uint8_t>(position); 272673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int offset = bound - (position + 1); 272773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsInt<8>(offset)); 272873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell buffer_.Store<int8_t>(position, offset); 272973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->position_ = delta != 0u ? label->position_ - delta : 0; 273073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 273173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->BindTo(bound); 273273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 273373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 273473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 273544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitOperand(int reg_or_opcode, const Operand& operand) { 273644fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_GE(reg_or_opcode, 0); 273744fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_LT(reg_or_opcode, 8); 2738a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro const int length = operand.length_; 2739a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_GT(length, 0); 274044fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers // Emit the ModRM byte updated with the given reg value. 2741a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_EQ(operand.encoding_[0] & 0x38, 0); 274244fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(operand.encoding_[0] + (reg_or_opcode << 3)); 2743a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Emit the rest of the encoded operand. 2744a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro for (int i = 1; i < length; i++) { 2745a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(operand.encoding_[i]); 2746a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 27470616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell AssemblerFixup* fixup = operand.GetFixup(); 27480616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (fixup != nullptr) { 27490616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell EmitFixup(fixup); 27500616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 2751a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2752a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2753a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27542c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::EmitImmediate(const Immediate& imm) { 2755a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(imm.value()); 2756a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2757a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2758a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 275944fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitComplex(int reg_or_opcode, 27602c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers const Operand& operand, 27612c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers const Immediate& immediate) { 276244fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_GE(reg_or_opcode, 0); 276344fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers CHECK_LT(reg_or_opcode, 8); 2764a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (immediate.is_int8()) { 2765a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use sign-extended 8-bit immediate. 2766a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x83); 276744fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitOperand(reg_or_opcode, operand); 2768a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(immediate.value() & 0xFF); 2769a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else if (operand.IsRegister(EAX)) { 2770a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro // Use short form if the destination is eax. 277144fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitUint8(0x05 + (reg_or_opcode << 3)); 2772a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(immediate); 2773a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2774a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0x81); 277544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogers EmitOperand(reg_or_opcode, operand); 2776a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitImmediate(immediate); 2777a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2778a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2779a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2780a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27812c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::EmitLabel(Label* label, int instruction_size) { 2782a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (label->IsBound()) { 2783a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int offset = label->Position() - buffer_.Size(); 2784a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_LE(offset, 0); 2785a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(offset - instruction_size); 2786a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2787a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitLabelLink(label); 2788a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2789a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2790a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2791a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 27922c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogersvoid X86Assembler::EmitLabelLink(Label* label) { 2793a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(!label->IsBound()); 2794a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro int position = buffer_.Size(); 2795a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitInt32(label->position_); 2796a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro label->LinkTo(position); 2797a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2798a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2799a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 280073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendellvoid X86Assembler::EmitLabelLink(NearLabel* label) { 280173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(!label->IsBound()); 280273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell int position = buffer_.Size(); 280373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell if (label->IsLinked()) { 280473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell // Save the delta in the byte that we have to play with. 280573f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell uint32_t delta = position - label->LinkPosition(); 280673f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell CHECK(IsUint<8>(delta)); 280773f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(delta & 0xFF); 280873f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } else { 280973f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell EmitUint8(0); 281073f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell } 281173f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell label->LinkTo(position); 281273f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell} 281373f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 281473f455ecb76d063846a82735eb80596ceee8cee3Mark Mendell 281544fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitGenericShift(int reg_or_opcode, 28167394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell const Operand& operand, 28172c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers const Immediate& imm) { 2818a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2819a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK(imm.is_int8()); 2820a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro if (imm.value() == 1) { 2821a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD1); 28227394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2823a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } else { 2824a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xC1); 28257394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2826a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(imm.value() & 0xFF); 2827a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro } 2828a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2829a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 2830a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 283144fb0d0e096067e6bfe1dbfedf369e705bb10814Ian Rogersvoid X86Assembler::EmitGenericShift(int reg_or_opcode, 28327394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell const Operand& operand, 28332c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers Register shifter) { 2834a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2835a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro CHECK_EQ(shifter, ECX); 2836a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro EmitUint8(0xD3); 28377394569c9252b277710b2d7d3fc35fb0dd48fc4bMark P Mendell EmitOperand(reg_or_opcode, operand); 2838a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro} 2839a5d5cfda6239d8876937e75eba43222f639d2447Carl Shapiro 28400616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendellvoid X86Assembler::AddConstantArea() { 284193205e395f777c1dd81d3f164cf9a4aec4bde45fVladimir Marko ArrayRef<const int32_t> area = constant_area_.GetBuffer(); 28420616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Generate the data for the literal area. 28430616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = area.size(); i < e; i++) { 28440616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell AssemblerBuffer::EnsureCapacity ensured(&buffer_); 28450616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell EmitInt32(area[i]); 28460616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28470616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28480616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2849805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AppendInt32(int32_t v) { 2850805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell size_t result = buffer_.size() * elem_size_; 2851805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell buffer_.push_back(v); 2852805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return result; 2853805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell} 2854805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell 2855805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddInt32(int32_t v) { 28560616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = buffer_.size(); i < e; i++) { 28570616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (v == buffer_[i]) { 2858805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return i * elem_size_; 28590616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28600616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28610616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 28620616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Didn't match anything. 2863805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return AppendInt32(v); 28640616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28650616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2866805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddInt64(int64_t v) { 28670616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell int32_t v_low = Low32Bits(v); 28680616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell int32_t v_high = High32Bits(v); 28690616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (buffer_.size() > 1) { 28700616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Ensure we don't pass the end of the buffer. 28710616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell for (size_t i = 0, e = buffer_.size() - 1; i < e; i++) { 28720616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell if (v_low == buffer_[i] && v_high == buffer_[i + 1]) { 2873805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell return i * elem_size_; 28740616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28750616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28760616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell } 28770616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 28780616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Didn't match anything. 2879805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendell size_t result = buffer_.size() * elem_size_; 28800616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell buffer_.push_back(v_low); 28810616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell buffer_.push_back(v_high); 28820616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return result; 28830616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28840616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2885805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddDouble(double v) { 28860616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Treat the value as a 64-bit integer value. 28870616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return AddInt64(bit_cast<int64_t, double>(v)); 28880616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28890616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 2890805b3b56c6eb542298db33e0181f135dc9fed3d9Mark Mendellsize_t ConstantArea::AddFloat(float v) { 28910616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell // Treat the value as a 32-bit integer value. 28920616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell return AddInt32(bit_cast<int32_t, float>(v)); 28930616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell} 28940616ae081e648f4b9b64b33e2624a943c5fce977Mark Mendell 28952c8f653c98d658419f464b6147c10e11a664d2e6Ian Rogers} // namespace x86 2896b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers} // namespace art 2897